A secure, cross-platform wallet for the Miden blockchain. Available as a browser extension, desktop application, and mobile app.
| Platform | Technology | Status |
|---|---|---|
| Chrome Extension | WebExtension APIs | Production |
| Firefox Extension | WebExtension APIs | Production |
| Desktop (macOS, Windows, Linux) | Tauri v2 | Production |
| iOS | Capacitor | Production |
| Android | Capacitor | Production |
- Create and manage multiple Miden accounts
- Send and receive tokens
- View transaction history
- Import/export wallet via seed phrase or encrypted file
- Address book for saved contacts
- Browser Extension: Secure vault with password encryption
- Desktop: Hardware-backed key storage via macOS Keychain / Windows Credential Manager
- Mobile: Biometric authentication (Face ID, Touch ID, Fingerprint)
- Client-side transaction signing (keys never leave your device)
| Feature | Extension | Desktop | Mobile |
|---|---|---|---|
| dApp Browser | N/A (uses tabs) | Built-in browser window | In-app WebView |
| System Tray | N/A | Yes | N/A |
| Biometric Unlock | N/A | Touch ID (macOS) | Face ID / Touch ID / Fingerprint |
| QR Code Scanning | N/A | N/A | Yes |
| Haptic Feedback | N/A | N/A | Yes |
Download the latest release: https://miden.fi/
- Node.js 22 or later
- Yarn v1
- Rust toolchain (for desktop app)
- Xcode (for iOS development)
- Android Studio (for Android development)
# Clone the repository
git clone https://github.com/0xMiden/miden-wallet.git
cd miden-wallet
# Copy environment file
cp .env.example .env
# Install dependencies
yarn install# Development (Chrome)
yarn dev
# Production build
yarn build:chrome # Chrome
yarn build:firefox # Firefox
yarn build-all # All browsersLoad the unpacked extension from dist/chrome_unpacked/ in Chrome's extension settings.
# Development
yarn desktop:dev
# Production build
yarn desktop:buildSee Tauri prerequisites for platform-specific requirements.
# iOS
yarn mobile:ios # Build and open in Xcode
yarn mobile:ios:run # Build and run on Simulator
# Android
yarn mobile:android # Build and open in Android Studio# Android
yarn mobile:android:keystore # Generate keystore (one-time)
yarn mobile:android:release # Build AAB for Play Store
yarn mobile:android:release:apk # Build APK for direct install
# iOS
yarn mobile:ios:release # Build release archive
yarn mobile:ios:export # Export IPA for App Store┌─────────────────────────────────────────────────────────────────────────┐
│ Miden Wallet │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Extension │ │ Desktop │ │ Mobile │ │
│ │ (Chrome/ │ │ (Tauri) │ │ (Capacitor) │ │
│ │ Firefox) │ │ │ │ │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ React + TS │ │
│ │ (Shared UI) │ │
│ └────────┬────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Miden SDK │ │
│ │ (WASM) │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
src/
├── app/ # React app, pages, layouts
├── components/ # Shared UI components
├── screens/ # Screen components (onboarding, send flow, etc.)
├── lib/
│ ├── miden/ # Miden SDK integration
│ │ ├── back/ # Backend: wallet operations, vault
│ │ ├── front/ # Frontend: hooks, providers
│ │ └── sdk/ # WASM client wrapper
│ ├── store/ # Zustand state management
│ ├── desktop/ # Desktop-specific (Tauri) code
│ ├── mobile/ # Mobile-specific (Capacitor) code
│ ├── dapp-browser/ # dApp connectivity
│ └── woozie/ # Custom router
├── workers/ # Background workers
└── public/ # Static assets, locales
src-tauri/ # Tauri (Rust) backend
├── src/
│ ├── lib.rs # Main entry, command registration
│ ├── secure_storage/ # OS keychain integration
│ ├── dapp_browser.rs # dApp browser window management
│ └── tray.rs # System tray
└── scripts/ # Injected JavaScript
ios/ # iOS native project
android/ # Android native project
- Frontend: Zustand store (
src/lib/store/) - Backend (Extension): Effector store (
src/lib/miden/back/) - Sync: Intercom messaging between frontend and service worker
import { isExtension, isDesktop, isMobile, isIOS, isAndroid } from 'lib/platform';
if (isDesktop()) {
// Tauri-specific code
} else if (isMobile()) {
// Capacitor-specific code
} else if (isExtension()) {
// Browser extension code
}# Unit tests
yarn test
# E2E tests (Playwright)
yarn playwright:install # First time only
yarn test:e2e
# Linting and formatting
yarn lint
yarn formatThe wallet supports multiple languages. Translation files are in public/_locales/.
# Generate translation files
yarn createTranslationFile- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests and linting (
yarn test && yarn lint) - Commit your changes
- Push to your branch
- Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.