Nostr Onchain
Free firmware · ESP32

Pocket Signer

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.

Boards that run it

Waveshare ESP32-S3 Touch AMOLED 1.8

ESP32-S3USB-C link

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.

  • Screen1.8" AMOLED touch, 368 × 448
  • ConnectsUSB-C network link, http://10.77.7.1
  • Works withSigner Link extension, NIP-46 bunker
  • Storage16 MB flash, PSRAM, microSD slot
  • Firmwarepocket-signer-s3-…bin
View at Waveshare ↗

Waveshare ESP32-C6 Touch AMOLED 2.16

ESP32-C6WiFi

The 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.

  • Screen2.16" AMOLED touch, 480 × 480
  • ConnectsWiFi, http://pocket-c6.local
  • Works withNIP-46 bunker over relays
  • Storage16 MB flash, microSD slot
  • ExtrasDice + voice + chip entropy for new seeds
  • Firmwarepocket-c6-…bin
View at Waveshare ↗
We don't sell hardware. Buy the board from Waveshare or any electronics shop that stocks it. The exact model matters, because the firmware is built for each board's screen, touch and SD-card wiring. Other ESP32 boards will not work. A microSD card is optional but useful for key backups and air-gapped PSBT signing.

What it does

Real signatures, on-deviceBIP-340 Schnorr signatures computed on the board with hardware-entropy nonces, self-verified before they leave.
Tap to approveEvery event and transaction is shown on screen. Nothing signs without a tap.
Bitcoin PSBT reviewTaproot PSBTs are parsed on the board. You see the outputs, amounts and change before you approve, on XBT or BTC.
NIP-46 bunkerLog in to nostronchain.com or any Nostr client with a bunker:// link. The key never leaves the board.
Many accountsUp to 21 keypairs. Generate them on the board, or import from microSD, and switch on screen.
Air-gap optionSign PSBTs from a microSD card with no network connection at all.

Flashing guide

  1. Get what you need

    • One of the supported boards.
    • A USB-C data cable. Charge-only cables are the most common reason flashing fails.
    • A computer with Python 3. Install the flashing tool with:
      python3 -m pip install esptool
  2. Download the firmware

    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
  3. Connect the board

    ESP32-S3Hold the BOOT button, plug the board in, then let go. The board is now waiting to be flashed.
    ESP32-C6Just plug it in. It switches into flashing mode by itself.

    Find its port:

    • macOS: ls /dev/cu.usbmodem*
    • Linux: ls /dev/ttyACM*
    • Windows: Device Manager → Ports, look for a new COM port
  4. Flash it

    Replace 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.

  5. Add your keys

    ESP32-S3With the board plugged in, open http://10.77.7.1. A new board says "No keys yet". Generate a key on the board, or import one from microSD.
    ESP32-C6On your phone or laptop, join the WiFi network 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.

  6. Log in to nostronchain.com

    • Open the bridge page. On the S3 that's http://10.77.7.1/bridge; on the C6 it's http://pocket-c6.local/bridge, or scan the QR under Settings → Connect.
    • Tap Enable background mode first, then copy the bunker:// link.
    • On nostronchain.com, choose Login with Bunker. If you're already signed in, use Settings → Accounts → Add account → Bunker (NIP-46).
    • Approve the connection on the board. From then on, every note and every transaction is approved on its screen.

    The S3 also works with the Signer Link extension for logging in to any Nostr site through your browser.

  7. Updating later

    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
    Full images erase your keys. Never flash a …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.

FAQ

Can a website steal my keys?

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.

What happens if I lose the board?

Restore your keys onto a new board from your backup (seed words or microSD export). Treat an unlocked board like cash.

Does it work with real funds?

It produces real, valid signatures. As with any young signer, start with small amounts and check everything on the screen before you approve.

Will it run on my other ESP32 board?

Only the two boards above for now. The firmware depends on each board's screen, touch controller and SD wiring.