Skip to main content
Sign In
More

Limits

Limits and constraints for Rivet Actors.

This page documents the limits for Rivet Actors.

There are two types of limits:

  • Soft Limit: Application-level limit, configurable in RivetKit. These cannot exceed the hard limit.
  • Hard Limit: Infrastructure-level limit that cannot be configured.

Soft limits can be configured in RivetKit by passing options to setup:

import { setup } from "rivetkit";

const rivet = setup({
  use: { /* ... */ },
  maxIncomingMessageSize: 1_048_576,
  maxOutgoingMessageSize: 10_485_760,
  // ...
});

Limits

WebSocket

These limits affect actions that use .connect() and low-level WebSockets.

NameSoft LimitHard LimitDescription
Max incoming message size64 KiB32 MiBMaximum size of incoming WebSocket messages. Soft limit configurable via maxIncomingMessageSize.
Max outgoing message size1 MiB32 MiBMaximum size of outgoing WebSocket messages. Soft limit configurable via maxOutgoingMessageSize.
WebSocket open timeout15 secondsTime allowed for WebSocket connection to be established, including onBeforeConnect and createConnState hooks. Connection is closed if exceeded.
Message ack timeout30 secondsTime allowed for message acknowledgment before connection is closed. Only relevant in the case of a network issue and does not affect your application.

Hibernating WebSocket

Hibernating WebSockets allow actors to sleep while keeping client connections alive. All WebSocket limits above also apply to hibernating WebSockets. See WebSocket Hibernation for details.

NameSoft LimitHard LimitDescription
Max pending buffer size128 MiBTotal size of all buffered messages per connection while actor is sleeping.
Max pending message count65,535Maximum number of buffered messages per connection while actor is sleeping.
Hibernation timeout90 secondsMaximum time an actor has to wake up before the client is disconnected. Only relevant if something is wrong with starting actors.

HTTP

These limits affect actions that do not use .connect() and low-level HTTP requests.

NameSoft LimitHard LimitDescription
Max request body size128 MiBMaximum size of HTTP request bodies.
Max response body size128 MiBMaximum size of HTTP response bodies.
Request timeout5 minutesMaximum time for a request to complete.

Networking

NameSoft LimitHard LimitDescription
Connection ping timeout30 secondsConnection is closed if a ping is not acknowledged within this time. Applies to both HTTP and WebSocket. Only relevant in the case of a network issue and does not affect your application.

Queue

NameSoft LimitHard LimitDescription
Max queue size1,000 messagesMaximum number of messages in the queue before new messages are rejected. Configurable via maxQueueSize.
Max queue message size64 KiB128 KiB (effective)Maximum size of each individual queue message. Configurable via maxQueueMessageSize. Actual payload is slightly lower after queue serialization overhead.

Actor KV Storage

These limits apply to the low-level KV storage interface powering Rivet Actors. They likely do not affect your application, but are documented for completeness.

NameSoft LimitHard LimitDescription
Max key size2 KiBMaximum size of a single key.
Max value size128 KiBMaximum size of a single value.
Max keys per operation128Maximum number of keys in a single get/put/delete operation.
Max batch put payload size976 KiBMaximum total size of all key-value pairs in a single batch put operation.
Max storage size per actor10 GiBMaximum total KV storage size for a single actor.
List default limit16,384Default maximum number of keys returned by a list operation.

Actor SQLite Storage

These limits apply to the SQLite database available via this.sql. SQLite data is stored through the KV layer, so the storage limit is shared with KV storage.

NameSoft LimitHard LimitDescription
Max storage size per actor10 GiBMaximum total storage size for a single actor. This limit is shared with KV storage.

Actor Input

See Actor Input for details.

NameSoft LimitHard LimitDescription
Max actor input size4 MiBMaximum size of the input passed when creating an actor.
Max connection params size4 KiBMaximum size of connection parameters passed when connecting to an actor.
Max actor key component size128 bytesMaximum size of each component in an actor key array.
Max actor key total size1,024 bytesMaximum total size of the serialized actor key string.
Max actor name length64 charactersMaximum length for actor and project identifiers.

Rate Limiting

NameSoft LimitHard LimitDescription
Rate limit1200 requests/minuteDefault rate limit per actor per IP address with a 1 minute time bucket.
Max in-flight requests32Default maximum concurrent requests to an actor per IP address.

Timeouts

NameSoft LimitHard LimitDescription
Action timeout60 secondsTimeout for RPC actions. Configurable via actionTimeout.
Create vars timeout5 secondsTimeout for createVars hook. Configurable via createVarsTimeout.
Create conn state timeout5 secondsTimeout for createConnState hook. Configurable via createConnStateTimeout.
On connect timeout5 secondsTimeout for onConnect hook. Configurable via onConnectTimeout.
On sleep timeout5 secondsTimeout for onSleep hook. Configurable via onSleepTimeout.
On destroy timeout5 secondsTimeout for onDestroy hook. Configurable via onDestroyTimeout.
Wait until timeout15 secondsMax time to wait for waitUntil background promises during shutdown. Configurable via waitUntilTimeout.
Run stop timeout15 secondsMax time for run handler to stop during shutdown. Configurable via runStopTimeout.
Sleep timeout30 secondsTime of inactivity before actor hibernates. Configurable via sleepTimeout.
State save interval10 secondsInterval between automatic state saves. Configurable via stateSaveInterval.

Actor Lifecycle

NameSoft LimitHard LimitDescription
Actor start threshold30 secondsMaximum time for an actor to start before it is considered lost and rescheduled.
Actor stop threshold30 secondsMaximum time for an actor to stop before it is considered lost.

Increasing Limits

These limits are sane defaults designed to protect your application from exploits and accidental runaway bugs. If you have a use case that requires different limits, contact us to discuss your requirements.