The full frame server: one binary, one config, one start command.
frame-host --config frame.toml boots the entire stack in a single process:
- the embedded liminal component ([
embedded]) — liminal's TCP wire listener, browser WebSocket listener, and health endpoint, running in-process on liminal's own threads (no child process, no side-by-side server); the host owns its lifecycle but not its bytes; - the frame-core host authority ([
runtime]) — the host-owned capability table reached only through [frame_core::capability::HostCapabilityFacade], the component registry, and supervised lifecycle, around the class-(b) client-native graph view under theframe:graph-view@v1contract (D10); - the console HTTP server ([
server]) — the static browser bundle plusGET /frame/config.json.
Per ruling D3 the browser is a liminal PARTICIPANT: the served page connects
to the embedded liminal directly over the WebSocket transport. This host
never proxies or terminates that feed; /frame/config.json is DERIVED at
runtime from the embedded component's real bound WebSocket address, so the
page's endpoint and the server's address can never drift.
Console-first (D9): every component lifecycle transition and capability denial is logged to stdout as it happens.