Skip to main content

Configure a template

Open a template and go to the Configuration tab. It is the guided way to set everything about the machine: resources, users, networking, limits, and what the people who deploy it can do.

Changes are kept when you click Save configuration. Leaving the tab with unsaved changes asks you first.

When a change takes effect

This is the table to keep in mind while you work. Saving always records a new version — but when your running copies actually see the change depends on what you changed.

What you changedWhat it needsWhy
Any file (Files tab or full editor), base image, Container users, Run as the signed-in userRebuild, then redeploy copiesIt is baked into the image. The status goes back to draft.
CPU, memory, ports, network, SSH, home mount, bind mounts, everything under Edge & limits, Exposure & lifetime, Auto-login, Connection info, Advanced / infra, Deployment plansRedeploy each copyIt is applied when a copy starts. No rebuild needed.
Name, description, artwork, categories, Stability, LauncherNothingShown straight away in the catalogue, the launcher and on existing copies
Deploy always runs the last built version

If you have edits waiting for a rebuild, the editor says so: Edits are pending a rebuild — Deploy runs the last built version. Existing copies show an update available badge once a newer build exists — redeploy them to pick it up. See Build and deploy.

The top of the Configuration tab: the General section (Name, Slug with Save slug, Kind, Categories, Stability) and the start of Resources, with the Save configuration button visible.

General

SettingNotes
NameThe title people see
SlugThe short identifier. It becomes the lab's id and the start of every copy's hostname, so it is capped at 15 characters: lowercase letters, digits and dashes. Saved with its own Save slug button. If it is taken, a short suffix is added. Locked after the first deploy.
KindMachine lab or App. An app is a machine with something to launch — it appears on the App Store's Apps shelf and on the launcher. Same switch as Launcher under Advanced.
CategoriesWhat the lab is for. At least one; the first is the primary. Used by the store, the catalogue and AI assistants to filter.
DescriptionShown in the catalogue
Stabilityalpha, beta or stable

Stability matters for sharing. alpha means private work in progress — only you can see or deploy it. Move it to beta or stable before you can share it with a workgroup or make it public.

Resources

SettingNotes
CPUCores, 1–16
MemoryFor example 512m or 2g
PortsContainer ports, space-separated, e.g. 80 or 22 8080
NetworkInternal-only (no VPN), or VPN enabled

VPN enabled gives each copy an address on the private tunnel, so people reach it from their own devices. With it on you can pick up to four network tiles — the shared VPN plus any private networks you have — and the machine joins all of them. The person deploying a copy can choose which of their own networks it joins.

VPN support is checked on every build. If the check fails, VPN deploys are blocked until you fix the image and rebuild, or switch to internal-only.

User management

SettingWhat it does
SSHEnable SSH access
Run as the signed-in user (shared home)Creates the deploying person's own login inside the copy, with their account storage mounted as home — the way the platform's own dev labs work. Turning it on also turns on the home mount.
Home mountMount a persistent home volume at the path you give. Off means the home directory is lost on every redeploy.
Bind mountsExtra folders from the deployer's storage, as source:destination
Container usersLinux accounts baked into the image: name, shell, sudo, and optionally one marked primary

Bind mount presets. Click one to add it: Shared home, Persist /usr/local, App config dir, App data dir, Per-copy state. The source side can use placeholders:

PlaceholderFilled with
{labstorage}The deployer's storage
{lab_id}The lab's id
{username}The copy's login user — by default the deployer's platform username
{slot}The copy number — 0 for the first deploy
{instance_id}A value unique to each copy

Use {slot} or {instance_id} for state that must not be shared between copies. Mounted data counts against the deployer's storage.

Container users are separate from the signed-in user — don't add the deployer there. Mark one as primary to have the connection details show it when the lab creates no login for the deployer.

code-server needs a user

The browser code editor runs as a user. If Run as the signed-in user is off and there are no container users, the editor warns you that the VS Code button won't launch.

Edge & limits

Controls applied in front of your app, on its domains.

SettingWhat it does
Rate limitRequests per client per 1s, 3s, 10s or 1m, plus a burst. One shared allowance across the first deploy and every copy. Empty uses the platform default.
In-flight capMaximum requests processed at once. Extra requests get a "service unavailable" error instead of piling onto your app.
Max request bodyUploads larger than this are rejected. Up to 100 MB.
CompressionCompress responses at the edge (gzip)
Disk (layer) quotaA cap on what the machine writes outside the home directory, e.g. 5G. It can only lower the plan's limit, never raise it.
Health checkA command run inside the machine, with interval, timeout, warm-up and retries. In a scale group, an unhealthy replica is taken out of rotation automatically.
Error pageCustomize the 502–504 page — HTML shown on the lab's domains when the app is down. Up to 64 KB. Empty uses the platform default.

Each person deploying a copy can also set their own error page, which overrides yours — see Lab settings.

Exposure & lifetime

Deployer features unlock options for the people who deploy copies. Turning one on does not switch anything on by itself — each deployer configures it per copy, and needs to be entitled to it.

FeatureLets deployers…
HTTP proxiesMap container ports to their own domains — see Publishing ports
Raw TCP exposePublish extra TCP ports publicly. Needs a persistent home mount; machine labs only.
Always-onKeep their copy running past the idle timer — see Lab settings

Proxy services are HTTP services you define once and every copy gets automatically. The first one powers the Launch button. See Auto-login and connection info.

Auto-login and Connection info

Sign visitors straight into your app when they click Launch, and choose the rows shown on each copy's dashboard. Both have their own page: Auto-login and connection info.

Advanced / infra

SettingWhat it does
ShellThe default shell
code-serverEnable code-server (VS Code in browser)
Public port 80Publish port 80, so the lab can be served on a domain
LauncherShow on the /home app launcher — see below
GPU renderAttach a GPU render device, where the platform has one
KASM desktopA graphical desktop lab
Runtime driverHow the machine is isolated. Options your platform does not offer are greyed out.

Launcher lists the lab as a one-click app on the home page launcher: a click deploys it with the person's saved settings and opens it. It needs something to launch — a proxy service, code-server or a launch command. For a public template, it reaches everyone's launcher only after an administrator reviews it (see Share and publish).

Deployment plans

A separate card below the configuration, saved with Save plans.

PlanWhat it is
Default (paid)The configuration above. Allow copy deployments (Deploy-a-copy / Scale) decides whether people on this plan can run extra copies and scale groups. Their plan's copy limit still applies.
Enable free planA lighter tier for free-plan users, with its own CPU, memory, network and copy switch

Artwork

ImageUseLimit
AvatarSquare icon — the banner and the launcher2 MB, PNG, JPEG or WebP
CoverWide banner for catalogue cards2 MB

Artwork changes show straight away; no rebuild or redeploy.

Next