Docs
/

Leumas Studio

@leumas/studio

Leumas 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

  1. Imperium hosting — connect a domain, create sites and subdomains across 30 modes, edit pages,

theme them, publish. This is the product.

  1. The app store client — search, install, and run plugins from the central marketplace; publish

your own and get paid.

  1. AI — Leviathan chatbots, the coding agent, skills, MCP servers, consensus/research, LMX.
  2. Accounts — users, roles, connections, API keys, this instance's licence, storage.
  3. Monetization — PassNode rules: how you price your tools for your users.
  4. Automation — the trigger/action/rule spine every plugin hooks into.

What it must never do

NeverBecause
Contain socialit moved to leumas-web + iOS; moderation is control-plane
Issue licencesthat's Leumas-the-company — control plane only
Grow a 34th domainnew capability = a plugin. That is the entire point
Depend on a plugin's packagethe 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.

EditionContains
Studio Litecore 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)mergeNavManifests already exists
  • Status: todo — SURFACES literal → an import.meta.glob registry
  • Status: todo — pnpm check:nav green 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() from App.jsx and the social domain 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; delete ThemedFrame and the legacy PluginHost.jsx
  • Status: todo — Marketplace rewrite: browse · install · consent screen · uninstall · my listings
  • Status: todo — AdminRoutes.jsx branch: subItem.plugin<PluginFrame> instead of SURFACES[surface]
  • Status: todo — [warning] Plugin nav must fail CLOSED. visibleNav only blocks on an explicit false — 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 three win last; verify with pnpm 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.md Phase 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.md gains 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.

Source products/leumas-studio/README.md (no-git)markdownjson
Generated from the Leumas repository. Every page cites the file it came from.leumas.techllms.txt