Technology
How Web Wide Worlds works, what it supports, and what you can build with it.
Built on the Web
Web Wide Worlds extends the existing web to support interactive 3D worlds. A world is a set of files — markup, scripts, and assets — served over HTTP at a URL. You open it in a world browser the same way you open a web page in a web browser.
It uses the infrastructure that already exists: HTTP for transport, URLs for addressing, standard web servers for hosting, DNS, TLS, CDNs. No proprietary protocols. No special hosting required. If you can host a website, you can host a world.
Read the White PaperThe Web, Extended to 3D
Web Wide Worlds follows the same model as the web. These are not metaphors — it literally uses the same stack.
| Web | Web Wide Worlds |
|---|---|
| HTML | VEML — markup that describes structure |
| JavaScript | JavaScript — same language, sandboxed in the world browser |
| Web browser | World browser (WebVerse) — renders the world |
| Web server | Any web server — Apache, Nginx, GitHub Pages, S3 |
| URL | URL — same addressing, same DNS |
| CSS | Materials, shaders, and lighting defined in VEML or assets |
Start Simple, Grow as You Need
A world can be a single file on GitHub or a full server deployment with custom plugins. You start wherever makes sense and grow without switching tools — the world definition, client, and protocols stay the same at every level.
Files in a git repo — VEML, assets, and scripts. Fork a template, edit, push. WebVerse loads it directly. No servers, no cost. Single-player or view-only multiplayer.
What you need: A GitHub account (or any static file host).
What changes alongside: Nothing. The world is self-contained.
Same world, plus a synchronizer URL in the VEML metadata. Visitors see each other and share state in real time. No server code to write — just add an address.
What you need: A WorldSync address (from WorldHub, community-shared, or self-hosted).
What changes alongside: A sync service runs somewhere. Your world files stay the same.
A WorldOS instance with off-the-shelf plugins. Persistent world state, physics authority, scripted NPCs, inventory systems. You configure plugins rather than writing them.
What you need: A WorldOS deployment — via WorldHub, a third-party host, or self-hosted Docker.
What changes alongside: A server runs WorldOS with your chosen plugins. World files still unchanged.
Write your own WorldOS plugins in JavaScript/TypeScript or Python. Custom economies, quests, procedural generation, AI NPCs, external API integrations. Real engineering, but inside a stable plugin architecture with process isolation and MQTT communication.
What you need: WorldOS and the plugin SDK.
What changes alongside: Your custom plugins run as isolated processes alongside existing ones.
Run your own server implementation speaking the protocol. Forked WorldOS, new implementation, authoritative simulation — whatever the project demands. The ceiling is removed because the protocol is open and everything is MIT-licensed.
What you need: Engineering resources and the open protocol spec.
What changes alongside: Everything on the server side. Client and world definition stay constant.
The world definition, the client (WebVerse), the protocols, and the social layer (WorldHub) are constant across all levels. Only what runs alongside the world changes as you grow.
Formats and Standards
Web Wide Worlds builds on established, open standards. Here is what it reads, writes, and connects to.
Content Formats
| VEML | Native world markup (XML-based, version 3.0) |
| glTF / GLB | 3D models, materials, animations (Khronos Group) |
| X3D | 3D scenes and worlds (Web3D Consortium) |
| OMI glTF | Interoperability extensions for physics, audio, spawning (Open Metaverse Interoperability Group) |
| USD | Universal Scene Description — supported via the VEML Blender plugin and in WorldOS deployments (Alliance for OpenUSD) |
| JavaScript | World scripting — standard JS, executed in a sandboxed interpreter (JINT) |
Protocols and Runtimes
| HTTP / HTTPS | World hosting and asset delivery |
| MQTT | Pub/sub messaging for sync and server logic (OASIS standard) |
| WebSocket | Real-time bidirectional communication |
| OpenXR | XR runtime abstraction — Quest, SteamVR |
| WebXR | Browser-based XR via WebVerse Lite |
| REST | Open API endpoints for services and tooling |
How a World Is Defined
A world has two parts: VEML markup defines the structure, and JavaScript adds behavior.
VEML — Structure
VEML (Virtual Environment Markup Language) is an XML-based schema for describing 3D worlds. It defines entities, their positions, lighting, terrain, sky, and synchronization — all in a human-readable, declarative format.
Entity types include mesh, character, light, terrain, text, canvas, HTML overlays, buttons, water, and vehicles. Each entity has position, rotation, and scale as child elements.
<veml>
<metadata>
<title>My World</title>
<capability>javascript</capability>
<script>scripts/init.js</script>
</metadata>
<environment>
<background>
<color>white</color>
</background>
<entity xsi:type="mesh" tag="tree">
<transform xsi:type="scaletransform">
<position x="0" y="0" z="5" />
<rotation x="0" y="0" z="0" w="1" />
<scale x="2" y="2" z="2" />
</transform>
<mesh-name>tree.glb</mesh-name>
<mesh-resource>tree.glb</mesh-resource>
</entity>
</environment>
</veml>VEML Documentation →JavaScript — Behavior
Standard JavaScript adds interactivity to worlds. Scripts run inside a sandboxed interpreter (JINT) in the world browser — they cannot access the host system.
The World API provides globals for working with entities, input, networking, and world state: Entity, World, Input, HTTP, MQTT, WebSocket.
// Create a cube and make it interactive
var pos = new Vector3(0, 1, 3);
var rot = new Quaternion(0, 0, 0, 1);
var color = new Color(0.2, 0.6, 1, 1);
var box = MeshEntity.CreateCube(
null, color, pos, rot, null,
"onBoxLoaded"
);
function onBoxLoaded(entity) {
entity.SetVisibility(true, true);
entity.SetInteractionState(
InteractionState.Physical
);
}World API Reference →How Multiplayer Works
WorldSync
The networking layer is pluggable — any service that implements the sync protocol can provide real-time state replication. WorldSync is the reference implementation, built on MQTT publish/subscribe.
WorldSync handles position tracking, entity ownership, state replication, and transform interpolation across connected clients. To make an entity multiplayer in VEML, add a <synchronizer> child element pointing to a sync address.
Other sync mechanisms are possible — the architecture doesn't lock you into a single transport or protocol.
WorldSync details →Declarative Sync
Adding multiplayer to a VEML entity:
<entity xsi:type="cubemesh"
tag="shared-block">
<transform xsi:type="scaletransform">
<position x="0" y="1" z="0" />
<rotation x="0" y="0" z="0" w="1" />
<scale x="1" y="1" z="1" />
</transform>
<synchronizer>main</synchronizer>
<color>blue</color>
</entity>The world's metadata specifies the sync service address:
<metadata>
<synchronizationservice
type="vss"
address="wss://sync.example.com"
id="world-123"
session="main" />
</metadata>Server-Side Logic: WorldOS
A plug-and-play server framework for composing world backends from independent plugins.
Architecture
WorldOS is built around an MQTT message bus (Mosquitto). Everything beyond the bus is a plugin — a separate process that subscribes to topics, processes messages, and publishes results. Plugins are isolated from each other: if one crashes, the rest keep running.
Plugins can be written in any language. The framework provides SDKs for Node.js/TypeScript and Python. Plugins can also run as Docker containers or native binaries. Each plugin declares its MQTT topics in a manifest file (wos-plugin.yaml).
There are two plugin lifecycle models: persistent plugins run for the server's lifetime and are health-checked periodically. Transient plugins spin up on demand when a matching message arrives, then terminate after completing their task.
WorldOS details →What Plugins Do
A plugin is any process that communicates over MQTT. Examples of what plugins handle:
- World state management and entity persistence
- ROS 2 robotics integration (via rosbridge protocol)
- Docker container lifecycle management
- USD scene interaction
- User identity and authentication
- Messaging, presence, and asset management
- Custom game logic, AI agents, terrain generation
Example Topics
wos/ros2-bridge/cmd_vel wos/container-manager/start world/zone01/enter world/crate_01/trigger/open worldsync/user/position
Plugins communicate through topics without knowing about each other. You compose a world server by choosing which plugins to run.
What It Connects To
Bridges and integrations that exist today, and the systems they connect.
3D Pipelines
Import glTF/GLB models from Blender, Maya, or any 3D tool. Author VEML worlds directly in Blender with the VEML Blender plugin. Work with USD scenes through the Blender plugin or WorldOS.
Existing Games
Minecraft worlds can be ingested and rendered in WebVerse. Cities: Skylines 2 worlds can be bridged into the ecosystem. The system acts as an interoperability layer between platforms.
Robotics and IoT
ROS 2 systems connect through the rosbridge protocol plugin in WorldOS. Any MQTT-connected device — sensors, actuators, automation systems — can publish and subscribe to world topics.
Web Services
The JavaScript World API includes HTTP, MQTT, and WebSocket clients. Worlds can call REST APIs, stream real-time data, and integrate with external services.
Open Standards
Built on glTF (Khronos), MQTT (OASIS), OpenXR, WebXR, and OMI glTF extensions. These are established standards maintained by their respective organizations.
Your Systems
WorldOS plugins can bridge any system that speaks MQTT, HTTP, or WebSocket. Write a plugin in any language. The bus does not care what is on the other end.
Where Worlds Run
The same world file works across all of these. No changes, no rebuilds.
Desktop
Windows and Mac via WebVerse
Web Browser
Any modern browser via WebVerse Lite (WebGL) — no install
Mobile
Android and iOS
VR
SteamVR and Meta Quest
AR
Quest 3 passthrough via OpenXR
Design Principles
- Use existing web infrastructure — HTTP, URLs, DNS, web servers. Do not reinvent what already works.
- Augment, not replace — extend the web and existing platforms rather than competing with them.
- Leverage what people already have — billions of devices already have web browsers, and every web server can host a world.
- Every layer is swappable — use a different renderer, a different sync protocol, a different server framework. Nothing is mandatory.
- Modular and composable — pick the pieces you need. A world can be a single VEML file or a full WorldOS deployment with dozens of plugins.
- Open source, MIT-licensed — every component. No vendor lock-in. Fork it, modify it, run it yourself.
- No permission required — anyone can build worlds, tools, or infrastructure and participate on equal footing.