Skip to content

Realtime

Realtime is a fanout inside the Cloud daemon: POST …/realtime/publish hands an event (channel, name, JSON payload) to every subscriber connected to that channel right now over GET …/realtime/sse. That is the whole mechanism.

  • Events exist only while the daemon runs and only for subscribers connected at publish time, plus a best-effort in-memory replay of the last 64 events per channel for clients reconnecting with Last-Event-ID.
  • Delivery is at-most-once with no acknowledgement. Nothing is written to any Native directory; a restart drops every subscriber and every buffered event. It is not a Native change feed and not a WAL.
  • The system channel is emitted by Cloud routes after they act — project.woke, project.slept, storage.object.stored, storage.object.deleted, snapshot.created, project.restored — and cannot be published to.
Channel name 1–64 chars: a-z 0-9 . _ -
Event name 1–64 chars: a-z A-Z 0-9 . _ - :
Payload 32 KiB of JSON
Channels per connection 16
Connections per credential 32
Idle stream closed after CLOUDD_REALTIME_IDLE_SECS (300 s) without an event; keep-alive comments every 15 s do not count

Both the owner’s session and a live project key may publish and subscribe. Revoking a key closes its open streams immediately. There is no WebSocket transport, no ordering across channels, and no multi-host fanout: one host, one daemon.