Announcing LND v0.20-beta: The Lightning Fast Lane for a Booming Network 🛣️ 💥
We are excited to announce the latest release of LND, v0.20! This release is focused on making LND faster, more reliable, and more intuitive, paving the way for bitcoin to be the backbone of global financial transactions. With v0.20, your node will benefit from major performance boosts, smoother network communication, and greater control over your operations and payments. All of these features were designed to provide a more seamless experience for operations, especially in light of all the recent Lightning Network growth. Some of the release highlights include:
- Migration of the Channel Graph to a relational datastore (sqlite/postgres) which helps improve node performance for graph queries which help improve payment speed.
- Enhanced Gossip rate limits to improve a node’s ability to synchronize with the network and handle a larger volume of network updates, which results in faster payment speed and better payment reliability.
- More control over incoming liquidity when using blinded invoices for enhanced privacy and reliability.
As always, we are grateful for the ongoing support of our external contributors across development, review, and testing. For the complete list of changes included in this release, check out the full release notes.
A Faster Graph for Faster Payments 🌐
A Lightning node’s Channel Graph maintains a complete map of the public nodes and channels on the Lightning Network. Therefore, the speed and efficiency in which the channel graph is updated and maintained has a direct impact on payment speed for a node. Before this release, a common pain point for node operators was the time it takes to start up and manage the ever-expanding set of network data. To address this, v0.20 introduces a major architectural upgrade by migrating the internal network graph database to a native SQL backend. Our internal benchmarking tests demonstrate that the getnetworkinfo RPC, a read-only call that returns high-level statistics about the public Lightning Network graph as your node sees it, has seen a significant reduction in its execution time, ranging from a 95% to 99% reduction, after migrating to native SQL data stores. This is a massive improvement given the getnetworkinfo RPC is typically the slowest LND RPC. This change to the network graph is a continuation of our journey to update LND data stores, moving away from the previous key-value database to a more standardized and performant SQL implementation. The result is a notable improvement in LND’s startup and operational performance.
For node operators already using a postgres or sqlite database backend, you can activate this migration simply by setting the --use-native-sql flag in your configuration; the migration will run automatically on the next startup. If your node is still using the bbolt backend, you can follow the DB migration guide to migrate to sqlite or postgres database to take advantage of this new performance enhancement.
Improved Network Synchronization and Reliability 🛡️
A node’s ability to successfully route payments depends on an updated view of the network graph, which requires processing of network information shared by peer nodes. Keeping up with the constant flow of this network information ensures that a node has the most updated view of the network, which directly improves payment speed and reliability.
In this release, we’ve improved the gossip update process to deliver significant improvements in performance and concurrency during network gossip synchronization. Our testing (run with a simulation of 50 concurrent nodes requesting data simultaneously) indicates that the average client waiting time reduced from an average of 32.5 seconds to 0.57 seconds, which demonstrates a 57x improvement in throughput. Furthermore, the lazy streaming design drastically improves memory efficiency for large graph operations and keeps resource usage bounded.
Additionally, this release increases the default gossip rate limits. These changes help your node more efficiently propagate critical information, like new channel and node announcements, leading to faster overall network synchronization.
Finally, we've also addressed common connectivity challenges. IP addresses can be unreliable, as a simple change can make a node unreachable. LND can now recognize and forward node announcements that use DNS addresses. This small change provides a massive boost to network flexibility and connection reliability, allowing nodes to maintain consistent public connectivity even when their underlying IP address changes.
Advanced Liquidity Control for More Reliable Receiving 🧭
For more advanced users, LND v0.20 offers more precise tools for managing liquidity and routing payments. When creating a blinded invoice, which is a Lightning invoice that obfuscates the receiver’s node identity and final destination from the payer and from intermediate hops, you can now use the lncli addinvoice --blind command to suggest specific incoming channels to be used in the path. This powerful feature gives you an extra lever for liquidity control, allowing you to guide payments over specific channels and better manage your node’s liquidity distribution. Given that enhanced granular control, you can drastically increase payment reliability to your node based on your view of inbound liquidity. For example, you could ensure payments are routed over channels where you know there is enough liquidity to route the payment.
Here’s an example to illustrate this: imagine you run a node and have two large channels, Channel A and Channel B. Channel A has plenty of outbound liquidity, but Channel B is nearly empty on your side (meaning it has lots of inbound liquidity). To better balance your channel capacity, it would be preferable to receive new payments through Channel B. Now, when you create that blinded invoice, you can suggest that payment path uses Channel B by specifying the Channel B channel ID in the command lncli addinvoice --blind --blinded_path_incoming_channel_list <channel_Id_B> <amount>.
Quality-of-Life and Usability Improvements 👍
This release also brings several updates designed to make day-to-day node management more convenient and intuitive.
No More Resetting Your Node’s Personality: Previously, if you customized your node’s alias, color, or other settings, those changes would be lost after a restart. We’ve fixed this, and dynamic node announcement settings are now saved and automatically re-applied, ensuring your node’s identity persists across restarts.
Clarity on Pending Channels: Waiting for a new channel to become active can be an opaque process. The PendingChannel RPC response has been enhanced to show how many confirmations are remaining and the block height of the funding transaction. This allows user interfaces to provide clear, actionable feedback to users on how soon their new channel will be ready for use.
Better Housekeeping and Analysis: You can now delete specific canceled invoices using the new deletecanceledinvoices RPC to keep your database tidy. Additionally, the ForwardingHistory RPC now supports filtering by both incoming and outgoing channel IDs, allowing for more granular analysis of your node's routing activity.
Improving LND for a Growing Network 🚀
The architectural improvements in v0.20 lay the groundwork for future growth and a better developer experience especially given the tremendous growth in network volume that we’ve seen over the past year. The graph datastore migration included in this release marks another important step in making LND more performant and scalable, as well as the continued progression towards phasing out the kvdb data stores holding back LND’s performance. Upgrade to v0.20 today to get all the benefits of the latest release.
We’d like to thank the entire community for their feedback on and contributions to this release, and we look forward to hearing from you. You can find us on the LND Slack, reach out to us on Twitter, contribute a PR, or subscribe to our newsletter.

