# nanoforge-dev/engine architecture

> Architecture diagram of the GitHub repository nanoforge-dev/engine, 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/nanoforge-dev/engine
- Repository: https://github.com/nanoforge-dev/engine

## Overview

NanoForge is a browser-oriented game engine assembled from separately released packages. A game developer creates a client or server application, registers capability libraries, initializes them, then runs the engine loop; ECS, rendering, input, assets, audio, and networking provide game features. The README identifies additional package capabilities not sampled in source; those are represented at their existing package paths, with uncertain internal wiring omitted.

Main entry points: [`packages/core/src/common/library/manager/library.manager.ts`](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/common/library/manager/library.manager.ts) (Library registry), [`packages/core/src/application/nanoforge-application.ts`](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-application.ts) (Game application), [`packages/core/src/application/nanoforge-factory.ts`](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-factory.ts) (App factory), [`packages/core/src/application/nanoforge-client.ts`](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-client.ts) (Client app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Application runtime"]
  node_factory["App factory"]
  node_application["Game application"]
  node_clientapp["Client app"]
  node_serverapp["Server app"]
  node_loop["Game loop<br/>[core.ts]"]
end

subgraph group_shared["Shared runtime"]
  node_context["Lifecycle context"]
  node_manager["Library registry<br/>[library.manager.ts]"]
  node_config["Config validation"]
end

subgraph group_gameplay["Gameplay capabilities"]
  node_assets["Asset manager"]
  node_ecs["Entity systems"]
  node_music["Music playback<br/>[music.library.ts]"]
  node_sound["Sound management<br/>[sound.library.ts]"]
end

subgraph group_client["Client capabilities"]
  node_ecsclient["Client ECS"]
  node_graphics["2D graphics"]
  node_input["Keyboard and mouse<br/>[input.library.ts]"]
  node_netclient["Client networking"]
end

subgraph group_server["Server capabilities"]
  node_ecsserver["Server ECS"]
  node_netserver["Server networking"]
end

node_developer(("Game developer"))
node_peer(("Remote peers"))

node_developer -->|"creates app"| node_factory
node_factory -->|"creates client"| node_clientapp
node_factory -->|"creates server"| node_serverapp
node_clientapp -->|"extends runtime"| node_application
node_serverapp -->|"extends runtime"| node_application
node_developer -->|"registers libraries"| node_application
node_application -->|"registers libraries"| node_manager
node_application -->|"loads config"| node_config
node_application -->|"initializes lifecycle"| node_context
node_application -->|"starts loop"| node_loop
node_loop -->|"updates frame state"| node_context
node_manager -->|"provides access"| node_assets
node_manager -->|"provides access"| node_ecsclient
node_manager -->|"provides access"| node_ecsserver
node_manager -->|"provides access"| node_graphics
node_manager -->|"provides access"| node_input
node_manager -->|"provides access"| node_music
node_manager -->|"provides access"| node_sound
node_manager -->|"provides access"| node_netclient
node_manager -->|"provides access"| node_netserver
node_ecsclient -->|"wraps ECS"| node_ecs
node_ecsserver -->|"wraps ECS"| node_ecs
node_netclient -.->|"exchanges messages"| node_peer
node_netserver -.->|"serves connections"| node_peer

click node_factory "https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-factory.ts"
click node_application "https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-application.ts"
click node_clientapp "https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-client.ts"
click node_serverapp "https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-server.ts"
click node_loop "https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/core/core.ts"
click node_context "https://github.com/nanoforge-dev/engine/tree/main/packages/common/src/context/contexts"
click node_manager "https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/common/library/manager/library.manager.ts"
click node_config "https://github.com/nanoforge-dev/engine/tree/main/packages/config/src"
click node_assets "https://github.com/nanoforge-dev/engine/blob/main/packages/asset-manager/src/asset-manager.library.ts"
click node_ecs "https://github.com/nanoforge-dev/engine/blob/main/packages/ecs-lib/src/ecs-library.abstract.ts"
click node_ecsclient "https://github.com/nanoforge-dev/engine/blob/main/packages/ecs-client/src/ecs-client-library.ts"
click node_ecsserver "https://github.com/nanoforge-dev/engine/blob/main/packages/ecs-server/src/ecs-server-library.ts"
click node_graphics "https://github.com/nanoforge-dev/engine/blob/main/packages/graphics-2d/src/graphics-2d.library.ts"
click node_input "https://github.com/nanoforge-dev/engine/blob/main/packages/input/src/input.library.ts"
click node_music "https://github.com/nanoforge-dev/engine/blob/main/packages/music/src/music.library.ts"
click node_sound "https://github.com/nanoforge-dev/engine/blob/main/packages/sound/src/sound.library.ts"
click node_netclient "https://github.com/nanoforge-dev/engine/blob/main/packages/network-client/src/client.network.library.ts"
click node_netserver "https://github.com/nanoforge-dev/engine/blob/main/packages/network-server/src/server.network.library.ts"

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_factory,node_application,node_clientapp,node_serverapp,node_loop toneBlue
class node_context,node_manager,node_config toneAmber
class node_assets,node_ecs,node_music,node_sound toneMint
class node_ecsclient,node_graphics,node_input,node_netclient toneRose
class node_ecsserver,node_netserver,node_developer,node_peer toneIndigo
```

## Components

### Application runtime

- [App factory](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-factory.ts): `packages/core/src/application/nanoforge-factory.ts`
- [Game application](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-application.ts): `packages/core/src/application/nanoforge-application.ts`
- [Client app](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-client.ts): `packages/core/src/application/nanoforge-client.ts`
- [Server app](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/application/nanoforge-server.ts): `packages/core/src/application/nanoforge-server.ts`
- [Game loop](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/core/core.ts): `packages/core/src/core/core.ts`

### Shared runtime

- [Lifecycle context](https://github.com/nanoforge-dev/engine/tree/main/packages/common/src/context/contexts): `packages/common/src/context/contexts`
- [Library registry](https://github.com/nanoforge-dev/engine/blob/main/packages/core/src/common/library/manager/library.manager.ts): `packages/core/src/common/library/manager/library.manager.ts`
- [Config validation](https://github.com/nanoforge-dev/engine/tree/main/packages/config/src): `packages/config/src`

### Gameplay capabilities

- [Asset manager](https://github.com/nanoforge-dev/engine/blob/main/packages/asset-manager/src/asset-manager.library.ts): `packages/asset-manager/src/asset-manager.library.ts`
- [Entity systems](https://github.com/nanoforge-dev/engine/blob/main/packages/ecs-lib/src/ecs-library.abstract.ts): `packages/ecs-lib/src/ecs-library.abstract.ts`
- [Music playback](https://github.com/nanoforge-dev/engine/blob/main/packages/music/src/music.library.ts): `packages/music/src/music.library.ts`
- [Sound management](https://github.com/nanoforge-dev/engine/blob/main/packages/sound/src/sound.library.ts): `packages/sound/src/sound.library.ts`

### Client capabilities

- [Client ECS](https://github.com/nanoforge-dev/engine/blob/main/packages/ecs-client/src/ecs-client-library.ts): `packages/ecs-client/src/ecs-client-library.ts`
- [2D graphics](https://github.com/nanoforge-dev/engine/blob/main/packages/graphics-2d/src/graphics-2d.library.ts): `packages/graphics-2d/src/graphics-2d.library.ts`
- [Keyboard and mouse](https://github.com/nanoforge-dev/engine/blob/main/packages/input/src/input.library.ts): `packages/input/src/input.library.ts`
- [Client networking](https://github.com/nanoforge-dev/engine/blob/main/packages/network-client/src/client.network.library.ts): `packages/network-client/src/client.network.library.ts`

### Server capabilities

- [Server ECS](https://github.com/nanoforge-dev/engine/blob/main/packages/ecs-server/src/ecs-server-library.ts): `packages/ecs-server/src/ecs-server-library.ts`
- [Server networking](https://github.com/nanoforge-dev/engine/blob/main/packages/network-server/src/server.network.library.ts): `packages/network-server/src/server.network.library.ts`

### Other components

- **Game developer**
- **Remote peers**

## Connections

- Game developer → App factory: creates app
- App factory → Client app: creates client
- App factory → Server app: creates server
- Client app → Game application: extends runtime
- Server app → Game application: extends runtime
- Game developer → Game application: registers libraries
- Game application → Library registry: registers libraries
- Game application → Config validation: loads config
- Game application → Lifecycle context: initializes lifecycle
- Game application → Game loop: starts loop
- Game loop → Lifecycle context: updates frame state
- Library registry → Asset manager: provides access
- Library registry → Client ECS: provides access
- Library registry → Server ECS: provides access
- Library registry → 2D graphics: provides access
- Library registry → Keyboard and mouse: provides access
- Library registry → Music playback: provides access
- Library registry → Sound management: provides access
- Library registry → Client networking: provides access
- Library registry → Server networking: provides access
- Client ECS → Entity systems: wraps ECS
- Server ECS → Entity systems: wraps ECS
- Client networking → Remote peers: exchanges messages
- Server networking → Remote peers: serves connections
