DocumentationCore Protocol

Presence

Track who's online with arbitrary metadata. Perfect for "user is typing", cursor sharing, and online status indicators.

Server

const server = new PPServer({
  port: 3000,
  presence: { syncInterval: 1000 }, // Broadcast every 1s
});

server.on("connection", (client) => {
  // Track with arbitrary metadata
  server.presence.track(client, {
    name: "Alex",
    status: "online",
    cursor: { x: 0, y: 0 },
  });

  // Update metadata
  client.on("message", (msg) => {
    if (msg.type === "cursor") {
      server.presence.update(client.id, {
        cursor: msg.payload,
      });
    }
  });
});

// Listen for changes
server.presence.onChange((presences) => {
  console.log(`${presences.length} users online`);
});

// Auto-untracked on disconnect

Client

// Presence list auto-synced
client.on("presence", ({ presences }) => {
  for (const p of presences) {
    console.log(p.data.name, "is", p.data.status);
    renderCursor(p.data.cursor);
  }
});

Back to: @painda/core