Skip to main content

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​

ResourceDefault limitNotes
Extensions per account25Across all visibility levels
Versions per extension100Oldest versions are archived after 100
Team members10Includes owner
API keys20Active keys; revoked keys do not count
Secret keys per extension20Stored in Lumio Vault

Per-extension storage limits​

ResourceDefault limitNotes
Global storage100 MBShared across all installs
Per-install storage10 MBPer unique installId
Key count (global)10,000 keys
Key count (per install)1,000 keys
Value size64 KBPer key
Key name length255 bytesUTF-8

Bot-module ctx.cache limits​

ResourceLimitNotes
Keys per install256Writing to an existing key still works when full
Value size4 KBSerialized JSON per key
Key name128 characters[A-Za-z0-9:_-]
TTL1 s – 24 hDefault 1 h; every key expires
Cache calls per handler run50
Cache operations per install200 per minute

See Cache & Background Jobs.

Server function limits​

ResourceDefault limitNotes
Actions per extension50Total defined actions
Invocations per minute300Across all users of this extension
Invocation timeout30 secondsApplies to handler execution
External fetch calls per invocation10Via ctx.fetch()
Response payload size1 MBReturned from an action
Egress hosts20Entries 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:

ResourceLimitNotes
Wall-clock timeoutPer 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 isolate256 MBHitting it terminates the isolate; other handlers are not affected
Concurrent isolates per worker process16Further invocations wait for a free slot. A slot is freed only when the isolate has actually stopped
State between invocationsNoneEvery 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​

ResourceDefault limitNotes
Active WebSocket connections per install5Overlay + popout windows
Pushes per handler run32Via ctx.realtime.push(); one more throws
Pushes per install and minute300Pushes over the cap are dropped
Published bytes per install and minute1 MiBSerialized { topic, payload } messages; pushes over the cap are dropped
Payload size16 KiBSerialized JSON per push; a larger payload throws

Bundled sound limits​

ResourceDefault limitNotes
Sounds per extension manifest200Maximum entries in sounds array
Resolved sound limit50Per-extension deploy cap (see below)
Sound file size10 MBPer individual sound file
Sound file warning5 MBCLI warns above this threshold
Total bundle size50 MBAll files combined per deploy

The resolved sound limit follows a 3-tier priority chain:

  1. Per-extension override - admin-set via extensions.max_sounds column
  2. Per-developer override - admin-set via developer limit overrides (max_sounds_per_extension key)
  3. 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​

ResourceDefault limitNotes
Compiled bundle size (layer)5 MBGzipped
Compiled bundle size (editor)5 MBGzipped
Static assets (images, fonts)20 MBPer extension version
Build time5 minutesPer lumio deploy run

Rate limits on the Developer API​

EndpointLimit
GET endpoints120 requests/minute
POST /extensions10 requests/hour
POST /extensions/:id/versions30 requests/hour
DELETE endpoints30 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):

  1. Click Request increase next to a configurable limit
  2. Select the scope: Team / Developer account (applies to all extensions) or a Specific extension
  3. Check the limits you want to increase and enter your desired values
  4. Provide a reason (minimum 20 characters) explaining your use case
  5. 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:

ResourceHard limit
Value size1 MB
Action invocation timeout120 seconds
Response payload10 MB
Egress request timeout30 seconds
Versions per extension500