
Building on Bitcoin requires an equipped workshop. Code touches real funds as soon as it leaves test regimes, so the development environment must be fully isolated from mainnet, reproducible, and readable. The good news : the Bitcoin toolbox is mature in 2026, largely Rust and C++, almost entirely open sourceOpen sourceSoftware whose source code is public and modifiable by anyone. A fundamental auditability guarantee in Bitcoin.See in the lexicon →, and fits on an average dev machine.
This article does not cover application frameworks (turnkey wallets, BTCPay, etc.) which have their dedicated articles. It focuses on the bricks you call from your code : the bitcoind and bitcoin-cli command, regtest and signet modes, the electrs indexer, the RPCRPC (Remote Procedure Call)Standard protocol for calling functions on a remote program. Bitcoin Core exposes more than 200 RPC commands.See in the lexicon → APIAPI (Application Programming Interface)Interface that lets one program query another program or service. mempool.space exposes a public API for querying the chain.See in the lexicon → and ZMQZMQ (ZeroMQ)Library that lets programs exchange messages in real time. Bitcoin Core uses it to notify new transactions and new blocks.See in the lexicon → bus, the libsecp256k1libsecp256k1Reference cryptographic library for Bitcoin, written in C and maintained by the Bitcoin Core developers. Used by almost every serious wallet.See in the lexicon → cryptographic library and its bindings, the modern Software Development Kits BDK and LDK, and Lightning simulation environments (Polar, Mutinynet).
The common thread is the same method : start in regtest on your local machine, then move up to signet to validate on a shared Bitcoin network with no value, and only then consider mainnet, with symbolic amounts first. Any other sequence is paid in expensive bugs.
Bitcoin Core : bitcoind, bitcoin-cli, regtest and signet
Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → is the reference implementation of the Bitcoin protocol and the heart of any serious dev environment. The bitcoind binary exposes the nodeNodeComputer that runs the Bitcoin software and takes part in the network by validating blocks and transactions. A « full node » keeps a complete copy of the blockchain.See in the lexicon → (block validation, transaction relay, RPCRPC (Remote Procedure Call)Standard protocol for calling functions on a remote program. Bitcoin Core exposes more than 200 RPC commands.See in the lexicon →), bitcoin-cli is the command-line client, and bitcoin-tx, bitcoin-util, bitcoin-walletWalletSoftware or device that manages your Bitcoin keys and lets you sign transactions. A wallet does not really « hold » your bitcoins, it holds the keys that prove you own them.See in the lexicon → are complementary utilities. Installation : official binaries on bitcoincore.org for Linux/macOS/Windows, or compilation from GitHubGitHubWeb platform that hosts most of the world's open-source projects, including Bitcoin Core, electrs, BDK and LDK. Lets you read the code, browse change history and submit contributions.See in the lexicon → source bitcoin/bitcoin (classic Autoconf, over 3 million lines of C++).
Regtest mode. The most useful mode for dev : an entirely private Bitcoin network on your machine, where you generate blocks on demand via generatetoaddress. Launch : bitcoind -regtest, then bitcoin-cli -regtest createwallet test, getnewaddress, generatetoaddress 101 ADDRESS to create 50 BTC instantly. No real value, millisecond iteration, ability to forkFork (soft fork, hard fork)Change to the protocol rules. A soft fork stays compatible with old nodes (SegWit, Taproot); a hard fork creates a separate chain (Bitcoin Cash in 2017).See in the lexicon → and rewind at will. Ideal for automated tests and TaprootTaprootMajor Bitcoin upgrade activated in November 2021 (BIP 341). Brings more privacy, scripting flexibility and the efficiency of Schnorr signatures.See in the lexicon → script development.
Signet mode. A public but worthless Bitcoin network, signed by a coordinator (the Bitcoin Core foundation or an alternative signer such as Mutinynet). Same rules as mainnet (real Bitcoin, Taproot enabled, Lightning transactions), but coins are free via faucet. Ideal for integration tests with other actors and for validating that your code works on a real Bitcoin network before mainnet. Activation : bitcoind -signet, faucet on signetfaucet.com to grab 0.01 sBTC.
RPC API, ZMQ and electrs indexing
The JSON-RPCRPC (Remote Procedure Call)Standard protocol for calling functions on a remote program. Bitcoin Core exposes more than 200 RPC commands.See in the lexicon → APIAPI (Application Programming Interface)Interface that lets one program query another program or service. mempool.space exposes a public API for querying the chain.See in the lexicon → is the main door into Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → from your code. Over 200 documented commands, from getblockcount (simple read) to sendrawtransaction (broadcast). Authentication via automatic cookie locally or via rpcauth in bitcoin.conf for network usage. Client libraries for most languages : python-bitcoinrpc (Python), bitcoin-core/rpc (Rust), bcoin (NodeNodeComputer that runs the Bitcoin software and takes part in the network by validating blocks and transactions. A « full node » keeps a complete copy of the blockchain.See in the lexicon →.js), btcd/rpcclient (Go). Typical performance : 1 000 to 10 000 requests per second on a local Bitcoin Core in NVMe SSD, enough for most applications.
The ZMQZMQ (ZeroMQ)Library that lets programs exchange messages in real time. Bitcoin Core uses it to notify new transactions and new blocks.See in the lexicon → bus complements RPC when you want to be notified in real time without polling : on each new transaction in the mempoolMempoolWaiting area where Bitcoin transactions sit before being included in a block. The fuller the mempool, the higher the fees required.See in the lexicon →, each new validated block, each accepted block hashHashFunction that turns data of any size into a fixed-size fingerprint. The same input always yields the same output, but you cannot go back from output to input.See in the lexicon →. Configuration : zmqpubrawblock=tcp://127.0.0.1:28332 in bitcoin.conf, plus a ZMQ client in your code (libzmq, bindings for all languages). Essential for indexers, Lightning watchtowers, real-time scan services.
electrs (electrum-rs, Rust) is the reference Electrum indexer, faster and lighter than ElectrumX. It observes Bitcoin Core via RPC plus ZMQ, indexes scripts (addresses) in a local RocksDB database, and exposes the Electrum protocol on port 50001 for client wallets (Sparrow, Electrum, Specter). Enables instant address queries that Bitcoin Core alone does not provide. Essential for those developing a walletWalletSoftware or device that manages your Bitcoin keys and lets you sign transactions. A wallet does not really « hold » your bitcoins, it holds the keys that prove you own them.See in the lexicon → or an address tracking service.
libsecp256k1 and cryptographic libraries per language
libsecp256k1libsecp256k1Reference cryptographic library for Bitcoin, written in C and maintained by the Bitcoin Core developers. Used by almost every serious wallet.See in the lexicon → is the reference cryptographic library for Bitcoin, written in C, maintained by Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → developers. It implements the secp256k1secp256k1Mathematical elliptic curve used by Bitcoin to generate private / public key pairs. Different from SHA-3 / Keccak (Ethereum).See in the lexicon → elliptic curve used for Bitcoin signatures (ECDSAECDSALegacy signature algorithm used by Bitcoin before Taproot. Signs a transaction with a private key to prove ownership.See in the lexicon → and SchnorrSchnorrMore modern signature algorithm, activated by Taproot in 2021 (BIP 340). More efficient, enables signature aggregation (MuSig2).See in the lexicon → since TaprootTaprootMajor Bitcoin upgrade activated in November 2021 (BIP 341). Brings more privacy, scripting flexibility and the efficiency of Schnorr signatures.See in the lexicon → 2021), with extreme focus on constant-time performance (resistance to side-channel attacks) and formal verification. Compilation : standard autotools, minimal dependencies.
For most developments, you do not call libsecp256k1 directly but via your language bindings. Python : python-bitcoinlib (full stack), coincurve (direct FFI to libsecp256k1). Rust : rust-bitcoin and rust-secp256k1 (the foundations BDK is built on). JavaScript : bitcoinjs-lib (pure JS) or tiny-secp256k1 (WebAssembly FFI). Go : btcd/btcec, dchest/siphash. C++ : Bitcoin Core itself exposes the APIAPI (Application Programming Interface)Interface that lets one program query another program or service. mempool.space exposes a public API for querying the chain.See in the lexicon →.
For common operations (signing a transaction, verifying a signature, deriving a BIP32 child key), going through a high-level library avoids pitfalls. For advanced topics (MuSig2MuSig2Schnorr signature aggregation protocol (BIP 327). Lets multiple signers produce a single signature indistinguishable from a single-signer one.See in the lexicon →, Schnorr aggregation, FROST), libsecp256k1 exposes experimental modules updated alongside BIPs (327 MuSig2 for example). Advice : never write home-made cryptography in production, always rely on libsecp256k1 or a maintained binding.
BDK and LDK : modern Software Development Kits
Bitcoin Dev Kit (BDK) is a high-level Rust library for building Bitcoin wallets without reinventing the wheel. Maintained by the BDK Foundation (Steve Myers, Lloyd Fournier, riccardobl, team). Covers PSBTPSBT (Partially Signed Bitcoin Transaction)Standard format (BIP 174) that lets you build a transaction on one device, sign it on another and broadcast it from a third. Backbone of the modern multisig workflow.See in the lexicon →, multi-descriptor, UTXOUTXO (Unspent Transaction Output)« Chunk » of bitcoin received and not yet spent. A wallet does not have a single balance, it has a collection of UTXOs whose sum makes up the balance.See in the lexicon → selection, Electrum/Esplora/Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → integration, and hardware signatures. Stable bindings for Kotlin, Swift, Python, JavaScript via uniffi-rs. Used in production by Mutiny WalletWalletSoftware or device that manages your Bitcoin keys and lets you sign transactions. A wallet does not really « hold » your bitcoins, it holds the keys that prove you own them.See in the lexicon →, Block's Bitkey, Bull Bitcoin and others.
Lightning Dev Kit (LDK) is the Lightning NetworkLightning NetworkSecond-layer payment network on top of Bitcoin. Enables near-instant and near-free payments through channels opened between users.See in the lexicon → equivalent, maintained by Spiral (Block subsidiary). Modular Rust library to integrate Lightning into an existing application, without depending on an external LND or CLN daemon. You provide your own storage, your own chain source (Bitcoin Core RPCRPC (Remote Procedure Call)Standard protocol for calling functions on a remote program. Bitcoin Core exposes more than 200 RPC commands.See in the lexicon → or Esplora), your own network transport. Used by Cash App for its Lightning payments, Mutiny Wallet, and many regulated services.
Choosing between BDK plus custom LDK or a classic Lightning daemon (LND, Core LightningLND, Core Lightning (CLN), EclairThree main implementations of the Lightning protocol. LND (from Lightning Labs) is the most widely deployed.See in the lexicon →, Eclair) depends on the project. Standalone mobile app : BDK plus LDK to integrate everything without depending on a server. Backend service that can manage a daemon : LND or CLN, more mature, more documentation, more plugins. The 2024-2026 trend goes towards BDK and LDK for sovereign wallets wanting to avoid remote daemon dependency.
Polar and Mutinynet : simulation environments
Polar (polarlightning.com, MIT open sourceOpen sourceSoftware whose source code is public and modifiable by anyone. A fundamental auditability guarantee in Bitcoin.See in the lexicon →) is a graphical tool to orchestrate Lightning test networks on regtest. Drag-and-drop interface : add a Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → nodeNodeComputer that runs the Bitcoin software and takes part in the network by validating blocks and transactions. A « full node » keeps a complete copy of the blockchain.See in the lexicon →, several LND or CLN nodes, create channels between them, make test payments. Ideal for developing and debugging a Lightning application before signet : visually see channels, payments, chosen routes, and fix bugs without fees.
Mutinynet (mutinynet.com, launched by Mutiny WalletWalletSoftware or device that manages your Bitcoin keys and lets you sign transactions. A wallet does not really « hold » your bitcoins, it holds the keys that prove you own them.See in the lexicon → in 2023) is an alternative signet with two valuable particularities for dev. First, blocks are at 30 seconds instead of 10 minutes : ultra-fast iteration. Second, there is a generous and public faucet, plus a dedicated explorer. Ideal for integration tests where one needs a real shared Bitcoin network but without the slowness of mainnet nor the scarcity of classic signet faucets.
Typical workflow. Local regtest for solo dev and fast unit tests. Polar to debug multi-node Lightning scenarios. Mutinynet for integration tests with other services (your wallet against a BTCPay in signet, for example). Official signet to validate that you really speak to a standard Bitcoin. Mainnet last, and only after serious code audit.
Learning resources and best practices
Official documentation. bitcoin.org/en/development for fundamentals, doc.bitcoincore.org for the current Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → version, githubGitHubWeb platform that hosts most of the world's open-source projects, including Bitcoin Core, electrs, BDK and LDK. Lets you read the code, browse change history and submit contributions.See in the lexicon →.com/bitcoinbook/bitcoinbook (Andreas Antonopoulos's Mastering Bitcoin, 3rd edition 2023) for pedagogy. For BIPs, github.com/bitcoin/bips remains the source of truth (covered in the BIPs important article of the Approfondir topic).
Structured courses and tutorials. Chaincode Labs Bitcoin Protocol Development (free online course, 12 weeks, serious, intermediate to advanced level). Programming Bitcoin by Jimmy Song (Python, build the crypto primitives yourself for learning, book then course). Learning Bitcoin from the Command Line (github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line, free, very progressive).
Best practices. One, read the release notes of each Bitcoin Core version to stay updated (breakages, deprecations). Two, never commit a private keyPrivate keySecret number that proves ownership of bitcoins at a given address. Whoever holds the private key holds the bitcoins. Never share it and never store it in plain text.See in the lexicon → or seed phraseSeed phraseSequence of 12 or 24 words (usually in English) that encodes your master key. Universal wallet backup : with these words, you can restore your funds on any compatible software.See in the lexicon → to a Git repoRepo (repository)Code repository on GitHub or an equivalent platform. The Bitcoin Core repo is github.com/bitcoin/bitcoin.See in the lexicon →, even test, even temporary (Git history will remain). Three, isolate regtest/signet/mainnet environments with separate environment variables and data directories. Four, sign your release commits and publish binaries with PGP for downstream users. Five, give back : a PR on Bitcoin Core, BDK, LDK, electrs, is also how collective security progresses.
Disclaimer
Educational and informational content only: not investment, tax or legal advice. Bitcoin carries significant risks, including high volatility and the possible loss of invested capital. Each reader remains responsible for their decisions; when in doubt, consult a qualified professional in your jurisdiction.
See also
To run a Bitcoin CoreBitcoin CoreReference implementation of the Bitcoin software, written in C++ and maintained by an open-source community. This is the software that most nodes run.See in the lexicon → nodeNodeComputer that runs the Bitcoin software and takes part in the network by validating blocks and transactions. A « full node » keeps a complete copy of the blockchain.See in the lexicon → at home in practice, see Personal Bitcoin node and Run a Bitcoin node. For BIPs that formalise the protocols, see Important BIPs. for the overview, see Bitcoin tools.