improvement(concurrency): limits configurable, docs updates (#5640)

* improvement(concurrency): limits configurable, docs updates

* remove dead tests

* limits self hosted vars
This commit is contained in:
Vikhyath Mondreti
2026-07-13 13:11:05 -07:00
committed by GitHub
parent e94e514c0a
commit 2d41360807
49 changed files with 1299 additions and 371 deletions
+13 -2
View File
@@ -332,7 +332,18 @@ Team and Enterprise plans unlock shared workspaces that belong to your organizat
| **Max** | 300 | 2,500 |
| **Enterprise** | 600 | 5,000 |
Max (individual) shares the same rate limits as team plans. Team plans (Pro or Max for Teams) use the Max-tier rate limits.
Rate limits follow the paid tier: Pro and Pro for Teams share the Pro limits, while Max and Max for Teams share the Max limits.
### Concurrent Executions
| Plan | Concurrent Executions |
|------|-----------------------|
| **Free** | 10 |
| **Pro** | 50 |
| **Max** | 200 |
| **Enterprise** | 1,000 by default (customizable) |
The concurrency limit applies per billing account. For organization-based plans, the limit is shared by all workspaces, members, and API keys under that organization. Teams plans follow their tier: Pro for Teams uses the Pro limit and Max for Teams uses the Max limit. An admitted async execution holds a slot while queued and running; synchronous executions hold one while running. Workflow-in-workflow blocks execute inside the parent run and do not consume another concurrency slot.
### File Storage
@@ -343,7 +354,7 @@ Max (individual) shares the same rate limits as team plans. Team plans (Pro or M
| **Max** | 500 GB |
| **Enterprise** | 500 GB (customizable) |
Team plans (Pro or Max for Teams) use 500 GB.
Storage follows the paid tier: Pro and Pro for Teams share the Pro limit, while Max and Max for Teams share the Max limit. Organization storage is pooled across the organization's workspaces.
### Run Time Limits
@@ -121,6 +121,29 @@ Configure one provider — the mailer auto-detects in priority order: **Resend
|----------|-------------|
| `AZURE_ACS_CONNECTION_STRING` | Azure Communication Services connection string |
## Limits
Self-hosted deployments (billing disabled) run without plan limits: no rate limits, no execution timeouts, no table or storage caps, and no retention-based data deletion. Each limit can be opted back in individually by explicitly setting its variable.
| Variable | Opts in | Suggested value |
|----------|---------|-----------------|
| `RATE_LIMIT_FREE_SYNC` | Sync executions per minute | `50` |
| `RATE_LIMIT_FREE_ASYNC` | Async executions per minute | `200` |
| `RATE_LIMIT_FREE_API_ENDPOINT` | v1 API endpoint requests per minute | `30` |
| `EXECUTION_TIMEOUT_FREE` | Sync execution timeout (seconds) | `300` |
| `EXECUTION_TIMEOUT_ASYNC_FREE` | Async execution timeout (seconds) | `5400` |
| `FREE_TABLES_LIMIT` | Max user tables per workspace | `5` |
| `FREE_TABLE_ROWS_LIMIT` | Max rows per user table | `50000` |
| `FREE_STORAGE_LIMIT_GB` | File storage quota (GB) | `5` |
<Callout type="info">
Without billing, every account resolves to the free tier, so only the free-tier variables apply. Setting one variable enforces only that limit — the rest stay unlimited.
</Callout>
<Callout type="warn">
Deployments installed with the Helm chart ship these variables preset in `app.envDefaults`, so chart-based installs keep enforcement unless those keys are removed or overridden.
</Callout>
## Example .env
```bash