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