A secure, client-side Bitcoin QR code generator for seed phrases, wallet descriptors, and transactions.
- Support for 12 and 24-word seed phrases
- Paste entire seed phrase or enter words individually
- High error correction QR codes
- Download QR code as PNG
- Support for various descriptor formats:
- Legacy P2PKH (
pkh(...)) - Native SegWit P2WPKH (
wpkh(...)) - Nested SegWit P2SH-P2WPKH (
sh(wpkh(...))) - Native SegWit P2WSH (
wsh(...)) - Taproot P2TR (
tr(...)) - Multisig (
multi(...),sortedmulti(...)) - And more!
- Legacy P2PKH (
- Automatic descriptor type detection
- Load example descriptors
- Export as QR code
Three modes for different transaction types:
-
Payment URI (BIP21)
- Enter Bitcoin address
- Optional amount, label, and message
- Creates standard
bitcoin:URI - Compatible with all major wallets
-
PSBT (Partially Signed Bitcoin Transaction)
- Paste base64-encoded PSBT
- Useful for hardware wallets and multisig
- Follows BIP174 standard
-
Raw Transaction
- Paste hex-encoded signed transaction
- Ready to broadcast to network
- Share transaction data via QR
✅ 100% Client-Side Processing - All operations happen in your browser
✅ No Data Transmission - Your sensitive data never leaves your device
✅ No Server Communication - Completely offline capable
✅ Open Source - Fully auditable code
- Framework: Next.js 15 (React 19)
- Styling: Tailwind CSS + shadcn/ui components
- QR Generation: qrcode library
- Theme: Light/Dark mode support
- TypeScript: Full type safety
- Node.js 18+ or 20 LTS
- pnpm (recommended) or npm/yarn
# Install dependencies
pnpm install
# Run development server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm startThe app will be available at http://localhost:3000 (or next available port).
# Run linting
pnpm lintbitcoin-qr-tool/
├── app/
│ ├── layout.tsx # Root layout with theme provider
│ ├── page.tsx # Home page
│ └── globals.css # Global styles
├── components/
│ ├── bitcoin-qr-generator.tsx # Main component with tabs
│ ├── seed-phrase-qr.tsx # Seed phrase QR generator
│ ├── wallet-descriptor-qr.tsx # Wallet descriptor QR generator
│ ├── transaction-qr.tsx # Transaction QR generator
│ ├── bitcoin-icon.tsx # Bitcoin logo icon
│ ├── theme-toggle.tsx # Dark/light mode toggle
│ └── ui/ # shadcn/ui components
└── lib/
└── utils.ts # Utility functions
- Select 12 or 24 words
- Enter your seed phrase (paste all at once or one word at a time)
- Click "Generate QR Code"
- Download and store securely
- Enter your output descriptor (e.g.,
wpkh([fingerprint/84h/0h/0h]xpub.../*)) - Click "Load Example" to see a sample format
- Generate QR code
- Use for wallet recovery or sharing xpubs
Payment URI Mode:
- Enter recipient address
- Optionally add amount, label, and message
- Generate QR for payment request
PSBT Mode:
- Paste base64 PSBT from your wallet
- Generate QR for hardware wallet signing
Raw TX Mode:
- Paste hex-encoded signed transaction
- Generate QR to share transaction data
# Deploy to production
vercel --prodThe project is optimized for Vercel deployment with:
- Automatic Next.js detection
- Edge functions support
- Zero configuration needed
The app can be deployed to any platform that supports Next.js:
- Netlify
- Cloudflare Pages
- AWS Amplify
- Self-hosted
- Never share seed phrase QR codes - They provide full access to your wallet
- Store QR codes securely - Treat them like private keys
- Verify transactions - Always verify transaction details before signing
- Use offline - For maximum security, use on an air-gapped device
- Review descriptors - Wallet descriptors contain xpubs that reveal addresses
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - feel free to use this project for any purpose.
- Built with Next.js
- UI components from shadcn/ui
- QR generation by node-qrcode
- Icons from Lucide