github ZeusLN/zeus v13.2.4-rc1

pre-release4 hours ago
ZEUS v13.2.4

v13.2.4 Highlights:

  • Embedded LND v0.21.5-beta
  • LDK Node v0.7.1
  • CDK v0.18.2
  • Further security hardening measures
  • Miscellaneous bug fixes
  • Miscellaneous UI improvements

What's Changed

  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #4959
  • CashuStore: start with an empty mint list by @kaloudis in #4907
  • Wallet: bind refresh to the selected wallet on every backend, and LNC RPC dispatch by @kaloudis in #4962
  • LNC: move streaming call listeners into the backend by @kaloudis in #4516
  • EmbeddedLND: read sat_sent and sat_recv from listPeers by @kaloudis in #4923
  • LndHub: stop stale host and session token reaching the wrong server by @kaloudis in #4979
  • Block channel opens on wallets without channel management by @myxmaster in #5000
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5009
  • Channel: show CSV delay on every backend that reports it by @kaloudis in #4747
  • fix: refresh lightning balance when opening Send and PaymentRequest by @ajaysehwal in #4897
  • Activity: extract ActivityListItem into its own component by @kaloudis in #4769
  • backends: skip reserved outputs in CLN balance by @TheSeydiCharyyev in #4998
  • stores: ChannelsStore: refresh channels and balances after a close attempt by @myxmaster in #4978
  • test: cover moment call sites after the 2.31.0 bump by @kaloudis in #4797
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5012
  • eslint: forbid focused and disabled jest tests by @kaloudis in #4927
  • tests: InvoicesStore: assert store state after getNewAddress by @kaloudis in #4992
  • tests: make handleAnything assertions able to fail and cover gated routes by @kaloudis in #4925
  • tests: backends: cover LND request core, error fallback and timeout race by @kaloudis in #4987
  • tests: lndmobile: assert decoded requests and responses for channel commands by @kaloudis in #4991
  • tests: DataClearUtils: cover per-step failures during data clear by @kaloudis in #4990
  • eslint: flag themeColor inside module-level StyleSheet.create by @kaloudis in #4929
  • tests: MigrationUtils: cover storage and cloud-sync migration failure paths by @kaloudis in #4989
  • tests: backends: cover CLNRest request core and JSON-RPC error fallback by @kaloudis in #4988
  • tests: count untested source files in coverage by @kaloudis in #5027
  • tests: backends: cover NostrWalletConnect requests, results and flags by @kaloudis in #5026
  • tests: Bolt11Utils: cover every decode throw branch by @kaloudis in #5025
  • tests: use the real ErrorUtils in store and view tests by @kaloudis in #5034
  • tests: cover v13.2.3 changes found untested in the release review by @kaloudis in #5020
  • tests: share LocaleUtils, Stores and react-native-fs mocks by @kaloudis in #5040
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5041
  • tests: CashuStore: cover multi-mint planning, payment and selection by @kaloudis in #5043
  • tests: CashuStore: cover minting, quote checks and online token sends by @kaloudis in #5048
  • tests: move view tests to React Native Testing Library by @kaloudis in #5053
  • ci: post Telegram notifications to the GitHub Notifications topic by @kaloudis in #5055
  • tests: NostrWalletConnectStore: mock collaborators, not the store itself by @kaloudis in #5054
  • build: bump CashuDevKit (CDK) to 0.18.1 by @kaloudis in #4588
  • tests: mount the settings view tests with RNTL by @kaloudis in #5056
  • tests: WalletConfiguration: mount with RNTL and check the saved node by @kaloudis in #5057
  • tests: mount the swap refund and QR scanner tests with RNTL by @kaloudis in #5058
  • tests: SwapDetails: mount with RNTL and drive the swap WebSocket by @kaloudis in #5059
  • tests: mount WalletHeader, NostrContacts and LightningSwipeableRow with RNTL by @kaloudis in #5061
  • tests: mount PaymentRequest, SendingLightning and ChoosePaymentMethod with RNTL by @kaloudis in #5062
  • tests: mount Bolt12OfferReview and LnurlPay with RNTL by @kaloudis in #5064
  • tests: Send: mount with RNTL by @kaloudis in #5065
  • tests: OpenChannel: mount with RNTL by @kaloudis in #5066
  • Tests: Amount, AmountInput and KeypadAmountDisplay components by @kaloudis in #5068
  • Tests: CurrencyConverterContent component by @kaloudis in #5072
  • Tests: FeeLimit and FeeBreakdown components by @kaloudis in #5073
  • Tests: UTXOPicker component by @kaloudis in #5074
  • Tests: LayerBalances and PaymentMethodList components by @kaloudis in #5075
  • Tests: PinPad component by @kaloudis in #5076
  • ZEUS Pay: remove Zaplocker address code by @kaloudis in #4933
  • backends: skip reserved CLN outputs in getUTXOs by @TheSeydiCharyyev in #5011
  • backends: widen the reserved comment in CLN getBalance by @TheSeydiCharyyev in #5080
  • Tests: LightningAddressStore auth, status, redeem and account flows by @kaloudis in #5082
  • backends: NostrWalletConnect: send the payment hash to lookup_invoice by @kaloudis in #5030
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5083
  • fix(fees): reject implausible on-chain fee rates before they can spend by @kaloudis in #4462
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5088
  • Activity: label embedded LND pending transactions unconfirmed by @kaloudis in #5016
  • skills: recount tests in zeus-validation-and-qa by @kaloudis in #5091
  • Display: add date format, time format and seconds settings by @kaloudis in #4951
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5103
  • models: Channel: format short channel ids without bolt07 by @kaloudis in #4880
  • chore(deps): bump @babel/preset-typescript from 7.22.15 to 7.29.7 by @dependabot[bot] in #5098
  • build: remove unused compressing devDependency by @kaloudis in #5109
  • chore(deps): bump the minor-and-patch group across 1 directory with 15 updates by @dependabot[bot] in #5110
  • chore(deps): bump react-native-url-polyfill from 2.0.0 to 4.0.0 by @dependabot[bot] in #5097
  • fix(bbqr): import pako's deflate and inflate as named exports by @kaloudis in #5114
  • chore(deps): bump pako and @types/pako by @dependabot[bot] in #5099
  • BalancePane: show the seed backup reminder again by @myxmaster in #5086
  • chore(deps): bump bignumber.js from 9.0.2 to 11.1.5 by @dependabot[bot] in #5096
  • stores: NostrWalletConnect: pay zero-amount invoices with the request by @ajaysehwal in #5106
  • Receive: compare paid amounts against the sat amount by @kaloudis in #4922
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5122
  • LndHub: disable channel and address-signing flags inherited from LND by @kaloudis in #4924
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5123
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5145
  • Wallet: halt fetchData when LNC connection fails by @kaloudis in #4510
  • ZEUS-2365: classify pending and failed payments from CLN, LDK Node and NWC by @kaloudis in #4513
  • CashuInvoice: do not report failed CDK transactions as paid by @kaloudis in #4920
  • Transaction: show confirmations row for embedded LND pending transactions by @kaloudis in #5089
  • feat(nwc): explain why a budget is required by @ajaysehwal in #5081
  • components: use localized placeholder for manual on-chain fee input by @aswin-dev-debug in #5108
  • Tools: withdrawal request: pass sats to the backend by @kaloudis in #5124
  • Wallet: keep startup going when the Flow LSP is unreachable by @kaloudis in #4782
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5149
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5153
  • stores: FiatStore: don't fetch rates from the constructor by @kaloudis in #5151
  • utils: AddressUtils: rewrite four validator regexes by @kaloudis in #5169
  • stores: SettingsStore: keep a blank LDK Node scorer URL by @kaloudis in #5154
  • stores: ChannelsStore: stop a batch open when psbt_verify fails by @kaloudis in #5157
  • stores: SweepStore: check the key's network and the swept amount by @kaloudis in #5160
  • utils: handleAnything: tighten two merchant QR regexes by @kaloudis in #5161
  • utils: DataClearUtils: clear cookies and notifications by @kaloudis in #5163
  • views: WalletConfiguration: mask the LNC keys and the import banner by @kaloudis in #5165
  • views: WalletConfiguration: pass Use Tor to the custodial LndHub create by @kaloudis in #5168
  • utils: handleAnything: recognize a PSBT before LNURL by @kaloudis in #5175
  • utils: encode the username in the LUD-16 lnurlp URL by @kaloudis in #5187
  • utils: NostrUtils: skip NIP-05 lookups for .onion hosts by @kaloudis in #5188
  • stores: UnitsStore: store sats when fiat is turned off by @kaloudis in #5232
  • models: BaseModel: only stringify values with their own toString by @kaloudis in #5221
  • utils: DataClearUtils: purge xprv cache saved without a pubkey by @kaloudis in #5176
  • views: WalletConfiguration: keep LNC keys a wallet copy still uses by @kaloudis in #5177
  • utils: LinkingUtils: replace a focused screen on a deep link by @kaloudis in #5235
  • models: Payment: read the LndHub fee in getFee by @kaloudis in #5228
  • utils: KeychainPurgeUtils: purge retired cashu seed and xprv cache by @kaloudis in #5183
  • views: Bolt12OfferReview: refuse a fee limit that is not a number by @kaloudis in #5202
  • stores: SettingsStore: new connection generation on target change by @kaloudis in #5213
  • utils: ClinkUtils: refuse onion relays by parsed hostname by @kaloudis in #5211
  • backends: LND: don't parse a missing response when a socket closes by @kaloudis in #5178
  • stores: FiatStore: keep only well-formed rows from the ZEUS rates host by @kaloudis in #5227
  • views: SendingLightning: show the LNURL recipient only for its payment by @kaloudis in #5222
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5250
  • stores: LnurlPayStore: key hash-less metadata by its own hash by @kaloudis in #5200
  • views: LnurlPay: pay the checked invoice in the ecash flow by @kaloudis in #5217
  • stores: TransactionsStore: send batches with selected UTXOs via fundPsbt by @kaloudis in #5210
  • views: LnurlPay: Metadata: ignore metadata that is not LUD-06 by @kaloudis in #5207
  • utils: ClinkUtils: read the invoice amount from millisatoshis by @kaloudis in #5215
  • views: Receive: watch the address generated on a tab switch by @kaloudis in #5224
  • utils: handleAnything: say when a private key is for another network by @kaloudis in #5251
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5259
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5262
  • utils: BackgroundLockUtils: check the 60 s limit on a monotonic clock by @kaloudis in #5152
  • cashu-cdk: let CDK select the proofs for meltPartial by @kaloudis in #5204
  • cashu-cdk: clamp the total balance sum in the native modules by @kaloudis in #5196
  • backends: LdkNode: range-check invoice amount and expiry by @kaloudis in #5233
  • NWC: check expiry against the current time, and delete a wallet's connections with the wallet by @kaloudis in #5144
  • ios: LdkNodeModule: reject out-of-range channel and on-chain amounts by @kaloudis in #5263
  • backends: LdkNode: list a preimage only for succeeded payments by @kaloudis in #5171
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5264
  • utils: DataClearUtils: clear POS order records and sweep the iOS keychain by @kaloudis in #5265
  • utils: DataClearUtils: delete node directories of removed wallets by @kaloudis in #5266
  • backends: LdkNode: don't pay an offer twice while a payment is pending by @kaloudis in #5268
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5272
  • Cashu: melt only the quote of the invoice the caller loaded by @kaloudis in #5137
  • models: BaseModel: skip "proto" when copying fields by @kaloudis in #5127
  • Swaps: strip /v2 from the swap host before native claim and refund calls by @shubhamkmr04 in #4944
  • Track in-flight payments to a terminal state before releasing the send guard by @kaloudis in #4492
  • NostrWalletConnect: reserve the fee cap against the budget, keep unlisted holds for the HTLC lifetime by @kaloudis in #5138
  • views: contacts: show NIP-05 with the Nostrich icon by @kaloudis in #5180
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5276
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5277
  • Swaps: floor reverse swaps created before the amount check at their invoice by @shubhamkmr04 in #5010
  • NostrWalletConnect: take pay_invoice result from its own payment by @kaloudis in #5136
  • cashu: count the donation in the funds check by @TheSeydiCharyyev in #4555
  • chore(deps): bump @scure/base from 1.1.6 to 2.4.0 by @dependabot[bot] in #5281
  • Swaps: broadcast claims and refunds from the app, and recover settled claims by @kaloudis in #4949
  • fix(cashu): don't report unpaid melts as success by @kaloudis in #4696
  • utils: handleAnything: drop photo and banner from zeuscontact cards by @kaloudis in #5194
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5292
  • chore(deps): bump @react-native-community/netinfo from 11.4.1 to 12.0.1 by @dependabot[bot] in #5280
  • chore(deps): bump stream-browserify from 1.0.0 to 3.0.0 by @dependabot[bot] in #5279
  • chore(deps): bump @rneui/base and @rneui/themed by @dependabot[bot] in #5282
  • feat(recovery): group orphaned data by key and restore one copy each by @kunalKumar-13 in #4774
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5298
  • deps: bump @getalby/sdk from 8.0.3 to 8.1.1 by @ajaysehwal in #5296
  • fix(lndmobile): correlate payment events by payment hash by @kaloudis in #4351
  • chore(deps): bump launch-editor from 2.14.1 to 2.14.2 by @dependabot[bot] in #5301
  • deps: bump markdown-it from 14.3.1 to 14.3.3 by @kaloudis in #5303
  • CashuStore: confirm self-custody melts paid our invoice before reporting success by @kaloudis in #5140
  • build(ios): unbreak the Bundler path and guard the Xcodeproj version by @kaloudis in #4693
  • chore(deps): bump pod-install from 0.1.38 to 1.2.1 by @dependabot[bot] in #5283
  • build(ios): require activesupport 7.2.3.1 or later by @kaloudis in #5304
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5305
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5327
  • LSP: price invoices with their own fee quote, and confirm the fee before an LNURL-withdraw by @kaloudis in #5142
  • Swaps: check what spent a settled reverse lockup, and retry a stored claim by @kaloudis in #5288
  • stores: only swap the settings reference when the stored blob changed by @kaloudis in #4594
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5391
  • stores: NWC: record pay_invoice when the payments refresh fails by @kaloudis in #5389
  • Payments: treat an lnd payment in flight as pending, and match the deciding attempt by @kaloudis in #5135
  • POS: require the PIN for every screen outside the POS views by @kaloudis in #5143
  • swaps: tighten the reverse swap on-chain amount check by @kaloudis in #5139
  • swaps: claim reverse swaps on the script path and decide the claim fee at creation by @kaloudis in #5126
  • swaps: verify submarine swap response before saving by @kaloudis in #5125
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5402
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5403
  • WalletConfiguration: read the enableTor route param by @kaloudis in #5132
  • LSPS7: surface extendable-channels fetch errors, show maxed-out leases by @kaloudis in #4567
  • stores: LSPStore: validate the LSPS7 extendable_channels list by @kaloudis in #5197
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5407
  • views: send the donation after a payment at most once by @kaloudis in #5291
  • Lockscreen: finish interrupted wipes and save each attempt before checking it by @kaloudis in #5141
  • lndmobile: listPayments: request the newest payments by default by @kaloudis in #5130
  • utils: match lnd on duplicate BOLT11 singleton tags by @kaloudis in #4631
  • ChannelsPane: redraw lease badges when lease data or block height changes by @kaloudis in #5408
  • Tools: reach wallet config recovery from the intro screen by @kaloudis in #5412
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5411
  • patches: make iOS keychain overwrites atomic by @kaloudis in #5413
  • build: revert pod-install to 0.1.38 to fix Xcode Cloud by @kaloudis in #5416
  • chore(deps): bump fast-uri from 3.1.7 to 3.1.9 in /zeus_modules/@lightninglabs/lnc-core by @dependabot[bot] in #5418
  • android: MobileTools: consume the NFC tag when reading it by @kaloudis in #5184
  • android: remove unused LndMobileTools intent methods by @kaloudis in #5326
  • MigrationUtils: remove no-op legacy Cashu key migration by @kaloudis in #5390
  • build: remove unused vendored UR modules by @kaloudis in #5325
  • views: Wallet: retry instead of restarting from the error screen by @myxmaster in #4883
  • deps: lnc-rn: bump serialize-javascript from 7.0.5 to 7.1.4 by @kaloudis in #5422
  • skills: correct funds and wipe facts (LSP, swaps, LNURL, duress) by @kaloudis in #5423
  • skills: teach versioned settings migrations (SETTINGS_VERSION) by @kaloudis in #5424
  • skills: re-verify stale facts against master 3dc9f83 by @kaloudis in #5425
  • stores: NWC make_invoice returns its own invoice by @kaloudis in #5316
  • views: Receive: NFC withdraw for the amount on screen, only while open by @kaloudis in #5234
  • views: Receive: show the LSP fee the shown invoice was priced with by @kaloudis in #5431
  • stores: ChannelBackupStore: handle failed backups server responses by @kaloudis in #5447
  • Pass the configured payment timeout to keysend by @kaloudis in #4355
  • fix(migration): verify a migrated key by comparing the read-back by @kunalKumar-13 in #4736
  • fix(recovery): verify a restore by comparing the read-back, not its truthiness by @kunalKumar-13 in #4712
  • NodeInfo: treat testnet4 nodes as testnet by @kaloudis in #4908
  • fix: display units for Cashu payment request expiry and CLTV expiry by @kaloudis in #4512
  • App: end the login session when a new App root mounts by @kaloudis in #5199
  • UrlUtils: use signet mempool API and explorer paths on signet nodes by @kaloudis in #4910
  • Round percent fee limits up to whole sats by @kaloudis in #4850
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5448
  • backends: CLNRest: drop failed Tor requests from the call cache by @kaloudis in #4993
  • locales: use single locale strings for fixed word order labels by @aswin-dev-debug in #5446
  • LDK Node: don't show the success screen for a pending keysend by @kaloudis in #4980
  • views: ActivityFilter: keep the End Date row's right inset by @kaloudis in #4886
  • FeeStore: let the unfiltered forwarding history retry run by @kaloudis in #4921
  • views: WalletConfiguration: clear stale credentials on lndconnect import by @kaloudis in #5128
  • LSPStore: log the custom-message socket error reason by @kaloudis in #5115
  • locales: fee limit explainer: describe the action, not the view by @TheSeydiCharyyev in #5443
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5451
  • backends: CLNRest: throw the JSON-RPC error message from restReq by @kaloudis in #4995
  • LND: fetch the newest on-chain transactions, not the oldest by @kaloudis in #4770
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5455
  • swaps: distrust persisted claim authority on imported swaps by @kaloudis in #4960
  • fix: hand each shared image to one reader by @kaloudis in #4744
  • Cashu: record the quote id meltPartial paid each MPP part with by @kaloudis in #5052
  • Receive: round the BIP21 on-chain amount up to whole sats by @kaloudis in #5409
  • android: MainActivity: drop the launch intent when re-created by @kaloudis in #5193
  • Fee limits: keep a 0 sat limit as a cap, and cap LDK Node keysend fees by default by @kaloudis in #5134
  • views: Send: load the default fee percentage for keysend by @kaloudis in #5179
  • stores: keep only expected fields of swap creation responses by @kaloudis in #5334
  • Cashu: don't consume tokens before the self-custody sweep is ready by @kaloudis in #4488
  • Embedded LND: v0.21.5-beta.rc1-zeus by @kaloudis in #5461
  • Sends: don't offer a retry for on-chain sends that may have gone out by @kaloudis in #4961
  • views: LSPS1, LSPS7: show 0 confirmation counts instead of a bare 0 by @TheSeydiCharyyev in #5419
  • tests: LinkingUtils: cover handleInitialUrl by @kaloudis in #5464
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5471
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5473
  • tests: check that translations keep en.json placeholders by @kaloudis in #5470
  • [Transifex] Updates for project ZEUS by @transifex-integration[bot] in #5475
  • fix(cashu): iOS crash on wallet switch from CDK database teardown by @kaloudis in #5453
  • LDK Node: v0.7.1-zeus by @kaloudis in #5476
  • Embedded LND: v0.21.5-beta-zeus by @kaloudis in #5474
  • build: bump CashuDevKit (CDK) to 0.18.2 by @kaloudis in #5481
  • iOS: only run the first-run keychain clear with protected data by @kaloudis in #5414

New Contributors

Full Changelog: v13.2.3...v13.2.4-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.4-rc1.txt and manifest-v13.2.4-rc1.txt.sig are in the current directory) with:

gpg --verify manifest-v13.2.4-rc1.txt.sig manifest-v13.2.4-rc1.txt

You should see the following if the verification was successful:

gpg: Signature made Fri Oct  9 13:55:11 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>"
gpg:                 aka "ZEUS Security <security@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.4-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

ZEUS documentation
PGP Key

Android

arm64-v8a APK
Universal APK
Manifest
Manifest Signature

iOS

Apple TestFlight
IPA

Don't miss a new zeus release

NewReleases is sending notifications on new releases.