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