Limits & Quotas
Lumio enforces per-account and per-extension limits to ensure fair resource usage across the platform. This page lists the defaults and the process for requesting an increase.
Per-account limits
| Resource | Default limit | Notes |
|---|---|---|
| Extensions per account | 25 | Across all visibility levels |
| Versions per extension | 100 | Oldest versions are archived after 100 |
| Team members | 10 | Includes owner |
| API keys | 20 | Active keys; revoked keys do not count |
| Secret keys per extension | 20 | Stored in Lumio Vault |
Per-extension storage limits
| Resource | Default limit | Notes |
|---|---|---|
| Global storage | 100 MB | Shared across all installs |
| Per-install storage | 10 MB | Per unique installId |
| Key count (global) | 10,000 keys | |
| Key count (per install) | 1,000 keys | |
| Value size | 64 KB | Per key |
| Key name length | 255 bytes | UTF-8 |
Bot-module ctx.cache limits
| Resource | Limit | Notes |
|---|---|---|
| Keys per install | 256 | Writing to an existing key still works when full |
| Value size | 4 KB | Serialized JSON per key |
| Key name | 128 characters | [A-Za-z0-9:_-] |
| TTL | 1 s – 24 h | Default 1 h; every key expires |
| Cache calls per handler run | 50 | |
| Cache operations per install | 200 per minute |
Server function limits
| Resource | Default limit | Notes |
|---|---|---|
| Actions per extension | 50 | Total defined actions |
| Invocations per minute | 300 | Across all users of this extension |
| Invocation timeout | 30 seconds | Applies to handler execution |
| External fetch calls per invocation | 10 | Via ctx.fetch() |
| Response payload size | 1 MB | Returned from an action |
| Egress hosts | 20 | Entries in allowHosts |
Handler runtime limits
Bot-module handlers and automation-node handlers run in a fresh V8 isolate per invocation in the Bot Module Worker and the Automation Worker. These limits are fixed by the worker and cannot be raised:
| Resource | Limit | Notes |
|---|---|---|
| Wall-clock timeout | Per handler type (bot modules: 500 ms sync / 10 s async; automation nodes: see Timeouts) | Enforced on the worker thread that runs the isolate. It covers synchronous code and pending async work: when the deadline passes, the isolate is terminated and discarded, and the call fails with execution timed out after <n> ms. Nothing your handler scheduled keeps running afterwards |
| Heap per isolate | 256 MB | Hitting it terminates the isolate; other handlers are not affected |
| Concurrent isolates per worker process | 16 | Further invocations wait for a free slot. A slot is freed only when the isolate has actually stopped |
| State between invocations | None | Every invocation gets a new isolate; bot modules keep state in ctx.cache (ctx.db is not available yet) |
Globals. Handler code runs as plain ECMAScript plus the ctx object. Promises, async/await and queueMicrotask work. The host runtime's internals are removed before your code runs: Deno, Deno.core and __bootstrap are undefined, and there is no setTimeout/setInterval. Reach the platform only through ctx.
Real-time limits
| Resource | Default limit | Notes |
|---|---|---|
| Active WebSocket connections per install | 5 | Overlay + popout windows |
| Pushes per handler run | 32 | Via ctx.realtime.push(); one more throws |
| Pushes per install and minute | 300 | Pushes over the cap are dropped |
| Published bytes per install and minute | 1 MiB | Serialized { topic, payload } messages; pushes over the cap are dropped |
| Payload size | 16 KiB | Serialized JSON per push; a larger payload throws |
Bundled sound limits
| Resource | Default limit | Notes |
|---|---|---|
| Sounds per extension manifest | 200 | Maximum entries in sounds array |
| Resolved sound limit | 50 | Per-extension deploy cap (see below) |
| Sound file size | 10 MB | Per individual sound file |
| Sound file warning | 5 MB | CLI warns above this threshold |
| Total bundle size | 50 MB | All files combined per deploy |
The resolved sound limit follows a 3-tier priority chain:
- Per-extension override - admin-set via
extensions.max_soundscolumn - Per-developer override - admin-set via developer limit overrides (
max_sounds_per_extensionkey) - Platform default - 50
The CLI checks this limit before deploying (GET /v1/developer/extensions/{id}/limits). The server validates again at upload and install time.
Supported audio formats: MP3, WAV, OGG, WebM, M4A, AAC, FLAC.
To request a limit increase, open Settings → You → Developer → Limits (/dashboard/settings/developer/limits). Select the scope (team/developer default or a specific extension), choose which limits to increase, enter your desired values with a reason, and submit. An admin reviews and approves or rejects the request. You can track request status in the same area under the Requests tab.
Build limits
| Resource | Default limit | Notes |
|---|---|---|
| Compiled bundle size (layer) | 5 MB | Gzipped |
| Compiled bundle size (editor) | 5 MB | Gzipped |
| Static assets (images, fonts) | 20 MB | Per extension version |
| Build time | 5 minutes | Per lumio deploy run |
Rate limits on the Developer API
| Endpoint | Limit |
|---|---|
GET endpoints | 120 requests/minute |
POST /extensions | 10 requests/hour |
POST /extensions/:id/versions | 30 requests/hour |
DELETE endpoints | 30 requests/minute |
Limits are applied per authenticated developer account. Exceeding a limit returns HTTP 429 Too Many Requests with a Retry-After header.
Requesting a limit increase
To request a limit increase, open Settings → You → Developer → Limits (/dashboard/settings/developer/limits):
- Click Request increase next to a configurable limit
- Select the scope: Team / Developer account (applies to all extensions) or a Specific extension
- Check the limits you want to increase and enter your desired values
- Provide a reason (minimum 20 characters) explaining your use case
- Review the summary and submit
Requests are reviewed by Lumio admins. Approved increases apply immediately. You can track request status on the same page under the Requests tab. Increases for storage, invocation rate, and bundle size are granted on a case-by-case basis and may require a Pro or Enterprise plan.
Hard limits
The following limits cannot be increased regardless of plan:
| Resource | Hard limit |
|---|---|
| Value size | 1 MB |
| Action invocation timeout | 120 seconds |
| Response payload | 10 MB |
| Egress request timeout | 30 seconds |
| Versions per extension | 500 |