# prowlengine/prowl architecture

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

- Interactive diagram: https://gitdiagram.com/prowlengine/prowl
- Repository: https://github.com/prowlengine/prowl

## Overview

Prowl is a Unity-like C# game engine with a standalone runtime and a full editor. The main authoring workflow is to open a project, import assets, edit and save scenes, compile scripts, then play or build a standalone game. The graph also preserves major runtime capabilities documented in the README, including rendering, physics, audio, navigation, and UI. Runtime links are grounded in the sampled source where available; other capability links reflect the README and file tree, so their internal wiring is not inferred.

Main entry points: [`Prowl.Runtime/GameObject/GameObject.cs`](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/GameObject/GameObject.cs) (GameObject scenes), [`Prowl.Editor/GUI/SceneView/EditorSceneManager.cs`](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/SceneView/EditorSceneManager.cs) (Scene editing), [`Prowl.Editor/GUI/Panels/BuildSettingsPanel.cs`](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/Panels/BuildSettingsPanel.cs) (Build profiles), [`Prowl.Editor/AssetsDatabase/EditorAssetBackend.cs`](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/AssetsDatabase/EditorAssetBackend.cs) (Asset database)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editor["Editor Workflow"]
  node_editor_app["Editor application"]
  node_project["Project settings<br/>[Project.cs]"]
  node_scene_editor["Scene editing"]
  node_inspector["Inspector and panels<br/>[InspectorPanel.cs]"]
  node_save["Save coordination<br/>[SaveManager.cs]"]
  node_scripting["Script compilation"]
  node_hot_reload["Scene hot reload<br/>[SceneHotReload.cs]"]
  node_build["Build profiles"]
end

subgraph group_content["Project Content"]
  node_asset_db[("Asset database")]
  node_importers["Asset importers<br/>[AssetImporter.cs]"]
end

subgraph group_runtime["Game Runtime"]
  node_game["Game lifecycle<br/>[Game.cs]"]
  node_scene["GameObject scenes<br/>[GameObject.cs]"]
  node_physics["Physics and collision"]
  node_navigation["Navigation meshes<br/>[NavMeshBuilder.cs]"]
  node_audio["Spatial audio<br/>[AudioContext.cs]"]
  node_ui["Game UI<br/>[UIRenderTree.cs]"]
end

subgraph group_render["Rendering"]
  node_render_pipeline["Render pipeline"]
  node_render_core["Render batching<br/>[RenderPipeline.cs]"]
  node_graphics["Graphics commands<br/>[CommandBuffer.cs]"]
end

node_user(("Developer"))
node_player["Desktop player<br/>[DesktopPlayer.cs]"]
node_exported_game["Standalone game"]

node_user -->|"uses"| node_editor_app
node_editor_app -->|"opens"| node_project
node_project -->|"configures"| node_asset_db
node_asset_db -->|"dispatches imports"| node_importers
node_user -->|"edits scenes"| node_scene_editor
node_scene_editor -->|"loads scene"| node_scene
node_user -->|"inspects content"| node_inspector
node_inspector -->|"resolves assets"| node_asset_db
node_scene_editor -->|"saves scene"| node_save
node_user -->|"requests compile"| node_scripting
node_scripting -->|"reloads scripts"| node_hot_reload
node_hot_reload -->|"migrates live scene"| node_scene
node_user -->|"configures build"| node_build
node_build -->|"targets player"| node_player
node_player -->|"starts runtime"| node_game
node_game -->|"runs scene"| node_scene
node_scene -->|"uses components"| node_physics
node_scene -->|"uses components"| node_navigation
node_scene -->|"uses components"| node_audio
node_scene -->|"renders canvases"| node_ui
node_scene -->|"collects renderables"| node_render_pipeline
node_render_pipeline -->|"draws renderables"| node_render_core
node_render_core -->|"encodes commands"| node_graphics
node_build -->|"produces build"| node_exported_game

click node_editor_app "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Core/EditorApplication.cs"
click node_project "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/Project.cs"
click node_asset_db "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/AssetsDatabase/EditorAssetBackend.cs"
click node_importers "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/AssetsDatabase/Importers/AssetImporter.cs"
click node_scene_editor "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/SceneView/EditorSceneManager.cs"
click node_inspector "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/Panels/InspectorPanel.cs"
click node_save "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/SaveManager.cs"
click node_scripting "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/Scripting/ScriptAssemblyManager.cs"
click node_hot_reload "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/Scripting/SceneHotReload.cs"
click node_build "https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/Panels/BuildSettingsPanel.cs"
click node_player "https://github.com/prowlengine/prowl/blob/main/Players/Desktop/DesktopPlayer.cs"
click node_game "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Game.cs"
click node_scene "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/GameObject/GameObject.cs"
click node_physics "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Components/Physics/CharacterController.cs"
click node_navigation "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Navigation/NavMeshBuilder.cs"
click node_audio "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Audio/AudioContext.cs"
click node_ui "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Components/UI/UIRenderTree.cs"
click node_render_pipeline "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Rendering/DefaultRenderPipeline.cs"
click node_render_core "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Rendering/RenderPipeline.cs"
click node_graphics "https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Graphics/Commands/CommandBuffer.cs"

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_editor_app,node_project,node_scene_editor,node_inspector,node_save,node_scripting,node_hot_reload,node_build toneBlue
class node_asset_db,node_importers toneAmber
class node_game,node_scene,node_physics,node_navigation,node_audio,node_ui toneMint
class node_render_pipeline,node_render_core,node_graphics toneRose
class node_user,node_exported_game toneIndigo
class node_player toneTeal
```

## Components

### Editor Workflow

- [Editor application](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Core/EditorApplication.cs): `Prowl.Editor/Core/EditorApplication.cs`
- [Project settings](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/Project.cs): `Prowl.Editor/Projects/Project.cs`
- [Scene editing](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/SceneView/EditorSceneManager.cs): `Prowl.Editor/GUI/SceneView/EditorSceneManager.cs`
- [Inspector and panels](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/Panels/InspectorPanel.cs): `Prowl.Editor/GUI/Panels/InspectorPanel.cs`
- [Save coordination](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/SaveManager.cs): `Prowl.Editor/Projects/SaveManager.cs`
- [Script compilation](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/Scripting/ScriptAssemblyManager.cs): `Prowl.Editor/Projects/Scripting/ScriptAssemblyManager.cs`
- [Scene hot reload](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/Projects/Scripting/SceneHotReload.cs): `Prowl.Editor/Projects/Scripting/SceneHotReload.cs`
- [Build profiles](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/GUI/Panels/BuildSettingsPanel.cs): `Prowl.Editor/GUI/Panels/BuildSettingsPanel.cs`

### Project Content

- [Asset database](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/AssetsDatabase/EditorAssetBackend.cs): `Prowl.Editor/AssetsDatabase/EditorAssetBackend.cs`
- [Asset importers](https://github.com/prowlengine/prowl/blob/main/Prowl.Editor/AssetsDatabase/Importers/AssetImporter.cs): `Prowl.Editor/AssetsDatabase/Importers/AssetImporter.cs`

### Game Runtime

- [Game lifecycle](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Game.cs): `Prowl.Runtime/Game.cs`
- [GameObject scenes](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/GameObject/GameObject.cs): `Prowl.Runtime/GameObject/GameObject.cs`
- [Physics and collision](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Components/Physics/CharacterController.cs): `Prowl.Runtime/Components/Physics/CharacterController.cs`
- [Navigation meshes](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Navigation/NavMeshBuilder.cs): `Prowl.Runtime/Navigation/NavMeshBuilder.cs`
- [Spatial audio](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Audio/AudioContext.cs): `Prowl.Runtime/Audio/AudioContext.cs`
- [Game UI](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Components/UI/UIRenderTree.cs): `Prowl.Runtime/Components/UI/UIRenderTree.cs`

### Rendering

- [Render pipeline](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Rendering/DefaultRenderPipeline.cs): `Prowl.Runtime/Rendering/DefaultRenderPipeline.cs`
- [Render batching](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Rendering/RenderPipeline.cs): `Prowl.Runtime/Rendering/RenderPipeline.cs`
- [Graphics commands](https://github.com/prowlengine/prowl/blob/main/Prowl.Runtime/Graphics/Commands/CommandBuffer.cs): `Prowl.Runtime/Graphics/Commands/CommandBuffer.cs`

### Other components

- **Developer**
- [Desktop player](https://github.com/prowlengine/prowl/blob/main/Players/Desktop/DesktopPlayer.cs): `Players/Desktop/DesktopPlayer.cs`
- **Standalone game**

## Connections

- Developer → Editor application: uses
- Editor application → Project settings: opens
- Project settings → Asset database: configures
- Asset database → Asset importers: dispatches imports
- Developer → Scene editing: edits scenes
- Scene editing → GameObject scenes: loads scene
- Developer → Inspector and panels: inspects content
- Inspector and panels → Asset database: resolves assets
- Scene editing → Save coordination: saves scene
- Developer → Script compilation: requests compile
- Script compilation → Scene hot reload: reloads scripts
- Scene hot reload → GameObject scenes: migrates live scene
- Developer → Build profiles: configures build
- Build profiles → Desktop player: targets player
- Desktop player → Game lifecycle: starts runtime
- Game lifecycle → GameObject scenes: runs scene
- GameObject scenes → Physics and collision: uses components
- GameObject scenes → Navigation meshes: uses components
- GameObject scenes → Spatial audio: uses components
- GameObject scenes → Game UI: renders canvases
- GameObject scenes → Render pipeline: collects renderables
- Render pipeline → Render batching: draws renderables
- Render batching → Graphics commands: encodes commands
- Build profiles → Standalone game: produces build
