A Progressive Web App for splitting and reconstructing BIP-39 seed phrases using SSKR (Sharded Secret Key Reconstruction) and Gordian Envelope.
- Split seed phrases into 2-of-3 or 3-of-5 threshold shares
- Public notes - visible on each shard (e.g., wallet name, contact info)
- Private notes - encrypted with the seed, only revealed after reconstruction
- QR code generation for each shard using UR (Uniform Resource) encoding
- QR code scanning to import shards via camera
- Standalone recovery page downloaded with each shard set for offline reconstruction
- Offline-capable - works without internet after initial load
- Mobile-friendly - responsive design with Bootstrap 5
- Blockchain Commons - Uses well-documented specifications from Blockchain Commons for long-term viability.
Each shard is a Gordian Envelope with the following structure:
Envelope (shard)
├── Subject: ENCRYPTED
│ └── Envelope (wrapped)
│ └── Envelope (content)
│ ├── Subject: seed entropy (16 or 32 bytes)
│ └── Assertion: NOTE → "private note"
└── Assertion: SSKR_SHARE → share data
- The content envelope contains the seed entropy and optional private note
- The content is wrapped and encrypted so both seed entropy and private note are protected
- The SSKR share contains a piece of the symmetric key using Shamir's Secret Sharing
- Public notes are UI-only - displayed on shard cards and printed on PDFs, but not stored in the envelope
- SolidJS - Reactive UI framework
- Vite - Dev server and production build pipeline
- Bootstrap 5 - UI components
- BCTS - Blockchain Commons TypeScript libraries
@bcts/envelope- Gordian Envelope implementation@bcts/sskr- Sharded Secret Key Reconstruction
- @scure/bip39 - BIP-39 mnemonic handling
- @paulmillr/qr - QR code generation
- qr-scanner - QR code scanning
pnpm install
pnpm run devSet VITE_APP_URL to the deployed web app URL. This URL is printed on each shard PDF and encoded as a QR code so users can return to the app.
cp .env.example .envVITE_APP_URL=https://shards.example.com/If VITE_APP_URL is not set, the app falls back to window.location.origin + import.meta.env.BASE_URL.
pnpm run build
pnpm run preview- Select threshold (2-of-3 or 3-of-5)
- Select seed phrase length (12 or 24 words)
- Enter your seed phrase or generate a new one
- Optionally add a public note (visible on each shard)
- Optionally add a private note (encrypted, revealed after reconstruction)
- Click "Create Shards"
- Store the downloaded standalone recovery HTML page
- Save each shard's QR code or UR string separately
- Enter the required number of shards (2 for 2-of-3, 3 for 3-of-5)
- Either paste the UR string or scan the QR code for each shard
- Click "Reconstruct Seed"
- View your recovered seed phrase and any notes
The standalone recovery HTML page contains the reconstruction code and styles in one file. It does not contain any shard data and can be opened offline.
- The seed phrase and private note are encrypted using ChaCha20-Poly1305
- The encryption key is split using Shamir's Secret Sharing (SSKR)
- Public notes are displayed on cards and PDFs only, not stored in the envelope data
- For maximum security, create and reconstruct shards on an air-gapped device
- Store shards in separate physical locations
Shards are encoded as Uniform Resources (UR) with type envelope:
ur:envelope/lftpsogdhdfz...
This format is designed for reliable QR code transmission and is compatible with other Blockchain Commons tools.
MIT


