Back to Freedom.Tech Back
All Ledger Live Desktop releasesAll versions
Release Tue, Aug 11, 2026 6 min read

Ledger Live Desktop 4.15.0

Original release notes

4.15.0

Minor Changes

No workspace package declares it anymore, and none may again: enforce-boundaries now fails CI on any manifest that does. The classes it held live in the package that owns them, with @ledgerhq/ledger-wallet-framework/errors as the shared home below the coin layer.

The package itself stays in the repo so it keeps being published for external consumers, and is bridged to the external coin packages that still peer-depend on it via pnpm.packageExtensions using workspace:* (which reuses the single in-repo copy, so the dependency graph keeps exactly the physical copies it had before). LedgerHQ/coin-modules#752 removes that peerDependency upstream; once it is released the bridge can be dropped, but the package still needs publishing.

  • #20221 1689e58 Thanks @cted-ledger! - Serve Zcash accounts with a standalone @ledgerhq/coin-zcash coin-module (LIVE-34556).

The module owns all four transfer flows - tt, tz, zt, zz - and crafts, signs and broadcasts each one as a PCZT through the native @ledgerhq/zcash-utils engine, with no legacy PSBT path: it owns the transparent UTXO path itself via @ledgerhq/wallet-btc instead of delegating to the Bitcoin bridge. Shielded balances, notes and operations come from the sync engine, so a shielded account reports the balance and history the chain-adapter could only report for its transparent side.

Which module serves a Zcash account is decided by the existing zcashShielded feature flag, mirrored into live-common (src/bridge/zcashRouting.ts) because a coin-module cannot read React feature flags. OFF (the default) keeps @ledgerhq/coin-bitcoin's Zcash chain-adapter and its legacy transparent path, so nothing changes for users until the flag is turned on; the two implementations are kept accounting-equivalent by differential tests that run both bridges over the same fixtures.

Desktop hosts the engine in a dedicated utility process, reached over a zcash:-prefixed IPC contract owned by the module.

Two flows do not complete on a NU6.3 chain, where newly shielded value goes to the Ironwood pool: zz has no builder, since it would need Orchard spends alongside an Ironwood output; and a flow that does build a V6 PCZT cannot be finalized until @ledgerhq/zcash-utils exposes a V6 finalizer.

@shared/api-services now holds one endpoint-less createApi per backend (CAL, CoinMarketCap, Countervalues, Push Devices), owning its base query, extraArgument contract and reducer path. domain/api/* packages add their endpoints with injectEndpoints and their own cache tags with enhanceEndpoints, so one reducer, middleware and cache now serve every use case on a backend - the two CoinMarketCap packages previously had one each. Apps register the service apis.

extraArgument builder names are unchanged, so only import paths move. Reducer paths are renamed after their backend (calApi, coinMarketCapApi, countervaluesApi); no persisted data and no endpoint behaviour is affected.

  • #20263 6976ff3 Thanks @tonykhaov! - Wire desktop analytics consent renewal to shared policyVersion major/minor decision flow
  • #19989 78d84d4 Thanks @deepyjr! - Prevent Asset Detail history from stacking after Buy and Sell live app navigation
  • #20197 507e450 Thanks @ysitbon! - Drop boot fiat fetch and InitialQueriesContext: supportedCounterValues is now a derived selector backed by the supportedFiats slice. Mobile gains a read-time OFAC guard on counterValueCurrencyLocalSelector; desktop removes its boot-time getSupportedFiats.initiate dispatch. Both apps now lazy-load the CVS query from the two picker screens.
  • #20078 baea85e Thanks @jiyuzhuang! - Fix Generic Awareness Modal cascade on mobile and add Braze content card logging on mobile and desktop
  • #20222 c6f620c Thanks @deepyjr! - Model contact address labels with asset defaults and per-contact uniqueness
  • #20243 63aa4b6 Thanks @LucasWerey! - Remove legacy translation keys orphaned by the Wallet 4.0 Q1 cleanup (sidebar/topbar rewrite, legacy dashboard & empty states, Help modal, receive step-options and the sync activity indicator).
  • #20317 70c33a8 Thanks @deepyjr! - Render the Desktop Contacts address label step and move shared add-address flow content into the Contacts Flow feature.
  • #19634 4015ade Thanks @thesan! - Connect @ledgerhq/ledger-auth to the Ledger Wallet apps Redux store
  • #20181 34a8455 Thanks @YazhuEth! - Add a QR code scanner to the new send flow recipient field: the QR icon shows while the field is empty and is replaced by the clear button once the user types
  • #20252 e709463 Thanks @claudiiafg! - Render Desktop Me contact detail by default with Me display-name formatting and external address CTA.
  • #20189 4bbd5a4 Thanks @YazhuEth! - Show the network fee in the currency users care about in the new send flow. When the fee is editable the row follows the amount input's fiat/crypto toggle; when it is not, the row shows the fiat value alongside the native amount, since it is the only place that fee is visible. Fee presets now sub-label both amounts, except coins priced by fee rate (Bitcoin, Kaspa) which keep their sat/vB legend.
  • #20224 f7e013a Thanks @YazhuEth! - Add an info disclaimer next to the recipient address in the new send flow, reminding users to verify the full address on their Ledger device
  • #20261 ba6e9c1 Thanks @ysitbon! - Import currency accessors from the domain layer instead of the @ledgerhq/live-common/currencies barrel.

Crypto accessors (getCryptoCurrencyById, findCryptoCurrencyById, findCryptoCurrencyByKeyword, findCryptoCurrencyByTicker, listCryptoCurrencies, findCryptoCurrency, findCryptoCurrencyByScheme, hasCryptoCurrencyId) now come from @domain/entity-currency-crypto, and fiat accessors (getFiatCurrencyByTicker, findFiatCurrencyByTicker, listFiatCurrencies, hasFiatCurrencyTicker) from @domain/entity-currency-fiat. The re-exports that forwarded them through @ledgerhq/live-common/currencies are removed; the barrel keeps its formatting, colour, helper, marketcap, support and URI-scheme exports. Behaviour is unchanged - the barrel already delegated to these same domain functions.

  • #20265 5f81208 Thanks @tonykhaov! - Remove analytics consentValidityDays and the unused live-common consent expiry helpers
  • #20230 36c0e51 Thanks @deepyjr! - Add the Desktop Contacts address entry flow with embedded currency selection.
  • #20217 9ebc505 Thanks @deepyjr! - Add a reusable dialog flow and an embeddable Modular Dialog presentation.
  • #20350 51bc3da Thanks @mcayuelas-ledger! - Fix hidden assets not appearing in Settings > Accounts. Native coins hidden from the asset detail page are now resolved from the crypto registry and listed alongside hidden tokens, and a single failing token lookup no longer empties the whole list.

Patch Changes