Who this is for: the "no desktop at all" option: you live on your phone, or you want an always-on Lightning node on a small server. Phoenix (mobile app) and phoenixd (its server sibling) both have integrated swaps, so you can move sats between onchain and Lightning without any external swap service.
The short version: Phoenix manages a single dynamic channel using splicing. Receiving onchain grows the channel (splice-in). Sending to an onchain address shrinks it (splice-out). Paying over Lightning is just a normal payment. So Phoenix works both as your SPEND wallet and as the buffer that refills your other wallets.
Part A: Phoenix mobile appPart A: Phoenix mobile app
How it worksHow it works
- One channel to ACINQ's node, resized on demand via splicing. No opening/closing channels, no scattered liquidity, no Boltz.
- Receive onchain → funds are spliced into the channel automatically, usable almost instantly.
- Receive over Lightning → free, as long as the payment fits your current inbound capacity.
- Send over Lightning → ~0.4% + 4 sat routing fee.
- Send to an onchain address → a splice-out, charged normal mining fees.
Also check ACINC's Swaproot article (privacy + cheaper deposits): acinq.co/blog/phoenix-swaproot.
Step 1: Install and back upStep 1: Install and back up
Install from the app store or the GitHub releases. During setup write down your 12-word seed and store it somewhere safe: it backs up everything including channel state. Losing the phone without the seed is losing the funds.
Step 2: Fill it up from your cache (onchain → channel)Step 2: Fill it up from your cache (onchain → channel)
- Tap Receive → On-chain, and send sats from your exchange / cold wallet / cache wallet to that address.
- On confirmation the funds are spliced into your channel (zero-conf UX: usable almost immediately).[1]
- Cost: just the onchain mining fee. The old 1% / 3000-sat channel fee is gone.
Tip: if you're funding the wallet for the first time, make it a decent-sized deposit (e.g. $210+ or a few hundred thousand sats) so your channel starts big enough to be useful. Small refills after that are cheap.
Step 3: Top it up over LightningStep 3: Top it up over Lightning
- Receive → Lightning, create a BOLT11 invoice (or share your BOLT12 offer / Lightning Address) and have another wallet pay it.
- Receiving within your current capacity is free.
- If the incoming payment is bigger than your inbound capacity, Phoenix splices the channel larger: you'll be shown the fee (~1,000 sats inbound-liquidity fee + mining fee) and asked to approve before it proceeds.[2]
- If you know you'll receive a lot, pre-request inbound liquidity in Settings so the capacity is already there and you don't pay per-payment splice fees.
Step 4: Refill your other SPEND wallets from PhoenixStep 4: Refill your other SPEND wallets from Phoenix
Use case; Phoenix as the buffer:
- In your other mobile wallet, create an LN invoice for the amount you want (e.g. 300,000 sats).
- In Phoenix: Send → paste the invoice → confirm. Fee ~0.4% + 4 sats.
- Your other wallet is refilled; Phoenix stays as the reserve.
Step 5: Sending out to onchain (only when you mean it)Step 5: Sending out to onchain (only when you mean it)
- Send → paste a bc1 address. Cost is mining fees, you can set the feerate, and you can bump it later (RBF) like a normal onchain wallet.
- ⚠️ Warning: if you splice out your entire balance, Phoenix will shrink or close the channel: and then you're paying to reopen it. Always leave ~1% behind. If your goal is to move sats to cold storage, send them over Lightning to a swap service instead of splicing out: the channel survives and keeps working.
Step 6: Know when to refillStep 6: Know when to refill
Keep the channel sized to what you actually spend in a cycle. When it runs low, refill from your cache (onchain splice-in, mining fee only) or from another wallet over LN (free within capacity). Because splices cost mining fees, batch refills rather than drip-feeding sats in one onchain tx at a time.
Phoenix cost check (2026)Phoenix cost check (2026)
- Send over Lightning: ~0.4% + 4 sat
- Receive over Lightning (within capacity): free
- Receive needing new liquidity: ~1,000 sat + mining fee (approx)
- Splice-in (onchain deposit): mining fee only
- Splice-out (onchain send): mining fee only
Part B: phoenixd (server daemon, always-on)Part B: phoenixd (server daemon, always-on)
phoenixd is the same Phoenix engine running headless on a Linux / macOS / Windows (WSL) server. It runs 24/7, manages its own liquidity automatically, and speaks a simple HTTP API. Perfect as the always-on buffer node behind your other wallets, or as a backend for LNbits / Stacker News payments.
Step 1: InstallStep 1: Install
Download the latest phoenixd-<version>-linux-x64.zip (or arm64 / macOS) from github.com/ACINQ/phoenixd/releases, unzip, and run:
wget https://github.com/ACINQ/phoenixd/releases/download/<version>/phoenixd-<version>-linux-x64.zip
unzip -j phoenixd-<version>-linux-x64.zip
chmod +x phoenixd phoenix-cli
./phoenixdFirst run generates your node and 12-word seed: back up ~/.phoenix/seed.dat immediately. Config lives in ~/.phoenix/phoenix.conf (http-password, http-bind-address=127.0.0.1, http-bind-port=9740).
Step 2: Check the nodeStep 2: Check the node
./phoenix-cli getinfo
./phoenix-cli getbalancegetbalance shows your channel balance, a feeCreditSat (small incoming LN payments that haven't opened a channel yet sit in a custodial fee-credit until one does[3]), and any unconfirmed swap-in funds.
Step 3: Receive onchain (build / refill the channel)Step 3: Receive onchain (build / refill the channel)
./phoenix-cli getswapinaddressSend onchain sats to the returned address: they're spliced in automatically (the same trustless swap-in the mobile app uses). The channel grows, no Boltz, no manual channel opening.
Step 4: Receive over LightningStep 4: Receive over Lightning
./phoenix-cli createinvoice --amountSat 250000 --description "refill"Returns a BOLT11 invoice (plus payment hash). Share it, get paid. phoenixd also supports BOLT12 offers (createoffer) and a Lightning Address (getlnaddress) for zero-friction receiving.
Step 5: Refill your other SPEND walletsStep 5: Refill your other SPEND wallets
- Pay an invoice:
./phoenix-cli payinvoice --invoice <bolt11> - Pay a Lightning Address:
./phoenix-cli paylnaddress --address someone@somewhere --amountSat 100000 - Pay onchain (splice-out / close):
./phoenix-cli sendtoaddress --address bc1... --amountSat 100000 --feerateSatByte 5
Step 6: Use the REST API (scripts, integrations)Step 6: Use the REST API (scripts, integrations)
The API is HTTP basic auth with an empty username and the http-password from phoenix.conf:
curl -u :<http-password> http://127.0.0.1:9740/getinfo
curl -u :<http-password> http://127.0.0.1:9740/getbalance
curl -u :<http-password> -X POST http://127.0.0.1:9740/createinvoice -d "amountSat=250000&description=refill"
curl -u :<http-password> -X POST http://127.0.0.1:9740/payinvoice -d "invoice=<bolt11>"
curl -u :<http-password> -X POST http://127.0.0.1:9740/paylnaddress -d "address=name@domain&amountSat=100000"
curl -u :<http-password> -X POST http://127.0.0.1:9740/sendtoaddress -d "address=bc1...&amountSat=100000&feerateSatByte=5"
curl -u :<http-password> http://127.0.0.1:9740/getswapinaddressNote the request bodies are URL-encoded form params (-d "key=value&..."), not JSON.
Security: keep http-bind-address=127.0.0.1 and only expose phoenixd through a proper HTTPS reverse proxy if you need remote access. There's also a http-password-limited-access (read-only) password you can hand to third-party apps.
Step 7: Make it usefulStep 7: Make it useful
Typical setups:
- Always-on Lightning Address / BOLT12 to receive zaps, tips, payments 24/7.
- LNbits backend (lightweight, connectivity-resilient).
- Auto-forwarder: receive into phoenixd, script
payinvoiceto route sats out to your other wallets on a schedule.
Gotchas for both Phoenix and phoenixdGotchas for both Phoenix and phoenixd
- Single LSP: all channels connect to ACINQ's node. They can see your payment activity (they can't take your funds). Fine for most people; a concern only if you want routing-node-level privacy.
- 0.4% outbound fee is higher than routing your own channels: you're paying for the "it just works" splicing.
- Phone offline = can't receive. That's exactly what phoenixd (Part B) is for.
- Don't empty the channel to onchain: leave ~1%, or the channel shrinks/closes and you pay to rebuild it.
- Back up the seed; splice operations cost mining fees, so batch your onchain moves.
Note: This guide may contain inaccurate information as technology evolve and tooling tune up. Feel free to report any inaccurancy in the comments below.
Phoenix's swap-in uses a swap-in-potentiam-style mechanism, so deposited funds are spendable almost as soon as the onchain transaction confirms: even before the splice is fully settled. See Introducing the new Phoenix. ↩
The ~1,000 sat inbound-liquidity fee: a one-time cost on top of mining fees, charged when a received payment needs a splice to enlarge the channel: was introduced in the December 2023 update. See the fee table in Introducing the new Phoenix. ↩
A
feeCreditis a small inbound Lightning payment that arrives while your channel can't be opened yet; ACINQ holds it temporarily and uses it to pay your first channel-opening fee. See the phoenixd docs. ↩
Read Managing LN wallets liquidity first if you haven't.