Release v0.3.0

By Alekos Filini

A new release of BDK is out: the v0.3.0 is a relatively small update compared to v0.2.0, but it still brings some nice APIs improvements and general bugfixes.

You can find the full v0.3.0 changelog on GitHub.

What’s new in v0.3.0

Below are some highlights of the new improved APIs coming with this release:

Less verbosity when using Wallet::new_offline()

Now you don’t have to explicitly provide the OfflineWallet<_> type anymore, saving you one import and making it much less verbose to use.

Where before you were doing:

let wallet: OfflineWallet<_> = Wallet::new_offline(...)?;

Now you can just write:

let wallet = Wallet::new_offline(...)?;

No more error conversions in DescriptorTemplate

The DescriptorTemplate trait has been updated to return a descriptor::error::Error instead of a KeyError. The descriptor!() macro has been updated as well, which means that now you can use the macro inside a DescriptorTemplate::build() implementation without having to map the error, like so:

pub struct TimeDecayingMultisig<K> {
    pk_a: K,
    pk_b: K,
    timelock: u32,

impl<K: ToDescriptorKey<Segwitv0>> DescriptorTemplate for TimeDecayingMultisig<K> {
    fn build(self) -> Result<DescriptorTemplateOut, descriptor::error::Error> {

A new repo for the CLI

The cli module (and it’s related cli-utils feature) have been removed from the main BDK repo and moved to their new home, the bdk-cli repo. The APIs exposed were mainly used internally, for the repl and the playground in our website, but in case you were using one of those keep that in mind.


A huge thanks to everybody who contributed to this new release with suggestions, pull requests and bug reports.

Since the v0.2.0 release around a month ago, we’ve had 24 new commits made by 6 different contributors for a total of 404 additions and 1243 deletions. Here’s the full diff.

A special thanks to the new contributor for this release: