Editor architecture
The editor hosts the engine. The engine does not know about panels.
JARVIG.exe
project hub
|
| a chosen .jarvigproject
v
JARVIGEditor.exe
|
+----------------+----------------+
| |
v v
Native Editor UI JARVIG Engine
| |
| SceneWorld / Runtime
| |
| RenderSceneSnapshot
| |
+------------ RenderView <--------+
|
v
Renderer
|
v
RHI
native/jarvig_editor is the editor executable. It links jarvig_engine, jarvig_renderer, jarvig_rhi, and jarvig_rhi_wgpu. It does not name wgpu. It does not depend on winit. The window is Win32. The viewport HWND is the only handle passed to attach_window.
native/jarvig_hub is the project browser. A launch with no --project and no harness flag shows that window before EngineSession is constructed. See hub.md and ADR-0060.
The dock tree lives in this crate (DockWorkspace, PanelId). No engine crate names it. pnpm lint checks that. See workspaces.md and ADR-0032.
Process
The engine runs in this process. That is the v1 model: the viewport, input, and debugging stay on one device thread. The editor does not invent an IPC boundary just to draw a triangle.
Ownership still sits on the engine. A later cooker, build worker, or remote tool should call command and service APIs. It should not need this window, and it should not reach into renderer snapshots.
Worlds
SceneWorld is the authoring world for this shell. It is also the bootstrap world. That is temporary.
Later, Play-In-Editor is a second world. See ../architecture/play-in-editor.md. The Play menu does not copy the world and does not flip the profile. Runtime mutations must not be saved back by accident. That machine is not implemented.
What this shell is not
- Not
JARVIGPlayer.exe. The player ships the game without these panels. It does not exist yet. It will link the same engine. - Not
JARVIGServer.exe. The server stays headless. Smoke still reportsgraphics=none. It does not enumerate adapters. - Not the project hub.
JARVIG.exechooses the project. This shell opens the one it was given. Do not treatpnpm dev:hubas that product. - Not a second project format.
*.jarvigprojectisjarvig.projectversion 1. The hub does not invent another one.
Identity
The outliner is a derived view of EntityRegistry. World is an editor root, not an entity. Each entity row is keyed by EntityUuid. The label is the name, plus a class suffix. Components are not rows. Bootstrap lights, the reflection probe, and World Settings are entities. LightId and ProbeId are not. EntityHandle is the runtime lookup and is not shown. ObjectId remains the bootstrap drawable slot. Editor selection is one SelectionService on the editor session, also keyed by EntityUuid. The tree caret is not that selection. The inspector reads that selection, asks the engine for a property snapshot, and sends edits back as authoring commands. It does not keep its own transform. The Perspective camera is editor state: a view pose, not an entity and not a selection. The transform gizmo is the same kind of state. It is an overlay on the view, not an entity. A viewport click feeds the selection service. A drag feeds SetProperty. The shell around it is Editor theme v1: dark panels and a real icon toolbar. Do not put that chrome back on the light Windows face. See selection.md, inspector.md, camera.md, picking.md, gizmos.md, and theme.md.
Log
The output panel is an in-process string copied into a read-only edit. That is a temporary bridge. JRV-0067 is an engine-owned diagnostics stream. Categories can later include Engine, Renderer, RHI, Assets, Materials, Physics, Network, and Editor. Do not scrape stdout as the permanent log.