ADR-0011: One UI, two hosts: Reelwright Studio and the Godot editor plugin
- Status: Accepted (2026-09-29)
- Date: 2026-09-29
Context
The brief puts the showrunner chat and the timeline editor inside the Godot editor. That serves people who already live in Godot. For someone who just wants to run a show, the editor is a lot of unrelated surface: scene trees, inspectors, import settings. The owner asked for whatever is ultimately best and most complete: both.
Decision
- UI components live in the runtime addon,
engine/addons/reelwright/ui/: chat, proposal and diff review, previews (model sheets, set views, storyboards), variation picker, bible browser, timeline, render queue.- They are plain
Controlscenes with no editor API dependencies. - They talk to the core only through the session protocol (JSON-RPC 2.0 over a localhost WebSocket, authenticated with a per-launch token).
- They are plain
- Reelwright Studio (
engine/app/) is the primary UX: a standalone Godot application exported for macOS, Windows and Linux.- It hosts the components full-screen with its own navigation (Show → World → Cast → Sets → Episodes → Timeline → Renders).
- It renders previews in-process with the same builders the renderer uses.
- It starts and supervises the core daemon (
reelwright serve), one per show. Since 2026-10-04 it keeps the shows the person left running for a while, so that switching between shows any time costs nothing and each comes back where it was left (docs/design/m3-showrunner.md, "Switching shows").
- The editor plugin hosts the same components in
EditorDocks and a main-screen tab. It adds what only the editor can do: open a built rig or set as a scene, inspect nodes, and debug shaders. - Headless surfaces share the same tool registry: the
reelwrightCLI and the MCP server (Claude Code, Claude Desktop, any MCP client). - Distribution.
- Studio bundles a single-file core binary (Node single-executable application), so users don't install Node.
- Render boxes use the CLI.
- A web build (Godot web export, for reelwright.diy) needs the core as a service, because browsers cannot spawn processes. That is a later decision, not blocked by this one.
Consequences
- Every UI feature is built once and tested once. The editor plugin stays a thin host.
- The session protocol becomes a real contract (a schema in
schemas/v1/) before M3's UI work starts. - Studio needs Godot export templates in the toolchain, and CI jobs that export and smoke test the app.
- M3 ships the protocol, the MCP server and the chat, proposal and preview components. Studio is their first host; the editor dock reuses them.