A Puck.js is a 36 mm disc with a CR2032 coin cell, made by Espruino, that runs a JavaScript interpreter and talks Bluetooth LE. The reference is espruino.com/Puck.js.
What it has
| Puck.js v2.1 | |
|---|---|
| Chip | nRF52832, 64 MHz Cortex M4 |
| RAM | 64 kB, for code and data together |
| Flash | 512 kB; about 40 kB free for the Storage module on the standard firmware, about 96 kB on the minimal one |
| Accelerometer and gyro | LSM6DS3TR-C, with a step detector, movement, significant movement and tilt detection at about 40 to 50 uA |
| Magnetometer | MMC5603NJ: a field reading, or a reed switch (a door, a drawer) |
| Temperature | PCT2075TP, calibrated |
| Light | read from the red LED, uncalibrated, 0 to 1 |
| Also | battery level, a button, red, green and blue LEDs, IR transmit, NFC tag, capacitive sense on D11, a MOSFET output |
What it can keep: hourly step counts as 2-byte numbers are 48 bytes a day, so 40 kB holds about two years of them; per-minute counts about two weeks. Raw accelerometer readings fill it within minutes.
Memory for code
On firmware 2v29 a Puck.js v2.1 has 2,630 memory blocks for code and data together, 2,562 free after reset() (measured 2026-10-20). Espruino keeps a function’s source in RAM, so what code costs is set out in Firmware Build.
Power
Espruino’s figures: about 3 uA doing nothing, 40 uA advertising, 600 uA while connected, 1 to 2 mA per lit LED, about 350 uA with the accelerometer streaming at 12.5 Hz, and 40 to 50 uA with its own step, movement or tilt detection. So a module lets the accelerometer do the detecting, keeps the LEDs dark, and stays disconnected.
Firmware
Updated over Bluetooth with Nordic’s Device Firmware Update app on a phone: the stable espruino_2vXX_puckjs.zip from espruino.com/Download, the Puck put into bootloader mode by holding its button while the battery goes in (the green LED stays lit), then the app’s device DfuTarg. The Web IDE’s flasher was unreliable on Windows. A v2.0 must never take firmware 2v04 or older; a v2.1 is unaffected.
Power is the battery: there is no switch. Taking it out and putting it back resets the Puck, and anything not saved to flash is gone.