SeedQR is an openly documented data format from the SeedSigner project, not a new kind of seed, encryption, or Bitcoin protocol. Standard SeedQR concatenates zero-based BIP39 word positions into a numeric QR, while CompactSeedQR writes the original entropy as binary data and lets the receiver recompute the checksum.
Standard SeedQR takes every word in the mnemonic, finds its zero-based position in the BIP39 list, and writes it with exactly four digits. The value 12 is therefore written as 0012. The result is neither a photograph of the words nor a private key in textual form, but another lossless representation of the same secret. [1]
The BIP39 list has 2048 items indexed from 0 through 2047. A standard 12-word phrase produces 48 digits and a 25×25 QR grid; a 24-word phrase produces 96 digits and a 29×29 grid. The order of the four-digit blocks is the word order, so swapping blocks restores a different or invalid phrase. [1]
SeedSigner is designed as a stateless signer: powering it off clears the loaded secret data, so the seed must be entered again next time. SeedQR reduces that input to one scan or a manual transcription. It must not be confused with a PSBT, wallet descriptor, or address QR; those may carry public or transaction data, while SeedQR carries a recovery secret. [7]
Before transcription, the SeedSigner interface warns that “SeedQR is your private key” and that it must not be photographed or scanned with an internet-connected device. An air gap limits the network path for leakage, but it does not encrypt the QR or stop a camera, copy, physical thief, or compromised offline device from reading the seed. [5]
Official documentation lists Standard SeedQR and CompactSeedQR support for 12-word and 24-word BIP39 phrases. A public request to add a troublesome CompactSeedQR test vector was opened on 25 July 2022 and later closed by a project change; it documents public interoperability testing, not formal BIP standardization. [2] [6]
CompactSeedQR concatenates 11-bit word indexes, removes 4 checksum bits for 12 words, and stores 128 bits or 16 bytes in a 21×21 grid. For 24 words it removes 8 checksum bits and stores 256 bits or 32 bytes in a 25×25 grid. It is smaller, but an ordinary reader may mishandle binary data or null bytes; that inconvenience is not cryptographic protection. [1]
BIP39 creates words by dividing entropy and its checksum into 11-bit list indexes. CompactSeedQR can therefore omit the checksum bits and recompute them from the entropy after scanning. The payload has no unambiguous identifier for the wordlist language, however; recovery must use the same list, and the main specification recommends English. [4]
An implementation should be checked against the published test vectors and the actual encoder code, including a null byte in CompactSeedQR. A practical recovery drill belongs on an offline device with no value: after loading, compare the fingerprint, descriptor, or first receive address with the expected wallet. Never test a real seed with a web generator. [3]
For the clearest picture, read this entry together with Seed Phrase, BIP 39, BIP39 checksum, Private Key, Hardware Wallet, Air-gapped Wallet. The reverse links also lead from BBQr.
01Is SeedQR the same as an ordinary QR code containing a bitcoin address?+
No. An address QR normally publishes a destination for receiving a payment, whereas SeedQR encodes the data needed to restore a BIP39 wallet. Anyone who reads SeedQR correctly and knows any BIP39 passphrase can derive the private keys. SeedQR must therefore be handled like a seed phrase, not like a public address.
02Does CompactSeedQR protect the seed because an ordinary phone cannot read it?+
No. CompactSeedQR merely stores the same secret more efficiently as binary entropy. Some ordinary readers display it incorrectly or not at all, but specialized software can decode it. This is a compatibility obstacle, not encryption; security must rely on physical protection, controlled offline scanning, and an independently stored BIP39 passphrase when one is used.