Warning
iOS users running ZEUS on more than one device are advised to read the warning below!
v13.2.2 Highlights:
- Embedded LND v0.21.3-beta
- Swaps: SATS Routing (new default) and Coinos added as providers
- iOS: automatic cleanup of stale iCloud Keychain wallet data (see note below)
- Nostr Wallet Connect: view connection secrets after creation, stricter connection string validation
- Cashu: P2PK locked token fixes
- LND: imported account receive fixes
- Seed recovery: catch typos before restoring
- Channel migration export when the node won't start
- Further security hardening measures
- Miscellaneous bug fixes
- Miscellaneous UI improvements
Warning
iOS users running ZEUS on more than one device
Due to a bug in a third-party dependency, older versions of ZEUS unintentionally stored wallet data (including seeds and connection credentials) in the iCloud-synced keychain rather than in device-only storage. iCloud Keychain is end-to-end encrypted: the data was only readable by your own trusted devices, not by Apple or anyone else, and we have no indication that any user data was exposed. It did, however, have unintended side effects, such as stale or deleted wallet data reappearing on new or restored devices signed into the same Apple ID. It also ran against our principle that seeds should never leave your device. This release moves that data into device-local storage and then automatically and permanently deletes the iCloud-synced copies. No prompt is shown.
If iCloud Keychain is enabled, that deletion propagates to every device signed into the same Apple ID. The first device you open on v13.2.2 keeps a local copy of everything and then removes the iCloud copies. Any other device that has not yet been opened on v13.2.2 will lose its saved wallet configurations, because older versions kept that data only in the synced keychain and had no separate on-device copy. This applies whether that device is still on an older version or has only auto-updated in the background. Because whichever device opens first performs the cleanup, no update order avoids this. Devices with iCloud Keychain turned off are not affected.
Before updating, on each device:
- Make sure you have your seed phrase backed up for every embedded wallet (and your Cashu seed, if you use ecash)
- Export your wallet configurations via
Menu>Tools>Export/Import Wallet Configurations
If a device loses its wallets: your funds are not affected. Restore from your seed phrase, or import a wallet configuration export. The first device you opened on v13.2.2 still holds all of the data and can produce that export.
Going forward, ZEUS wallet data will no longer appear automatically on new devices signed into your Apple ID. That behavior was never an intended feature, and embedded node wallets never transferred correctly through it. Single-device and Android users are not affected.
What's Changed
- chore(deps): bump react-native to 0.86.0 by @kaloudis in #4185
- fix: validate Nostr Wallet Connect URIs before saving config by @ajaysehwal in #4153
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4535
- chore(deps): bump browserslist from 4.23.0 to 4.28.8 in /zeus_modules/@lightninglabs/lnc-rn by @dependabot[bot] in #4539
- chore(deps): bump browserslist from 4.28.2 to 4.28.8 in /zeus_modules/@lightninglabs/lnc-core by @dependabot[bot] in #4540
- chore(deps): bump browserslist from 4.24.4 to 4.28.8 by @dependabot[bot] in #4541
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4543
- chore(deps): bump the minor-and-patch group with 26 updates by @kaloudis in #4534
- views/Send: tie send max toggle to the UTXO selection by @kaloudis in #4526
- feat(swaps): add Coinos and SATS Routing providers, retire Eldamar Swaps by @kaloudis in #4542
- Seed Recovery: catch seed typos client-side (aezeed checksum + word normalization) by @kaloudis in #4442
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4544
- models: decode percent-encoded memos for display by @kaloudis in #4504
- chore: replace deprecated InteractionManager with requestIdleCallback by @kaloudis in #4533
- chore(deps): bump fast-uri from 3.1.5 to 3.1.7 in /zeus_modules/@lightninglabs/lnc-core by @dependabot[bot] in #4550
- chore(deps): bump @xmldom/xmldom from 0.8.13 to 0.8.15 by @dependabot[bot] in #4551
- chore(deps): bump qs from 6.15.3 to 6.16.0 by @dependabot[bot] in #4552
- Embedded LND: v0.21.3-beta-zeus by @kaloudis in #4548
- chore(deps): bump js-lnurl to 0.6.0 by @kaloudis in #4538
- fix(cashu): hide custom amount field for zero-amount invoices by @ajaysehwal in #4547
- fix(nwc): return RATE_LIMITED instead of UNAUTHORIZED during connection updates by @ajaysehwal in #4537
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4561
- LNURL: surface successActions when LndHub-style backends omit payment hash or preimage by @kaloudis in #4514
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4564
- locales: fix contradictory incorrect-payment-details error copy by @kaloudis in #4563
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4568
- feat(nwc): allow viewing connection secret after creation by @ajaysehwal in #4565
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4570
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4571
- chore: add .agents/skills symlink by @kaloudis in #4582
- fix: report supportsTaproot as false for LDK Node by @kaloudis in #4584
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4586
- docs: drop AI co-author rule from skill by @kaloudis in #4581
- fix(security): prevent iOS swipe-back from dismissing app lock by @kaloudis in #4575
- feat: link the local wallet FAQs from Troubleshooting and Help by @kaloudis in #4585
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4587
- [drop-android-x86] build: drop the 32-bit x86 Android ABI by @kaloudis in #4596
- chore(deps): bump joi, brace-expansion, body-parser to patched versions by @kaloudis in #4574
- fix(security): confirm before fetching a scanned BTCPay config by @kaloudis in #4379
- views: use sending capacity for payment selection by @kaloudis in #4580
- chore(deps): bump @babel/core from 7.29.6 to 7.29.7 by @dependabot[bot] in #4606
- chore(deps): bump punycode from 1.4.1 to 2.3.1 by @dependabot[bot] in #4602
- chore(deps): bump object-hash and @types/object-hash by @dependabot[bot] in #4603
- chore(deps): bump react-native-get-random-values from 1.9.0 to 2.0.0 by @dependabot[bot] in #4600
- chore(deps): split safe minor bumps from #4599 by @kaloudis in #4611
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4595
- chore(deps): bump svgo from 3.3.4 to 3.3.5 by @dependabot[bot] in #4616
- chore(deps): bump joi from 17.12.1 to 17.13.7 in /zeus_modules/@lightninglabs/lnc-rn by @dependabot[bot] in #4615
- chore(deps): bump js-yaml from 3.15.1 to 3.15.2 in /zeus_modules/@lightninglabs/lnc-core by @dependabot[bot] in #4614
- Receive: force LSP on when creating wrapped invoice by @kaloudis in #4502
- fix(nwc): guard overlapping same-kind connection mutations by @ajaysehwal in #4583
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4619
- tests: add BIP39 wordlist invariants for Bip39Utils by @kunalKumar-13 in #4572
- backends: type the CLN responses CLNRest reads by @TheSeydiCharyyev in #4618
- tests: add BBQr split/join invariants for BbqrUtils by @kunalKumar-13 in #4621
- [feat] build: drop the 32-bit x86 Android ABI by @kaloudis in #4597
- views: add empty-state text to channel lists by @kaloudis in #4623
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4626
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4632
- stores: settle superseded getNodeInfo calls instead of leaving them pending by @kaloudis in #4468
- backends: LDK: fix settled force-closes stuck as pending by @kaloudis in #4483
- fix(security): exclude LDK Node data from iOS backups by @kaloudis in #4380
- build: add --low-memory and --gradle-cache flags by @kaloudis in #4573
- fix: NaN amount when scanning a BIP21 QR from inside the Send view by @kaloudis in #4625
- fix(cashu): omit zero-valued NUT-11 tags so P2PK tokens are redeemable by @ajaysehwal in #4628
- fix(cashu): stop amount from being clobbered by lock-settings round trip by @ajaysehwal in #4629
- stores: fix crash opening a channel with a missing routing policy by @kaloudis in #4592
- fix(cashu): clear route params with replaceParams by @TheSeydiCharyyev in #4636
- fix(security): dispose CDK handles before full-wipe database sweep by @kaloudis in #4578
- fix(cashu): make Lock Settings Back cancel instead of dropping the lock by @ajaysehwal in #4638
- chore(deps): bump js-yaml to patched versions by @kaloudis in #4641
- chore(deps): bump flagged pins in the vendored lnc-rn yarn.lock by @kaloudis in #4554
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4639
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4647
- Currency modal: dismiss dialog window before navigating to Select Currency by @kaloudis in #4455
- Offer channel migration export when the embedded node won't start by @kaloudis in #4521
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4654
- fix(receive): don't show LSP connection error on non-LSP receive tabs by @ajaysehwal in #4652
- LNURL: prevent toggling payment history into an empty panel by @kaloudis in #4643
- Receive: generate imported account addresses under the account's key scope by @kaloudis in #4518
- Hide on-chain fee rate fields on backends that don't apply them by @kaloudis in #4661
- fix(modalbox): clamp fontScale-scaled sheet height to the container by @kaloudis in #4667
- fix(lsps1): hide order form and enable retry when get_info fails by @ajaysehwal in #4653
- refactor(migrations): stamp settings blob, single write by @kaloudis in #4477
- fix: stop syncing keychain data to iCloud, add consent-gated legacy purge by @kaloudis in #4385
- fix(navigation): prevent swipe-back to stale onboarding screen by @ajaysehwal in #4671
- build: iOS: raise Pods deployment target floor to RN minimum by @kaloudis in #4672
- fix(swaps): default to SATS Routing, retire Boltz and SwapMarket by @shubhamkmr04 in #4620
- fix(cashu): fail closed on seed recovery errors by @kaloudis in #4670
- [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4655
New Contributors
- @kunalKumar-13 made their first contribution in #4572
Full Changelog: v13.2.1...v13.2.2-rc1
Verifying the Release
In order to verify the release, you'll need to have gpg or gpg2 installed on your system. Once you've obtained a copy (and hopefully verified that as well), you'll first need to import the keys that have signed this release if you haven't done so already:
gpg --keyserver hkps://keys.openpgp.org --recv-keys 96C225207F2137E278C31CF7AAC48DE8AB8DEE84
Once you have his PGP key you can verify the release (assuming manifest-v13.2.2-rc1.txt and manifest-v13.2.2-rc1.txt.sig are in the current directory) with:
gpg --verify manifest-v13.2.2-rc1.txt.sig manifest-v13.2.2-rc1.txt
You should see the following if the verification was successful:
gpg: Signature made Fri Sep 18 10:05:20 2026 EDT
gpg: using RSA key 96C225207F2137E278C31CF7AAC48DE8AB8DEE84
gpg: issuer "zeusln@tutanota.com"
gpg: Good signature from "Zeus LN <zeusln@tutanota.com>"
gpg: aka "ZEUS Support <support@zeusln.com>"
That will verify the signature on the main manifest page which ensures integrity and authenticity of the binaries you've downloaded locally. Next, depending on your operating system you should then re-calculate the sha256 sum of the binary, and compare that with the following hashes:
cat manifest-v13.2.2-rc1.txt
One can use the shasum -a 256 <file name here> tool in order to re-compute the sha256 hash of the target binary for your operating system. The produced hash should be compared with the hashes listed above and they should match exactly.
Android fingerprint
Users verifying the release on an Android device can check against the key fingerprint below using AppVerifier. This fingerprint can also be found on our website here.
SHA1: 32:06:3C:97:96:38:0D:99:EE:4A:CB:B8:1E:2A:6F:27:FD:66:8E:C1
SHA256: 2A:F8:E2:0A:C9:44:57:67:CB:D4:4E:D8:4D:BB:FC:33:C6:C9:82:48:89:7C:4F:84:3C:42:C2:76:5C:4A:D3:BA
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3
External links
Android
arm64-v8a APK
Universal APK
Manifest
Manifest Signature