System Limits & Quotas
Comprehensive reference for technical limits, quotas, and capacity planning across the OEC.SH platform.
Plan-Based Limits
Subscription plans determine maximum projects, environments, and resource quotas.
Free Plan ($0/month)
| Resource | Limit | Notes |
|---|---|---|
| Projects | 2 | Hard limit |
| Environments | 5 | Hard limit |
| Servers | 1 | BYOS only |
| Team Members | 2 | Including owner |
| CPU Quota | 4 cores | Total across all active environments |
| RAM Quota | 8 GB | Total across all active environments |
| Disk Quota | 40 GB | Total across all active environments |
| Per-Env CPU | 2.0 cores max | Cannot exceed |
| Per-Env RAM | 4 GB max | Cannot exceed |
| Per-Env Disk | 20 GB max | Cannot exceed |
| Backup Retention | 7 days | Automatic cleanup |
| Backup Storage | 5 GB | Total for organization |
| API Rate Limit | 500/hour | Per user |
| Concurrent Deployments | 2 | Organization-wide |
Starter Plan (278.40/year)
| Resource | Limit | Notes |
|---|---|---|
| Projects | 5 | Hard limit |
| Environments | 15 | Hard limit |
| Servers | 3 | BYOS only |
| Team Members | 5 | Including owner |
| CPU Quota | 16 cores | Total across all environments |
| RAM Quota | 32 GB | Total across all environments |
| Disk Quota | 200 GB | Total across all environments |
| Per-Env CPU | 8.0 cores max | Cannot exceed |
| Per-Env RAM | 16 GB max | Cannot exceed |
| Per-Env Disk | 100 GB max | Cannot exceed |
| Backup Retention | 30 days | Automatic cleanup |
| Backup Storage | 50 GB | Total for organization |
| API Rate Limit | 1000/hour | Per user |
| Concurrent Deployments | 3 | Organization-wide |
Professional Plan (758.40/year)
| Resource | Limit | Notes |
|---|---|---|
| Projects | 20 | Hard limit |
| Environments | 50 | Hard limit |
| Servers | 10 | BYOS only |
| Team Members | 15 | Including owner |
| CPU Quota | 64 cores | Total across all environments |
| RAM Quota | 128 GB | Total across all environments |
| Disk Quota | 1 TB | Total across all environments |
| Per-Env CPU | 16.0 cores max | Cannot exceed |
| Per-Env RAM | 32 GB max | Cannot exceed |
| Per-Env Disk | 500 GB max | Cannot exceed |
| Backup Retention | 90 days | Automatic cleanup |
| Backup Storage | 200 GB | Total for organization |
| API Rate Limit | 2000/hour | Per user |
| Concurrent Deployments | 5 | Organization-wide |
Business Plan (1,910.40/year)
| Resource | Limit | Notes |
|---|---|---|
| Projects | 100 | Hard limit |
| Environments | 200 | Hard limit |
| Servers | 50 | BYOS only |
| Team Members | 50 | Including owner |
| CPU Quota | 256 cores | Total across all environments |
| RAM Quota | 512 GB | Total across all environments |
| Disk Quota | 5 TB | Total across all environments |
| Per-Env CPU | 32.0 cores max | Cannot exceed |
| Per-Env RAM | 64 GB max | Cannot exceed |
| Per-Env Disk | 1 TB max | Cannot exceed |
| Backup Retention | 180 days | Automatic cleanup |
| Backup Storage | 1 TB | Total for organization |
| API Rate Limit | 5000/hour | Per user |
| Concurrent Deployments | 10 | Organization-wide |
Enterprise Plan (Custom Pricing)
| Resource | Limit | Notes |
|---|---|---|
| Projects | Unlimited | Custom |
| Environments | Unlimited | Custom |
| Servers | Unlimited | BYOS only |
| Team Members | Unlimited | Custom |
| CPU Quota | Custom | Negotiated |
| RAM Quota | Custom | Negotiated |
| Disk Quota | Custom | Negotiated |
| Per-Env CPU | Custom | Negotiated |
| Per-Env RAM | Custom | Negotiated |
| Per-Env Disk | Custom | Negotiated |
| Backup Retention | Custom | Up to 3650 days |
| Backup Storage | Custom | Negotiated |
| API Rate Limit | Custom | Negotiated |
| Concurrent Deployments | Custom | Negotiated |
Environment Resource Limits
CPU Allocation
| Configuration | Min | Max | Default | Notes |
|---|---|---|---|---|
| CPU Cores | 0.5 | 32.0 | 2.0 | Plan-dependent max |
| CPU Shares (Docker Weight) | 512 | 32768 | 2048 | Proportional to cores |
| CPU Period (microseconds) | 100000 | 100000 | 100000 | Fixed Docker setting |
Memory Allocation
| Configuration | Min | Max | Default | Notes |
|---|---|---|---|---|
| RAM (MB) | 512 | 65536 (64 GB) | 2048 | OOM kill if exceeded |
| Swap (MB) | 0 | 4096 | 0 | Disabled by default |
| Memory Reservation (MB) | 256 | RAM value | RAM value | Soft limit |
Storage Allocation
| Configuration | Min | Max | Default | Notes |
|---|---|---|---|---|
| Disk Space (GB) | 5 | 1000 | 20 | Includes DB + filestore |
| Database Size | No limit | Disk quota | N/A | Within disk allocation |
| Filestore Size | No limit | Disk quota | N/A | Within disk allocation |
| PostgreSQL WAL Size | Auto | 4 GB | 1 GB | Write-ahead log |
Resource Split (Odoo vs PostgreSQL)
| Component | Default % | Min % | Max % | Notes |
|---|---|---|---|---|
| Odoo CPU | 70% | 50% | 90% | Customizable |
| PostgreSQL CPU | 30% | 10% | 50% | Customizable |
| Odoo RAM | 70% | 50% | 90% | Customizable |
| PostgreSQL RAM | 30% | 10% | 50% | Customizable |
| Disk | N/A | N/A | N/A | Shared pool |
Replica Resource Allocation
| Resource | Allocation | Notes |
|---|---|---|
| CPU | 30% of primary | Fixed ratio |
| RAM | 30% of primary | Fixed ratio |
| Disk | 100% of primary | Full database copy |
Deployment Timeouts & Limits
Deployment Stages
| Stage | Timeout | Retry | Notes |
|---|---|---|---|
| Total Deployment | 30 minutes | 3 attempts | ARQ job timeout |
| Git Clone | 5 minutes | No retry | Large repos may fail |
| Docker Build | 15 minutes | No retry | Custom Dockerfile timeout |
| Database Creation | 2 minutes | No retry | PostgreSQL init |
| Odoo Module Install | 10 minutes | No retry | Initial module setup |
| Container Start | 1 minute | 3 attempts | Health check wait |
| Health Check | 30 seconds | 30 attempts | 1-second intervals |
| SSL Certificate | 2 minutes | 3 attempts | Let's Encrypt |
| Filestore Mount | 30 seconds | No retry | Docker volume |
| Network Setup | 1 minute | No retry | Docker network |
Deployment Constraints
| Constraint | Limit | Notes |
|---|---|---|
| Concurrent Deployments | Plan-dependent (2-10) | Organization-wide |
| Git Repository Size | 2 GB | Hard limit |
| Docker Image Size | 10 GB | Hard limit |
| Dockerfile Build Context | 500 MB | Hard limit |
| Build Arguments | 20 | Max number |
| Environment Variables | 100 | Max per environment |
Backup Limits
Backup Creation
| Operation | Limit | Notes |
|---|---|---|
| Manual Backup Rate | 10/hour | Per organization |
| Backup Size | No hard limit | Storage quota applies |
| Retention Period | 7-3650 days | Plan-dependent |
| Concurrent Backups | 5 | Per organization |
| Backup Timeout | 60 minutes | ARQ job timeout |
Backup Storage
| Provider | Upload Speed | Download Speed | File Size Limit | Notes |
|---|---|---|---|---|
| AWS S3 | No limit | No limit | 5 TB | Per object |
| Cloudflare R2 | No limit | No limit | 5 TB | Per object |
| Backblaze B2 | No limit | No limit | 10 TB | Per object |
| MinIO | Server-dependent | Server-dependent | Custom | Self-hosted |
| SFTP | Network-dependent | Network-dependent | Server-dependent | Self-hosted |
| FTP | Network-dependent | Network-dependent | Server-dependent | Self-hosted |
Backup Retention Tiers
| Tier | Default Retention | Max Retention | Auto-Promotion | Notes |
|---|---|---|---|---|
| Daily | 7 days | 30 days | None | Deleted after period |
| Weekly | 28 days | 12 months | Monday backups | Promoted from daily |
| Monthly | 12 months | 10 years | 1st of month | Promoted from weekly |
| Yearly | 10 years | Indefinite | Jan 1 backups | Promoted from monthly |
| Permanent | Indefinite | Indefinite | Manual only | Never deleted |
Database Constraints
PostgreSQL Limits
| Parameter | Value | Notes |
|---|---|---|
| Max Connections | 100 | Per database |
| Statement Timeout | 30 seconds | Query timeout |
| Idle Transaction Timeout | 5 minutes | Auto-rollback |
| Max Database Size | Disk quota | No hard limit |
| Max Table Size | Disk quota | No hard limit |
| Max Row Size | 1 GB | PostgreSQL limit |
| Max Columns per Table | 1600 | PostgreSQL limit |
| Max Indexes per Table | Unlimited | Performance degrades |
| Max Index Size | 8 KB per page | PostgreSQL limit |
PgBouncer Limits
| Parameter | Value | Notes |
|---|---|---|
| Pool Size | 25 | Per database |
| Max Client Connections | 100 | Per PgBouncer |
| Server Lifetime | 3600 seconds | Connection reuse |
| Query Timeout | 30 seconds | Client timeout |
| Idle Timeout | 600 seconds | Close idle connections |
| Connection Pooling Mode | transaction | Not session |
Replica Constraints
| Parameter | Limit | Notes |
|---|---|---|
| Supported Odoo Versions | 18.0, 19.0 | Only these versions |
| Replication Lag (Warning) | 50 MB | Alert triggered |
| Replication Lag (Critical) | 100 MB | Critical alert |
| Lag Time (Warning) | 15 seconds | Alert triggered |
| Lag Time (Critical) | 30 seconds | Critical alert |
| Health Check Interval | 2 minutes | ARQ cron job |
| Max Replication Delay | 5 minutes | Before considered offline |
Network & Connectivity
Bandwidth & Transfer
| Resource | Limit | Notes |
|---|---|---|
| Inbound Traffic | Unlimited | Free |
| Outbound Traffic | No platform limit | Billed by server provider |
| WebSocket Connections | 100 | Per environment |
| SSE Connections | 50 | Per user |
| HTTP Request Size | 100 MB | Traefik limit |
| HTTP Response Size | No limit | Chunked encoding |
Domain & SSL
| Resource | Limit | Notes |
|---|---|---|
| Custom Domains | Unlimited | Per environment |
| Wildcard Domains | Supported | Manual DNS setup |
| SSL Certificates | Auto | Let's Encrypt |
| Certificate Renewal | 60 days before expiry | Automatic |
| Domain Verification | 5 minutes | DNS propagation |
| ACME Challenge | HTTP-01, DNS-01 | Supported |
API Rate Limits
REST API
| Endpoint Category | Rate Limit | Window | Notes |
|---|---|---|---|
| Read Operations (GET) | Plan-dependent | 1 hour | Per user |
| Write Operations (POST/PATCH/DELETE) | Plan-dependent | 1 hour | Per user |
| Deployment Triggers | 100 | 1 hour | Per organization |
| Backup Creation | 10 | 1 hour | Per organization |
| Webhook Endpoints | Unlimited | N/A | Signature verified |
| Authentication (Login) | 10 | 15 minutes | Per IP address |
| Password Reset | 5 | 1 hour | Per email |
Response Sizes
| Response Type | Max Size | Notes |
|---|---|---|
| JSON Response | 10 MB | Paginated if larger |
| Log Streaming | 100 KB/chunk | SSE events |
| File Download | No limit | Presigned URLs |
| Backup Download | No limit | Presigned URLs (1-24hr expiry) |
File & Upload Limits
File Uploads
| File Type | Max Size | Notes |
|---|---|---|
| Organization Logo | 2 MB | PNG, JPG, SVG |
| User Avatar | 1 MB | PNG, JPG |
| Backup File (Upload) | 10 GB | Chunked upload |
| SSH Public Key | 16 KB | Text file |
| Environment Variable File | 1 MB | .env format |
Odoo Filestore
| Parameter | Limit | Notes |
|---|---|---|
| Max File Size | Disk quota | Within environment limit |
| Max Files | Unlimited | Disk quota applies |
| Supported Formats | All | No restrictions |
Container Limits
Docker Constraints
| Parameter | Limit | Notes |
|---|---|---|
| Max Containers per Server | 50 | Recommended |
| Container Restart Policy | always | Unless manually stopped |
| Container Health Check Retries | 3 | Before marking unhealthy |
| Container Stop Timeout | 30 seconds | Before SIGKILL |
| Container Log Size | 100 MB | Rotated automatically |
| Container Tmpfs Size | 512 MB | In-memory storage |
Monitoring Limits
Netdata
| Parameter | Limit | Notes |
|---|---|---|
| Metrics Retention | 30 days | Disk-dependent |
| Metrics Resolution | 1 second | Real-time |
| Max Dimensions per Chart | 1000 | Performance limit |
| API Response Time | 2 seconds | Timeout |
SSE (Server-Sent Events)
| Parameter | Limit | Notes |
|---|---|---|
| Concurrent Connections | 50 | Per user |
| Event Size | 64 KB | Per event |
| Connection Timeout | 24 hours | Auto-reconnect |
| Retry Interval | 3 seconds | Client-side |
Git Integration Limits
Repository Constraints
| Parameter | Limit | Notes |
|---|---|---|
| Repository Size | 2 GB | Hard limit |
| Max Branches | Unlimited | No restriction |
| Max Commits per Push | 1000 | Webhook payload |
| Max Files per Commit | 10,000 | Git limit |
| Max File Size | 100 MB | Git recommendation |
Webhook Limits
| Parameter | Limit | Notes |
|---|---|---|
| Webhook Timeout | 30 seconds | Processing time |
| Webhook Retries | 3 attempts | Exponential backoff |
| Webhook Payload Size | 5 MB | JSON payload |
Security Constraints
Authentication
| Parameter | Limit | Notes |
|---|---|---|
| Session Duration | 7 days | Configurable |
| JWT Token Expiry | 1 hour | Refresh required |
| Refresh Token Expiry | 30 days | Re-login required |
| Password Min Length | 8 characters | Required |
| Password Max Length | 128 characters | Recommended |
| Failed Login Attempts | 5 | 15-minute lockout |
Permissions
| Parameter | Limit | Notes |
|---|---|---|
| Total Permissions | 74 | System-wide |
| System Roles | 9 | Predefined |
| Custom Roles | Unlimited | Organization-level |
| Permissions per Role | Unlimited | No restriction |
| Role Assignment per User | 1 org role + N project roles | Hierarchy-based |
Source Documentation
This reference consolidates limits from:
- Billing & Subscriptions - Plan limits
- Environment Lifecycle - Operational timeouts
- Create Environment - Resource constraints
- Backup Creation - Backup limits
- Deployment Operations - Deployment timeouts
- Database Management - Database constraints
- Real-time Monitoring - Monitoring limits
Last Updated: December 11, 2025 (Sprint 2E45)
For limit increases or custom quotas, contact [email protected] or upgrade to Enterprise plan.