# anvilstudio/anvilworkspace architecture

> Architecture diagram of the GitHub repository anvilstudio/anvilworkspace, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/anvilstudio/anvilworkspace
- Repository: https://github.com/anvilstudio/anvilworkspace

## Overview

Anvil is a C++ engine for games and lightweight applications, with Forge providing project and scene-editing tools. The main workflow is to launch a project, manage scenes and assets, then run scene content through the engine’s rendering and runtime systems. The README documents multi-window support and high-/low-level rendering access; the tree also exposes scripting, physics, and editor panels. Some wiring is based on documented responsibilities and module boundaries because those implementations were not sampled.

Main entry points: [`AnvilEngine/src/Core/App.cpp`](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/App.cpp) (App Runtime), [`AnvilEngine/src/Asset/AssetManager.cpp`](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Asset/AssetManager.cpp) (Asset Manager), [`AnvilEngine/src/Scene/Scene.cpp`](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/Scene.cpp) (Scene), [`AnvilEngine/src/Scene/Manager.cpp`](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/Manager.cpp) (Scene Manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app_runtime["App Runtime<br/>[App.cpp]"]
  node_scene_layer["Scene Layer<br/>[SceneLayer.cpp]"]
  node_window["Window System<br/>[Window.cpp]"]
end

subgraph group_content["Project Content"]
  node_scene_manager["Scene Manager<br/>[Manager.cpp]"]
  node_scene["Scene<br/>[Scene.cpp]"]
  node_asset_manager["Asset Manager<br/>[AssetManager.cpp]"]
  node_filesystem["Project Files<br/>[FileSystem.cpp]"]
end

subgraph group_runtime["Runtime Systems"]
  node_scripting["Python Scripting"]
  node_python_api["Python API<br/>[__init__.py]"]
  node_physics["2D Physics"]
  node_input["Input System<br/>[Input.cpp]"]
end

subgraph group_render["Rendering"]
  node_scene_renderer["2D Scene Renderer"]
  node_renderer["Renderer<br/>[Renderer.cpp]"]
  node_pipeline_library["Pipeline Library"]
  node_vulkan["Vulkan Backend<br/>[VulkanPipeline.cpp]"]
end

subgraph group_editor["Forge Editor"]
  node_forge["Forge<br/>[Forge.cpp]"]
  node_editor_layer["Editor Layer<br/>[EditorLayer.cpp]"]
  node_scene_hierarchy["Scene Hierarchy<br/>[SceneHierarchy.cpp]"]
  node_inspector["Inspector<br/>[InspectorLayer.cpp]"]
  node_viewport["Viewport<br/>[Viewport.cpp]"]
  node_asset_registry["Asset Registry<br/>[AssetRegistry.cpp]"]
end

node_developer(("Developer"))
node_graphics_api{{"Graphics API"}}

node_developer -->|"launches project"| node_forge
node_forge -->|"starts editor"| node_editor_layer
node_app_runtime -->|"creates window"| node_window
node_app_runtime -->|"creates manager"| node_asset_manager
node_app_runtime -->|"creates manager"| node_scene_manager
node_app_runtime -->|"pushes layer"| node_scene_layer
node_scene_manager -->|"opens and tracks"| node_scene
node_asset_manager -->|"resolves resources"| node_filesystem
node_scripting -->|"loads API"| node_python_api
node_scene_renderer -->|"submits scene work"| node_renderer
node_renderer -->|"gets pipelines"| node_pipeline_library
node_pipeline_library -->|"builds pipelines"| node_vulkan
node_vulkan -->|"issues commands"| node_graphics_api
node_input -.->|"receives window input"| node_window
node_scene_hierarchy -.->|"edits hierarchy"| node_scene
node_inspector -.->|"edits properties"| node_scene
node_viewport -.->|"views scene"| node_scene_renderer
node_asset_registry -.->|"inspects assets"| node_asset_manager

click node_forge "https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Forge.cpp"
click node_editor_layer "https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/EditorLayer.cpp"
click node_scene_hierarchy "https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/SceneHierarchy.cpp"
click node_inspector "https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/InspectorLayer.cpp"
click node_viewport "https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/Viewport.cpp"
click node_asset_registry "https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/AssetRegistry.cpp"
click node_app_runtime "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/App.cpp"
click node_scene_layer "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/AppLayers/SceneLayer.cpp"
click node_window "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/Window.cpp"
click node_scene_manager "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/Manager.cpp"
click node_scene "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/Scene.cpp"
click node_asset_manager "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Asset/AssetManager.cpp"
click node_filesystem "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Util/FileSys/FileSystem.cpp"
click node_scripting "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scripting/PythonScriptEngine.cpp"
click node_python_api "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/Resources/Python/anvil/__init__.py"
click node_physics "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Physics/PhysicsSystem2D.cpp"
click node_input "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Input/Input.cpp"
click node_scene_renderer "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/2D/SceneRenderer2D.cpp"
click node_renderer "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Render/Renderer.cpp"
click node_pipeline_library "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Render/PipelineLibrary.cpp"
click node_vulkan "https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Render/Platform/Vulkan/VulkanPipeline.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app_runtime,node_scene_layer,node_window toneBlue
class node_scene_manager,node_scene,node_asset_manager,node_filesystem toneAmber
class node_scripting,node_python_api,node_physics,node_input,node_graphics_api toneMint
class node_scene_renderer,node_renderer,node_pipeline_library,node_vulkan toneRose
class node_forge,node_editor_layer,node_scene_hierarchy,node_inspector,node_viewport,node_asset_registry,node_developer toneIndigo
```

## Components

### Application

- [App Runtime](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/App.cpp): `AnvilEngine/src/Core/App.cpp`
- [Scene Layer](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/AppLayers/SceneLayer.cpp): `AnvilEngine/src/Core/AppLayers/SceneLayer.cpp`
- [Window System](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Core/Window.cpp): `AnvilEngine/src/Core/Window.cpp`

### Project Content

- [Scene Manager](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/Manager.cpp): `AnvilEngine/src/Scene/Manager.cpp`
- [Scene](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/Scene.cpp): `AnvilEngine/src/Scene/Scene.cpp`
- [Asset Manager](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Asset/AssetManager.cpp): `AnvilEngine/src/Asset/AssetManager.cpp`
- [Project Files](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Util/FileSys/FileSystem.cpp): `AnvilEngine/src/Util/FileSys/FileSystem.cpp`

### Runtime Systems

- [Python Scripting](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scripting/PythonScriptEngine.cpp): `AnvilEngine/src/Scripting/PythonScriptEngine.cpp`
- [Python API](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/Resources/Python/anvil/__init__.py): `AnvilEngine/Resources/Python/anvil/__init__.py`
- [2D Physics](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Physics/PhysicsSystem2D.cpp): `AnvilEngine/src/Physics/PhysicsSystem2D.cpp`
- [Input System](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Input/Input.cpp): `AnvilEngine/src/Input/Input.cpp`

### Rendering

- [2D Scene Renderer](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Scene/2D/SceneRenderer2D.cpp): `AnvilEngine/src/Scene/2D/SceneRenderer2D.cpp`
- [Renderer](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Render/Renderer.cpp): `AnvilEngine/src/Render/Renderer.cpp`
- [Pipeline Library](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Render/PipelineLibrary.cpp): `AnvilEngine/src/Render/PipelineLibrary.cpp`
- [Vulkan Backend](https://github.com/anvilstudio/anvilworkspace/blob/dev/AnvilEngine/src/Render/Platform/Vulkan/VulkanPipeline.cpp): `AnvilEngine/src/Render/Platform/Vulkan/VulkanPipeline.cpp`

### Forge Editor

- [Forge](https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Forge.cpp): `Forge/Forge.cpp`
- [Editor Layer](https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/EditorLayer.cpp): `Forge/Editor/EditorLayer.cpp`
- [Scene Hierarchy](https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/SceneHierarchy.cpp): `Forge/Editor/Windows/SceneHierarchy.cpp`
- [Inspector](https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/InspectorLayer.cpp): `Forge/Editor/Windows/InspectorLayer.cpp`
- [Viewport](https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/Viewport.cpp): `Forge/Editor/Windows/Viewport.cpp`
- [Asset Registry](https://github.com/anvilstudio/anvilworkspace/blob/dev/Forge/Editor/Windows/AssetRegistry.cpp): `Forge/Editor/Windows/AssetRegistry.cpp`

### Other components

- **Developer**
- **Graphics API**

## Connections

- Developer → Forge: launches project
- Forge → Editor Layer: starts editor
- App Runtime → Window System: creates window
- App Runtime → Asset Manager: creates manager
- App Runtime → Scene Manager: creates manager
- App Runtime → Scene Layer: pushes layer
- Scene Manager → Scene: opens and tracks
- Asset Manager → Project Files: resolves resources
- Python Scripting → Python API: loads API
- 2D Scene Renderer → Renderer: submits scene work
- Renderer → Pipeline Library: gets pipelines
- Pipeline Library → Vulkan Backend: builds pipelines
- Vulkan Backend → Graphics API: issues commands
- Input System → Window System: receives window input
- Scene Hierarchy → Scene: edits hierarchy
- Inspector → Scene: edits properties
- Viewport → 2D Scene Renderer: views scene
- Asset Registry → Asset Manager: inspects assets
