Download iOS App | Download Android App
Watch-only Bitcoin Wallet for iOS & Android
Try it risk-free! A REGTEST VERSION is available on both app stores, allowing you to practice air-gapped transactions with test bitcoin — no real funds required.
Download iOS App(ver.regtest) · Download Android App(ver.regtest)
Coconut Wallet is a watch-only Bitcoin wallet designed to work with Coconut Vault. By operating the vault and wallet on two physically separate devices, it implements a secure air-gapped transaction signing architecture where private keys never touch an online device.
No hot wallet. Watch-only only.
- Supported hardware wallets — Keystone 3 Pro, Seedsigner, Jade, Coldcard, Krux
- Air-gapped signing — Private keys never leave the offline device
- SegWit — Native SegWit (Bech32) address support
- Multisig — Multi-signature wallet support
- RBF (Replace-By-Fee) — Fee bumping for unconfirmed transactions
- CPFP (Child-Pays-For-Parent) — Fee acceleration via child transactions
- Batch sending — Send to multiple recipients in a single transaction
- UTXO management — Coin control with UTXO locking and tagging
- PSBT — BIP-174 Partially Signed Bitcoin Transactions
- Draft transactions — Save transactions as drafts for later signing or sending
- Multilingual — 한국어, English, 日本語, Español
OFFLINE ONLINE
┌─────────────────┐ QR Code ┌─────────────────┐
│ Coconut Vault │ ◄──────────────────────► │ Coconut Wallet │
│ │ │ │
│ · Key storage │ │ · Balance sync │
│ · Tx signing │ │ · Tx creation │
│ │ │ · Broadcasting │
└─────────────────┘ └─────────────────┘
The wallet stays online to keep your wallet data up to date and broadcasts signed transactions to the Bitcoin network.
| Project | Description |
|---|---|
| coconut_lib | |
| coconut_vault | |
| coconut_wallet | |
| coconut_design_system |
- Flutter SDK (3.29+)
- Dart 3.7+
- Android Studio or Xcode
- Go (1.26+) — required to build the BitBox02 bridge
- Rust (stable) — required to build the Trezor bridge
- protoc (Protocol Buffers compiler) — required to build the Trezor bridge
- macOS:
brew install protobuf - Linux:
apt-get install -y protobuf-compiler - Windows:
choco install protoc(or download from the releases page)
- macOS:
flutter --version
go version
rustc --versiongit clone https://github.com/noncelab/coconut_wallet.git
cd coconut_wallet
flutter pub getThis project uses gomobile to generate native bindings for the BitBox02 hardware wallet bridge. See docs/bitbox02-dev-guide.md for the full setup guide.
Quick steps:
# 0. Clone the required fork as a sibling directory (do NOT use upstream BitBoxSwiss)
git clone https://github.com/4xvgal/bitbox02-api-go.git ../bitbox02-api-go
cd ../bitbox02-api-go && git checkout fix/nil-guard-psbt && cd ../coconut_wallet
# 1. Install Go (if not already installed)
brew install go
# 2. Install gomobile and add to PATH
go install golang.org/x/mobile/cmd/gomobile@latest
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc && source ~/.zshrc
# 3. Initialize gomobile (re-run if you upgrade Go, Xcode, or Android NDK)
gomobile init
# 4. Sync Go dependencies
cd go && go mod tidy && cd ..
# 5. Build native bindings (16KB page-aligned for Android 15+)
make gomobile-bind # both iOS and Android
# make gomobile-ios
# make gomobile-androidThis project uses UniFFI + cargo-ndk to generate native bindings for the Trezor Safe 7 BLE (THP v2) hardware wallet bridge.
Quick steps:
# 1. Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 2. Install protoc (required by trezor-connect-rs to compile .proto files)
brew install protobuf # macOS; see Prerequisites above for Linux/Windows
# 3. Install cargo-ndk
cargo install cargo-ndk
# 4. Add Android/iOS Rust targets
rustup target add aarch64-linux-android armv7-linux-androideabi x86_64-linux-android
rustup target add aarch64-apple-ios aarch64-apple-ios-sim x86_64-apple-ios
# 5. Build native bindings
make trezor-bind # both iOS and Android
# make trezor-android
# make trezor-iosThe build scripts are at
rust/trezor-bridge/scripts/build_android.shandrust/trezor-bridge/scripts/build_ios.sh. 16KB page-size alignment is configured viarust/trezor-bridge/.cargo/config.toml(Android) and linker flags (iOS).
dart run build_runner build --delete-conflicting-outputs
dart run realm generate
flutter pub run slangOr run all at once:
make readyIf Realm generation fails, run
dart run build_runner cleanfirst.
This project requires environment variables configured via flutter_dotenv. To obtain the env file for development, please contact us at hello@noncelab.com.
Generate a local keystore for Android builds:
keytool -genkey -v -keystore android/app/local.jks \
-storepass android -alias local -keypass android \
-keyalg RSA -keysize 2048 -validity 10000 \
-dname "CN=Local Dev,O=Coconut,C=KR"Create key_regtest.properties and key_mainnet.properties under the android/ directory:
keyAlias=local
storeFile=../app/local.jksRelease signing passwords are not stored in these files. For local Android release builds, run:
./android/scripts/build_android_release.shThe script prompts once for the keystore/key password and uses it for both storePassword and keyPassword during the build.
For local Android release runs on a connected device, run:
./android/scripts/run_android_release.shThis uses the Android debug keystore for the local release run only.
# Debug
flutter run --flavor regtest
# Release on a connected Android device
./android/scripts/run_android_release.sh| Flavor | Description |
|---|---|
mainnet |
Real Bitcoin mainnet — production release distributed via app stores |
regtest |
Local testnet — for learning and development |
Android Studio / IntelliJ
Run → Edit Configurations... → Set Build Flavor to regtest
VS Code — .vscode/launch.json:
{
"name": "coconut_wallet (debug)",
"request": "launch",
"type": "dart",
"args": ["--flavor", "regtest"]
}
⚠️ Mainnet Self-Build Disclaimer: If you build and run the app from source on mainnet outside of official distribution channels (App Store / Google Play), we assume no responsibility for any loss of funds or errors that may occur. Please useregtestmode for development and testing.
Please refer to CONTRIBUTING.md for details.
- Issues — Bug reports and feature requests
- Pull Requests — New features, documentation improvements, and bug fixes
If you discover a critical security vulnerability, please report it directly to hello@noncelab.com instead of opening a public issue.
MIT License. See LICENSE for details.
The MIT license covers the source code only. It does not grant rights to the "Coconut Wallet" or "Nonce Lab" names or logos — see TRADEMARK.md for the separate trademark and brand usage policy.
All third-party libraries used in this project are licensed under MIT, BSD, or Apache. See the full list for details.
| Website | coconut.onl |
| X (Twitter) | @CoconutWallet 🌐 / @Coconut 🇰🇷 |
| Discord | Join our Discord |
| Documentation | Tutorials & Docs |
| GitHub | github.com/noncelab |
| Company Site | NonceLab |

