Multiplayer

Roster, chat, private scores.

An empty members list is incomplete, not everyone left. Leaderboards are project-scoped, not a public ranking.

Presence

  • Replace the roster only when membersComplete is true, or when that flag is omitted and members is non-empty.
  • membership is ready only when the local player is on a complete roster.
  • membershipRevision increases for a real join or leave, not a recovered interruption.

Chat

await client.sendChat("ready", "lobby"); // or "match"

Bind the overlay’s loki-chat-send event to this. Do not log chat bodies.

Private scores

await client.submitScore("season-1", 1200, 0);

Not an anti-cheat boundary.