Skip to content

Limits ​

The engine's and the SDKs' limits, from their code. The engine checks most of them when you sync, or when an event comes in.

IDs and names ​

WhatLimit
App ID, function ID1-64 characters: letters, digits, -, _, starting with a letter or digit
Failure handler ID (<id>-failure)also 64 characters, so onFailure needs a function ID of at most 56
Event name1-256 characters; not starting with inngest/
Event idup to 256 characters
Realtime channel1-256 characters: letters, digits, : _ - .
Realtime topic1-64 characters: letters, digits, _ - .

Events ​

WhatLimit
Events per request (flow.send, POST /e, step.sendEvent)100
One event (all its fields, as JSON)1 MB
One request body10 MB
Events a second, per workspaceset by the plan; over it, 429

Functions and runs ​

WhatLimit
Steps per run1000
Retries per step (retries)0-20, default 4
One call to your app (timeouts.step)default 5 minutes; kept between 1 second and 14 minutes
A whole run (timeouts.finish)no limit by default; at least 1 second
One step's result4 MB
The function's return value4 MB
Everything a run holds (events, step results, output)32 MB
Your app's answer to one call5 MB
step.invoke data1 MB
cancelOn entries per function5
A cancelOn with no timeoutlistens up to 366 days
waitForEvent look-backevents up to 1 hour before the wait
A run waiting for a down app7 days, then AppUnavailable
step.sleep, step.sleepUntilno limit; a time in the past ends at once. A cancelOn with no timeout still stops listening after 366 days, and time asleep counts toward timeouts.finish.
An event ts in the futureno limit
Tags per function3; names up to 32 characters; a value over 256 characters is left out
Sync manifest1 MB
Expressions2048 characters, no regular expressions

Flow control ​

WhatLimit
Concurrency limits per function2
Concurrency limit0 (no limit) to 100,000
Throttle and rate limit limit1 to 100,000
Throttle, rate limit and debounce periods1 second to 7 days
Batch size (maxSize)1 to 100 events
Batch timeout1 second to 1 hour
Batch total4 MB
Priority-600 to 600 seconds

Keeping data ​

WhatHow long
A sleeping or waiting runwhile it is active: only ended runs are deleted
A completed or cancelled run3 days after it ends, unless kept
A failed run4 days after it ends, unless kept
Events (dashboard, event pages)4 days
An event id or idempotency value is caughtwhile the first run is kept
A pending signing key from Add app that no app connects with7 days

Finding runs ​

WhatLimit
flow.runs.list page (limit)1 to 200, default 50
Tag filters in one list3
Runs cancelled by tag in one call500, oldest first; more says there are more, and next goes on from there
How far list and counts lag the runsa few seconds
Ended runs in countsonly since since (see Keeping data)

flow.runs.singleton and cancel by run ID or singleton key read the runs themselves, with no lag.

Realtime ​

WhatLimit
One publish (the whole body)64 KB
publishMany1 to 100 messages; the body up to 1 MB; each message's data up to 64 KB
Channels on one token or socket1 to 100, with up to 8,000 characters of names in all

See also Realtime.

Streams ​

WhatLimit
Stream ID1-256 characters: letters, digits, : _ . -; not ., .., token or connect
One item, as JSON64 KB
Items per append100
Request body1 MB
Items per stream20,000
Bytes per stream32 MB
ttl (open)1 second to 7 days
grace (close)0 to 7 days
meta, as JSON4 KB
One snapshot page1000 items and about 4 MB (snapshot reads every page)
Readers (sockets) per stream1,000
A reader token must connect within1 minute
A reader socket lastsup to 1 hour; then the reader gets a new token and goes on

The end item that close writes counts toward the limits, but is never refused for them.

Timing ​

WhatTime
A signed call's clock may be off by5 minutes
A revoked key stops working withinabout 10 seconds
A sync reaches every engine machine withinabout 10 seconds
The sync at boot checks again every5 minutes
Streamed answer heartbeat20 seconds
A concurrency slot of a crashed call is freed afterthe step timeout plus 2 minutes
A realtime token must connect within1 minute
A realtime connection lastsup to 1 hour
Browsers on one realtime channel1,000
One realtime publish64 KB

When a run's state is over 4 MB, the engine does not send it in each call: the SDK loads it from the engine, at FLOW_BASE_URL. If you run your own engine, set FLOW_BASE_URL in every app, even ones that never send events.