Leumas Studio
@leumas/studioLeumas Studio — the admin CRM (wp-admin for AI): everything Web has + Imperium config CRUD, marketplace, users/roles, tools. Ships as a desktop EXE / white-label.
Leumas Studio — @leumas/studio
Imperium. Host and manage websites, run AI, install apps from the store, publish your own.
Ships as a desktop EXE, a self-host, or a white-label. LEUMAS_ROLE=appliance · dev port 5000. Architecture: APPLIANCES.md §4 · PLATFORM.md
Core functionality
- Imperium hosting — connect a domain, create sites and subdomains across 30 modes, edit pages,
theme them, publish. This is the product.
- The app store client — search, install, and run plugins from the central marketplace; publish
your own and get paid.
- AI — Leviathan chatbots, the coding agent, skills, MCP servers, consensus/research, LMX.
- Accounts — users, roles, connections, API keys, this instance's licence, storage.
- Monetization — PassNode rules: how you price your tools for your users.
- Automation — the trigger/action/rule spine every plugin hooks into.
What it must never do
| Never | Because |
|---|---|
| Contain social | it moved to leumas-web + iOS; moderation is control-plane |
| Issue licences | that's Leumas-the-company — control plane only |
| Grow a 34th domain | new capability = a plugin. That is the entire point |
| Depend on a plugin's package | the dep edge is the bloat. studio.plugins.json per edition |
| Re-implement UI | @leumas/ui (the st- kit) — pnpm check:ui-kit ratchets regrowth |
Editions
Build-time studio.plugins.json drives both the surface glob and a lint check on package.json.
| Edition | Contains |
|---|---|
| Studio Lite | core only — hosting, marketplace, accounts, monetization, automation, assets |
| Studio (default) | core + the AI pack (chatbots · builder · intelligence · lmx) |
| Studio Everything | + all 16 first-party plugins |
Composes
@leumas/ui @leumas/theme the st- kit + tokens
@leumas/features guards · dashboard · nav-views · capability provider
@leumas/config-registry modes · DynamicPage · nav manifests · the plugin contract
@leumas/hosting Imperium
@leumas/entitlements the access axis
@leumas/api-client every HTTP call
@leumas/leviathan the AI widget
@leumas/capability-sdk CapabilityProvider · TriggerRuntime · command registration
@leumas/plugin-bridge [todo] the plugin host protocol
@leumas/imperium-pages @leumas/cinematic @leumas/headlock
**Plugin packages (media, music, wardrobe, grids-ui, forge, splats, sing, text-network, circuit-preview, detection-client, business-finder, hud, three, @react-three/) leave dependencies as each domain is cut.* That removal is the slimming.
File tree
products/leumas-studio/
├── package.json [partial] 24 deps → ~10. The dep list IS the weight
├── studio.plugins.json [todo] which plugins this edition bundles
├── vite.config.js [done] port 5000
├── scripts/
│ └── copy-circuit-preview.mjs [partial] → ops/infra/scripts/copy-plugin-bundles.mjs
├── public/
│ ├── tscircuit/ [partial] → public/plugins/hardware/
│ └── plugins/<id>/ [todo] every asset-delivery plugin's dist
└── src/
├── main.jsx [done] registers modes · TENANT_FALLBACK · FirstRunWizard
├── App.jsx [partial] 113 lines — remove socialRoutes()
├── setup/FirstRunWizard.jsx [partial] licence → domain → first site (see S1)
├── pages/StudioLanding.jsx [done]
└── admin/
├── nav.manifest.js [partial] 455 → ~120 lines (core only; domains contribute their own)
├── AdminRoutes.jsx [partial] 488 → ~200 lines (glob registry + a plugin branch)
├── AdminHome.jsx [done] Command Deck / solar navigator
├── DomainHub.jsx [done]
├── hosting/ [done] CORE — 16 surfaces, the product
├── Marketplace.jsx [partial] 40 lines, Install has NO onClick. Rewrite
├── _shared/model/plugins/ [done] the plugin host (the `_shared/plugins/` clone is deleted)
├── accounts surfaces [done] CORE (+ absorbs Storage from datacenter)
├── PassNodeRulesManager [done] CORE
├── Triggers · Actions [done] CORE
├── builder/ intelligence/ lmx/ [partial] AI PACK — become bundled plugins
├── social/ [todo] DELETE → leumas-web + iOS + control plane
├── knowledge/ [todo] MOVE → leumas-docs
├── dev surfaces [todo] DELETE → @leumas/os (already exists there)
└── 19 other domains [todo] → products/standalone/leumas-<x>/ as plugins
206 .jsx in src/admin/ today. Target: ~60.
Roadmap
Mirrors Stage B.
[todo] S1 · Hosting UX to the bar (Platform P1)
- Status: todo — Connect-a-domain wizard: enter domain → exact DNS records with per-row Copy → Verify → TLS
- Status: todo — Detect the environment (public IP?
cloudflared?) and show only the relevant path - Status: todo — Cloudflare Tunnel path for a machine with no static IP or port forwarding
- Status: todo — First-run wizard: licence → domain → first site published, no terminal
- Status: todo — Failure states that name the fix, not just the error
Done when: a non-technical operator goes from a fresh EXE to a live site in under 10 minutes.
[todo] S2 · Declare, don't move (roadmap B2)
- Status: todo — Each domain's nav subtree →
src/admin/<domain>/manifest.js - Status: todo —
STUDIO_NAV = mergeNavManifests(CORE_NAV, ...domains)—mergeNavManifestsalready exists - Status: todo —
SURFACESliteral → animport.meta.globregistry - Status: todo —
pnpm check:navgreen throughout; all 183/admin/*paths still resolve
Done when: nav.manifest.js ~120 lines, AdminRoutes.jsx ~200. Bundle unchanged — expected.
[todo] S3 · Social exits (roadmap B4)
- Status: todo — Remove
socialRoutes()fromApp.jsxand thesocialdomain from the manifest - Status: todo — Moderation / Analytics / Config → control plane
- Status: todo — Social Links → hosting (it's a site setting, not a social feature)
[todo] S4 · Plugin host (roadmap B3, C2)
- Status: todo —
<PluginFrame>from@leumas/ui; deleteThemedFrameand the legacyPluginHost.jsx - Status: todo — Marketplace rewrite: browse · install · consent screen · uninstall · my listings
- Status: todo —
AdminRoutes.jsxbranch:subItem.plugin→<PluginFrame>instead ofSURFACES[surface] - Status: todo — [warning] Plugin nav must fail CLOSED.
visibleNavonly blocks on an explicitfalse— for plugin
nodes, absent must mean denied, or a paid plugin leaks
[todo] S5 · Cut the edges (roadmap B5–B7)
- Status: todo —
copy-plugin-bundles.mjs— generalize the circuit-preview copier, preserving turbo discipline
(each plugin builds to its own dist/; Studio's prebuild copies)
- Status: todo — hardware first (pilot, already isolated) → then media, music+sing, wardrobe → then the rest
- Status: todo — Every PR carries before/after
dist/sizes - Status: todo — Exits: dev → os · knowledge → docs · datacenter → accounts
- Status: todo —
studio.plugins.json+ the editions lint check - Status: todo — Claim the
threewin last; verify withpnpm why three
[todo] S6 · Publish + earn (roadmap C3, C4)
- Status: todo — "My listings" surface — submit a plugin, track review
- Status: todo — Earnings surface reading the publisher credit rows
[todo] S7 · Studio revamp absorbed
- Status: todo —
ops/todos/studio-revamp-roadmap.mdPhase 1 (R1–R11) is answered by APPLIANCES.md §4.3 — replace it - Status: todo — Phases 2–5 survive; 6–24 amended (those surfaces are leaving)
- Status: todo —
ops/reference/LEUMAS-INDEX.mdgains a Tier / Destination column - Status: todo — The 8 checks now apply to 6 core domains + one plugin-conformance bar
Run
pnpm --filter @leumas/studio dev
Build the EXE:
pnpm build:exe
The installed EXE opens itself when you sign in to Windows — a per-user login item registered on first run, so a rebooted machine comes back with Studio and its appliance API up. The switch is Settings -> "Start when I sign in"; the mechanism is ops/tools/exe-builder/electron/autostart.js and pnpm check:desktop-autostart pins it.
Leave VITE_API_BASE unset in dev — the Vite proxy makes the httpOnly cookie work with no CORS.