Skip to content

zblauser/tempo

Repository files navigation

Tempo

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.

Tempo — a running two-player clock, top display rotated for the far player

Presets, custom builder, share link Bind any key or controller Themes and custom colors

Why it's different

  • 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.js is 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.

Drive it from anything

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.

Use it

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.

Hack on it

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 truth

No build step, no dependencies. engine.js is the reference core; conformance.js + vectors.json are its contract.

License

MIT © 2026 Zachary Blauser

About

A chess clock: free, offline, installable PWA. Deterministic engine you can build your own clock on.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors