A free, offline chess clock you can drive with anything — taps, a keyboard, an Xbox controller, or a $3 microcontroller. Tournament-grade, installable, MIT.
▶ Try it → tempo.chessclock.workers.dev · Add to Home Screen to install — then it runs with wifi off.
- Drive it from anything. The screen taps a pure engine through one control surface — and so can a keyboard, a gamepad, Web Serial, or Web Bluetooth. Bind any key or controller button in the Remote tab; bindings are device-aware, so two players can each tap a button on their own controller.
- Actually offline. Installable PWA — no backend, no accounts, no tracking. Loads once, then runs with no network. Tournament-safe.
- Real time controls. Fischer, Bronstein, simple delay, sudden death, multi-stage FIDE. Build your own and share it as a link — the whole clock rides in the URL, no server.
- Deterministic engine.
engine.jsis pure and time-injected; a conformance suite of vectors is the spec (a future Zig/WASM core must pass them byte-for-byte). It's a public API you can build your own clock on — hardware buttons included.
Open the Remote tab to pair a device. Defaults below; every key/button is rebindable.
| Transport | How |
|---|---|
| Keyboard | default L / A press each side, Space pauses |
| Gamepad | Xbox / PS4 / any pad — default bumpers (or A/B) press each side, Menu pauses |
| USB (Web Serial) | device writes L R P S X, one char per line, 115200 baud |
| Bluetooth (Web) | Nordic UART Service (6e400001-…-24dcca9e), same bytes |
| Script | Tempo.control.left(), .toggle(), .status() |
Serial/Bluetooth protocol: L press bottom · R press top · P pause/resume · S start · X reset.
No pairing server, no cloud — the transport is the only wire.
Open the link, tap your side after each move. Add to Home Screen to install; once
installed it works fully offline. Web Serial/Bluetooth need a secure context — served
over HTTPS (or the installed app), not a raw file:// open.
python3 -m http.server 8000 # any static server, then open http://localhost:8000
node conformance.js # run the spec — the vectors are the source of truthNo build step, no dependencies. engine.js is the reference core; conformance.js +
vectors.json are its contract.
MIT © 2026 Zachary Blauser



