A lightweight Bitcoin validator node for Android, powered by Utreexo and Floresta.
Run a validating Bitcoin node directly on your phone with minimal storage requirements thanks to Utreexo's compact accumulator design. Mandacaru uses assumeutreexo by default β see the note below for what that means for the trust model.
- β‘ Lightweight: Uses Utreexo to dramatically reduce storage requirements
- π Self-sovereign: Validate Bitcoin transactions directly on your device
- π Multi-network: Support for Bitcoin Mainnet, Testnet, Testnet4, Signet, and Regtest
- π Transaction & Broadcast: Search transactions and broadcast raw transactions
- π§± Blockchain Explorer: Search blocks by height or hash, view headers and chain status
- π₯ P2P Networking: Connect, disconnect, and ping Bitcoin peers
- πΌ Wallet Integration: Load descriptors and track your Bitcoin addresses
- π Electrum Server: Built-in Electrum server for wallet pairing
- π Real-time Sync: Monitor blockchain synchronization progress
- π©Ί Diagnostics: Monitor node uptime and memory usage
- π¨ Modern UI: Beautiful Material Design 3 interface with dark/light themes
Utreexo is a dynamic hash-based accumulator that allows Bitcoin nodes to validate the blockchain without storing the full UTXO set. This reduces storage requirements from tens of gigabytes to just a few megabytes, making it practical to run a validating node on mobile devices.
Mandacaru ships with assumeutreexo turned on. At startup the node trusts a hardcoded Utreexo state snapshot (the accumulator roots at a specific block height) and begins full validation from that point forward β verifying every new block, transaction, signature, and consensus rule from the snapshot height onward.
What this means in practice:
- Fast startup: the node skips re-validating ancient history and is usable in minutes instead of days.
- Full validation going forward: from the snapshot height on, Mandacaru is a fully validating Bitcoin node β no trusted third party for new blocks.
- A trust assumption about pre-snapshot history: you are trusting that the bundled snapshot matches Bitcoin's true historical chain state. This is the same trade-off as Bitcoin Core's
assumeutxoandassumevalid.
Under Utreexo, every transaction input in every new block must come with an inclusion proof against the current accumulator state. If the bundled snapshot were wrong β wrong roots, wrong height, doctored to hide or invent UTXOs β those proofs simply would not verify as honest peers relay real blocks: signatures would check out but inclusion proofs would fail, and Mandacaru would reject the chain rather than follow it.
In other words, a bad snapshot doesn't silently corrupt the node's view of Bitcoin; it makes the node unable to follow the real chain at all. The worst plausible failure mode is a stuck or refusing node, not a node that quietly accepts invalid history. This is what makes the assumeutreexo trade-off reasonable in practice: you accept faster startup in exchange for a trust assumption that is self-checking against the live network.
If you want zero trust assumptions, a from-genesis IBD (initial block download) without assumeutreexo is not currently exposed in the UI.
- Android 10 (API 29) or higher
- ARM64 device (arm64-v8a architecture)
- Internet connection
Download the latest APK from GitHub Releases.
- Clone the repository:
git clone https://github.com/jvsena42/mandacaru.git
cd mandacaru- Build the project:
./gradlew assembleDebug- Install on your device:
./gradlew installDebug- Launch the app and enable notifications when prompted
- Add a wallet descriptor to track your addresses (in Settings > Descriptors)
- Copy the Electrum server address (in Settings), then configure your wallet to use it as an Electrum server
Monitor your node's status:
- Sync Progress: Current blockchain synchronization percentage
- Network Info: Connected network, peer count, and difficulty
- Peers (expandable): View connected peers, connect to new nodes, disconnect, or ping
- Diagnostics (expandable): Node uptime and memory usage
Search and broadcast transactions:
- Enter a transaction ID (txid) to look up transaction details
- Broadcast a raw transaction to the network
- View complete transaction details and confirmations
Explore the blockchain:
- Block Search: Look up blocks by height or hash
- Chain Status: View block count, best block hash, and validated blocks
- Block Headers: View detailed block header information
Configure your node:
- Electrum Address: Copy the local Electrum server address to pair with your wallet
- Descriptors: Add or list wallet descriptors to track your addresses
- Network: Switch between Bitcoin networks (requires app restart)
- Node: Connect directly to specific Bitcoin nodes
- About: App version and project information
- Donate: Support the project via Lightning
Built with modern Android development practices:
- Kotlin: 100% Kotlin codebase
- Jetpack Compose: Declarative UI framework
- Material Design 3: Modern, adaptive design system
- HorizontalPager + BottomNavigationBar: Swipeable screen navigation
- MVVM Architecture: Clean separation of concerns
- Coroutines & Flow: Async operations and reactive streams
- DataStore: Persistent preferences
- Koin: Lightweight dependency injection
- OkHttp: Network communication
- JSON-RPC: Bitcoin Core compatible RPC interface
- Floresta Wallet - A wallet client running Floresta
- Floresta Core - The underlying Floresta implementation
If you find this project useful, consider supporting development:
Lightning: jvsena42@blink.sv
This project is open source. Please check the repository for license details.
- Built on top of Floresta
- Implements Utreexo accumulator design
- Inspired by the Bitcoin community's commitment to decentralization
Made with β‘ for the Bitcoin network







