Add draft release notes for 0.2
What changed, and why it matters
This commit is purely a documentation update: it drafts the release notes for rust-lightning version 0.2 and removes the corresponding pending changelog snippets. No source code, logic, or configuration changes are made, so it cannot introduce or fix a security vulnerability on its own.
No security action needed; review the changelog text for accuracy if desired, but treat this as a documentation-only change.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff only modifies CHANGELOG.md and deletes 11 pending_changelog/*.txt files. It aggregates prior changelog entries into a single 0.2 release-notes section covering API updates, performance improvements, bug fixes, and backwards-compatibility notes. There are no code, build, or dependency changes.
Changed components
Inspect captured patch +182 / −53
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e907c4d..0480191 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,185 @@
+# 0.2 - TODO: Add release date, 2025 - "Natively Asynchronous Splicing"
+
+## API Updates
+
+ * Splicing is now supported. The current implementation is expected to be
+ compatible with Eclair and future versions of CLN, but may change feature
+ signaling in a future version as testing completes, breaking compatibility.
+ Support for accepting splices is gated on
+ `UserConfig::reject_inbound_splices`. Outbound splices can be initiated with
+ `ChannelManager::splice_channel`.
+ * Various APIs have been updated to offer a native Rust async API. All
+ newly-async traits and structs have a `*Sync` variant which offers the
+ same API but with sync methods:
+ * `KVStore` has been made async. Note that `KVStore` methods are not
+ `async fn`, but rather write ordering is fixed when the methods return,
+ though write completion is async.
+ * `BumpTransactionEventHandler` is now backed by an async `WalletSource` (and
+ `Wallet`) or an async `CoinSelectionSource` and is now async. Sync versions
+ are in the new `events::bump_transaction::sync` submodule (#3752).
+ * `OutputSweeper` is now backed by an async `KVStore` and
+ `ChangeDestinationSource` and is now async (#3819, #3734, #4131).
+ * `MonitorUpdatingPersisterAsync` and `ChainMonitor::new_async_beta` were
+ added for async `ChannelMonitor` persistence. Note that this feature is
+ still considered beta (#4063).
+ * An initial version of async payments is now supported. The current
+ implementation is specific to LDK and only LDK supports paying static
+ invoices. However, because BOLT 12 invoice requests will gracefully "upgrade"
+ to a non-static invoice when the recipient comes online, offers backed by
+ static invoices are expected to be payable by any BOLT 12 payer.
+ With an LDK-based LSP, often-offline clients should set
+ `UserConfig::hold_outbound_htlcs_at_next_hop` and call
+ `ChannelManager::set_paths_to_static_invoice_server`.
+ LDK-based LSPs wishing to support often-offline senders and recipients should
+ set `UserConfig::enable_htlc_hold`, support the existing "onion message
+ mailbox" feature (setting `intercept_messages_for_offline_peers` on
+ `OnionMessenger` and handling `Event::OnionMessageIntercepted`s), and handle
+ `Event::PersistStaticInvoice`s and `Event::StaticInvoiceRequested`s.
+ * Zero-Fee-Commitment channels are now supported in LDK. These channels remove
+ force-closure risk for feerate disagreements by using a fixed, zero fee on
+ pre-signed transactions, relying on anchor bumps instead. They also utilize
+ the new TRUC + ephemeral dust policy in Bitcoin Core 29 to substantially
+ improve the lightning security model. This requires having a path of Bitcoin
+ Core 29+ nodes between you and a miner for transactions to be mined. This
+ only works with LDK peers, and feature signaling may change in a future
+ version of LDK, breaking compatibility. This is negotiated automatically for
+ manually-accepted inbound channels and negotiated for outbound channels based
+ on `ChannelHandshakeConfig::negotiate_anchor_zero_fee_commitments`.
+ * `Event::BumpTransaction` is now always generated even if the transaction has
+ sufficient fee. This allows you to manage transaction broadcasting more
+ granularly for anchor channels (#4001).
+ * The local key which receives non-HTLC-encumbered funds when the counterparty
+ force-closes a channel is now one of a static list of 1000 keys when using
+ `KeysManager` if `v2_remote_key_derivation` is set or after splicing (#4117).
+ * LSPS5 support was added, providing a push notification API for LSPS clients.
+ * Client-trusts-LSP is now supported on LSPS2 service (#3838).
+ * `LSPS2ClientEvent` now has events for failure events (#3804).
+ * `LSPS2ServiceHandler::channel_open_abandoned` was added (#3712).
+ * `Event::PendingHTLCsForwardable` has been replaced with regular calls to
+ `process_pending_htlc_forwards` in the background processor while
+ `ChannelManager::needs_pending_htlc_processing` is true. The delay between
+ calls (and, thus, HTLC forwarding delay) is random between zero and 200ms,
+ averaging 50ms, faster than the previous recommendation (#3891, #3955).
+ * `Event::HTLCHandlingFailed`s now include a`LocalHTLCFailureReason`, providing
+ much more granular reasons for HTLCs having been failed (#3744, etc).
+ * `Event::HTLCHandlingFailed` is now generated any time forwarding an HTLC
+ fails, i.e. including cases where the HTLC onion is invalid (#2933).
+ * `Event::HTLCHandlingFailed::failure_type` of `UnknownNextHop` has been
+ deprecated and is no longer generated (#3700).
+ * `OffersMessageFlow` was introduced to make it easier to implement most of the
+ BOLT 12 flows without using a `ChannelManager` (#3639).
+ * `ChannelManager::pay_for_bolt11_invoice` was added (#3617).
+ * `ChannelManager::pay_for_offer_from_human_readable_name` has been deprecated
+ in favor of the `bitcoin-payment-instructions` and
+ `ChannelManager::pay_for_offer_from_hrn`. Language bindings users may still
+ wish to use the original (#3903, #4083).
+ * `lightning::util::anchor_channel_reserves` was added to assist in estimating
+ on-chain fund requirements for anchor channel closures (#3487).
+ * Using both asynchronous and synchronous `ChannelMonitor[Update]` persistence
+ on the same `ChannelManager` will now panic. This never functioned correctly
+ and is now detected to prevent issues (#3737).
+ * LDK can now validate if HTLC errors have been tampered with (once nodes
+ upgrade). It also reports and logs the amount of time an HTLC was held so
+ that (as nodes upgrade) slow nodes can be found (#2256, #3801, other fixes).
+ * Repeated `Listen::block_disconnected` calls for each disconnected block in a
+ reorg have been replaced with a single `blocks_disconnected` call with the
+ fork point block (i.e. the highest block on both sides of the reorg, #3876).
+ * `lightning::routing::scoring::CombinedScorer` was added to combine scoring
+ data between remote scoring info and local payment results (#3562).
+ * LDK will now store up to 1KiB of "peer storage" data in `ChannelManager` per
+ peer with which we have a funded channel (#3575).
+ * The `Persister` trait was removed. You can match on namespace constants in
+ `KVStore` to restore custom logic for specific storage objects (#3905).
+ * `BlindedMessagePath::new_with_dummy_hops` was added (but is not used by
+ default, #3726). You can use `NodeIdMessageRouter` to enable dummy hops.
+ * `ProbabilisticScoringFeeParameters::probing_diversity_penalty` was added to
+ allow for better information gathering while probing (#3422, #3713).
+ * `Persist` now takes a `MonitorName` rather than a `funding_txo` `OutPoint` to
+ ensure the storage key is consistent across splices (#3569).
+ * `lightning-liquidity` now supports persisting relevant state (#4059, #4118).
+ * `ChannelManager::funding_transaction_generated_manual_broadcast` was added to
+ open a channel without automatically broadcasting the funding transaction
+ (#3838). In it and `unsafe_manual_funding_transaction_generated`
+ force-closure logic has been updated to no longer automatically broadcast the
+ commitment tx unless the funding transaction has been seen on-chain (#4109).
+ * Various instances of channel closure which provided a
+ `ClosureReason::HolderForceClosed` now provide more accurate
+ `ClosureReason`s, especially `ClosureReason::ProcessingError` (#3881).
+ * A new `ClosureReason::LocallyCoopClosedUnfundedChannel` was added (#3881).
+ * Some arguments to `ChannelManager::pay_for_offer[_from_human_readable_name]`
+ have moved behind `optional_params` (#3808, #3903).
+ * `Event::PaymentSent::bolt12_invoice` was added for proof-of-payment (#3593).
+ * Channel values are now synchronized via RGS, improving scoring (#3924).
+ * `SendOnlyMessageHandler` was added, implemented for `ChainMonitor`, and
+ an instance added to `MessageHandler`. Note that `ChainMonitor` does not yet
+ send any messages, though will in the future (#3922).
+ * `lightning_background_processor::NO_{ONION_MESSENGER,LIQUIDITY_MANAGER}` were
+ added to simplify background processor init without some args (#4100, #4132).
+ * `ChannelManager::set_current_config` was added (#4038).
+ * Onion messages received to a blinded path we generated are now authenticated
+ implicitly rather than explicitly in blinded path `Context`s (#3917, #4144).
+ * `OMNameResolver::expire_pending_resolution` has been added for those who
+ cannot or do not wish to call `new_best_block` regularly (#3900).
+ * `lightning-liquidity`'s LSPS1 client now supports BOLT 12 payments (#3649).
+ * `LengthReadable::read` has been renamed `read_from_fixed_length_buffer` and
+ is implemented for all `Readable` (#3579).
+ * `LengthReadable` is now required to read various objects which consume the
+ full available buffer (#3640).
+ * Structs in `lightning-liquidity` were renamed to be globally unique (#3583).
+ * Renamed `SpendableOutputDescriptor::outpoint` to `spendable_outpoint` (#3634)
+
+## Performance Improvements
+ * `ChainMonitor::load_existing_monitor` was added and should be used on startup
+ to load existing `ChannelMonitor`s rather than via `Persist`, avoiding
+ re-persisting each `ChannelMonitor` during startup (#3996).
+ * RGS data application was further sped up (#3581).
+
+## Bug Fixes
+ * `FilesystemStore::list` is now more robust against race conditions with
+ simultaneous `write`/`archive` operations (#3799).
+ * Pending async persistence of `ChannelMonitorUpdate`s required to forward an
+ HTLC can no longer result in the HTLC being forgotten if the channel is
+ force-closed (#3989).
+ * `lightning-liquidity`'s service support now properly responds to the
+ `ListProtocols` message (#3785).
+ * A rare race which might lead `PeerManager` (and `lightning-net-tokio`) to
+ stop reading from a peer until a new message is sent to that peer has been
+ fixed (#4168).
+ * The fields in `SocketAddress::OnionV3` are now correctly parsed, and the
+ `Display` for such addresses is now lowercase (#4090).
+ * `PeerManager` is now more conservative about disconnecting peers which aren't
+ responding to pings in a timely manner. This may reduce disconnections
+ marginally when forwarding gossip to a slow peer (#4093, #4096).
+ * Blinded path serialization is now padded to better hide its contents (#3177).
+ * In cases of incredibly long async monitor update or async signing operations,
+ LDK may have previously spuriously disconnected peers (#3721).
+ * Total dust exposure on a commitment now rounds correctly (#3572).
+
+## Backwards Compatibility
+ * `ChannelMonitor`s which were created prior to LDK 0.0.110 and which saw no
+ updates since LDK 0.0.116 may now fail to deserialize (#3638, #4146).
+ * Setting `v2_remote_key_derivation` on `KeysManager` to true, or splicing a
+ channel results in using keys which prior versions of LDK do not know how to
+ derive. This may result in missing funds or panics trying to sweep closed
+ channels after downgrading (#4117).
+ * After upgrading to 0.2, downgrading to versions of LDK prior to 0.0.123 is no
+ longer supported (#2933).
+ * Upgrading from versions prior to 0.0.116 is not supported (#3604, #3678).
+ * Upgrading to v0.2.0 will time out any pending async payment waiting for the
+ often offline peer to come online (#3918).
+ * Blinded message paths generated by previous versions of LDK, except those
+ generated for inclusion in BOLT 12 `Offer`s will no longer be accepted. As
+ most blinded message paths are ephemeral, this should only invalidate issued
+ BOLT 12 `Refund`s in practice (#3917).
+ * Once a channel has been spliced, LDK can no longer be downgraded.
+ `UserConfig::reject_inbound_splices` can be set to block inbound ones (#4150)
+ * Downgrading after setting `UserConfig::enable_htlc_hold` is not supported
+ (#4045, #4046).
+ * LDK now requires the `channel_type` feature in line with spec updates (#3896)
+
+TODO release stats
+
+
# 0.1.7 - Oct 21, 2025 - "Unstable Release CI"
## Bug Fixes
diff --git a/pending_changelog/3531-buggy-router-leak.txt b/pending_changelog/3531-buggy-router-leak.txt
deleted file mode 100644
index 72714aa..0000000
--- a/pending_changelog/3531-buggy-router-leak.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-## Bug Fixes
-
-* Fixed a rare case where a custom router returning a buggy route could result in holding onto a
- pending payment forever and in some cases failing to generate a PaymentFailed event (#3531).
diff --git a/pending_changelog/3604-upgrades-prior-to-113-not-supported.txt b/pending_changelog/3604-upgrades-prior-to-113-not-supported.txt
deleted file mode 100644
index 94d622c..0000000
--- a/pending_changelog/3604-upgrades-prior-to-113-not-supported.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-## API Updates (0.2)
- * Upgrading from versions prior to 0.0.113 is no longer supported (#3604).
diff --git a/pending_changelog/3638-0.2-upgrade-without-counterparty-node-id-in-monitor-not-supported.txt b/pending_changelog/3638-0.2-upgrade-without-counterparty-node-id-in-monitor-not-supported.txt
deleted file mode 100644
index ac5d1f9..0000000
--- a/pending_changelog/3638-0.2-upgrade-without-counterparty-node-id-in-monitor-not-supported.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-## API Updates (0.2)
-
-* Upgrading to v0.2.0 is not allowed when a `ChannelMonitor` that does not track the channel's
- `counterparty_node_id` is loaded. Upgrade to a v0.1.* release first and either send/route a
- payment over the channel, or close it, before upgrading to v0.2.0.
diff --git a/pending_changelog/3664-downgrades-to-0.0.115-not-supported.txt b/pending_changelog/3664-downgrades-to-0.0.115-not-supported.txt
deleted file mode 100644
index 9bb1183..0000000
--- a/pending_changelog/3664-downgrades-to-0.0.115-not-supported.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-# API Updates (0.2)
-
-Downgrading to v0.0.115 is no longer supported if a node has an HTLC routed/settled while running v0.2 or later.
diff --git a/pending_changelog/3678-channel-type-check.txt b/pending_changelog/3678-channel-type-check.txt
deleted file mode 100644
index 39efe7c..0000000
--- a/pending_changelog/3678-channel-type-check.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-## API Updates (0.2)
-
-* Upgrading to v0.2.0 from a version prior to 0.0.116 is not allowed when a channel was opened with
- either `scid_privacy` or `zero_conf` included in its channel type. Upgrade to v0.0.116 first
- before upgrading to v0.2.0.
diff --git a/pending_changelog/3700-reason-in-handling-failed.txt b/pending_changelog/3700-reason-in-handling-failed.txt
deleted file mode 100644
index 5a86435..0000000
--- a/pending_changelog/3700-reason-in-handling-failed.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-## API Updates (0.2)
-
-* The `HTLCHandlingFailed` event was updated to include a `failure_reason` field that provides
- additional information about why the HTLC was failed.
-* The `failed_next_destination` field, which previously contained a combination of failure
- and HTLC-related information, was renamed to `failure_type` and the `UnknownNextHop`
- variant was deprecated. This type will be represented as `InvalidForward` for nodes
- downgrading from v0.2.0.
diff --git a/pending_changelog/3881.txt b/pending_changelog/3881.txt
deleted file mode 100644
index ae9631f..0000000
--- a/pending_changelog/3881.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-API Updates
-===========
- * Various instances of channel closure which provided a
- `ClosureReason::HolderForceClosed` now provide more accurate
- `ClosureReason`s, especially `ClosureReason::ProcessingError` (#3881).
- * A new `ClosureReason::LocallyCoopClosedUnfundedChannel` was added (#3881).
diff --git a/pending_changelog/3905-async-background-persistence.txt b/pending_changelog/3905-async-background-persistence.txt
deleted file mode 100644
index caa16d3..0000000
--- a/pending_changelog/3905-async-background-persistence.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-## API Updates (0.2)
-
-* The `Persister` trait has been removed, and `KVStore` is now used directly. If you're persisting `ChannelManager`,
-`NetworkGraph`, or `Scorer` to a custom location, you can maintain that behavior by intercepting and rewriting the
-corresponding namespaces and keys.
-
-* The `KVStore` trait has been updated to be asynchronous, while the original synchronous version is now available as
-`KVStoreSync`. For channel persistence, `KVStoreSync` is still mandatory. However, for background persistence, an
-asynchronous `KVStore` can be provided optionally.
diff --git a/pending_changelog/3917-blinded-path-auth.txt b/pending_changelog/3917-blinded-path-auth.txt
deleted file mode 100644
index 4917da4..0000000
--- a/pending_changelog/3917-blinded-path-auth.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-## Backwards Compat
-
-* Upgrading to v0.2.0 will invalidate existing `Refund`s containing blinded paths.
diff --git a/pending_changelog/3918-expiry-time-when-waiting-often-offline-peer-asyncpayment.txt b/pending_changelog/3918-expiry-time-when-waiting-often-offline-peer-asyncpayment.txt
deleted file mode 100644
index 61ae1cb..0000000
--- a/pending_changelog/3918-expiry-time-when-waiting-often-offline-peer-asyncpayment.txt
+++ /dev/null
@@ -1,4 +0,0 @@
- ## API Updates (0.2)
-
-* Upgrading to v0.2.0 will timeout any pending async payment waiting for the often offline peer
- come online.
diff --git a/pending_changelog/4045-sender-lsp.txt b/pending_changelog/4045-sender-lsp.txt
deleted file mode 100644
index fa4243b..0000000
--- a/pending_changelog/4045-sender-lsp.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-## Backwards Compat
-
-* Downgrading to prior versions of LDK after setting `UserConfig::enable_htlc_hold` may cause
- `ChannelManager` deserialization to fail or HTLCs to time out (#4045, #4046)
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.