Skip to main content
Demo · In the standard

Haptics.
The sink makes the buzz.

A wai.haptic.signal carries a keyframed intensity / sharpness envelope, 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. The sink is a computer: it reconstructs the signal and drives whatever actuators it has, such as a gamepad rumble or a phone's vibration motor.

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 fixed-point floor

Worlds, spatial audio, haptics, state feeds and avatars each define an equivalence over integer state, checked against a published conformance corpus (for a sound scene, given its sources' decoded samples).

The haptics extension, its reference engine and its conformance corpus are in the open-standards repo under Apache-2.0. The signals this tab reconstructs are the corpus files. A sink with no actuators shows the envelope visually, which is presentation, not conformance.

Read the haptics extension text on this site.