Live updates
Chat is not a guaranteed sub-100ms pub/sub fabric. It is an in-product messenger that stays current while a tab is open.
Hosted
The widget opens GET /api/v1/stream (SSE) with the publishable key. Allowed origins still apply. The stream is app-scoped, so inbox unread updates even while a thread is open. Events already refresh the inbox. While the stream is healthy, the widget only heartbeats about every 20 seconds. If there is no subscribe, EventSource fails, or the connection reports stream.error, it polls every 4 seconds. That fallback is intentional, not a bug.
BYO
Optional adapter.subscribe should return an unsubscribe function. If you omit it, poll your own list endpoints. Bootstrapware does not open SSE to your API.
Browser notifications
Separately from in-tab live updates, Notify (default off) can show a system notification for a hidden-tab message.created from someone else. Visible tabs, self messages, opted-out, and denied permission do not. Load never prompts. See React component.
Local
createLocalAdapter uses BroadcastChannel so two tabs in the same browser can see each other. That is demo-only.
Component props: React component.
Related: React component · Origins · Limits · Adapter