Bdk
A modern, lightweight, descriptor-based wallet library written in Rust!
Install / Use
/learn @bitcoindevkit/BdkREADME
The Bitcoin Dev Kit
<div align="center"> <img src="./static/bdk.png" width="220" /> <p> <strong>A suite of libraries for building modern, lightweight, descriptor-based wallets written in Rust!</strong> </p> <p> <a href="https://github.com/bitcoindevkit/bdk/blob/master/LICENSE"><img alt="MIT or Apache-2.0 Licensed" src="https://img.shields.io/badge/license-MIT%2FApache--2.0-blue.svg"/></a> <a href="https://github.com/bitcoindevkit/bdk/actions?query=workflow%3ACI"><img alt="CI Status" src="https://github.com/bitcoindevkit/bdk/workflows/CI/badge.svg"></a> <a href="https://coveralls.io/github/bitcoindevkit/bdk?branch=master"><img src="https://coveralls.io/repos/github/bitcoindevkit/bdk/badge.svg?branch=master"/></a> <a href="https://blog.rust-lang.org/2025/02/20/Rust-1.85.0/"><img alt="Rustc Version 1.85.0+" src="https://img.shields.io/badge/rustc-1.85.0%2B-lightgrey.svg"/></a> <a href="https://discord.gg/d7NkDKm"><img alt="Chat on Discord" src="https://img.shields.io/discord/753336465005608961?logo=discord"></a> </p> <h4> <a href="https://bitcoindevkit.org">Project Homepage</a> </h4> </div>About
The bdk libraries aim to provide well engineered and reviewed components for Bitcoin wallets and other applications.
They are built upon the excellent rust-bitcoin and rust-miniscript crates.
Architecture
The workspace in this repository contains several crates in the /crates directory:
| Sub-Directory | Description | Badges |
|---------------|-------------|--------|
| chain | Tools for storing and indexing chain data. |
|
|
core | A collection of core structures used by the bdk_chain, bdk_wallet, and BDK's chain data source crates. |
|
|
esplora | Extends the esplora-client crate with methods to fetch chain data from an esplora HTTP server in the form that bdk_chain and Wallet can consume. |
|
|
electrum | Extends the electrum-client crate with methods to fetch chain data from an electrum server in the form that bdk_chain and Wallet can consume. |
|
|
bitcoind_rpc | Extends bitcoincore-rpc for emitting blockchain data from the bitcoind RPC interface in the form that bdk_chain and Wallet can consume. |
|
|
file_store | Persistence backend for storing chain data in a single file. Intended for testing and development purposes, not for production. |
|
The bdk_wallet repository and crate contains a higher level Wallet type that depends on the above lower-level mechanism crates.
Fully working examples of how to use these components are in /examples:
example_cli: Library used by theexample_*crates. Provides utilities for syncing, showing the balance, generating addresses and creating transactions without using the bdk_walletWallet.example_electrum: A command line Bitcoin wallet application built on top ofexample_cliand theelectrumcrate. It shows the power of the bdk tools (chain+file_store+electrum), without depending on the mainbdk_walletlibrary.example_esplora: A command line Bitcoin wallet application built on top ofexample_cliand theesploracrate. It shows the power of the bdk tools (chain+file_store+esplora), without depending on the mainbdk_walletlibrary.example_bitcoind_rpc_polling: A command line Bitcoin wallet application built on top ofexample_cliand thebitcoind_rpccrate. It shows the power of the bdk tools (chain+file_store+bitcoind_rpc), without depending on the mainbdk_walletlibrary.
Minimum Supported Rust Version (MSRV)
The following BDK crates maintains a MSRV of 1.85.0. To build these crates with the MSRV of 1.85.0 you will need to pin dependencies by running the pin-msrv.sh script.
bdk_corebdk_chainbdk_bitcoind_rpcbdk_esplorabdk_file_storebdk_electrum
Just
This project has a justfile for easy command running. You must have just installed.
To see a list of available recipes: just
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
