Skip to main content
This page is the demo

Haptics.
The sink makes the buzz.

A wai.haptic.signal carries a few hundred bytes — a keyframed intensity / sharpness envelope, the pair every actuator API maps to — not a recorded waveform. Your device reconstructs the per-sample signal with the same deterministic Rust engine (compiled to WASM) that made the conformance corpus, and checks its BLAKE3 against the corpus's expected hash: sample-equivalence, touch's counterpart of replay-equivalence. Press play — if a gamepad is connected you'll feel it; otherwise watch the envelope.

channels rate Hz dur signal hash actuator

Touch as instructions

An effect is a keyframed envelope — kilobytes at most. The sink reconstructs it and drives whatever actuators it has (gamepad rumble, phone vibration). Lever 3 for the third sense.

Sample-equivalence

Reconstruction is bit-exact: the wai.det.fixed64 floor, linear interpolation, integer quantization — and trig-free by construction (intensity + sharpness, not a modulated carrier), so the floor needs only + − × ÷. The hash in the HUD equals the one in haptic-conformance/expected_hashes.json, on any machine.

One floor, three senses

The same fixed-point floor and conformance discipline as worlds (replay), spatial audio (mixdown), and now haptics (sample). Sight, hearing, touch — one standard, three -equivalences, no reinvention.

Reference engine + conformance corpus in the open-standards repo; Apache-2.0. A sink with no actuators surfaces the envelope visually — presentation, not conformance.