|0.0.113||Dec 16, 2022|
|0.0.112||Oct 25, 2022|
|0.0.111||Sep 13, 2022|
|0.0.110||Jul 26, 2022|
|0.0.1||Nov 24, 2020|
#696 in Magic Beans
1,835 downloads per month
Used in lightning-background-processor
rust-lightning is a highly performant and flexible
implementation of the Lightning Network protocol.
The primary crate,
lightning, is runtime-agnostic. Data persistence, chain interactions,
and networking can be provided by LDK's sample modules, or you may provide your
own custom implementations.
More information is available in the
The project implements all of the BOLT specifications, and has been in production use since 2021. As with any Lightning implementation, care and attention to detail is important for safe deployment.
rust-lightning and Lightning Development Kit happen through
our LDK Discord channels.
The core of the LDK library, implements the Lightning protocol, channel state machine,
and on-chain logic. Supports
no-stdand exposes only relatively low-level interfaces.
- lightning-background-processor Utilities to perform required background tasks for Rust Lightning.
- lightning-block-sync Utilities to fetch the chain data from a block source and feed them into Rust Lightning.
- lightning-invoice Data structures to parse and serialize BOLT #11 Lightning invoices.
Implementation of the
rust-lightningnetwork stack using the Tokio
rust-lightningclients which wish to make direct connections to Lightning P2P nodes, this is a simple alternative to implementing the required network stack, especially for those already using Tokio.
Implements utilities to manage
rust-lightningchannel data persistence and retrieval. Persisting channel data is crucial to avoiding loss of channel funds.
- lightning-rapid-gossip-sync Client for rapid gossip graph syncing, aimed primarily at mobile clients.
rust-lightning is a generic library that allows you to build a Lightning
node without needing to worry about getting all of the Lightning state machine,
routing, and on-chain punishment code (and other chain interactions) exactly
correct. Note that LDK isn't, in itself, a node. For an out-of-the-box Lightning
node based on LDK, see Sensei. However, if you
want to integrate Lightning with custom features such as your own chain sync,
key management, data storage/backup logic, etc., LDK is likely your best option.
rust-lightning utilities such as those in
chan_utils are also suitable for use in
non-LN Bitcoin applications such as Discreet Log Contracts (DLCs) and bulletin boards.
A sample node which fetches blockchain data and manages on-chain funds via the Bitcoin Core RPC/REST interface is available here. The individual pieces of that demo are composable, so you can pick the off-the-shelf parts you want and replace the rest.
rust-lightning does not provide (but LDK has implementations of):
- on-disk storage - you can store the channel state any way you want - whether Google Drive/iCloud, a local disk, any key-value store/database/a remote server, or any combination of them - we provide a clean API that provides objects which can be serialized into simple binary blobs, and stored in any way you wish.
- blockchain data - we provide a simple
block_disconnectedAPI which you provide block headers and transaction information to. We also provide an API for getting information about transactions we wish to be informed of, which is compatible with Electrum server requests/neutrino filtering/etc.
- UTXO management - RL/LDK owns on-chain funds as long as they are claimable as part of a Lightning output which can be contested - once a channel is closed and all on-chain outputs are spendable only by the user, we provide users notifications that a UTXO is "theirs" again and it is up to them to spend it as they wish. Additionally, channel funding is accomplished with a generic API which notifies users of the output which needs to appear on-chain, which they can then create a transaction for. Once a transaction is created, we handle the rest. This is a large part of our API's goals - making it easier to integrate Lightning into existing on-chain wallets which have their own on-chain logic - without needing to move funds in and out of a separate Lightning wallet with on-chain transactions and a separate private key system.
- networking - to enable a user to run a full Lightning node on an embedded machine, we don't specify exactly how to connect to another node at all! We provide a default implementation which uses TCP sockets, but, e.g., if you wanted to run your full Lightning node on a hardware wallet, you could, by piping the Lightning network messages over USB/serial and then sending them in a TCP socket from another machine.
- private keys - again we have "default implementations", but users can chose to provide private keys to RL/LDK in any way they wish following a simple API. We even support a generic API for signing transactions, allowing users to run RL/LDK without any private keys in memory/putting private keys only on hardware wallets.
LDK's customizability was presented about at Advancing Bitcoin in February 2020: https://vimeo.com/showcase/8372504/video/412818125
The goal is to provide a fully-featured and incredibly flexible Lightning
implementation, allowing users to decide how they wish to use it. With that
in mind, everything should be exposed via simple, composable APIs. More
rust-lightning's flexibility is provided in the
For security reasons, do not add new dependencies. Really do not add new
non-optional/non-test/non-library dependencies. Really really do not add
dependencies with dependencies. Do convince Andrew to cut down dependency usage
Rust-Lightning vs. LDK (Lightning Development Kit)
rust-lightning refers to the core
lightning crate within this repo, whereas
rust-lightning and all of its sample modules and crates (e.g.
lightning-persister crate), language bindings, sample node
implementation(s), and other tools built around using
Lightning integration or building a Lightning node.
"Rust-Lightning, not Rusty's Lightning!"
Contributors are warmly welcome, see CONTRIBUTING.md.
rust-lightning high-level API introduction, see ARCH.md.
License is either Apache-2.0 or MIT, at the option of the user (ie dual-license Apache-2.0 and MIT).