Skip to content
Back to skills

Bdk Jvm

ASecurity

bdk-jvm / bdk-android: Kotlin/Java bindings to BDK. Same descriptor- first wallet API. UniFFI-generated. USE WHEN: building JVM / Android wallets with BDK quality.

  • 31 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 8, 2026
ai-agentspythonrustgojavakotlinsqlgitapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill bdk-jvm --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Bdk Jvm?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Bdk Jvm
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-bdk-jvm/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-bdk-jvm)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: bitcoin-libraries-bdk-jvm
description: |
  bdk-jvm / bdk-android: Kotlin/Java bindings to BDK. Same descriptor-
  first wallet API. UniFFI-generated.
  USE WHEN: building JVM / Android wallets with BDK quality.
allowed-tools: Read, Grep, Glob
---

# bdk-jvm / bdk-android

JVM bindings to Rust BDK.

Repos (as of September 2026):
- `github.com/bitcoindevkit/bdk-jvm` (JVM desktop) — split out of `bdk-ffi`
  into its own repo in July 2025.
- `github.com/bitcoindevkit/bdk-ffi`, `bdk-android/` subdirectory (Android) —
  still built from the `bdk-ffi` monorepo.

## Install

Both artifacts are at 3.1.0 (September 2026), built on bdk-ffi 3.1.0 /
bdk_wallet 3.1.0 / uniffi 0.31.2.

Gradle (Android):
```gradle
implementation 'org.bitcoindevkit:bdk-android:3.1.0'
```

Gradle (JVM):
```gradle
implementation 'org.bitcoindevkit:bdk-jvm:3.1.0'
```

## Quick example (Kotlin)

```kotlin
import org.bitcoindevkit.*

// Since 3.0.0 (June 2026) the Descriptor constructor takes a NetworkKind.
val descriptor = Descriptor("wpkh(xprv.../84h/0h/0h/0/*)", NetworkKind.MAIN)
val change = Descriptor("wpkh(xprv.../84h/0h/0h/1/*)", NetworkKind.MAIN)

// Persistence is a Persister object, not a bare path string.
val persister = Persister.newSqlite("/path/to/db.sqlite")
val wallet = Wallet(descriptor, change, Network.BITCOIN, persister)

// Scans go through a request builder; the client never touches the wallet.
val esplora = EsploraClient("https://mempool.space/api")
val request = wallet.startFullScan().build()
wallet.applyUpdate(esplora.fullScan(request, 10uL, 1uL))
wallet.persist(persister)

val addr = wallet.revealNextAddress(KeychainKind.EXTERNAL)
println(addr.address)
```

Reopen an existing wallet with `Wallet.load(descriptor, change, persister)`;
`Wallet.createSingle(descriptor, network, persister)` builds a
single-descriptor wallet.

## 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](../bitcoinj/SKILL.md) for comparison.

## Common pitfalls

- Native `.so` files per Android architecture; APK size grows. 3.1.0 ships
  `arm64-v8a`, `armeabi-v7a` and `x86_64` (32-bit `x86` is not built).
- UniFFI bindings sometimes lag Rust by a version.
- The two artifacts do not share a bytecode target: bdk-android 3.1.0 sets
  `minSdk` 24 and targets JVM 17, bdk-jvm 3.1.0 targets JVM 11.

## See also

- [bdk/SKILL.md](../bdk/SKILL.md)
- [bdk-python/SKILL.md](../bdk-python/SKILL.md)
- [bitcoinj/SKILL.md](../bitcoinj/SKILL.md)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…