Back to Freedom.Tech Back
All Ledger Live Mobile releasesAll versions
Release Mon, Jun 22, 2026 6 min read

Ledger Live Mobile 4.9.0

Share the DADA asset-discovery selection in @ledgerhq/live-common ( selectTopStocks, selectTopAssetsByCategory, StockSuggestion ) so desktop and mobile use one implementation; Desktop's stocks section now consumes selectTopStocks instead of its own copy

4.9.0

Minor Changes

  • #18328 c714634 Thanks @Valentin-Ledger! - Add Borrow info bottom sheet for the mobile Borrow Live App, with a dedicated Redux slice (borrow.infoBottomSheet) and a custom.bottomSheet.info wallet API handler so the embedded webview can open contextual help drawers. The InfoBottomSheet view is now shared between the Borrow and Earn Live Apps.
  • #18279 3601c5e Thanks @Valentin-Ledger! - Remove the outer navigation header (with custom back button) wrapping the Borrow LiveApp so the LiveApp's own internal header/back button is used instead
  • #18526 52474bd Thanks @tonykhaov! - Fix mobile notification opt-in to enable app notification categories directly
  • #18267 44811cc Thanks @jiyuzhuang! - Add transaction alerts notification drawer, per-target opt-out dismissals, and drawerPromptTarget analytics
  • #18362 9fe00b7 Thanks @jiyuzhuang! - Add theme-specific awareness modal hero images, feature intro border, carousel navigation label, and related UI improvements
  • #18355 d00229b Thanks @jiyuzhuang! - Use performance chart illustration for onboarding notification prompt and add NotificationsPrompt component tests
  • #18315 bfbd74d Thanks @shazzzam! - Display the correct fee currency for Celo CIP-64 transactions (fees paid in tokens such as USDT/USDC instead of native CELO). Adds a feeCurrencyAddress field to CeloOperationExtra, an eth_getTransactionByHash-based sync enrichment, and a skip option to useTokenByAddressInCurrency for conditional CAL lookups.
  • #18286 86a74c0 Thanks @YazhuEth! - Fix SEI delegation amount screen displaying the raw NotEnoughBalance error name instead of a translated message. The amount step now renders the error through TranslatedError, so an over-balance delegation shows "Sorry, insufficient funds".
  • #18348 8a7fca0 Thanks @OlivierFreyssinet! - Keep the screen awake while the Device Intent Executor (DIE) is open, so the phone does not sleep during a device flow
  • #18302 3cf8c3f Thanks @OlivierFreyssinet! - Replace the DeviceIntentExecutor cancellableUI prop with the ModalLock pattern to control bottom sheet dismissability. The drawer is now locked (no close button, backdrop and pan-down disabled) while a device action is pending or in progress (unlock, allow secure connection, confirm open app, installing app, loading), and dismissable otherwise.
  • #18330 f275d88 Thanks @beths-ledger! - Fix Earn dashboard losing its background and main navigation (top bar + tab bar) after returning from an in-webview intent flow (deposit/withdraw/simulate). The active flow is now derived from the live webview URL instead of the stale native intent param, and the app navigates back to the Earn dashboard tab when the flow is exited.
  • #18252 eee243c Thanks @YazhuEth! - Add Monad withdraw flow on mobile to finalize matured undelegations from the undelegation drawer. Also fix the mobile undelegation list display: unique row keys for Monad withdrawal slots sharing a completion date, and proper separation from the delegation list.
  • #18237 8d79393 Thanks @ysitbon! - Migrate @ledgerhq/live-common's internal feature-flag consumers off its React featureFlags Context module and @ledgerhq/types-live feature types, onto the Redux-backed @shared/feature-flags / @features/platform-feature-flags packages, and remove the featureFlags module along with the apps' now-inert FeatureFlagsContextBridge. Remaining external React consumers (both apps) are repointed to @features/platform-feature-flags; @ledgerhq/live-dmk-desktop receives its ldmkTransport flag via a prop instead of depending on the feature-flags package; non-React imperative reads use an injected getter or the relocated live-common/firebase/featureFlags reader. Adds the platform-specific formatToFirebaseFeatureId / formatDefaultFeatures to @features/platform-feature-flags and the generic isValidFeatureId to @shared/feature-flags. No behavioral change - resolved flag values are identical.
  • #18386 24d19cc Thanks @ysitbon! - Repoint the remaining @ledgerhq/types-live feature-type consumers (desktop app + desktop/mobile e2e) onto @shared/feature-flags, taking in-repo usage of the legacy types-live feature types to zero. Also drop now-dead feature-flag tooling config: the @ledgerhq/live-common/featureFlags/index unimported entry in live-dmk-desktop, and the deleted FeatureFlagsContextBridge eslint-guardrail exemptions in both apps (the block rules against re-introducing the deleted module are kept).
  • #18317 1e6afe5 Thanks @koda-apps! - Fix LiFi link in swap history on Ledger Live Mobile pointing to deactivated page
  • #18401 66a27f2 Thanks @dilaouid! - feat(lwm): update flow wizard removing bottomsheet from api - die will manage it itself
  • #18266 835b816 Thanks @amaslakov! - Add the Tezos unstake flow and the unstake-required gate to the mobile staking dashboard. Users can now unstake funds, and are prompted to unstake first when changing baker or ending delegation while funds are still staked.
  • #18428 67c3a67 Thanks @LucasWerey! - Add the Global Search default-sections data on mobile, fed by DADA. Cryptos (top 3) and stablecoins (top 2) render as market rows; stocks (top 10) as pills.

Share the DADA asset-discovery selection in @ledgerhq/live-common (selectTopStocks, selectTopAssetsByCategory, StockSuggestion) so desktop and mobile use one implementation; desktop's stocks section now consumes selectTopStocks instead of its own copy.

  • #18431 93f22d7 Thanks @LucasWerey! - Render the Global Search default sections when no search is active: Cryptos (3) and Stablecoins (2) as compact asset rows (icon, name, price + 24h change on one line), and Stocks (up to 20) as pills laid out in two horizontally-scrollable rows. Each section has a pressable header (tracked via button_clicked) and shows skeletons while loading.
  • #18434 22dad59 Thanks @LucasWerey! - Wire Global Search navigation: tapping an asset row or stock pill opens its detail (openFromMarket), the Cryptos "See all" opens the Market list (all), and the Stocks "See all" opens it on the Stocks category. The Stablecoins "See all" stays inert until the Market list gains a stablecoins category.
  • #18445 a5ab02b Thanks @LucasWerey! - Polish the Global Search feature: prices and market caps now follow the user's counter-value currency setting (converting DADA's USD values via the USDfiat rate, matching the Modular Asset Drawer), the results and default views show an error state when their data fails to load, the header back button aligns with the other screens, and the GlobalSearch analytics events (search_open, search_query, asset_clicked) are wired per the tracking plan. Data hooks moved to a feature-level hooks/ folder to match the MVVM architecture.
  • #18433 bd98e72 Thanks @LucasWerey! - Render the Global Search results when a search is active: matching assets as shared AssetListItem market rows (with the Market screen's bottom fade gradient), three list skeletons while the query is loading, and a "No assets found" empty state (reusing the Market screen pattern) when the query returns nothing. Default sections are hidden while searching and restored when the input is cleared.
  • #18416 062f41a Thanks @LucasWerey! - Add the Global Search screen scaffold. Registers the GlobalSearch navigator in the base navigator with a fade entrance, and renders a custom header (back button + "Search assets" input) that auto-focuses after the transition. Fires the search_open tracking event on open.