Resource Pools
Your plan gives you two resource pools that limit total resources across all your workspaces. Understanding pools helps you manage capacity.
Two pools
Owned pool
The owned pool limits the total resources across all your workspaces (running or stopped). This is your overall capacity ceiling.
Owned Pool:
CPUs: [plan limit] │ ████████░░░░░░░░ │ 8 used (3 workspaces)
Memory: [plan limit] │ ██████░░░░░░░░░░ │ 6 GB used
Disk: [plan limit] │ ████░░░░░░░░░░░░ │ 12 GB usedRunning pool
The running pool limits resources consumed by currently running workspaces. This is your active capacity ceiling.
Running Pool:
CPUs: [plan limit] │ ████░░░░ │ 4 used (2 running)
Memory: [plan limit] │ ████░░░░ │ 4 GB used
Disk: [plan limit] │ ██░░░░░░ │ 8 GB usedStopped workspaces count toward the owned pool but not the running pool. This means you can have more total workspaces than can run simultaneously.
How it works
When you create a workspace:
- Resources are checked against the owned pool
- If pool is full →
POOL_LIMIT_REACHEDerror
When you start a workspace:
- Resources are checked against the running pool
- If pool is full →
RUNNING_POOL_REACHEDerror - Stop another workspace to free running pool capacity
When you stop a workspace:
- Running pool resources are freed
- Owned pool resources are still consumed (workspace still exists)
When you delete a workspace:
- Both pool resources are freed
Pool limits by plan
| Resource | Starter | Pro | Scale | Enterprise |
|---|---|---|---|---|
| Owned Pool | ||||
| CPUs | 12 | 16 | 128 | Unlimited |
| Memory | 32 GB | 16 GB | 128 GB | Unlimited |
| Disk | 20 GB | 50 GB | 500 GB | Unlimited |
| Running Pool | ||||
| CPUs | 2 | 8 | 64 | Unlimited |
| Memory | 2 GB | 8 GB | 64 GB | Unlimited |
| Disk | 20 GB | 25 GB | 250 GB | Unlimited |
| Limits | ||||
| Max workspaces | 2 | 10 | 50 | Unlimited |
| CPU quota | Standard | Enhanced | Priority | Full |
CPU quota
Each plan determines how much CPU throughput your workspaces receive. Higher plans provide more CPU time per allocated core, resulting in better performance for compute-intensive workloads. See the Pricing page for details.
Per-workspace limits
In addition to pool limits, each workspace has per-workspace resource limits based on your plan:
| Resource | Min | Starter | Pro | Scale | Hard Max |
|---|---|---|---|---|---|
| CPUs | 1 | 1 | 4 | 16 | 32 |
| Memory | 128 MB | 512 MB | 4 GB | 16 GB | 64 GB |
| Disk | 64 MB | 1 GB | 10 GB | 100 GB | 200 GB |
Hard max is the absolute ceiling regardless of plan.
Checking your quota
const quota = await ws.quota();
console.log(`Plan: ${quota.planLabel}`);
console.log(`Workspaces: ${quota.currentSandboxes}/${quota.maxSandboxes}`);
console.log(`Can create: ${quota.canCreate}`);
console.log(`Pool used: ${quota.pool_usage.cpus}/${quota.pool.cpus} CPUs`);
console.log(`Running used: ${quota.running_pool_usage.cpus}/${quota.running_pool.cpus} CPUs`);Common scenarios
"Pool limit reached" on create
Your total workspace resources exceed the owned pool. Options:
- Delete unused workspaces
- Reduce resources on existing workspaces
- Upgrade your plan - see the Pricing page
"Running pool reached" on start
Too many workspaces running simultaneously. Options:
- Stop a running workspace
- Reduce resources on running workspaces
- Upgrade your plan - see the Pricing page
Maximize workspace count
Use smaller resource allocations:
// Minimal workspace - fits many in a pool
await ws.create({
image: 'alpine-3',
config: { cpus: 1, memory_mb: 128, writable_size_mb: 64 },
});