Marketplace & extensions
The Marketplace (/marketplace) is a single, fleet-wide catalog that merges two
worlds: system extensions (databases, cache, search, security runtimes the agent
installs on the box) and one-click Docker apps & stacks (n8n, Ghost, Open WebUI…).
Browse once, then push a product to one or many servers. Browsing is on all plans;
individual paid extensions are gated to the plan shown on their card, and the page itself
needs the server admin capability.
Install an extension across your fleet, step by step
Section titled “Install an extension across your fleet, step by step”- Find the product — filter by type (System extensions, Docker apps, Stacks), pick a category, or search by name, blurb or category.
- Click Install on the card to open the Manage drawer. It lists every server in your fleet with its current state for this extension: Installed (with version), Update available, Not installed, or Offline — reconnect to manage.
- Tick the servers that don’t already have it. Online, not-yet-installed servers are selectable; installed and offline servers are shown but greyed.
- Click Install on N servers. Each server runs the install natively and its progress streams live in its own row — a spinner while it works, then a green Installed or a red error with the reason. There’s no page reload; the fleet badges update when it’s done.
What else you can do
Section titled “What else you can do”- Browse vs Installed — the top toggle switches between the full catalog and just the products present on at least one server.
- Update — when a server reports a newer package candidate, an Update badge appears on the card and a per-server Update button appears in the drawer. Even with no newer candidate you can re-run the installer to pull the latest.
- Remove — in the drawer, each installed server gets a Remove button. Data-destroying removals (e.g. a database engine) ask for a second Confirm — destroys data click.
- Open advanced config — for extensions that have a dedicated tuning page (PHP, databases/phpMyAdmin, Redis, Docker), the drawer deep-links you to that server’s real config page instead of duplicating the form.
- Deploy a Docker app or stack — clicking Install on an app opens a deploy drawer where you pick a server, then continue to that server’s Apps page to set the domain, environment and port before it deploys.
How it works
Section titled “How it works”The Marketplace is a control-plane view that fans work out to individual agents:
- The catalog merges the shared extensions manifest (system components) with the Docker apps catalog. Roadmap or not-yet-installable entries render as a disabled Soon card.
- Fleet state is read from
GET /v1/servers/extensions/installed, which serves the agent-pushedextensionsinventory cache — no live round-trip, so badges are instant. If an online server’s cache is still cold, the page transitionally fetches its live state so the counts stay correct. - Install / remove / update dispatch
extension.install,extension.removeandextension.updatejobs to each selected server. Output streams back over the job channel; the row settles on the exit code.
| Action | Job | Agent runs |
|---|---|---|
| Install | extension.install | extension install <id> (streams) |
| Remove | extension.remove | extension remove <id> [--backup] (streams) |
| Update | extension.update | extension update <id> (streams) |
| Fleet state | extension.list | extension list --json (cached & pushed) |
Paid extensions are gated server-side on both install and update — the API re-checks your org’s plan against the extension’s tier, so the client UI gate can’t be bypassed.
CLI & automation
Section titled “CLI & automation”The Marketplace itself is control-plane, but the work it dispatches is ordinary mz
on each target box. SSH into a server and drive the same engine directly, or let an on-box
AI (ClaudeCode) run it:
mz extension list --json # what's installed on this boxmz extension install redis # install one component (streams)mz extension update redis # re-run the installer / pull latestmz extension remove redis --backup # remove; --backup snapshots data firstReplace the id with any catalog id. See The mz CLI and the command catalog. To orchestrate installs across the fleet from outside the box, use the control-plane API (Max plan).
Gotchas & troubleshooting
Section titled “Gotchas & troubleshooting”- Docker apps & stacks are Browse-only for now. Fleet install-state tracking is implemented for extensions, not apps — so apps never carry an ✓ N/M badge and never show in the Installed view. Installing an app routes you out to that server’s Apps page to finish configuration; it does not deploy from the Marketplace directly.
- Offline servers can’t be managed. A server must be online to install, update or remove; offline rows are shown for context but are not selectable.
- Removals can destroy data. Anything marked with the destructive-confirm step (database
engines and the like) wipes its data on remove. Use
--backup/ the confirm prompt deliberately. - Paid extensions need the right plan. A tier badge on the card means the API will refuse install/update unless your org is on that plan or higher.
- “Update” v1 re-runs the installer. It reinstalls to pull the latest rather than doing a surgical package bump — safe, but expect full installer output.
Related
Section titled “Related”- Server extensions — the per-server view of the same components.
- Docker apps — configure and deploy apps on a single server.
- The mz CLI — driving a box from the command line.