puck

apps that travel between tiny computers.

Every app below is running for real, compiled to WebAssembly, in the browser: not a recording, not a mockup. puck is a device-agnostic emulator, a set of self-contained device packs, and a set of portable app bundles; this page proves the porting story with the real thing.

chrono panel capture

chrono

A full-screen stopwatch: six seven-segment digits, two buttons, nothing else on screen.

faithful port · pixel-exact
fluidbox panel capture

fluidbox

A particle liquid that sloshes and settles inside the device's own enclosure shape.

adaptation · invariants

proof matrix

Each cell is a real build of that app's own port, for that device pack's real firmware, verified by the shared harness and running live below.

RP2350-Touch-AMOLED-1.8 ESP32-S3-Touch-AMOLED-1.8
chrono faithful portpixel-exact faithful portpixel-exact
fluidbox adaptationinvariants (degraded) not ported

reference app

Not a port: each device pack's own shipped app, run through the same emulator.

ESP32-S3-Touch-AMOLED-1.8: demo

A bouncing square: the pack's own reference app, proving its band-render contract with nothing borrowed from another device.

how it works

device packs

A self-contained folder for one hardware target: real drivers, a real board's firmware, and a device.json descriptor the emulator reads at runtime. Nothing in the shared instrument names one device; every panel size and button comes from the pack itself.

device-pack.md

app descriptors

An app is defined by its descriptor and traces, not by one implementation's source code: what appears on screen, every interaction, and separate requirements from preferences. A port starts with a verdict against the target pack, stated plainly, before any code is written.

app-bundle.md

the verifier

A faithful port replays its traces and compares frames pixel for pixel. An adaptation states behavioral invariants instead, and gets checked against those. Either way, the same shared harness decides, not a claim in a README.

harness.md