Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,514 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coconut Wallet

GitHub tag License Flutter Platform

Coconut Wallet Logo

App Store   Google Play

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.

Features

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

Architecture

      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.

Coconut Projects

Project Description
coconut_lib pub — Bitcoin wallet development library
coconut_vault tag — Offline signer
coconut_wallet tag — Watch-only wallet
coconut_design_system tag — Design System

Build & Run

Prerequisites

  • Flutter SDK (3.29+)
  • Dart 3.7+
  • Android Studio or Xcode
  • Go (1.26+) — required to build the BitBox02 bridge
flutter --version
go version

Clone & Install Dependencies

git clone https://github.com/noncelab/coconut_wallet.git
cd coconut_wallet
flutter pub get

Native Bridge (gomobile)

This 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-android

Code Generation

dart run build_runner build --delete-conflicting-outputs
dart run realm generate
flutter pub run slang

Or run all at once:

make ready

If Realm generation fails, run dart run build_runner clean first.

Environment Variables

This project requires environment variables configured via flutter_dotenv. To obtain the env file for development, please contact us at hello@noncelab.com.

Android Keystore Setup

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.jks

Release signing passwords are not stored in these files. For local Android release builds, run:

./android/scripts/build_android_release.sh

The 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.sh

This uses the Android debug keystore for the local release run only.

Run

# Debug
flutter run --flavor regtest

# Release on a connected Android device
./android/scripts/run_android_release.sh

Flavors

Flavor Description
mainnet Real Bitcoin mainnet — production release distributed via app stores
regtest Local testnet — for learning and development

IDE Configuration

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 use regtest mode for development and testing.

Contributing

Please refer to CONTRIBUTING.md for details.

  • Issues — Bug reports and feature requests
  • Pull Requests — New features, documentation improvements, and bug fixes

Responsible Disclosure

If you discover a critical security vulnerability, please report it directly to hello@noncelab.com instead of opening a public issue.

License

X11 Consortium License (identical to MIT, with an additional restriction that the copyright holder's name may not be used for promotional purposes).

See LICENSE for details.

Dependencies

All third-party libraries used in this project are licensed under MIT, BSD, or Apache. See the full list for details.

Community & Links

Website coconut.onl
X (Twitter) @CoconutWallet 🌐 / @Coconut 🇰🇷
Discord Join our Discord
Documentation Tutorials & Docs
GitHub github.com/noncelab
Company Site NonceLab

Coconut Logo

About

No description, website, or topics provided.

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages