bitcoinj is a Java library for working with the Bitcoin protocol that enables wallet management and transaction handling without requiring a local Bitcoin Core installation.
The library solves the problem of integrating Bitcoin functionality into Java applications by providing a complete implementation of the Bitcoin protocol. It allows developers to maintain wallets, send and receive transactions, and interact with the Bitcoin network directly from Java code. The approach works by implementing the protocol in pure Java, supported by Google Protocol Buffers for serialization and hardware communications, making it portable across platforms including Android.
Developers should choose this library if they are building Java or Android applications that need native Bitcoin integration. It suits projects ranging from command-line wallet tools to JavaFX-based wallet applications, with the project providing both a wallet tool subproject for managing HD keychains and SPV blockchain state, and a wallet template subproject as a starting point for building graphical wallet applications. The library supports modern Bitcoin features including Segregated Witness, Taproot, and various BIPs relevant to transaction handling and key derivation.
The project maintains active builds across multiple Java versions, with official builds using Java 17 and continuous integration testing against Java 17, 21, and 25. The codebase is modular, with base and core modules supporting Java 8 for broader compatibility while newer modules require more recent Java versions. The project provides comprehensive documentation and example applications to help developers get started. Build infrastructure spans both GitHub Actions and GitLab pipelines, with test coverage tracking in place.