Nostr Onchain
Free, open-source firmware that turns an off-the-shelf ESP32 touch-screen board into a Nostr and Bitcoin signer. Your keys live on the board. Every Nostr event and every Bitcoin transaction shows up on its screen and is signed only when you tap Approve.
The keychain-sized one. Plug it into a computer or phone over USB-C and it shows up as a small network device. No WiFi, no drivers.
http://10.77.7.1pocket-signer-s3-…binThe bigger screen. It joins your WiFi and talks to Nostr relays directly, so it can sign for a phone or laptop anywhere on your network.
http://pocket-c6.localpocket-c6-…binbunker:// link. The key never leaves the board.python3 -m pip install esptool
Get the files for your board from the latest release. On a brand-new board, use the full image. To update a board that already has your keys, use the app image (step 7).
Download SHA256SUMS.txt too, and check your download against it:
shasum -a 256 -c SHA256SUMS.txt --ignore-missing
Find its port:
ls /dev/cu.usbmodem*ls /dev/ttyACM*COM portReplace PORT with the port you found. For a new board:
ESP32-S3
python3 -m esptool --chip esp32s3 --port PORT write-flash 0x0 pocket-signer-s3-full-v1.2.0-ERASES-KEYS.bin
ESP32-C6
python3 -m esptool --chip esp32c6 --port PORT --baud 921600 write-flash 0x0 pocket-c6-full-v1.2.0-ERASES-KEYS.bin
When it finishes, unplug the board and plug it back in. The Pocket Signer screen should come up.
http://10.77.7.1. A new board says "No keys yet". Generate
a key on the board, or import one from microSD.PocketC6 (password nostronchain). Open
http://192.168.9.1 and pick your home WiFi. Then, on the
board, go to Accounts → + to generate a key or enter seed words.To import keys from microSD, put
nostr-keys.json or nostr-keys.txt in the root of
the card. Then go to Accounts → Import on the board. Every import and every
backup needs a tap on Approve.
Back up every key you generate, by writing down its seed words or exporting it to microSD. If the board is lost or wiped, the backup is the only way back.
http://10.77.7.1/bridge; on the C6 it's
http://pocket-c6.local/bridge, or scan the QR under Settings → Connect.bunker:// link.The S3 also works with the Signer Link extension for logging in to any Nostr site through your browser.
Flash the app image at 0x10000. It replaces the firmware and keeps your keys.
python3 -m esptool --chip esp32s3 --port PORT write-flash 0x10000 pocket-signer-s3-app-v1.2.0.bin python3 -m esptool --chip esp32c6 --port PORT --baud 921600 write-flash 0x10000 pocket-c6-app-v1.2.0.bin
…ERASES-KEYS.bin file or run erase-flash on a board
with keys you haven't backed up.Want to build from source? The firmware repo has the Arduino build settings for both boards.
No. Keys never cross the network, only signatures do. The board also rejects requests from other websites, so pages you visit can't even read your public key without your approval.
Restore your keys onto a new board from your backup (seed words or microSD export). Treat an unlocked board like cash.
It produces real, valid signatures. As with any young signer, start with small amounts and check everything on the screen before you approve.
Only the two boards above for now. The firmware depends on each board's screen, touch controller and SD wiring.