Realtime

Realtime Limits


Our cluster supports millions of concurrent connections and message throughput for production workloads.

Limits by plan

FreeProPro (no spend cap)TeamEnterprise
Concurrent connections20050010,00010,00010,000+
Messages per second1005002,5002,5002,500+
Channel joins per second1005002,5002,5002,500+
Channels per connection100100100100100+
Presence keys per object1010101010+
Presence messages per second20501,0001,0001,000+
Broadcast payload size256 KB3,000 KB3,000 KB3,000 KB3,000+ KB
Postgres change payload size (read more)1,024 KB1,024 KB1,024 KB1,024 KB1,024+ KB

Beyond the Free and Pro Plan you can customize your limits by contacting support.

Limit errors

When you exceed a limit, errors will appear in the backend logs and client-side messages in the WebSocket connection.

  • Logs: check the Realtime logs inside your project Dashboard.
  • WebSocket errors: Use your browser's developer tools to find the WebSocket initiation request and view individual messages.

Some limits can cause a Channel join to be refused. Realtime will reply with one of the following WebSocket messages:

too_many_channels

Too many channels currently joined for a single connection.

too_many_connections

Too many total concurrent connections for a project.

too_many_joins

Too many Channel joins per second.

tenant_events

Connections will be disconnected if your project is generating too many messages per second. supabase-js will reconnect automatically when the message throughput decreases below your plan limit. An event is a WebSocket message delivered to, or sent from a client.

Postgres changes payload limit

When this limit is reached, the new and old record payloads only include the fields with a value size of less than or equal to 64 bytes.