Skip to main content

Presence

Sync online state on a channel. Adding .on("presence", ...) enables receiving updates. track() makes this client visible to other subscribers that have Presence enabled.

const channel = realtime.channel("presence-test", {
config: {
presence: { key: "user-1" },
},
});

channel.on("presence", { event: "sync" }, () => {
console.log("online users", channel.presenceState());
});

channel.on("presence", { event: "join" }, ({ newPresences }) => {
console.log("joined", newPresences);
});

channel.on("presence", { event: "leave" }, ({ leftPresences }) => {
console.log("left", leftPresences);
});

channel.subscribe(async (status) => {
if (status !== "SUBSCRIBED") return;
await channel.track({ user_id: 1, name: "Ada" });
});
Note

config.presence.enabled (or adding a Presence listener) only controls whether this client receives other clients' state. It does not affect whether track() is visible to others. Without it, presenceState() stays empty on this client.