Skip to content

[Feature]: Import BIP39 recovery phrase via SeedQR for Stack Wallet #1443

Description

@schnuartz-ai

Feature request: Import BIP39 recovery phrase via SeedQR

Problem

Stack Wallet currently supports restoring/importing a Bitcoin wallet using a BIP39 recovery mnemonic in its mobile wallet.

However, there is currently no way to scan a SeedQR and import the encoded BIP39 mnemonic directly.

This makes wallet setup and recovery unnecessarily cumbersome for users who derive or generate a dedicated hot-wallet seed on another device, especially when that device can display a complete static SeedQR.

For example, users may derive a dedicated hot-wallet seed using BIP85 and then want to import that seed directly into Stack Wallet without manually typing the recovery phrase.

Why this is useful

BIP85 allows users to deterministically derive separate BIP39 child mnemonics from a securely backed-up master seed.

A useful workflow with Stack Wallet would be:

  1. Keep the master Bitcoin seed securely stored on a hardware wallet.
  2. Derive a separate BIP39 child seed for Stack Wallet using BIP85.
  3. Display that child seed as a complete static SeedQR on the hardware wallet.
  4. Scan the SeedQR directly with Stack Wallet.
  5. Restore the same child seed later from the master seed if the phone or wallet installation is lost.

This creates a frictionless workflow while keeping the master Bitcoin seed off the mobile device.

It also avoids having to manually type a 12 words or 24 words recovery phrase into the phone.

Scanning a BIP85 seedphrase from a hardware wallet

Current behavior

Stack Wallet has a mobile Restore Wallet flow that accepts a mnemonic and verifies it before wallet recovery. The current recovery flow does not provide a SeedQR scanner for mnemonic import.

Requested behavior

Add a Scan SeedQR option to the existing recovery/import flow.

The wallet should:

  • Scan a SeedQR using the device camera.
  • Decode the BIP39 mnemonic locally.
  • Validate the resulting BIP39 mnemonic and checksum.
  • Import it using the existing wallet recovery logic.
  • Keep the existing recovery methods available as a fallback.

Supported mnemonic lengths

The SeedQR importer only needs to support the same BIP39 mnemonic lengths that Stack Wallet already supports:

  • 12 words
  • 24 words

Where applicable, support:

  • Standard SeedQR
  • CompactSeedQR

Scope

This request is import only.

Security considerations

  • SeedQR contents must be processed locally.
  • Seed material must never be sent to analytics, logs, crash reports, or remote services.
  • The QR payload and decoded seed material should not remain in memory longer than necessary.
  • Sensitive recovery data should not be persisted as part of the scanning flow.
  • Existing warnings around importing recovery phrases should remain.
  • Invalid or unsupported SeedQR data should be rejected before wallet restoration continues.

Suggested UX

The existing recovery screen could offer an additional action such as:

Scan SeedQR

alongside the existing the existing Restore Wallet flow.

After scanning:

  1. Decode the SeedQR.
  2. Validate the resulting BIP39 recovery data.
  3. Show the same confirmation or security warnings used by the existing restore flow, where applicable.
  4. Continue through the wallet's normal restoration logic.

Acceptance criteria

  • The existing recovery/import flow offers a Scan SeedQR action.
  • SeedQRs representing 12-word and 24-word BIP39 mnemonics can be imported.
  • Standard SeedQR is supported.
  • CompactSeedQR is supported.
  • The resulting BIP39 recovery data is validated before restoration.
  • Invalid or unsupported SeedQR payloads produce a clear error.
  • Existing wallet recovery logic is reused after decoding.
  • Seed material is processed locally and is not included in logs, analytics, crash reports, or remote requests.
  • Existing manual recovery methods continue to work.
  • No SeedQR export functionality is added as part of this feature.

References

SeedQR specification:
https://github.com/SeedSigner/seedsigner/blob/dev/docs/seed_qr/README.md

BIP85:
https://github.com/bitcoin/bips/blob/master/bip-0085.mediawiki

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions