Concepts

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 used

Running 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 used

Stopped 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:

  1. Resources are checked against the owned pool
  2. If pool is full → POOL_LIMIT_REACHED error

When you start a workspace:

  1. Resources are checked against the running pool
  2. If pool is full → RUNNING_POOL_REACHED error
  3. 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

ResourceStarterProScaleEnterprise
Owned Pool
CPUs1216128Unlimited
Memory32 GB16 GB128 GBUnlimited
Disk20 GB50 GB500 GBUnlimited
Running Pool
CPUs2864Unlimited
Memory2 GB8 GB64 GBUnlimited
Disk20 GB25 GB250 GBUnlimited
Limits
Max workspaces21050Unlimited
CPU quotaStandardEnhancedPriorityFull

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:

ResourceMinStarterProScaleHard Max
CPUs1141632
Memory128 MB512 MB4 GB16 GB64 GB
Disk64 MB1 GB10 GB100 GB200 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 },
});