All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
v0.8.0 - 2026-03-28
All RPC methods and types that previously used peer_id (base58-encoded libp2p PeerId) now use pubkey (hex-encoded compressed secp256k1 public key). (#1154)
open_channel: parameterpeer_idrenamed topubkey, type changed from PeerId to Pubkeylist_channels: parameterpeer_idrenamed topubkeydisconnect_peer: parameterpeer_idrenamed topubkeyconnect_peer: parameteraddresschanged from requiredMultiAddrto optionalString; new optional parameterpubkeyadded (at least one ofaddressorpubkeymust be provided)node_inforesponse: fieldnode_idrenamed topubkey;addressestype changed fromVec<MultiAddr>toVec<String>Channeltype: fieldpeer_idrenamed topubkeyPeerInfotype: fieldpeer_idremoved;addresstype changed fromMultiAddrtoStringNodeInfo(graph) type: fieldnode_idrenamed topubkey;addressestype changed toVec<String>
A new fiber-json-types crate was introduced for RPC-facing types, changing several serialization formats. (#1169)
Attribute(invoice) enum variants changed from PascalCase to snake_case (e.g.,FinalHtlcTimeout→final_htlc_timeout)Attribute::UdtScriptinner type changed from structuredCkbScriptto hex stringAttribute::PayeePublicKeyinner type changed fromPublicKeytoPubkeyHashAlgorithmenum variants changed from PascalCase to snake_case (e.g.,CkbHash→ckb_hash)CkbInvoice.signaturetype changed from structuredInvoiceSignatureto hex string;InvoiceSignaturetype removedCchInvoice::FiberandCchInvoice::Lightningnow carry encoded invoice strings instead of structured objectsChannelStateflags serialization changed to SCREAMING_SNAKE_CASE with pipe separator (e.g.,"OUR_INIT_SENT | THEIR_INIT_SENT")
CchOrderStatus::Succeededrenamed toSuccess(#1211)CchOrderStatus::OutgoingSucceededrenamed toOutgoingSuccess(#1211)
Several RPC methods now wait for operations to complete and return proper errors instead of silently returning success. (#1202)
connect_peer,disconnect_peer: now return errors on failurecommitment_signed,check_channel_shutdown(dev RPCs): now return errors on failure
- Channel actor state (prefix 0) gains two new fields:
pending_replay_updatesandlast_was_revoke(#1111) - Channel-by-pubkey index (prefix 64) re-keyed from PeerId to Pubkey (#1154)
- Network actor state (prefix 16) restructured:
peer_pubkey_mapremoved,saved_peer_addressesre-keyed from PeerId to Pubkey (#1154) - Channel open records (prefix 201) changed
peer_idfield topubkey(#1154)
Run fnn-migrate to apply all data migrations automatically. See the migration guide for details.
- Support external wallet signing for channel funding, enabling hardware wallets, multisig setups, and browser-based signers via new
open_channel_with_external_fundingandsubmit_signed_funding_txRPCs (#1120) - CCH can now run as a standalone process, connecting to a Fiber node over HTTP RPC and subscribing to store changes via WebSocket
subscribe_store_changesendpoint (#1165) - Automatic funding retry with exponential backoff (up to 5 retries) for transient CKB RPC/network errors during channel funding (#1213)
- New
fiber-clicrate providing a command-line client for all Fiber RPC methods with colorized output and auto-generated subcommands (#1144) - Inbound and reconnect protections: per-peer budget for inbound connections, single-flight guard on pending channel opens, bounded deferred TLC replay, delayed channel-ready until reestablish completes (#1200)
- New
list_paymentsRPC for querying payment sessions (#1152) - Unified storage layer with
StorageBackendtrait abstracting over RocksDB, SQLite, and browser backends (#1191) - RPC documentation improvements for node identifiers and channel rebalancing (#1150)
- Persist
CommitDiffto disk so commitment replay after restart is deterministic, fixing potential wrong-order or missing replay during reestablish (#1111) - Forward
LocalCommitmentSignedevent to watchtower so it has data needed to dispute stale remote-initiated closes (#1151) - CCH: dynamically compute remaining incoming time and cap outgoing route expiry to prevent HTLC timeout issues in multi-hop routes (#1148)
- Fix gossip startup sync cursor pollution where locally-generated messages could incorrectly advance the cursor, skipping remote gossip updates (#1227)
- Treat no-route errors as permanent in CCH outgoing payments (#979)
- Handle overflow in BTC final TLC expiry delta calculation (#977)
- Fix receive_btc invoice currency code from 'Fibt' to 'Fibd' (#1146)
- Fix clearer error when key file has 0x prefix (#1162)
- Extract
fiber-typescrate for all serializable types (#1152) - Extract
fiber-storecrate withStorageBackendtrait (#1168) - Add
fiber-json-typescrate for RPC-facing types (#1169) - Rename various types and CCH fields for consistency (#1211)
- Use upstream ractor release (#1214)
- Cleanup unused fields (#1231)