Skip to content

2026 Q3 Update: What Have We Been Up To?

  thunderbiscuit
  Oct 1, 2026


Q3 2026 was a quarter of building on the 3.0 foundation. bdk_wallet 3.2.0 starts the move to caller-owned keys by deprecating the wallet-owned signing APIs, and ships an early look at a new PSBT building API powered by bdk-tx. Our Dart bindings reached a stable 1.0, bdk-cli hit 4.0 with experimental silent payments support, and two members of the team gave talks at bitcoin++ in Toronto.

Here are some of the notable releases and changes over Q3 to the software libraries we maintain:

  • Release 3.2.0 of bdk_wallet: signing moves to caller-owned keys. This release deprecates the wallet-owned signing APIs: Wallet::{add_signer, set_keymap, set_keymaps, get_signers, sign, policies}, CreateParams::keymap, LoadParams::{keymap, extract_keys}, and TxBuilder::policy_path. Going forward, the wallet no longer needs to hold your keys: sign with bitcoin::Psbt::sign, or with Wallet::sign_with_signers if you need SignOptions, and choose spending conditions with the new TxBuilder::set_condition. The Book of BDK has release notes for 3.2 and a migration guide for the deprecated signing APIs.
  • An early look at Wallet::create_psbt. Also in 3.2.0, Wallet::create_psbt and Wallet::replace_by_fee bring the bdk-tx transaction building API into the wallet, with PsbtParams and a SelectionStrategy enum for coin selection. The API is gated behind the bdk-tx feature and the --cfg bdk_wallet_unstable rustc flag, so we can iterate on it before stabilizing; the Book of BDK walks through how to enable and use it. If you build transactions with BDK, now is a great time to try it and tell us what you think.
  • bdk-dart 1.0.0 is out! After two more release candidates this quarter (rc.3 and rc.4), our Dart/Flutter bindings shipped their first stable release. Built on bdk-ffi 3.1.0, it brings the new wallet creation and loading params, two-path descriptor wallets, Wallet.signWithSigners, coin selection on the TxBuilder, and fee-rate-limited PSBT extraction to Flutter developers. Native builds are now reproducible, and publishing to pub.dev is automated from release tags.
  • Release 3.1.0 of the language bindings. bdk-ffi 3.1.0 updates Swift, Kotlin, Android, JVM, and Python to bdk_wallet 3.1.0 and bdk_kyoto 0.17.1. New APIs include Wallet::sign_with_signers, wallet create and load params, two-path descriptor wallet loading, Wallet::keychains, TxBuilder coin selection, public descriptor conversion, Psbt::extract_tx_with_fee_rate_limit, Electrum client params, and an option to restrict Kyoto to your configured peers. It also hardens a number of edge cases, like rejecting trailing bytes when decoding transactions and rejecting invalid transaction builder current heights.
  • Release 4.0.0 of bdk-cli. This release of our sample command line wallet is a big one: experimental support for creating silent payment transactions, BIP-353 DNS payment instructions, new lock_utxo/unlock_utxo/locked_utxos commands, generic message signing, and randomization of the unspendable internal key for taproot descriptors. Async payjoin sessions are now persisted to SQLite, so an interrupted session can be resumed. The project structure was refactored to make adding new commands easier, integration tests were added, and the wallet API was updated to 3.1.0.
  • Silent payments keep maturing. Our silent payments crate published bdk_sp 0.2.0 to crates.io, rejecting eligible inputs without private keys when sending. Work since then on master enforces the BIP-352 K_max per-group recipient limit when scanning, accepts tsp recipients on Signet and Testnet4, and adds a full send-and-scan example. On the chain source side, electrum_streaming_client gained support for Electrum protocol v1.6 and for Frigate's silent payments RPC methods, laying the groundwork for server-assisted silent payment scanning.
  • Taint-aware balances in bdk_chain. Landed on master this quarter and not yet released, a rework of CanonicalView::balance derives trust from an output's whole unconfirmed ancestry, so an owned output descending from a foreign unconfirmed coin is no longer counted as trusted. It adds CanonicalView::classify_outpoints, the Eligibility enum, and a new Balance::unknown_pending bucket, and replaces min_confirmations with a more general is_settled predicate. ChainPosition::confirmations_lower_bound also landed. These are breaking changes, so expect them in the next major release of bdk_chain.
  • Release 0.13.0 of rust-esplora-client. The 0.13.0 release moves both the blocking and async clients onto bitreq, updates the broadcast API, switches all weight fields to bitcoin::Weight, and relicenses the crate under MIT/Apache-2.0.
  • Release 0.17.1 of bdk-kyoto. This patch release of our compact block filters chain source makes update cancel safe, so dropping the future mid-sync no longer loses data.
  • Release 0.3.0 of rust-cktap. This release of our Coinkite TAPSIGNER and SATSCARD library adds counterfeit TAPSIGNER detection and preserves the card nonce after an invalid signature. It includes a few breaking changes to integer types in its API.
  • Release 0.2.0 of bdk-message-signer. Our message signing library was upgraded from bdk_wallet 2.x to 3.1.0. Note that bdk_wallet types appear in its public API, so downstream users need to be on bdk_wallet 3.x to use this release.
  • Example wallets and React Native. The DevKit Wallet went all in on compact block filters: it recovers from genesis on a wallet's first boot, lets you set custom peers, and now shows node status, chain tip, and connected peer count on its node screen. The BDK Swift Example Wallet moved to bdk-swift 3.1.0. Over in bdk-rn, the library is tracking bdk-ffi 3.1, runs its test suite on an Android emulator in CI, and is getting ready to publish to npm with prebuilt binaries.
  • Security reporting. We made sure we added SECURITY.md files to all our libraries and a link to the GitHub security advisory so vulnerabilities can be reported to us privately across the org.

Triaging Bug Reports

We've been receiving a number of AI-generated bug reports, and a good share of the team's time this quarter has gone into triaging them. Some turn out to be duplicates or non-issues, but others point at real bugs, and we're taking those seriously. We'll be working through the confirmed ones in priority order, with the most impactful fixes first, so keep an eye out for bug fix releases across our libraries in the coming weeks and months.

Our Grantees in Action

The team was at bitcoin++ Toronto, the conference's consensus edition, held July 22–24. Two talks from the team:

  • Matthew Ramsden presented "BDK Expanding: From Rust Core to Mobile Wallets" on July 22, on how BDK reaches the places mobile wallets actually ship: Swift, Kotlin, and in 2026 the newer Dart and React Native libraries. Watch the presentation on Youtube.
  • thunderbiscuit presented "Compact Block Filters for Users and Wallet Developers" on the main stage on July 23, a practical look at integrating compact block filter syncing into mobile and server applications using BDK and the Kyoto light client, including the storage and bandwidth costs involved. Watch the presentation on Youtube.