# Limits and defaults

> Product limits, API rate limits, and runtime defaults for Helix projects, schedules, and storage.

Product limits, API rate limits, and runtime defaults currently enforced across Helix.

## Product limits

These limits are currently enforced across Helix services.

### Projects

| Item | Value |
|---|---|
| Project title | ≤ 100 characters |
| Project description | ≤ 300 characters |
| Project alias | ≤ 30 characters |
| Max projects per workspace | 100 |
| Max projects per org | 500 |
| Deployment bundle size | ≤ 50 MB |
| Max authentications per deployment | 100 |

### Key-value store

| Item | Value |
|---|---|
| Max keys per project | 500 |
| Max value size per key | 200 KB |

See the [key-value store guide](/documentation/guides/key-value-store/) for key naming rules and the [ctx.kv() reference](/documentation/reference/context/kv/) for the API.

## Helix API rate limits

These limits apply to Helix API calls (create, update, deploy, and related management endpoints). They are not limits on project execution or function invocations.

| Item | Value |
|---|---|
| Requests per second per org | 50 across all endpoints |
| Requests per minute per org | 1800 across all endpoints |
| Over-limit response | HTTP 429 with a `Retry-After` header |
| Rate-limiter outage | Fail-open (requests are allowed through) |
| Successful deployments per org | 200 per UTC calendar day |

## Runtime defaults and limits

### Functions

| Item | Value |
|---|---|
| Production runtime | Node.js 20+, one runtime per project with internal routing |
| CLI requirement | Node.js 24.18.0 or later |
| Function timeout | 30 s default, configurable per function |
| Streamed response size | 20 MB maximum (first byte can arrive before the function finishes) |
| Buffered response size | 6 MB maximum |
| Memory | Managed by the platform, not configurable per function |
| Scaling | Scales with demand and to zero when idle; no configuration required |

Return a `Response` with a `ReadableStream` body to stream; the runtime handles streaming setup. Note that the `output` schema is not applied to streaming responses. See the [function definition reference](/documentation/reference/functions/).

### Async function calls

| Item | Value |
|---|---|
| Chaining depth | Two hops: a normal execution can call `ctx.callFunctionAsync()` once, the execution it starts can call it once more, a third hop is refused |
| Dispatch method | Always `POST`; the target must accept `POST` regardless of the caller's own method |
| Delivery | At-least-once, with no idempotency key; write target handlers to be idempotent |
| Result | None; the call resolves once accepted, with no return value, status, or execution ID from the target |

See the [async function calls guide](/documentation/guides/async-functions/).

### Schedules

| Item | Value |
|---|---|
| Schedule files per project | 20 maximum; a deploy that declares more is rejected |
| Fastest cadence | Once per minute |
| Run duration | 3 minutes maximum per run, not configurable |
| Cron format | Five-field standard cron; day-of-month and day-of-week cannot both be constrained |
| Timezone | Named IANA zones only; offset forms like `'+05:00'` are rejected at build time |
| Delivery | At least once; a failed run is retried once, five minutes after it started, then dropped |
| Overlap | Runs can still overlap. `concurrent` is accepted at deploy time but not enforced yet |

See the [scheduled functions guide](/documentation/guides/scheduled-functions/).

### Storage

| Item | Value |
|---|---|
| Max keys per project | 500 |
| Max value size per key | 200 KB |

### Data retention

| Item | Value |
|---|---|
| Execution logs | 30 days |
| Previous deployments | 30 days from deploy; the live deployment and the one before it are always kept |

See [how long previous deployments are kept](/documentation/guides/deployment/#how-long-previous-deployments-are-kept) for what expiry removes.

---

Canonical: https://helix.tray.ai/documentation/reference/limits/
Any link on this page is available as markdown by appending .md to its URL.
Full corpus: https://helix.tray.ai/documentation/llms-full.txt