Current clients subscribe to character presence in their current place and, when supported, the single destination of its authored window. Crossing a gateway updates membership on the same connection; returning recreates nearby travelers without retaining obsolete actor entities. The room-wide traveler count stays visible, and shared interactions and chat continue across places.
#Try it
- On
codex/engine-foundations, runnpm ciandnpm run dev:editor. Open the private editor link printed by the launcher. - Create a Quiet studio, use Add place… to add a Courtyard, Save, then start/apply the development room. Open its player link in two separate browser profiles.
- Walk one traveler through Travel to Courtyard. Press F2 in the other: Players remains 2, Nearby travelers becomes 0, and Peer interest reads Current place.
- Send chat from either place. Both travelers receive it. Join the traveler in the Courtyard; Nearby travelers becomes 1 and their character appears again.
- Repeat crossings, then close the original host’s browser. The remaining traveler stays connected and becomes room host. Reopening/reconnecting retains shared progress.
Automated acceptance: npm run test:browser:interest. It creates an isolated production build and room, exercises live arrival edits while travelers are separated, repeated real gateway crossings, forced socket reconnect and host departure, and captures actual relay envelopes. Run creator browser commands separately so each gets a fresh world. The existing connected-place workflow is npm run test:browser:places.
#Contract and limits
Protocol 4 negotiates optional placeInterest: 1. Old clients keep whole-room snapshots, and new clients fall back when an old relay does not acknowledge it. Scoped snapshots are complete replacements with a per-connection increasing sequence; a skipped sequence does not require resync. Diagnostics/export distinguish total room players from received peer rows.
Shared gameplay snapshots, chat and route clocks stay global. A scoped elected browser gets actors in each interaction’s place alongside that request, allowing occupancy checks even when the host is elsewhere. This is still the trusted cooperative browser-authority profile. Place interest is a transport/lifecycle improvement, not a privacy boundary or proof of honest movement.
The existing eight-player cap is unchanged. The socket fixture compares serialized peer views for three players split across two places; this measures that fixture’s payload size, not throughput or large-room capacity. Portal destination subscriptions now use the server-derived, one-hop contract described in the protocol. Persistent rooms use committed crossings, including resolved anchored gateway reach. The player projects the current place and one independent portal destination: a received destination actor appears only inside that window, never at the same coordinates in the source room. Source/destination graphics stage together during travel and shared revisions. Broader asset streaming, per-place authority and cross-host travel remain unfinished. Character art is reserved for the final polish pass.
For an authored window, F2 reports Current place + window destination while Nearby travelers still counts only the current place. Separate Portal views and Portal travelers metrics report the rendered destination. The browser window-authoring journey checks two separated travelers in both graphics placements, live publication and rejection, current-place actor isolation, forced reconnect and device/simulation recovery. See visible portals.