# Connected places and gateways The engine development branch can add a connected place without replacing the existing world. This is a creator and shared-play increment; the full roadmap remains open. ## Try it 1. Run `npm run dev:editor` and open the editor URL printed by the launcher. Keep its private key private. 2. Finish or discard any pending edit. Use the place picker to choose your starting place, then click **+ Add a place**. 3. Name the new place and choose **Preview connected place**. It starts as a sunlit studio with a solid floor. The current place gains an outgoing stone-and-brass gateway at the centre of the editor view; the new studio gets a return gateway near its entrance. 4. Inspect the preview, then **Save** and **Apply to shared room**. Open the development room in two separate browser profiles. Existing travelers remain where they were when the new place is applied. 5. Walk within reach of the green gateway light and press **E**. Each traveler can move between places independently. Return travel arrives at the original place's entrance; walk back to the outgoing gateway to travel again. 6. Select a gateway's light object and choose **Gateway…** to edit its destination, interaction prompt, local interaction point or reach. Any unbound static object can become a gateway with **Add gateway…** once another place exists. Preview, Save and Apply publish the change. The gateway frames are ordinary editable grouped objects. Move them away from existing scenery if their initial placement overlaps it. Travel is an interaction at the light; the other place is not rendered through the arch. ## Removal and undo Choose a non-entry place in the picker and use **Remove current place**. Preview removes its contents and incoming gateway bindings from the draft; the other places' decorative gateway frames remain editable. Discard cancels the preview. Save records the removal and **Undo** restores the exact source, including identities and incoming links, even after an editor reload. Everyone must leave the removed place before Apply succeeds. Rejected Apply leaves the accepted shared world intact. Once the travelers return, apply the saved removal again. The entry place cannot be removed. Places with source-linked arrangements must detach those arrangements first. Protected story entrances and incompatible route/NPC or retained gameplay-state changes may also prevent removal or live activation. ## Contracts and limits - Connected places introduced world format **8**, compiler `gateway-world.8`; [named arrivals](ARRIVAL_POINTS.md) use format 9. Older formats keep their existing compiler identities. Native checkpoint profile remains unchanged. - Transactions add `create-place`, `delete-place` and `set-object-portal`. Prepared commands keep their allocated identities through preview, save and retry. Place lifetime conflicts protect Undo from deleting another editor's later work in that place; unrelated lighting and object edits remain disjoint. - Creator controls allow up to **32 places**. The existing world object, payload and anchored-interaction budgets still apply. Anchored gateways require a static object and a different existing destination. They share the 256 anchored-interaction world limit. - By default, a gateway arrives at the destination's authored entrance, with its collision scene initialized. [Named arrival points](ARRIVAL_POINTS.md) now provide per-gateway landing positions and headings. Visual portals, streaming, per-place authority, cross-host travel and PostgreSQL travel transactions remain future work. - The runtime currently loads the whole world's catalog. This capability does not establish memory or capacity budgets for 32 large places. ## Verification `npm run test:browser:places` runs the isolated production-browser workflow with two travelers. It covers live creation, independent travel, grounded arrival, editing a gateway, occupied-place rejection, safe removal and durable Undo followed by another round trip. The headless suite covers command replay, exact inverses, conflict keys, native checkpoints and occupied simulation removal. See [acceptance evidence](evidence/place-authoring-acceptance.json).