Projects
Group sandboxes, volumes, snapshots and keys into projects inside a workspace — with per-project membership, limits and cost.
A workspace is the billing subject — either your personal account or an organization. A project is a named container of resources inside one workspace, with its own membership, limits and cost boundary.
The model
- Every resource (sandbox, volume, snapshot, template, key) belongs to exactly one project.
- A project's billing subject is its workspace — the organization pays one bill, but each project is its own boundary.
- Per-project membership: a member sees and manages only the projects they are in. Organization owners and admins see all projects in the org.
API keys are project-bound
Every API key is bound to exactly one project. Requests made with that key create resources in that project and bill its workspace — attribution is explicit, never a side effect of session context.
Per-project limits
Each project can set its own ceilings, layered on top of your plan's tier limits:
maxConcurrentSandboxes— a hard cap on simultaneously running sandboxes.monthlySpendCapMicros— a spend ceiling, enforced against the project's ledger.
Switching projects
In the console, the top-bar switcher changes the active (workspace, project). That selection drives both what you see and what you bill. From the SDK, target a project explicitly:
const box = await Sandbox.create({ template: "base", projectId: "prj_..." });When a member is removed from an organization, you choose whether their running org-billed sandboxes are kept or terminated. Either way they are dropped from all project memberships.