# SeedSigner

> Source: https://timechain.wiki/wiki/seedsigner · TimechainWiki, the Bitcoin encyclopedia. (note · self-custody)

> SeedSigner is an open-source, do-it-yourself Bitcoin signing device built from a Raspberry Pi Zero, a small 240×240 LCD and a Pi camera — usually under $50 in parts — that signs transactions by exchanging QR codes with a coordinator such as Sparrow. Its defining property is that it is **stateless**: it holds a seed only in memory while powered, wipes everything when the power is pulled, and asks for the seed again at every session, by typing the words or by scanning a SeedQR. That makes it a signing tool rather than a key store, which is why it is most at home as one key in a multisig or as a cheap, verifiable second device. There is no vendor: the project publishes a signed software image and a parts list, and anyone may build or sell the hardware. The trade-offs are the flip side of its design — generic hardware with no secure element, a small screen and thumb-stick, a camera that needs steady power, and a seed that must be re-entered every time.

---

## What this is

**Project**: SeedSigner is a community open-source project, not a company. The software image, the documentation and the reference parts list live at seedsigner.com and in the [official repository](https://github.com/SeedSigner/seedsigner). Reproducible builds have been published since version 0.7.0; the current release as of 2026-09-12 is 0.8.7.

**Hardware**: a **Raspberry Pi Zero** (the Zero 1.3 is the recommended board; Zero W, Zero 2 W and the larger Pi 1–4 and 400 boards are supported), a **Waveshare 1.3″ 240×240 LCD** with a thumb-stick and three buttons, a **Pi Zero-compatible camera**, and a **microSD card** of at least 64 MB holding the software image. Builders add a 3D-printed case — the "Orange Pill", "Open Pill" and "Mini Pill" designs are the common ones. Kits and assembled units are sold by third parties; the project states there are [no official or approved vendors](https://seedsigner.com/hardware) and that sellers should never ship devices with software preloaded.

**Power**: no battery. The board is powered over micro-USB from a phone charger, a laptop's USB port or a power bank. The Pi Zero's two micro-USB ports differ: the one nearest the thumb-stick is power-only and is the one to use. Underpowered adapters cause the camera to misbehave.

**Software**: an image file per board (`seedsigner_os.0.8.7.pi0.img` and siblings) written to the microSD with Balena Etcher, Raspberry Pi Imager or `dd`. The project's instructions verify the download with GPG (the result must read "Good signature") and a SHA-256 checksum (the image line must print `OK`). A "firmware update" is simply re-flashing the card with a newer image. The card can be removed after boot so that nothing can be written to it during a session.

**Stateless by design**: "Temporarily stores seeds in memory while the device is powered; all memory is wiped when power is removed" is the project's own description. There is no secure element and nothing to unlock; the security model rests on the device never touching a network and never keeping a secret.

---

## Who this is for

SeedSigner is a strong fit for:

- **Multisig builders who want an inexpensive, vendor-independent key** — one SeedSigner alongside two commercial devices adds hardware diversity for very little money
- **Holders who want to verify the whole stack** — reproducible builds, an image they can check, and hardware they can inspect
- **Holders who value a stateless signer** — the seed lives on paper or metal (or on a SeedQR card) and the device is a disposable tool; losing or seizing the device reveals nothing
- **Air-gap purists** — the only channel is the camera and the screen; there is no USB data path, no Bluetooth, no NFC
- **Educators and tinkerers** — the device shows every step of seed generation (dice, coin flips, image entropy), SeedQR creation and address derivation

SeedSigner is **less appropriate** for:

- **First-time holders** — assembling hardware, flashing an image and re-entering a seed every session is real friction
- **Holders who want the device itself to hold the key** — it never does; a SeedSigner found in a drawer is empty
- **Frequent spenders** — every session starts by loading the seed and the wallet descriptor
- **Holders who want a secure element or a vendor** — there is neither; support is community documentation

---

## Features and capabilities

- **Seed loading** — type 12 or 24 words on an on-screen keyboard driven by the thumb-stick, with a live list of matching words; or scan a **SeedQR** / **CompactSeedQR** for instant loading. Partial support for Electrum seeds. Eighteen-word BIP-39 seeds are not offered.
- **Seed generation** — dice rolls, coin flips, or the camera's image entropy; the resulting words can be shown, exported as a SeedQR, or used to derive **BIP-85 child seeds**.
- **BIP-39 passphrase** — entered on the device with five keyboards (lower, upper, digits, two symbol sets); the confirmation screen shows the fingerprint before and after.
- **Export xpub** — single-sig or multisig, native segwit, nested segwit or Taproot (legacy and custom derivations if enabled), as an animated UR `crypto-account` QR by default or a static SLIP-132 key.
- **PSBT signing** — scans animated PSBT QRs in UR2, Specter and BBQr encodings; reviews inputs, recipients and change; returns a signed animated QR.
- **Verify address** — scans a coordinator's receive or change address QR and searches the loaded seed's addresses to confirm ownership, reporting the index.
- **Address explorer** — browse receive and change addresses for a loaded seed or a scanned wallet descriptor.
- **Multisig descriptor loading** — scans a wallet descriptor (UR `crypto-output`, Specter JSON or plain text) for address verification and change checking; never retained.
- **Sign message** — for signed-challenge rehearsals.
- **Settings** — network (mainnet, testnet, regtest), enabled script types, QR density, and an optional **persistent settings** mode that stores settings (never secrets) on the microSD.

---

## Tradeoffs vs alternatives

| Dimension | SeedSigner | [Coldcard](https://timechain.wiki/wiki/coldcard.md) Q | [Foundation Passport](https://timechain.wiki/wiki/foundation-passport.md) Prime | [Keystone](https://timechain.wiki/wiki/keystone.md) 3 Pro |
|---|---|---|---|---|
| Price | Under $50 in parts (kits vary) | $249 | $349 | $149 |
| Vendor | None — community project | Coinkite | Foundation | Keystone |
| Stores the seed | No — stateless | Yes (secure element) | Yes (secure element) | Yes (three secure elements) |
| Secure element | No | Yes | Yes | Yes |
| Air-gap channel | QR only | QR + MicroSD + NFC | QR (+ Bluetooth to Envoy) | QR + MicroSD |
| Seed entry | Thumb-stick keyboard or SeedQR | QWERTY keyboard | Touch keyboard, SeedQR, Keycards | Touchscreen keyboard |
| Open source | Fully, reproducible builds | Source-available | Yes | Yes |
| Multisig | Co-signs; never stores the wallet | Stores configs | Stores configs | Stores configs (BTC-only firmware) |

Compared to Coldcard, Passport and Keystone, SeedSigner trades convenience and a secure element for cost, verifiability and statelessness. Compared to a general-purpose air-gapped computer, it is far cheaper and purpose-built. Its closest relatives are the other DIY signers (Specter DIY, Krux), which share the QR model.

---

## Setup and operation

The setup flow:

1. **Source the parts** and assemble the board, screen, camera and case
2. **Download the image** for the board, verify the GPG signature and checksum, and write it to the microSD card
3. **Boot** — insert the card, connect power, wait about 45 seconds for the logo
4. **Generate a seed** (dice, coin flips or camera) or **load an existing one**; record the words on durable media and, optionally, create a SeedQR
5. **Optionally add a passphrase**
6. **Export the xpub to a coordinator** — Sparrow, Specter, Nunchuk, BlueWallet and others read the animated QR
7. **Power off** — nothing remains on the device

The signing flow:

- Coordinator builds the PSBT and shows it as an animated QR
- SeedSigner scans it, shows the amounts, recipients and change, and asks for approval
- It signs and shows the signed PSBT as an animated QR
- Coordinator scans it, finalises and broadcasts

Every session starts with loading the seed (and the wallet descriptor for multisig); the device never remembers either.

---

## Recovery — restoring the wallet on a fresh device

_As of 2026-09-12, checked against the project's own site and repository (linked inline; the button labels are quoted from the release source, since SeedSigner has no printed manual)._ Because SeedSigner is stateless, "recovery" means something different here: there is nothing to unlock and nothing to wipe, and every session is a fresh load of the seed.

### What may be in hand

A Pi Zero board in a case, with a micro-USB cable and possibly a power bank; the microSD card should be in its slot. If the card is missing or blank the screen stays dark and the image has to be downloaded, verified and written for that exact board — a wrong image will not damage the hardware. The device is useless without the written seed words or a SeedQR card; conversely the seed backup alone is enough, because any BIP-39 wallet can load it and any builder can rebuild the hardware.

### Unlocking a device that still holds the seed

It never does. [All memory is wiped when power is removed](https://github.com/SeedSigner/seedsigner/blob/dev/README.md), so there is no PIN, no fingerprint, no wipe counter and no decoy wallet. The only state a device can carry is a settings file on the card if "Persistent settings" was enabled — and settings hold no secrets. If a previous owner left the network set to testnet, the device shows a **Network Mismatch** warning against mainnet paths; the fix is Settings › Advanced › Bitcoin network › Mainnet.

### Wiping the device

Powering off wipes everything. In a session, a loaded seed has a **Discard seed** option that asks "Wipe seed … from the device?". To reset a device whose card might have been tampered with, the project's advice is to zero the microSD and [re-write the release image](https://seedsigner.com/seedsigner-independent-custody-guide/).

### Loading the seed

Main menu › **Seeds** › **Load a seed**, then [**Scan a SeedQR**, **Enter 12-word seed** or **Enter 24-word seed**](https://github.com/SeedSigner/seedsigner/blob/dev/docs/qr_formats.md). Typing uses an on-screen a–z keyboard steered by the thumb-stick, with the matching words listed as the letters narrow. A phrase that fails its checksum stops at a red **Invalid Mnemonic!** screen ("Checksum failure; not a valid seed phrase.") with **Review & edit**. A SeedQR loads instantly; the project's rule is that a SeedQR is [never scanned into a phone or a computer](https://seedsigner.com/seedsigner-independent-custody-guide/), only into the signer. SeedQRs assume the English word list. The **Finalize Seed** screen then shows the seed's eight-character **fingerprint**, and **Done** places it in the in-memory seed list under that fingerprint. Eighteen-word seeds cannot be entered; there is no encrypted backup file and no Shamir option.

### The passphrase

On the Finalize Seed screen, **BIP-39 Passphrase** opens the entry screen with keyboards labelled abc, ABC, 123, !@# and *[]. The **Verify Passphrase** screen shows the text and the line "changes fingerprint" with the old and new fingerprints side by side; leading, trailing or doubled spaces are drawn as a solid block so they cannot hide. Nothing is stored. The fingerprint is how a survivor tells whether the passphrase was needed and right: it must match the fingerprint the coordinator shows for the wallet. A setting can make the passphrase optional, disabled, or required.

### Connecting to Sparrow and confirming the first address

SeedSigner is one of Sparrow's [**Airgapped Hardware Wallet**](https://sparrowwallet.com/docs/airgapped-wallet-qr.html) devices; the computer needs a webcam and nothing else — no driver, bridge or app. On the device: Seeds › the fingerprint › **Export xpub** › **Single Sig** or **Multisig** › the script type (native segwit is `m/84'/0'/0'`) › a privacy warning › the **Xpub Details** screen (fingerprint, derivation path, xpub) › the animated QR. In Sparrow: File › New Wallet › name › Airgapped Hardware Wallet › SeedSigner › **Scan…** › hold the screen to the webcam › **Apply**. Sparrow's script type must match the one chosen on the device. If the webcam struggles, the thumb-stick adjusts the QR brightness and a lower QR density setting helps.

Address check: Sparrow's Receive tab shows the address as a QR; on the device, **Tools › Verify address › Scan address QR**, then pick the loaded seed (or scan the multisig descriptor). A **Checking address** counter runs, and success shows **Address Verified** with "receive address" or "change address" and the index. The script type is detected from the address prefix; a network mismatch is called out on screen. **Tools › Address explorer** lists receive and change addresses for a direct comparison.

### Multisig

SeedSigner co-signs but never keeps the wallet: "As a stateless device, SeedSigner will not retain your wallet configuration information." The descriptor is loaded each session by scanning it — Sparrow's File › Export Wallet › **Specter Desktop** › Show shows a QR the device reads, and UR `crypto-output` and plain-text descriptors are also accepted. The **Descriptor Loaded** screen shows the policy ("2 of 3") and the signing keys' fingerprints and offers address verification. The project's warning is the usual one: a lost cosigner key without the full descriptor means permanently lost funds. See [Multisig setups](https://timechain.wiki/wiki/multisig-setups.md) and [PSBT and wallet descriptors](https://timechain.wiki/wiki/psbt-and-wallet-descriptors.md).

---

## Security considerations

### Strengths

- **Stateless** — no secret survives a power cycle; theft or seizure of the device reveals nothing
- **Fully open source with reproducible builds** — the image can be verified end to end
- **QR-only air gap** — no USB data path, no radio; the attack surface is the camera and the screen
- **Generic hardware** — no vendor customer list to leak, no supply chain tied to one company
- **Seed and descriptor never leave paper** except into the signer for the session

### Known concerns

- **No secure element** — a general-purpose Pi with the seed in RAM during a session; the protection is the air gap and the short session, not tamper-resistant silicon
- **Untrusted hardware sources** — kits from unknown sellers; the project's answer is to flash the image yourself and treat preloaded software as disqualifying
- **The image must be verified** — a survivor downloading a fresh image is trusting the signature check they perform
- **Camera and power sensitivity** — weak adapters produce scan failures that look like device faults
- **Seed re-entry every session** — the seed is exposed on the screen and keyboard more often than on a device that stores it

### Supply-chain integrity

There is no manufacturer to buy from. The project's guidance is to source parts from general electronics suppliers or reputable kit makers, never accept preloaded software, and verify the image signature and checksum before flashing.

---

## Pricing and acquisition

_As of 2026-09-12:_

- **Parts**: the project's own figure is [less than $50](https://seedsigner.com/) for board, screen, camera, card and cable; a case adds a few dollars
- **Kits and assembled units**: from third-party sellers at a markup; the project lists none as official
- **Software**: free, from the repository's release page

---

## Common pitfalls

**Expecting the device to hold the key.** It never does. A SeedSigner without its seed backup is an empty tool.

**Scanning a SeedQR with a phone.** The QR *is* the private key. The project's rule is that it only ever meets the signer's camera.

**Underpowering the board.** A weak adapter or the wrong micro-USB port produces camera errors that are mistaken for a broken device.

**Losing the multisig descriptor.** SeedSigner never stores it; without it, a lost cosigner key is unrecoverable. Keep the descriptor with the seed backups.

**Leaving testnet on.** With persistent settings enabled, a testnet setting survives on the card and produces the wrong addresses; the mismatch warning is the clue.

**Script-type mismatch with the coordinator.** The xpub export and Sparrow's wallet must use the same script type, or the first address will differ with nothing lost.

---

## Tooling and resources

**Project documentation** _(as of 2026-09-12)_:

- seedsigner.com — hardware parts list, software downloads, FAQ, and the Independent Custody Guide
- The official repository — README with verification steps, `docs/seed_qr` (the SeedQR specification), `docs/qr_formats.md`, `docs/recovery.md` (derivation paths and key prefixes)

**Coordinator software supporting SeedSigner**:

- Sparrow Wallet — the project's worked example; airgapped QR flow
- Specter Desktop — the descriptor format SeedSigner reads natively
- Nunchuk, BlueWallet — QR-based single-sig and multisig

---

## Open questions for further development

- Does a stateless, secure-element-free signer belong in a single-sig configuration at all, or only as one key in a multisig where its properties are complementary?
- The project's verifiability depends on users actually verifying the image. How many builders do, and does a signed image from a project without a legal entity change the trust calculus?
- SeedQR turns the seed into a scannable artefact. Does that make backups more robust (instant, error-free loading) or more fragile (a photographable secret)?

---

## Related notes

**The framing context**:

- [Hardware wallets overview](https://timechain.wiki/wiki/hardware-wallets-overview.md) — the framework SeedSigner is evaluated against
- [Self-custody configuration ladder](https://timechain.wiki/wiki/self-custody-configuration-ladder.md) — where a stateless signer fits
- [Threat modeling for self-custody](https://timechain.wiki/wiki/threat-modeling-for-self-custody.md) — which adversaries a stateless design answers

**Per-device alternatives**:

- [Keystone](https://timechain.wiki/wiki/keystone.md) — the touchscreen QR device with stored seeds
- [Foundation Passport](https://timechain.wiki/wiki/foundation-passport.md) — QR air-gap with a secure element
- [Coldcard](https://timechain.wiki/wiki/coldcard.md) — QR and MicroSD air-gap; power-user features
- [Blockstream Jade](https://timechain.wiki/wiki/blockstream-jade.md) — the other budget option, USB-connected

**Capabilities**:

- [Seed phrases and BIP-39](https://timechain.wiki/wiki/seed-phrases-and-bip-39.md) — the words SeedSigner loads and generates
- [Passphrases and the 25th word](https://timechain.wiki/wiki/passphrases-and-the-25th-word.md)
- [BIP-85 child seeds](https://timechain.wiki/wiki/bip-85-child-seeds.md)
- [PSBT and wallet descriptors](https://timechain.wiki/wiki/psbt-and-wallet-descriptors.md) — the QR payloads SeedSigner exchanges

**Custody configurations**:

- [Multisig setups](https://timechain.wiki/wiki/multisig-setups.md) — SeedSigner as an inexpensive, diverse cosigner

**Operational practice**:

- [Backup strategies for seeds](https://timechain.wiki/wiki/backup-strategies-for-seeds.md)
- [Recovery rehearsal practice](https://timechain.wiki/wiki/recovery-rehearsal-practice.md)
- [Common attack vectors](https://timechain.wiki/wiki/common-attack-vectors.md)

**The sub-MOC home**:

- [Practical self-custody and sovereignty](https://timechain.wiki/wiki/practical-self-custody-and-sovereignty.md)
