Running extra labs
This page shows how to run more than one lab from the same template. You normally get one lab of each type. When a template allows it, you can run extra copies — separate machines from the same environment, each with its own address, settings and lifecycle.
Use them to keep a stable setup untouched while you experiment, to run one lab per project, or to give each of several apps its own machine.
Create a copy
Open the lab, go to its Deployments tab and select Deploy a copy.
| Field | Notes |
|---|---|
| Name | How you recognize it in your list, up to 60 characters |
| Run as user | The user name inside this copy, up to 32 characters, lowercase, not root |
| Isolated storage | Gives this copy its own home directory instead of the shared one |
| Install all my SSH keys | Installs all your SSH keys, or you can pick specific keys |
Copies count against your running-labs limit like any other lab.
Run as user only appears for labs where it makes a difference. Install all my SSH keys only appears for labs you can reach over SSH; turn it off to pick specific keys, and the copy is then pinned to those — keys you add to your account later are not installed in it.
The dialog has two buttons:
| Button | What happens |
|---|---|
| Create & deploy | Creates the copy, then opens Configure & deploy with the full settings form — address, domains, HTTP proxies. Select Confirm Deploy to start it, or Deploy later. |
| Create copy | Saves the copy without deploying it. Select Deploy on its row when you are ready. |
A copy you do not name is called after the lab and its slot number, for example Ubuntu #2. Rename it at any time — from the row's menu, or the pencil next to its name on its own dashboard — up to 60 characters.
Slots and limits
Each copy takes a numbered slot. A new copy gets the lowest free number, so terminating copy #2 and creating another gives you a new #2 — with fresh settings, not the old one's.
The number of copies you can have equals your running-labs limit — 2 on the free plan and 4 on a paid plan, unless your administrator set something different for you. Unlike the running limit:
- stopped copies count — only terminating one frees its slot
- copies of every lab count together, not per lab
- a lab deployed from a template someone made (including you) counts as a copy
When you are at the limit, Deploy a copy shows Copy limit reached (N of M). Terminate a copy to deploy a new one.
For some labs your plan may not include new copies. The Deployments tab then says Deploying new copies isn't included in your plan for this lab — existing copies stay fully manageable, and hides Deploy a copy, Scale and Duplicate. You can still stop, redeploy, terminate and restore the copies you have.
The Deployments tab
Every copy of this lab — yours, and ones your organizations own — is listed here, with a search box, a Running / Paused / Stopped filter and a list or card view. Each row shows the copy's name, status, address and live load. Stop, Redeploy (or Deploy) and Resume sit on the row; the rest are in its More actions menu:
| In More actions | Does |
|---|---|
| Open Code Server | Opens the browser editor |
| Connection info | SSH command, credentials, domains |
| Pause | Freezes this copy only |
| Rename | Up to 60 characters |
| Duplicate | See below |
| Share | Share this one copy |
| Terminate | Destroys this copy — see below |
What you see depends on your role — a copy someone shared with you as a viewer has no Stop or Terminate.
Badges on a row tell you when a copy is isolated, runs as a different user, has a health check, or was deployed from an older template version and needs a redeploy to update.
Each copy also has its own dashboard, Preferences and Activity tab — select its name to open it. Every copy across every lab is also listed under Instances → My Instances.
Shared storage or isolated
This is the decision that matters, because it changes what the copy can see.
Shared (the default). The copy mounts your normal account storage. Every lab you own sees the same files. Good when the copies are all yours and you want one set of files.
Isolated. The copy gets its own separate home. Nothing you write in it appears in your other labs. Choose what it starts with (the seed):
| Seed | What you start with |
|---|---|
| Fresh empty home (default) | Nothing, like a brand-new account |
| Clone my home | A copy-on-write copy of your existing files |
A clone shares its blocks with the original at first and costs almost nothing — you are charged only for what you change afterward. On storage that cannot do this, the option is unavailable and the copy starts with an empty home instead.
Duplicating an existing copy
Duplicate clones a copy's configuration — run-as user, keys, proxies, passwords, storage choice — into a new one.
Domains and reserved addresses are deliberately not copied, since two labs cannot serve the same domain.
The duplicate takes a new slot, starts with fresh data, and is not deployed — select Deploy on its row when you are ready.
Storage counts once
Extra copies do not get their own quota. Your account has one storage allowance, and isolated copies count against it — but only for the data that has actually diverged from the original.
See Storage for how usage is measured.
Deleting a copy
Copies can be terminated, which frees the slot. Your main lab of each type cannot — it is stopped instead. See Stop, pause and delete.
Choose Move to trash to keep the copy restorable for 30 days, or Delete permanently. Terminated copies of this lab appear in the trash panel at the bottom of the Deployments tab; restoring one brings it back undeployed, in a free slot.
Do it with an AI assistant
You can also do this by asking an AI assistant connected to your account — see Connect an AI assistant to set one up.
| Ask | What the assistant does |
|---|---|
| “Make a second copy of my ubuntu lab called testing” | deploy_lab with a new copy, then wait_for_deploy |
| “Rebuild my copy in slot 1” | Checks the slot with list_labs, then deploy_lab on that slot |
| “Rename that copy to staging” | rename_lab |
| “Delete the testing copy” | list_labs for its id, then terminate_lab |
Each copy has its own id. The assistant should read it from list_labs before acting on a copy — otherwise it acts on your standard lab instead. The number of copies you can run is capped by your plan.
Next
- Replicas and load balancing — several copies behind one URL