# إجماع — Ijma Wallet
[](LICENSE)
[](https://ijmawallet.com)
[](https://ijmawallet.com/app/)
[](https://nostr.com)
[](https://cashu.space)
[](https://www.ijmawallet.com)
[](https://github.com/amisatoshi/ijmawallet/actions)
[](https://github.com/amisatoshi/ijmawallet/releases)
**Sovereign · Private · Halal**
*Bitcoin · Lightning · Nostr · Cashu · Fedimint — one non-custodial PWA*
[**Live App →**](https://www.ijmawallet.com/app/) · [**Website →**](https://www.ijmawallet.com) · [**Design Doc →**](https://www.ijmawallet.com/assets/documents/design-doc.pdf)
---
> ⚠️ **v0.3.0 — Demo release.** The cryptographic foundations are sound but the
> application has not undergone a professional security audit. Do not store
> significant funds until v1.0.0. See [SECURITY.md](SECURITY.md).
---
## What is Ijma?
**Ijma** (Arabic: إجماع — *consensus*) is an open-source, self-custody Bitcoin
wallet built as a Progressive Web App. It unifies the full Bitcoin protocol
stack — on-chain, Lightning, Cashu ecash, Fedimint, and Nostr identity — into
a single interface designed for both first-time users and power users.
The name reflects the wallet's core design principle: achieving consensus
between competing priorities — security and usability, sovereignty and
convenience, simplicity and power.
### Core properties
- **Non-custodial** — your seed phrase never leaves your device
- **Open source** — MIT licence, every line is auditable
- **No trackers** — zero analytics, telemetry, or ads
- **Shariah-compliant** — no riba, no gharar, no maysir
- **Installable PWA** — iOS, Android, and desktop without an app store
---
## Protocol stack
```
L4 Application Ijma Wallet PWA
L3 Identity/Privacy Cashu · Fedimint · Nostr
L2 Lightning Network Scaling, routing, atomic swaps ← bridge
L1 Bitcoin Base layer settlement
```
---
## Features
| Feature | Status | Notes |
|---------|--------|-------|
| BIP39 wallet creation (24 words) | ✅ v0.1.0 | Real entropy via Web Crypto API |
| BIP84 SegWit + BIP86 Taproot | ✅ v0.1.0 | Native address derivation |
| NIP-06 Nostr key derivation | ✅ v0.1.0 | One seed → Bitcoin + Nostr identity |
| AES-256-GCM vault encryption | ✅ v0.1.0 | PBKDF2 · 600,000 iterations |
| PIN + WebAuthn biometric auth | ✅ v0.2.0 | FIDO2 · device secure enclave |
| Cashu ecash (mint/melt/send/receive) | ✅ v0.1.0 | Multi-mint · Chaumian blind sigs |
| Nostr Zaps (NIP-57) | ✅ v0.1.0 | Lightning tips on social web |
| Atomic cross-layer swaps | 🔜 v0.4.0 | Submarine swaps via Boltz HTLCs |
| Hardware wallet support | ✅ v0.3.0 | Jade · Coldcard · Ledger · Trezor · Passport · SeedSigner |
| PWA — offline, installable | ✅ v0.1.0 | Workbox service worker |
| Mempool.space fee integration | ✅ v0.1.0 | Live fee rates |
| Beginner / Expert modes | ✅ v0.3.0 | Progressive disclosure |
| Breez SDK Lightning node | 🔜 v0.4.0 | Embedded non-custodial LN |
| Fedimint WASM client | 🔜 v0.5.0 | Federation join and management |
| Social recovery (Shamir + Nostr) | 🔜 v0.5.0 | Threshold secret sharing |
| Zakat calculator | 🔜 v0.3.0 | Nisab threshold · 2.5% |
| Multi-sig 2-of-3 | 🔜 v1.0.0 | Hardware wallet coordination |
| Web of Trust scoring | 🔜 v1.0.0 | NIP-based reputation |
| Professional security audit | 🔜 v1.0.0 | Third-party · public report |
---
## Security model
| Layer | Implementation |
|-------|---------------|
| Seed phrase at rest | AES-256-GCM · PBKDF2 (600,000 iterations) · 32-byte random salt per op |
| Keys in memory | Session only — cleared on lock — never serialised to disk |
| Authentication | 6-digit PIN (SHA-256 + salt) + WebAuthn biometrics (FIDO2) |
| Storage backend | IndexedDB — encrypted before write, decrypted after read |
| Auto-lock | 5 minutes of inactivity |
| Cryptographic primitives | Web Crypto API (OS-level, hardware-accelerated) |
| Network | All calls to open public APIs only — no proprietary backends |
| Custody | 100% non-custodial — no server ever receives or sees a key |
Read [SECURITY.md](SECURITY.md) for the full threat model and vulnerability
disclosure policy.
---
## Quick start
**Requirements:** Node.js 20+ · npm 10+
```bash
# Clone
git clone https://github.com/amisatoshi/ijmawallet.git
cd ijmawallet
# Install
npm install
# Development server (hot reload)
npm run dev
# → http://localhost:5173/app/
# Production build
npm run build
# Preview production build locally
npm run preview
# Run security audit
npm audit
```
See [DEPLOYMENT.md](DEPLOYMENT.md) for full instructions covering Hostinger,
Vercel, and self-hosted VPS deployment.
---
## Project structure
```
ijmawallet/
├── src/
│ ├── lib/
│ │ ├── security.js # AES-256-GCM vault · WebAuthn · PBKDF2
│ │ ├── bitcoin.js # BIP39/32/84/86 · Mempool.space API
│ │ ├── nostr.js # Keypair · events · Zaps · relays · NIPs
│ │ ├── cashu.js # Cashu ecash mint/melt/send/receive
│ │ ├── swaps.js # Atomic swaps · Boltz · cross-mint
│ │ └── hardware.js # PSBT signing · WebUSB/HID · QR air-gap
│ ├── context/
│ │ └── WalletContext.jsx # Global state · session management
│ ├── components/
│ │ ├── Onboarding.jsx # Wallet creation and restore flow
│ │ ├── LockScreen.jsx # PIN + biometric unlock
│ │ ├── MainWallet.jsx # Tab shell + navigation
│ │ └── shared.jsx # Design system · tokens · components
│ └── screens/
│ ├── HomeScreen.jsx # Portfolio · balances · protocol stack
│ ├── SwapScreen.jsx # Atomic cross-layer swaps
│ ├── HardwareScreen.jsx # Hardware wallet browser + signing
│ └── AllScreens.jsx # Send · Receive · Ecash · Nostr · Settings
├── .github/
│ ├── workflows/
│ │ ├── ci.yml # Build · lint · audit · deploy
│ │ └── codeql.yml # Automated security scanning
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── feature_request.yml
│ │ └── security_report.yml
│ └── PULL_REQUEST_TEMPLATE.md
├── SECURITY.md # Vulnerability disclosure · threat model
├── CONTRIBUTING.md # Contribution guide
├── CODE_OF_CONDUCT.md # Community standards
├── LIBRARIES.md # All dependencies · repos · audit status
└── DEPLOYMENT.md # Deployment guide · server config
```
---
## Contributing
Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md)
before opening a pull request.
**Core rules:**
- Open an issue before starting significant changes
- No plaintext keys or seed phrases — ever, anywhere in code
- No external telemetry, analytics, or user tracking of any kind
- Test on iOS Safari 16+ and Android Chrome 110+
- Security-sensitive changes require two reviewer approvals
---
## Dependencies
All runtime dependencies, their repositories, maintainers, licences, and
formal audit status are documented in [LIBRARIES.md](LIBRARIES.md).
**Formally audited (Cure53, January 2022):**
| Library | Auditor | Report |
|---------|---------|--------|
| `@noble/hashes` | Cure53 | [PDF](https://cure53.de/pentest-report_noble-lib.pdf) |
| `noble-secp256k1` | Cure53 | [PDF](https://cure53.de/pentest-report_noble-lib.pdf) |
| `@scure/bip32` | Cure53 | [PDF](https://cure53.de/pentest-report_scure-btc-signer.pdf) |
| `@scure/bip39` | Cure53 | [PDF](https://cure53.de/pentest-report_scure-btc-signer.pdf) |
---
## Roadmap
| Phase | Target | Focus |
|-------|--------|-------|
| ✅ v0.1.0 | Mar 2026 | Key generation · PWA · AES vault |
| ✅ v0.2.0 | Mar 2026 | Receive onchain · Landing page |
| ✅ v0.3.0 | Mar 2026 | Hosted Demo · Zakat · Sadaqah |
| 🔜 v0.3.5 | Q2 2026 | Nostr · Hardware wallets |
| 🔜 v0.4.0 | Q3 2026 | Breez Lightning · Cashu |
| 🔜 v0.5.0 | Q4 2026 | Fedimint · Atomic swaps · Social recovery |
| 🔜 v1.0.0 | 2027 | Multi-sig · Taproot · Web of Trust · Security audit |
---
## Licence
MIT — see [LICENSE](LICENSE).
---
## Built by
[Blockchainology](https://www.blockchainology.co.uk) — Bitcoin-only consultancy.
*Digital Hijrah: helping individuals and organisations transition to digital sovereignty.*
Maintainer: [@amisatoshi](https://github.com/amisatoshi)
---