The Stable Channels Wallet lets users maintain a portion of their bitcoin to a dollar balance, all while staying self-custodial and 100% in bitcoin.
- iOS — version 0.9 is in App Store review; link coming soon
- macOS
- Windows
- Android APK
- Linux (AppImage) — download the
.AppImagefor your architecture (x86_64 or aarch64)
These links always point to the newest release. All releases: Releases
Stable Channels ships as an iOS app, an Android app, and a desktop wallet (macOS, Windows, Linux). Every app runs a full Lightning node on the device and lets users stabilize the bitcoin that they send to themselves during onboarding.
The LSP/Server keeps the user stable by overcollateralizing the Stable Channel by 100% at the time of channel creation. Each user (the stability receiver and the LSP/stability provider) puts in the same amount of bitcoin, and the stability mechanism is activated.
The stability mechanism works like this: each node refreshes a multi-exchange BTC/USD price consensus every 15 seconds. Six direct USD markets are preferred; a geographically diverse BTC/USDT fallback is used only when at least three independent USDT/USD sources confirm that USDT remains within 0.5% of its dollar peg. At least three agreeing prices are required, outliers are excluded, and stale or suspicious prices can remain visible but cannot move money. Based on an accepted price, the nodes adjust the channel balance with their counterparty to keep the stability receiver's balance at a fixed dollar value (e.g., $100,000 of bitcoin).
Both parties remain self-custodial and can opt out anytime via cooperative or forced on-chain channel closure.
The project is in-progress and is built on LDK Node and Rust. Prior versions were compatible with LND and CLN. These legacy implementations can be found here: https://github.com/toneloc/stable-channels-legacy.
Links with examples:
- Basic example: Twitter thread
- In-depth discussion: Delving Bitcoin
- Podcast discussion: Stephan Livera Podcast — Episode 591
- Project website: StableChannels.com
You can check out the latest builds for macOS, Windows, or Linux here - https://github.com/toneloc/stable-channels/releases
cargo run --locked --bin stable-channels userThis will start the app on mainnet. Pay the invoice and you are good to go.
Always build with --locked so cargo uses the exact dependency versions pinned in the committed Cargo.lock instead of re-resolving them. Treat any Cargo.lock change as a reviewed change — never update dependencies to versions published the same day (see the 2026-08-20 arrayref supply-chain attack, RUSTSEC-2026-0260).
Logs and backup/key files can be found in these directories:
- Linux -
~/.local/share/StableChannels - Mac -
~/Library/Application\ Support/StableChannels - Windows -
%APPDATA%\StableChannels
*actual directory might differ depending on user's system
The application works out of the box with sensible defaults defined in src/constants.rs. To customize values like the LSP public key, address, or network settings, edit the constants directly in that file.
# User interface
cargo run --locked --bin stable-channels user
More instructions on running the LSP backend are forthcoming.
After cloning, install the git hooks (one-time):
./.githooks/install.shThis points git at .githooks/ so the pre-commit checks (secret scanning, cargo fmt, cargo clippy, large-file guard) run automatically on every commit.
When the accepted price of bitcoin changes:
-
(a) Goes up:
- User/Stable Receiver loses bitcoin.
- Less bitcoin is needed to maintain the dollar value.
- The User/Stable Receiver pays the LSP/Stable Provider.
- User/Stable Receiver loses bitcoin.
-
(b) Goes down:
- User/Stable Receiver gains bitcoin.
- More bitcoin is needed to maintain the dollar value.
- The LSP/Stable Provider pays the User/Stable Receiver.
- User/Stable Receiver gains bitcoin.
-
(c) Stays the same:
- No action required.
Note: Stable Channels are currently non-routing channels. Work is ongoing to add routing and payment capabilities.
Using a fresh Ubuntu or on Windows? You may need to install OpenSSL libraries or Perl.
Linux - sudo apt-get install -y pkg-config libssl-dev and curl.
Windows - winget install StrawberryPerl.StrawberryPerl. Windows also requires a few other things as well.
Each side puts in 1 BTC at $100,000.
Abbreviations:
- SR = Stable Receiver (targeting $100,000)
- SP = Stable Provider
- Δ = Delta / Change
| Price Change (%) | New BTC Price | SR (BTC) | SR (USD) | SP (BTC) | SP (USD) | SR Fiat Δ$ | SR BTC Δ | SR Fiat Δ% | SR BTC Δ% | SP Fiat Δ$ | SP BTC Δ | SP Fiat Δ% | SP BTC Δ% |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| -30 | 70,000.00 | 1.43 | 100,000.00 | 0.57 | 40,000.00 | 0.00 | +0.43 | 0% | +42.86% | -60,000.00 | -0.43 | -60.00% | -42.86% |
| -20 | 80,000.00 | 1.25 | 100,000.00 | 0.75 | 60,000.00 | 0.00 | +0.25 | 0% | +25.00% | -40,000.00 | -0.25 | -40.00% | -25.00% |
| -10 | 90,000.00 | 1.11 | 100,000.00 | 0.89 | 80,000.00 | 0.00 | +0.11 | 0% | +11.11% | -20,000.00 | -0.11 | -20.00% | -11.11% |
| 0 | 100,000.00 | 1.00 | 100,000.00 | 1.00 | 100,000.00 | 0.00 | 0.00 | 0% | 0% | 0.00 | 0.00 | 0% | 0% |
| 10 | 110,000.00 | 0.91 | 100,000.00 | 1.09 | 120,000.00 | 0.00 | -0.09 | 0% | -9.09% | +20,000.00 | +0.09 | +20.00% | +9.09% |
| 20 | 120,000.00 | 0.83 | 100,000.00 | 1.17 | 140,000.00 | 0.00 | -0.17 | 0% | -16.67% | +40,000.00 | +0.17 | +40.00% | +16.67% |
| 30 | 130,000.00 | 0.77 | 100,000.00 | 1.23 | 160,000.00 | 0.00 | -0.23 | 0% | -23.08% | +60,000.00 | +0.23 | +60.00% | +23.08% |
Thanks to countless open-source bitcoin developers and organizations who have made this work possible. Satoshi Lives!
Thanks to all of the Lightning Network core developers, and all of the bitcoin open-source devs on whose giant shoulders we stand.


