Skip to content
Marketplace & extensions One catalog to install system extensions and Docker apps onto any server in your fleet.

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”
  1. Find the product — filter by type (System extensions, Docker apps, Stacks), pick a category, or search by name, blurb or category.
  2. 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.
  3. Tick the servers that don’t already have it. Online, not-yet-installed servers are selectable; installed and offline servers are shown but greyed.
  4. 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.
  • 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.

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-pushed extensions inventory 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.remove and extension.update jobs to each selected server. Output streams back over the job channel; the row settles on the exit code.
ActionJobAgent runs
Installextension.installextension install <id> (streams)
Removeextension.removeextension remove <id> [--backup] (streams)
Updateextension.updateextension update <id> (streams)
Fleet stateextension.listextension 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.

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:

Terminal window
mz extension list --json # what's installed on this box
mz extension install redis # install one component (streams)
mz extension update redis # re-run the installer / pull latest
mz extension remove redis --backup # remove; --backup snapshots data first

Replace 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).

  • 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.