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:
| Quota | Free | Team | Enterprise |
|---|---|---|---|
| Max projects | 1 | 5 | Custom |
| Active environments per project | 5 | 20 | Custom |
| New environments / week | 10 | 100 | Custom |
| Total CPU | 2 cores | 16 cores | Custom |
| Total RAM | 4 GB | 32 GB | Custom |
| Build minutes / month | 500 | 5,000 | Custom |
| Private nodes | — | 1 | Custom |
| Auto-pause | — | Yes | Yes |
| Custom domains | — | Yes | Yes |
| Create teams | — | Yes | Yes |
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
- Filter — exclude nodes without enough free capacity for the project's requested resources.
- Score — prefer nodes with cache affinity (built this project before) and geographic proximity.
- 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_keyResponse:
{
"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
}
}