NexosNexos

Resource Limits & Quotas

Two levels of limits. Per-project limits cap each environment's container. Account quotas cap your total usage across every environment. The scheduler checks both before every deploy.

Per-project limits

Set them in the dashboard or in nexos.yaml. Enforced by containerd via Linux cgroups.

# nexos.yaml
app:
  cpu: 1            # cores (0.1–16)
  memory: 512       # MB (64–65536)

buildResources:
  cpu: 2            # cores during build
  memory: 2048      # MB during build
  timeout: 600      # max build seconds (60–3600)
  • CPU is throttled via CFS bandwidth — the app slows down past the limit but is not killed.
  • Memory exceeded → container is OOM-killed and restarted.
  • Build timeout — hung builds get killed, freeing the node.

Account quotas

Quotas prevent one user from monopolizing the network. Determined by your plan:

QuotaFreeTeamEnterprise
Max projects15Custom
Active environments per project520Custom
New environments / week10100Custom
Total CPU2 cores16 coresCustom
Total RAM4 GB32 GBCustom
Build minutes / month5005,000Custom
Private nodes1Custom
Auto-pauseYesYes
Custom domainsYesYes
Create teamsYesYes

Hit a quota? New deploys queue rather than fail. Free capacity by pausing or destroying environments you don't need.

How the scheduler picks nodes

  1. Filter — exclude nodes without enough free capacity for the project's requested resources.
  2. Score — prefer nodes with cache affinity (built this project before) and geographic proximity.
  3. Reserve — capacity is reserved for the environment's lifetime, so accurate limits matter. Requesting 4 cores when your app uses 0.5 wastes capacity others could use.

Check your quota via API

GET /api/quota
Authorization: Bearer nxs_your_api_key

Response:

{
  "plan": "team",
  "usage": {
    "projects": 3,
    "total_cpu": 6.5,
    "total_memory_mb": 14336,
    "build_minutes_used": 1240
  },
  "limits": {
    "max_projects": 5,
    "max_cpu": 16,
    "max_memory_mb": 32768,
    "build_minutes": 5000
  }
}