Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 67 additions & 53 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,52 +10,44 @@ This release is named by TBD.

### Added

- Protocol: we now pad all peer messages to make them the same length (excluding LND < v21 and current Eclair). ([#8893])
- JSON-RPC: `bkpr-report` allows flexible summaries of bookkeeper income. ([#8937])
- Config: `bkpr-currency` option to record conversion rate at each event. ([#8937])
- JSON-RPC: `currencyrate` API for getting the current median BTC conversion to a given fiat currency. ([#8937])
- JSON-RPC: `listcurrencyrates` API for examining the current values from the `currencyconvert` plugin's sources. ([#8937])
- New command `spliceout` for easily splicing out of channels ([#8857])
- New command `splicein` allows for convenient splicing funds into a channel ([#8856])
- Added support for multi (ie 3+) channel splices, dynamic wallet funding, and dynamic fee calculating. ([#8450])
- new plugin currencyrate to provide `currencyconvert` API ([#8842])
- `listpeerchannels` now accepts a `channel_id` filter, ([#8766])
- Config: `bkpr-currency` option to record conversion rate at each bookkeeper event. ([#8937])
- JSON-RPC: `currencyconvert` and `currencyrate` via the new plugin `cln-currencyrate` ([#8842], [#8937])
- JSON-RPC: `spliceout` and `splicein` for easily splicing in and out of channels ([#8857], [#8856])
- JSON-RPC: `offer` now has a `fronting_nodes` option to specify neighbors for payer to use to fetch invoices and make payments. ([#8490])
- Config: `payment-fronting-node` option to specify neighbor node(s) to use for all bolt11 invoices, bolt12 offers, invoices and invoice_requests. ([#8490])
- libplugin: support for options which accumulate if specified more than once ("multi": true). ([#8490])
- JSON-RPC: `getroutes` now operates in parallel: config `askrene-max-threads` controls how many (default 4). ([#8723])
- JSON-RPC: `getroutes` has a new layer `auto.include_fees` that makes fees be deducted from the payment amount making in effect the receiver pay for routing fees. ([#8824])
- JSON-RPC `clnrest-register-path` method to register dynamic paths for `clnrest` plugin ([#7529])
- JSON-RPC: `offer` and `listoffer` exposes the offer description field. ([#8782])
- JSON-RPC: `listcurrencyrates` API for examining the current values from the `currencyconvert` plugin's sources. ([#8937])
- JSON-RPC: `xpay` supports a `payer-note` field ([#8784])
- Docker: Added a new `version-vls` tag which includes VLS's `remote_hsmd_socket` binary with the Core Lightning image. ([#8712])
- JSON-RPC: `feerate` now supports `splice` as a rate name, and splice code uses it intelligently. ([#8450])
- JSON-RPC: `listpeerchannels` now accepts a `channel_id` filter, ([#8766])
- Database: STRICT tables and security pragmas in developer mode ([#8559])
- Config: `askrene-max-threads` to control how many CPUs we use for routing (default 4). ([#8723])
- Protocol: we now pad all peer messages to make them the same length. ([#8893])
- `gossipd` now uses a `lightning_gossip_compactd` helper to compact the gossip_store on demand, keeping it under about 210MB. ([#8903])
- askrene: add a new layer auto.include_fees that makes fees be deducted from the payment amount making in effect the receiver pay for routing fees. ([#8824])
- clnrest: add clnrest-register-path rpc method to register dynamic paths ([#7529])
- Expose decoded offer description in `offer` and `listoffers` RPC responses. ([#8782])
- Add 'payer-note' field to the 'xpay' RPC call. ([#8784])
- Added a new `version-vls` tag which includes VLS's `remote_hsmd_socket` binary with the Core Lightning image. ([#8712])
- libplugin: support for options which accumulate if specified more than once ("multi": true). ([#8490])


### Changed

- cln-rpc and cln-grpc now expose notification bindings for balance_snapshot, coin_movement, deprecated_oneshot, disconnect, forward_event, invoice_creation, invoice_payment, log, onionmessage_forward_fail, openchannel_peer_sigs, plugin_started, plugin_stopped, sendpay_failure, sendpay_success, shutdown, and warning. ([#8938])
- cln-rpc and cln-grpc now expose xpay notification bindings for `pay_part_start` and `pay_part_end`. ([#8938])
- Protocol: Splicing is enabled by default
- `gossipd` no longer compacts gossip_store on startup (improving start times significantly). ([#8903])
- cln-rpc and cln-grpc now expose notification bindings for balance_snapshot, coin_movement, deprecated_oneshot, disconnect, forward_event, invoice_creation, invoice_payment, log, onionmessage_forward_fail, openchannel_peer_sigs, plugin_started, plugin_stopped, sendpay_failure, sendpay_success, shutdown, warning, and xpay's `pay_part_start` and `pay_part_end`. ([#8938])
- lightningd: we don't allow new incoming channels if we cannot estimate fees (rather than assuming minfee). ([#8864])
- Plugins: `sql` plugin tables "htlcs", "forwards", "invoices", "sendpays" and "networkevents" are now updated more efficiently. ([#8914])
- uniform message padding is now opt-in via the --dev-uniform-padding flag. ([#8997])
- forward_event notification now has preimage set if status is settled. ([#8943])
- Plugins: `askrene` now runs routing in parallel. ([#8723])
- bcli plugin now uses synchronous execution, simplifying bitcoin backend communication and improving error handling reliability. ([#8820])
- `gossipd` no longer compacts gossip_store on startup (improving start times significantly). ([#8903])
- Plugins: `forward_event` notification now has preimage set if status is settled. ([#8943])
- Plugins: `bcli` now uses synchronous execution, simplifying bitcoin backend communication and improving error handling reliability. ([#8820])
- Build: most binaries are now about 20% smaller. ([#8658])
- lightningd: logging is now more efficient internally (no more pruning, simple ringbuffer). ([#8770])
- JSON-RPC: `recover` takes a 12-word mnemonic for nodes created by v25.12 or later. ([#8830])
- `lightning-hsmtool`: `getsecret` replaces `getcodexsecret` for modern nodes (gives mnemonic). ([#8830])


### Deprecated

Note: You should always set `allow-deprecated-apis=false` to test for changes.

- `lightning-hsmtool`: `getcodexsecret`. Use `getsecret`. ([#8830])

- Config: `experimental-splicing`. Enabled by default. ([#9021])

### Removed

Expand All @@ -68,10 +60,13 @@ Note: You should always set `allow-deprecated-apis=false` to test for changes.

### Fixed

- gossipd: now uses `lightning_gossip_compactd` helper to compact the gossip_store file on demand, keeping it under about 210MB. ([#8903])
- connectd: throttle incoming peers to give fairer peer handling under stress. ([#8983])
- lightningd no longer crashes when replaying stored blinded HTLCs during startup. ([#8974])
- JSON-RPC: `decode` is now more informative with malformed strings (won't claim everything is a malformed rune!). ([#8814])
- Build: Core lightning builds for Fedora on all systems are deterministic. ([#8846])
- lightningd: unreserve UTXOs from withheld funding PSBT ([#8943])
- withheld channel now fails back incoming inflight HTLC ([#8943])
- lightningd: withheld channel now fails back incoming inflight HTLC ([#8943])
- JSON-RPC: reckless command no longer hangs if reckless executable is not found in PATH. ([#8894])
- lightning-cli: fix invalid json requests when input includes a numeric string with leading zeroes ([#8934])
- xpay: handle payment redirected from "pay" even if we don't recognize some arguments. ([#8939])
Expand All @@ -80,28 +75,16 @@ Note: You should always set `allow-deprecated-apis=false` to test for changes.
- fuzz: fix build with newer clang. ([#8717])
- Plugins: `bkpr_listbalances` no longer crashes if we lost our db, then do emergencyrecover and close a channel. ([#8890])
- lightningd: possible crash when peers disconnected if there was more than one plugin servicing the `peer_connected` hook. ([#8889])
- JSON-RPC: `decode` is now more informative with malformed strings (won't claim everything is a malformed rune!). ([#8814])
- reckless search now returns partial matches instead of requiring exact plugin names. ([#8762])
- enableoffer: Adding an error when trying to activate an used single use offer (don't crash!) ([#8813])
- askrene: fixed a class of corner cases that cause askrene main loop to timeout instead of quickly failing, thus wasting runtime. ([#8866])
- JSON-RPC: `enableoffer` returns an error when trying to activate an used single use offer (don't crash!) ([#8813])
- JSON_RPC: `getroutes` fixed a class of corner cases that cause askrene main loop to timeout instead of quickly failing, thus wasting runtime. ([#8866])
- Testing infrastructure no longer fails when logging output capture is disabled. ([#8843])
- Core lightning builds for Fedora on all systems are deterministic. ([#8846])
- lightningd: we now correctly sign for non-taproot addresses given by nodes created by v25.12 or newer. ([#8831])
- `lightning-hsmtool`: handle mnemonic hsm_secret files (nodes created >= v25.12). ([#8831])
- plugins: `pay` can crash on errors returned from deep inside routehints. ([#8829])
- plugins: `askrene` can crash on a corner case in increase_flows. ([#8829])
- askrene: fix a plugin crash triggered during single path payments when a channel fees doesn't fit u32. ([#8832])
- JSON-RPC: malformed filters no longer crash lightningd. ([#8780])
- pay: `maxdelay` parameter now enforced for direct channel payments ([#8740])
- Ensure documentation renders correctly when adding/updating new RPCs by detecting non-MDX-compatible pages. ([#8792])
- gossipd: we would occasionally not show a node announcement in listnodes(). ([#8769])
- Replacing sed by $(SED) in Makefile ([#8786])
- lightningd: potential crash on startup if bitcoind isn't up-to-date. ([#8779])


### EXPERIMENTAL

- fixed crash with dual funding if we cannot estimate fees. ([#8864])
- Dual-funding: fixed crash with dual funding if we cannot estimate fees. ([#8864])
- Protocol: avoid an occasional hang when splicing with a pending closing HTLC. ([#8911])


Expand All @@ -113,27 +96,18 @@ Note: You should always set `allow-deprecated-apis=false` to test for changes.
[#8712]: https://github.com/ElementsProject/lightning/pull/8712
[#8717]: https://github.com/ElementsProject/lightning/pull/8717
[#8723]: https://github.com/ElementsProject/lightning/pull/8723
[#8740]: https://github.com/ElementsProject/lightning/pull/8740
[#8762]: https://github.com/ElementsProject/lightning/pull/8762
[#8766]: https://github.com/ElementsProject/lightning/pull/8766
[#8769]: https://github.com/ElementsProject/lightning/pull/8769
[#8770]: https://github.com/ElementsProject/lightning/pull/8770
[#8772]: https://github.com/ElementsProject/lightning/pull/8772
[#8779]: https://github.com/ElementsProject/lightning/pull/8779
[#8780]: https://github.com/ElementsProject/lightning/pull/8780
[#8782]: https://github.com/ElementsProject/lightning/pull/8782
[#8784]: https://github.com/ElementsProject/lightning/pull/8784
[#8786]: https://github.com/ElementsProject/lightning/pull/8786
[#8792]: https://github.com/ElementsProject/lightning/pull/8792
[#8798]: https://github.com/ElementsProject/lightning/pull/8798
[#8813]: https://github.com/ElementsProject/lightning/pull/8813
[#8814]: https://github.com/ElementsProject/lightning/pull/8814
[#8820]: https://github.com/ElementsProject/lightning/pull/8820
[#8824]: https://github.com/ElementsProject/lightning/pull/8824
[#8829]: https://github.com/ElementsProject/lightning/pull/8829
[#8830]: https://github.com/ElementsProject/lightning/pull/8830
[#8831]: https://github.com/ElementsProject/lightning/pull/8831
[#8832]: https://github.com/ElementsProject/lightning/pull/8832
[#8842]: https://github.com/ElementsProject/lightning/pull/8842
[#8843]: https://github.com/ElementsProject/lightning/pull/8843
[#8846]: https://github.com/ElementsProject/lightning/pull/8846
Expand All @@ -157,9 +131,49 @@ Note: You should always set `allow-deprecated-apis=false` to test for changes.
[#8974]: https://github.com/ElementsProject/lightning/pull/8974
[#8983]: https://github.com/ElementsProject/lightning/pull/8983
[#8997]: https://github.com/ElementsProject/lightning/pull/8997
[#9021]: https://github.com/ElementsProject/lightning/pull/9021
[v26.04rc2]: https://github.com/ElementsProject/lightning/releases/tag/v26.04rc2


## [25.12.1] - 2026-1-14: "Boltz's Seamless Upgrade Experience II"

This is a recommended release, particularly for those creating new nodes.

### Changed

- JSON-RPC: `recover` takes a 12-word mnemonic for nodes created by v25.12 or later. ([#8830])
- `lightning-hsmtool`: `getsecret` replaces `getcodexsecret` for modern nodes (gives mnemonic). ([#8830])

### Deprecated

Note: You should always set `allow-deprecated-apis=false` to test for changes.

- `lightning-hsmtool`: `getcodexsecret`. Use `getsecret`. ([#8830])

### Fixed

- lightningd: we now correctly sign for non-taproot addresses given by nodes created by v25.12 or newer. ([#8831])
- `lightning-hsmtool`: handle mnemonic hsm_secret files (nodes created >= v25.12). ([#8831])
- plugins: `pay` can crash on errors returned from deep inside routehints. ([#8829])
- plugins: `askrene` can crash on a corner case in increase_flows. ([#8829])
- askrene: fix a plugin crash triggered during single path payments when a channel fees doesn't fit u32. ([#8832])
- JSON-RPC: malformed filters no longer crash lightningd. ([#8780])
- pay: `maxdelay` parameter now enforced for direct channel payments ([#8740])
- gossipd: we would occasionally not show a node announcement in listnodes(). ([#8769])
- lightningd: potential crash on startup if bitcoind isn't up-to-date. ([#8779])


[#8832]: https://github.com/ElementsProject/lightning/pull/8832
[#8780]: https://github.com/ElementsProject/lightning/pull/8780
[#8831]: https://github.com/ElementsProject/lightning/pull/8831
[#8740]: https://github.com/ElementsProject/lightning/pull/8740
[#8769]: https://github.com/ElementsProject/lightning/pull/8769
[#8829]: https://github.com/ElementsProject/lightning/pull/8829
[#8779]: https://github.com/ElementsProject/lightning/pull/8779
[#8830]: https://github.com/ElementsProject/lightning/pull/8830
[25.12.1]: https://github.com/ElementsProject/lightning/releases/tag/v25.12.1


## [25.12] - 2025-12-04: "Boltz's Seamless Upgrade Experience"

This release is named by @sangbida
Expand Down
10 changes: 6 additions & 4 deletions doc/contribute-to-core-lightning/release-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@ Here's a checklist for the release process.

## Preparing for -rc1

1. Check that `CHANGELOG.md` is well formatted, ordered in areas, covers all signficant changes, and sub-ordered approximately by user impact & coolness.
1. Make sure any `CHANGELOG.md` changes from point releases have been imported.
2. Use `devtools/changelog.py` to collect the changelog entries from pull request commit messages and merge them into the manually maintained `CHANGELOG.md`. This does API queries to GitHub, which are severely ratelimited unless you use an API token: set the `GH_TOKEN` environment variable to a Personal Access Token from https://github.com/settings/tokens
3. Create a new CHANGELOG.md heading to `v<VERSION>rc1`, and create a link at the bottom. Note that you should exactly copy the date and name format from a previous release, as the `build-release.sh` script relies on this.
4. Update the package versions: `uv run make update-versions NEW_VERSION=v<VERSION>rc1`
5. Create a PR with the above.
3. Check that `CHANGELOG.md` is well formatted, ordered in areas, covers all signficant changes, and sub-ordered approximately by user impact & coolness.
4. Manually remove any entries which were mentioned for in the previous point releases (they will be duplicates!)
5. Create a new CHANGELOG.md heading to `v<VERSION>rc1`, and create a link at the bottom. Note that you should exactly copy the date and name format from a previous release, as the `build-release.sh` script relies on this.
6. Update the package versions: `uv run make update-versions NEW_VERSION=v<VERSION>rc1`
7. Create a PR with the above.

## Releasing -rc1

Expand Down
Loading