A cross-platform library of cryptographic primitives for building cryptocurrency wallets.
libwally-core is a cross-platform library that provides cryptographic primitives and utilities essential for building cryptocurrency wallets. It solves the problem of implementing secure, consistent wallet functionality across different programming languages and operating systems. The library includes support for key operations like signing, address derivation, and optional Elements/Liquid features.
Cryptocurrency wallet developers, embedded systems engineers working on hardware wallets, and teams building cross-platform financial applications that require secure cryptographic operations.
Developers choose libwally-core because it offers a battle-tested, portable foundation that abstracts away platform-specific complexities, reduces implementation errors, and is trusted by major projects like Blockstream Green and BitBox02 hardware wallets.
Useful primitives for wallets
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Builds for Linux, Android, macOS, iOS, Windows, embedded systems like ESP-32, and WebAssembly, as listed in the Platforms section, ensuring broad deployment options.
Provides native interfaces for C, C++, Python, Java, and JavaScript via SWIG bindings, enabling use across diverse tech stacks without rewriting crypto logic.
Includes extensive testing suites, coverage reporting, fuzzing support, and is trusted by major projects like Blockstream Green and BitBox02, as noted in the Users list.
Offers configurable minimal builds with the --enable-minimal option to reduce library size and memory usage for resource-constrained environments.
Optional support for Elements sidechain features via --disable-elements configure flag, enabling Liquid Network functionality without bloating the core library.
Requires running multiple scripts (autogen.sh, configure with numerous options) and managing git submodules, which adds setup overhead and potential for errors.
WebAssembly support is a preview feature with warnings against using it for signing due to potential loss of constant-time properties, limiting secure browser applications.
The CHANGES.md file documents ABI changes, meaning upgrades may require code adjustments and can break compatibility in shared library deployments.
For language bindings like Python and Java, it relies on SWIG and specific installations (e.g., Java JDK, SWIG via brew), increasing setup complexity.