A security-focused, self-custodial multichain wallet built with Flutter.
English | 简体中文
Important
For better supply-chain security, review the source code and build Safe Wallet yourself whenever possible. Alternatively, use APKs automatically built from tagged releases by this repository's GitHub Actions and published on GitHub Releases, and verify them against the provided SHA256SUMS file.
Safe Wallet is a Flutter wallet for managing locally controlled accounts and assets across EVM networks, Bitcoin, TRON, Solana, and Sui. It includes wallet creation and import, portfolio views, transfers, an address book, transaction history, QR scanning, a dApp browser, and WalletConnect integration.
Private keys and recovery phrases are encrypted on the device. Safe Wallet does not provide a custodial backend and cannot recover lost credentials or reverse transactions.
| Portfolio | dApp browser | Advanced tools | Settings |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
- Create and import self-custodial wallets
- View assets, receive funds, and send transactions across supported chains
- Manage custom tokens, networks, and RPC endpoints
- Browse dApps with EVM, Solana, and Sui wallet providers
- Connect to compatible dApps through Reown WalletKit (WalletConnect) on EVM and Solana
- Call EVM contracts and wrap or unwrap native tokens
- Recover rent from eligible Solana token accounts
- Stake TRX on TRON
- Use an address book, QR scanner, and local transaction history
- Switch between English and Simplified Chinese
Safe Wallet ships with the following default networks. Users may add compatible custom EVM networks and RPC endpoints.
| Ecosystem | Default networks | Core wallet operations | In-app dApp provider | WalletConnect |
|---|---|---|---|---|
| EVM | Ethereum, BNB Smart Chain, Polygon, Arbitrum, Optimism, Base, HyperEVM | Yes | Yes | Yes |
| Bitcoin | Mainnet | Yes | No | No |
| TRON | Mainnet | Yes | No | No |
| Solana | Mainnet, Devnet | Yes | Yes | Yes |
| Sui | Mainnet, Testnet, Devnet | Yes | Yes (Wallet Standard) | No |
“Core wallet operations” covers account management, portfolio display, receiving, and transfers. Features can vary by chain and RPC provider.
Safe Wallet is designed around local key custody and short-lived authorization:
- Wallet secrets are encrypted with AES-256-GCM.
- Password-derived keys use PBKDF2-HMAC-SHA256 with 600,000 iterations.
- Wallet passwords are never persisted.
- The in-memory data-encryption-key session expires immediately after 15 minutes.
- Biometric unlock relies on platform secure storage.
- High-risk operations require password re-authentication.
- Sensitive clipboard contents are cleared after a short timeout.
- Android uses
FLAG_SECUREand disables backups; iOS applies capture shielding and no-backup protection. - Production RPC endpoints must use HTTPS; plain HTTP is limited to loopback development endpoints.
These controls reduce risk but do not guarantee security. Device compromise, malicious dependencies, insecure RPC providers, phishing, and implementation defects remain possible threats.
Android and iOS are the only supported release targets. macOS, Windows, Linux, and Web runners are intentionally not included or validated.
- Flutter
>=3.41.0 - Dart
>=3.11.0 <4.0.0 - Platform toolchains required by Flutter for your target device
The current development baseline is Flutter 3.41.7 with Dart 3.11.5.
flutter pub get
flutter runBuild a release APK from the reviewed source code:
flutter pub get
flutter build apk --releaseTo include a Reown project ID for WalletConnect:
flutter build apk --release \
--dart-define=REOWN_PROJECT_ID=your_project_idBuild outputs are written to build/app/outputs/flutter-apk/. For an APK intended for distribution, configure your own release keystore in android/key.properties by following Flutter's Android signing guide. Never commit the keystore, signing passwords, or key.properties.
As an alternative to building locally, APKs for tagged releases are automatically built by GitHub Actions and published on GitHub Releases together with a SHA256SUMS file for integrity verification.
When localization source files change, regenerate translations with:
dart run slangSafe Wallet uses Reown WalletKit. You can provide a Reown project ID at build time:
flutter run --dart-define=REOWN_PROJECT_ID=your_project_idThe app can start without this value, and a project ID may be entered later in Settings. WalletConnect sessions currently support EVM and Solana namespaces; Bitcoin, TRON, and Sui proposals are rejected.
Before submitting a change, run the checks relevant to it:
dart format --output=none --set-exit-if-changed lib test integration_test
flutter analyze
flutter testBehavior changes and bug fixes should include a focused regression test whenever practical.
The codebase follows a feature-first structure with domain, data, application, and presentation layers where appropriate. Riverpod is used for state management and dependency wiring.
lib/
├── app/ # Bootstrap, routing, lifecycle, and app shell
├── features/ # Feature modules and chain integrations
└── shared/ # Shared security, networking, storage, and UI code
test/ # Unit and widget tests
integration_test/ # End-to-end and integration coverage
Read ARCHITECTURE.md and DESIGN.md for more context.
Contributions are welcome.
- Fork the repository and create a focused branch.
- Add or update tests for behavioral changes.
- Run formatting, analysis, and relevant tests.
- Open a pull request describing the problem, approach, and verification performed.
Never commit private keys, recovery phrases, real RPC credentials, or funded test accounts. Repository-specific collaboration guidance is available in AGENTS.md.
Do not disclose suspected vulnerabilities in a public issue. Use GitHub's private vulnerability reporting or open a private Security Advisory for this repository. Include affected versions, reproduction steps, impact, and any suggested mitigation without exposing real secrets or funds.
Safe Wallet's original source code is released under the MIT License.
Safe Wallet includes Reown WalletKit components distributed under the WalletConnect Community License. Portions © 2025 Reown, Inc. All Rights Reserved. Review NOTICE, the WalletConnect Community License, and its commercial-use thresholds before distributing the application. That license applies independently to the Reown components and is not replaced by the project's MIT License.
This software is provided "as is", without warranty of any kind. Cryptocurrency transactions are irreversible, and self-custody places responsibility for keys, backups, transaction review, and software provenance on the user. Use at your own risk.



