“subscribe() throws RealtimeError”

A rule refused you. In Studio open Services → Realtime → Channels and find the rule your channel name matches (rules are matched top to bottom, so an earlier broad pattern may win). Check Subscribe policy against who is signed in. If nothing matches, the default rule in Settings applies. New rules take up to about 30 seconds.

”send() throws”

Publish policy refuses, or Apps may publish is off in Settings. For server-only channels, publish with a secret key.

”I joined but receive nothing”

  1. Is the sender publishing to the exact channel name and event?
  2. Watch the channel in the Playground: do messages appear there?
  3. Check Overview → Published vs Delivered.
  4. Are you listening with onEvent("name") for the right event name? on("message", …) catches every message.

”Messages arrive twice”

Normal after a reconnect with replay. The client removes duplicates by message id; if you render from your own state, merge by id too.

”Presence is empty”

Presence is off for the channel’s rule. Turn it on in Channels, and join with { presence: {...} }.

”History is empty”

History depth is 0 for the rule, or the channel is Ephemeral. Set a depth, or use Durable with a Retention.

”Live records don’t update”

  • Broadcast changes must be on for the table (Settings → Behaviour).
  • Your read rule must allow the row.
  • You subscribed to resource:<table> exactly.
  • If the change came from SQL, turn on Capture changes made outside the API.

”Disconnects every few minutes”

A proxy closing idle connections. Check the heartbeat (default 25 seconds) is shorter than the proxy’s timeout, or use Server-Sent Events. Watch Connections in Studio for churn.

”Works locally, not in production”

Rules and channel patterns belong to an environment. Make sure the rule exists in production, and that the client uses the production key.

”Too many connections”

Clients that never unsubscribe, or open a client per component. Create one client and reuse channels; disconnect on sign-out. A Subscriber limit on the rule caps a channel.

”Rate limit hit”

Publish rate limit (per second) on the rule. Throttle noisy events on the client, or raise the limit.

Collect this when asking for help

The channel name, the matching rule (screenshot Channels), who was signed in, the error code, and the connection id from Connections.

Monitoring

Read the numbers.

Debugging rules

Which rule decided.