Quest’s web browser now has experimental support for automatic colocated WebXR, meaning sessions involving multiple headsets in the same space.
Currently, practically achieving colocation in WebXR requires manually touching a shared reference point with either controllers or hands.
Version 39 of the Horizon OS web browser, “rolling out” now, adds a new Shared Spaces experimental setting, and enabling it lets WebXR pages automatically create a shared coordinate space among headsets in the same room.
Rik Cabanier, an engineer on Meta’s browser team, shared a short example clip of the new experimental feature in action, alongside a GitHub sample showing developers how they can use it.
The sample uses PeerJS for local networking between the headsets, and you can test it out on your own Quest at the URL sharedshooter.arvr.social.
Here’s Cabanier’s explanation of how the Shared Spaces feature works from a developer perspective:
* Each shared space is bound to size of a room. The headsets further away from each other will not be able to join in, but may begin to do so if the headsets get close. If you have a URL like ‘bar.com/a.html,’ it will be impossible for ‘bar.com/b.html to view the shared space. Each will have a separate space with uuid. The browser will display a default space until then. After the correct one is established, the
reset
event will be called on the shared space and a new coordinate system and UUID will be established. No reset is created if the headset went immersive first. When restarting a WebXR session, participants will be able establish a shared coordinate system. The shared coordinate system will disappear when the participant leaves WebXR. It may be possible to recover it but we need more developer feedback on a good API shape for this.
There is a major limitation with this new Shared Spaces feature though: it only works between Quest headsets.That’s because the feature leverages Meta’stechnology under the hood, and there currently is no vendor-neutral OpenXR extension for this. It’s also true for native apps, not only WebXR. Apple Vision Pro for instance, does not have any shared anchors. Pico uses its own system of shared anchors.