Original release notes
4.14.0
Minor Changes
- #20129
ba20e39Thanks @gre-ledger! - MigratecheckLibsand its two callers off@ledgerhq/errorsas part of the errors sunset (LIVE-32915).
checkLibs detects duplicated npm packages by comparing class identity, so sanityChecks.ts and both app entrypoints must import NotEnoughBalance from the same module. All three now use @ledgerhq/ledger-wallet-framework/errors. The duplicate-package warning also names @ledgerhq/ledger-wallet-framework so the pnpm why hint points at the package actually being checked.
- #20172
6dd18aaThanks @LucasWerey! - Remove the legacy GorhomQueuedDrawerimplementation (migrating the last consumer, the Cardano DRep delegation drawer, to the Lumen bottom sheet) and renameQueuedDrawerBottomSheettoQueuedBottomSheet.
- #20349
f715aa5Thanks @cted-ledger! - Fix Zcash sends failing before the device prompt when the coin being spent came from a V4-format transaction (PROD-12599).
Signing a transparent Zcash transaction whose input came from a V4 (Sapling-format) transaction failed immediately: no review screen appeared on the device, and Ledger Live showed "Something went wrong" with no detail. V4 is still valid on mainnet and still emitted by exchanges and older wallets, while Ledger Live itself emits V5 - so an account funded from within Ledger Live never hit this, which is why the failure looked intermittent. It is in fact deterministic, decided by which software created the funding transaction.
serializedPreviousTransactionOverride carries the source transaction's raw on-chain bytes so the device can compute the correct ZIP-244 txid for a V5 transaction, whose Orchard bundle the signer kit's serialization would otherwise strip. It was being set for every version. The kit chunks a V4 transaction expecting Ledger's internal serialization, whose header carries a consensus branch id absent from the on-chain bytes; given those bytes it read the input count four bytes late and threw while chunking that input. The override is now restricted to the versions that need it, and a V4 source transaction goes back through the serialization path that has always handled it, its Sapling fields travelling in extraData as before.
The decision is made per input, which is what a send spending several coins looks like from the outside: the V5 inputs are chunked and their trusted inputs obtained from the device first, then the transaction dies when the V4 input's turn comes. The device has already answered several times by then, yet no review screen is ever reached - so the failure looks like a device problem rather than a serialization one.
Untagged device action errors are also no longer flattened into a message-less Error, so a failure inside a device action task names itself in the logs instead of surfacing only as "Something went wrong".
- #19982
f5e4e87Thanks @francois-guerin-ledger! - Display estimated pending rewards for 0G delegations; gate claim-rewards UI to chains that support it.
- #19967
56f5153Thanks @jiyuzhuang! - Fix welcome page first story looping to last on left tap
- #20099
37dac39Thanks @deepyjr! - Add contact address asset and network selection through the Modular Dialog, with shared asset
filtering across Desktop and Mobile.
- #19958
9773bd3Thanks @OlivierFreyssinet! - Propagate contextual analytics properties through Device Intent Executor events.
- #19964
86bbd1dThanks @claudiiafg! - Add the one-time Contacts feature introduction drawer on Mobile with shared native content and dismissal preference.
- #20050
4c34536Thanks @RobinVncnt! - Remove Custom Lock Screen step from the post-onboarding widget.
- #19994
0f61d63Thanks @sarneijim! - Update large-screen upsell modal UTM attribution on mobile and desktop
- #19807
2cf4a29Thanks @sarneijim! - Reset mobile navigation state for sequential token deeplinks and redirect invalid asset deeplinks to Market
- #20033
d390840Thanks @RobinVncnt! - Loop Product Tour post-onboarding card animations and restart them when revisiting a slide
- #19374
079775cThanks @LucasWerey! - de-gate lwmWallet40.enabled in WXP-owned drawers, hooks, and screens
- #20009
341ea10Thanks @hedi-edelbloute! - Revert Cardano firmware app v8.0.4 support (hw-app-cardano bump to 8.0.0)
- #19985
808c4cdThanks @deepyjr! - Reorganize the contacts flow package around a /steps folder (List, AddContact, Introduction, Detail), promote shared helpers to src/utils, curate root barrels, and rename public views to ContactsListView and ContactDetailView. No runtime behavior change.
- #20070
52253f7Thanks @ysitbon! - Remove the now-dead@ledgerhq/cryptoassetscurrency/fiat store injection from the app bootstraps. Nothing reads the legacy currency/fiat accessors anymore (the runtime source of truth is the domain-backed wallet-framework currency resolver), sosetCryptoCurrenciesStore/setFiatCurrenciesStoreinjected a store no consumer queried. Drop the calls, drop the@ledgerhq/cryptoassetsdependency from the apps, and remove the remaining stale references to the package in comments.
- #20175
b953d34Thanks @deepyjr! - Add a reusable queued drawer flow and an embeddable Modular Drawer presentation
- #19992
452adf8Thanks @sarneijim! - Gate each existing mobile Nano S upsell banner placement through the shared large-screen upsell flag.
- #19935
7ead592Thanks @sarneijim! - Update the Mobile large-screen upsell opt-out copy and CTA.
- #19715
cf63f27Thanks @YazhuEth! - Hide Send and Receive for HyperCore accounts on mobile: HyperCore has no on-chain send on Ledger Wallet and a plain receive is misleading (deposits go through bridging). Both actions are now hidden across the account actions (FAB), the asset actions, the quick-action drawers and the no-funds empty state, reusing the sharedisSendDisabledForFamily/isReceiveDisabledForFamilypredicates from@ledgerhq/live-common. The account "Quick actions" section is also hidden entirely when it has no actions left (e.g. HyperCore), instead of showing an empty titled section.
- #20027
6131b15Thanks @deepyjr! - Add shared Add Address session state and start it from Mobile contact details
- #20035
67df284Thanks @deepyjr! - Select a native asset or token and its eligible network with the Mobile modular drawer before
entering a contact address.
- #19880
26ee89dThanks @deepyjr! - Add the shared native empty contact detail page and wire it into Mobile.
- #20091
ef5945aThanks @LucasWerey! - Bump Lumen design-system packages to latest (design-core 0.1.23, ui-react 0.1.49, ui-rnative 0.1.52, ui-react-visualization 0.1.28, ui-rnative-visualization 0.1.29).
- Migrate the desktop tables to the new
TableCellContentcompound API (TableCellItem/TableCellContent/TableCellContentTitle/TableCellContentDescription/TableCellContentRow). - Migrate the interactive My Wallet avatar to the new
AvatarButtoncomponent on both apps, and fix the vertical centering of the desktop top-bar trigger. - Use the currency image fallback (
MediaImage, circular) in the market list so it matches the crypto-icon shape. - Simplify
getDotIndicatorPropsavatar sizing now that the helper is typed for the full avatar size range.
- #20159
534d2c5Thanks @jiyuzhuang! - Migrate engagement-scope screens to SafeAreaViewFixed for experimental header compatibility
- #20122
8677d5cThanks @LucasWerey! - Migrate the mobile Modular Drawer to Lumen components (BottomSheet, ListItem, SearchInput, Banner, CardButton, Trend, Tag, Box/Text) and drop the legacynative-uiprimitives and thepre-ldlscomposites it used. Removes the now-unusedpre-ldlsstaging components (AssetItem, NetworkItem, AccountItem, Address, Tag, Input, Search, AssetTypeList, NetworkList, MarketPriceIndicator, MarketPercentIndicator) and the orphaneduseDebouncedCallbackhook from@ledgerhq/native-ui(CryptoIcon and AddAccountButton are kept). Adds the empty-account state (header description + "Add account" CardButton) on the account step.

