bdk-jvm / bdk-android
JVM bindings to Rust BDK.
Repos:
github.com/bitcoindevkit/bdk-jvm(JVM desktop).github.com/bitcoindevkit/bdk-android(Android).
Install
Gradle (Android):
implementation 'org.bitcoindevkit:bdk-android:1.0.0'
Gradle (JVM):
implementation 'org.bitcoindevkit:bdk-jvm:1.0.0'
Quick example (Kotlin)
import org.bitcoindevkit.*
val descriptor = Descriptor("wpkh(xprv.../84h/0h/0h/0/*)", Network.BITCOIN)
val change = Descriptor("wpkh(xprv.../84h/0h/0h/1/*)", Network.BITCOIN)
val wallet = Wallet(descriptor, change, Network.BITCOIN, "/path/to/db")
val esplora = EsploraClient("https://mempool.space/api", null, 5, 100, null)
wallet.fullScan(esplora, 5, 1)
val addr = wallet.revealNextAddress(KeychainKind.EXTERNAL)
println(addr.address.asString())
Bindings
- Same API as Rust BDK and bdkpython.
- UniFFI auto-generates bindings.
- Coverage: ~95% of Rust BDK API.
Use cases
- Android wallets — modern alternative to bitcoinj.
- JVM desktop apps.
- Server-side JVM Bitcoin services.
Compared
See bitcoinj/SKILL.md for comparison.
Common pitfalls
- Native
.sofiles per Android architecture; APK size grows. - UniFFI bindings sometimes lag Rust by a version.