Presence
PresenceChannel tracks members (users) in a named room. It’s built for
“who’s online” features without polling.
Open a presence room
Section titled “Open a presence room”import { Hub } from "@mountsqli/realtime";
const hub = new Hub();const room = hub.presence("project-7");
room.join({ id: "u1", meta: { name: "Ada" } });room.join({ id: "u2", meta: { name: "Lin" } });
room.members(); // [{ id: "u1", ... }, { id: "u2", ... }]React to changes
Section titled “React to changes”room.onChange((members) => { console.log("now online:", members.map((m) => m.id));});
room.leave("u1"); // fires onChangePresence shape
Section titled “Presence shape”type Presence = { id: string; meta?: Record<string, unknown> };Real-world example
Section titled “Real-world example”Wire it to SSE in the dev server so a browser sees live presence:
// client subscribes to /live/project-7 (SSE); server publishes presence diffsBest practices
Section titled “Best practices”- Key members by a stable user id, not a connection id.
- Always
leaveon disconnect to avoid ghost members. - Store lightweight
meta(name, avatar) — not secrets.
Common mistakes
Section titled “Common mistakes”- Never calling
leave— members linger after disconnect. - Putting sensitive data in
meta.
Related
Section titled “Related”- Overview — the
Hubmodel. - Live Queries — reactive data alongside presence.
