Publish a lab to the LabStore
Anything you can build in the Selfmade Ninja Labs template designer can be published here — an app (a machine with a web UI, a dev environment, a database tool) or a challenge lab (a CTF machine with missions and flags).
1. Build it
Create a template on your labs instance (dashboard → Instances → New template, or the create_template MCP tool), give it a name, an icon and a description, and build it until it validates and deploys.
2. Mark it beta or stable
Templates start in alpha, which is owner-only. Set Configuration → Stability to beta (or stable) once it works for someone other than you.
3. Publish
In the template designer, open the ⋯ menu → Publish to LabStore (or call publish_template). Your build context is exported to a public repository under labstore/<your handle>/<slug>, the image is built, and the listing appears here on the next sync (up to an hour). Publishing is currently limited to platform administrators while publisher accounts are being introduced.
The rules — what the store strips or refuses
A store app runs on someone else's machine, so its configuration is bounded. At publish, at store intake, at install and again at deploy, the platform:
- refuses
privileged: true, any capability additions and GPU passthrough from third-party publishers; - keeps only bind mounts rooted in the tenant's own storage (
{labstorage}/…); host paths are dropped; - only allows the
runc/sysboxruntimes; - ignores any platform decision a config might carry (approval flags, ownership, visibility);
- never overwrites an existing lab: a slug belongs to the first publisher who claims it, and an instance refuses to replace a lab of different provenance;
- serves icons and READMEs from this site, never from a publisher URL.
Updates
Editing and rebuilding a published template marks it behind the store; publish again to ship the new version. Each version is a git commit + image digest.