Contents

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 Control scenes 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).
  • 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 reelwright CLI 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.