workspace-app-composition
Workspace App Layout
A workspace app is composed in layers: a pure isomorphic doc factory, one or
more environment factories that bind it to a runtime (browser, Chrome
extension, Tauri), a single side-effectful session singleton, and (for the two
multi-platform apps) a build-time platform DI seam. Daemon and script bindings
do not live in the app package at all; they live per-project under
workspaces/<app>/ and are registered through epicenter.config.ts.
Two shipped shapes; pick by whether the app gates UI on signed-in identity.
Shape A: auth-gated SvelteKit web apps (honeycrisp, zhongwen, fuji). The app
is not a running thing until identity exists, so a session singleton owns the
workspace lifecycle and UI lives under (signed-in) routes.
Shape B: module-level singleton apps (opensidian, tab-manager, whispering). A module singleton blocks on auth/session readiness and exports a constructed handle.