An open, free metaverse layer for the web that already exists. Spec: CC0 (public domain). Code: MIT. No tokens, no registry, no owner.
Hypertext gave every document an address. Hyperspace gives every address a place.
Live: Enter the demo · Whitepaper · Landing page — works on phones and laptops; on a VR headset, open the same URL in the headset browser and press Enter VR.
Any website adds one static file and one line of HTML:
<link rel="world" href="/world.json">{ "hyperspace": "0.1", "name": "My Site" }That's a valid world. Browsers (via hyperspace.js today, natively someday) render it as a
walkable 3D place; links become portals; search engines read its 2D "card"; headsets go immersive
where WebXR exists; phones and laptops walk it in the tab. The metaverse as a layer, not a destination.
This repo's own Pages site declares a
world.json — the site practices what it preaches.
| Path | What it is |
|---|---|
SPEC.md |
The protocol working draft 0.1 — discovery, world.json vocabulary, portals & trust rules, branches, presence, security, accessibility, conformance ladder, physics lexicon |
world.schema.json |
Machine-readable JSON Schema (2020-12) for manifests |
hyperspace.js |
MIT reference viewer/polyfill (requires three.js r147). L2 "Walk" in any browser, L3 "Immerse" where WebXR exists |
docs/hyperspace-demo.html |
The playable demo — four linked worlds in one self-contained ~800 KB file |
docs/whitepaper.html |
The research-grounded explainer: why past metaverses failed, why this design, the July-2026 evidence, adoption roadmap |
examples/ |
Example manifests (minimal, blog, studio) + host-page.html, the complete site-integration recipe |
src/ + build.js |
Demo source (worlds, HUD, styles) and the single-file bundler |
test/ |
Headless verification suite (Playwright, 14 functional checks) + schema validation |
- Phone / laptop: open the live demo. Left half of the screen (or WASD) walks; drag looks; walk into glowing rings to traverse. ◈ Worlds is the Atlas drawer — it can also load any pasted
world.jsonURL. - VR headset: open that same URL in the headset browser (Quest Browser, visionOS Safari, Chrome on Android XR) and press Enter VR. Left stick walks, right stick snap-turns.
- Deep links work:
…#world=observatory&branch=beta
You don't have to wait for the web to adopt the protocol. Paste any URL into the demo's
◈ Worlds drawer (or use the launcher on the landing page),
or deep-link it: …#view=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWormhole.
Pages that publish a world.json arrive natively; every other page gets a world generated live from its
own HTML (spec §3.5) — and it arrives wearing the site's identity: theme-color and og-image palette
tint the room (light sites get light rooms), the site's icon hangs as a sigil by the hearth, its typography
(including its Google Fonts, loaded live) styles the panels, its images become framed pieces on easels,
headings become walls of text, and links become doors — walking through one synthesizes the next page.
Browsing the web as rooms.
Honesty note: a browser tab can't read cross-origin HTML by itself, so Hyperview hops through free public
CORS relays (allorigins → corsproxy, configurable via Hyperspace.corsProxies) until spatial browsers do
this natively. If a page can't be fetched at all, you land in an honest placeholder world that says so.
Inside: the Atrium (hub, ghost travelers, a live flat-web kiosk), the Flatland Gallery (how 2D pages appear in space, plus the Atlas table), the Causal Patch Observatory (walk-on many-worlds branch pads, the observer-effect LOD toggle, a holographic card), and the Reading Room — generated at runtime from a real HTML article. One portal fetches its destination world over an actual URL at traversal time.
- Copy
examples/minimal.world.jsonto your site as/world.json; change the name. - Add
<link rel="world" href="/world.json">to your page head (seeexamples/host-page.html). - Include three.js r147 +
hyperspace.js, callHyperspace.enter()from a button. - Add portals to friends' worlds:
"portals": [{ "href": "https://…", "title": "…" }]— positions optional; unpositioned portals auto-arrange in a ring. - Got a blog? Set
"generator": { "name": "hyperspace:reading-room" }and articles become rooms — headings become wall panels, links become doors. No 3D authoring, ever.
npm install # three@0.147, ajv, playwright (dev only)
npm run build # → docs/hyperspace-demo.html
npm run verify # headless functional suite (14 checks)
npm run validate # schema validation of examplesValue at N=1 · one static file, no server changes · progressive enhancement, never replacement · declarative before programmable · every world projects to a 2D card (stay indexable) · no global map, no land, no scarcity · instancing is many-worlds branches · presence pluggable, identity pseudonymous by default · tiny frozen core, namespaced extensions · and Appendix C of the spec: the list of refusals (no coin, no chain, no land sale, no registry, no required account, no owner).
An unofficial working draft (July 2026), written to be contributed to the open venues — the W3C Immersive Web Community Group, the Metaverse Standards Forum's 3D Web Interoperability WG, and OMI. It builds on, not against, glTF · VRM · OMI extensions · WebXR, and aligns with MSF's "Web of Worlds" direction. Issues, forks, and rival implementations are all welcome; the licenses are the whole permission system.
- Spec text and whitepaper: CC0 1.0 — public domain
hyperspace.js, demo, tooling: MIT- Bundled three.js r147: MIT, © Three.js authors