Skip to main content
This page is the demo

Interactive worlds.
The sink makes every frame.

What arrived over the wire is not video. It is a wai.world.* payload — a tick-0 world plus Ed25519-signed operations, a couple of kilobytes. Your device re-derives every frame locally, in WebGPU, with the same Rust engine native sinks run. In the playground, this tab is a signed actor: click to shove the tower, open the page in a second tab and shove from both — the tabs converge on the identical BLAKE3 state hash because the math does, not because a server says so. The sealed replay vectors end by verifying their hash against the publisher's signature.

sim tick 0 / 0 nodes 0 state hash payload 0 B actors sync receipt assets

One engine, every sink

This is not a JavaScript port. The wai reference crate compiles to wasm32 with the codec chain off; the browser binds the identical simulation code that generated the conformance corpus. State is exact Q32.32 fixed-point — f32 exists only on the way to the GPU.

Replay-equivalence, observed

Conformance for interactive cargo is the temporal generalization of bit-exact decode: same world + same ops → the identical BLAKE3 state hash at every checkpoint, with no tolerance parameter. The hash in the HUD above equals the one in world-conformance/expected_hashes.json — wasm in your browser and native silicon agree byte for byte.

Stress is computed, not animated

In truss_fracture, two actors pull the same member in opposite directions at the same tick. Both impulses act — the SUM conflict rule feeds the solver — the member's strain exceeds its yield, and it snaps. Structural failure as a position-based-dynamics consequence, identical on every machine that ever replays it.

Presentation is the sink's choice. The same scene carries two content-addressed, hash-verified assets: gallery renders a wai.mesh.glb as a solid PBR cube; gallery (splats) decodes a real Niantic-SPZ wai.splat.spz — gunzipped and unpacked in-tab (positions, scales, smallest-three quaternions) into sorted, alpha-blended anisotropic Gaussians. The SPZ file was produced by the field's SPZ library, the codec WAI dispatches to. Neither rendering touches the state hash; a Gaussian splat is presentation bound to a node the sim moves, exactly where glTF sits. The seal & receipt carry an exact, signed work_steps and a separately-carried energy figure. This browser tab can only estimate joules (wall-clock × a declared coefficient, labeled as such); a native sink measures real CPU energy with no sudo — Apple-Silicon SoC counters via IOReport, x86 via RAPL — which is what the reference wai_world_meter reports. Joules are always derived from measurement or a stated model, never asserted.
Read the sub-spec: extensions / interactive-worlds  ·  capabilities wai.world.scene / replay / live + asset media wai.mesh.glb  ·  Apache-2.0, reference engine and conformance corpus in the open-standards repo.