github LedgerHQ/ledger-live @ledgerhq/live-desktop@4.8.0

latest release: live-mobile@4.8.0
18 hours ago

4.8.0

Minor Changes

  • #18095 ee2dfc8 Thanks @claudiiafg! - Add a back arrow on the account page when opened from Asset Detail so users can return to the previous screen. Pass accountBackPath from the address list and pop the history stack on back, matching the tx history back-navigation pattern.

  • #18139 7e7bd75 Thanks @claudiiafg! - Update Asset Detail address list section and see-all dialog copy from "Addresses" to "Accounts"

  • #18087 2c51ffb Thanks @deepyjr! - Show an infinite symbol (∞) instead of a dash for the Asset Detail max supply when a coin is uncapped but has market data

  • #17955 4596db9 Thanks @claudiiafg! - Add info tooltips to Asset Detail market stats rows (market cap, circulating supply, max supply, and 24h trading volume)

  • #18130 774fef1 Thanks @deepyjr! - Show empty (zero-balance) accounts in the Asset Detail accounts/addresses section

  • #17784 4170470 Thanks @Valentin-Ledger! - Add go-to-swap action to the Borrow live app custom.navigate wallet API handler so the embedded webview can deep-link users into the Swap flow with prefilled currency, token, account, amount and affiliate parameters. Unify the desktop handler naming with mobile (custom.borrow.navigatecustom.navigate), share the handler implementation across apps via a new @ledgerhq/live-common/wallet-api/Borrow/navigate module, and drop the redundant desktop PageHeader now that navigation is driven from the webview.

  • #18112 d0cf7ee Thanks @mcayuelas-ledger! - add PnL tracking

  • #17907 9901502 Thanks @deepyjr! - Add assetDiscoverability param to lwmWallet40 and expose shouldDisplayAssetDiscoverability in usePortfolioViewModel and MainAppLayout

  • #18132 af63bfe Thanks @deepyjr! - Fix desktop Asset Detail Buy/Sell network selection for multi-network assets.

  • #18091 16fddb4 Thanks @claudiiafg! - Improve Asset Detail Earn and PnL metrics row responsiveness so cards wrap on narrow layouts instead of truncating labels

  • #18075 422c258 Thanks @claudiiafg! - Update Mood Index fear/greed scale labels (Fear+, Fear, Neutral, Greed, Greed+) with CMC disclaimer in the desktop dialog, and refine Asset Detail price performance copy.

  • #17934 c035854 Thanks @claudiiafg! - Fix Asset Detail earn banner to redirect to the correct Earn or native staking flow via shared navigation hook

  • #18004 b9e52d9 Thanks @Justkant! - Fix webview network error screen centering

  • #18239 cb3d141 Thanks @LucasWerey! - Align asset chart point granularity per date range with the product spec (LIVE-31777). Adds a shared per-range resampler in live-common and wires it into both apps: desktop targets finer intervals (e.g. 1D 5min, 1M 2h, All 7d) while mobile uses coarser ones (e.g. 1D 10min, 1M 6h, All 1mo) for render performance. The resampler only coarsens, so ranges where the API serves coarser data than requested (desktop 6M) gracefully fall back to the available resolution.

  • #18056 9d43eda Thanks @mcayuelas-ledger! - Add transaction dots to the Asset Detail price chart with hover tooltips (Received/Sent fiat values), color single transactions by direction (green received, red sent) and group same-day transactions, alongside min/max markers. Also extend the chart range selector with 6M and 5Y options.

  • #18275 6128380 Thanks @mcayuelas-ledger! - Fix Analytics page percentage variation not updating when changing the time range

  • #18012 d149f27 Thanks @mdomanski-ext-ledger! - feat: add hedera_testnet

  • #17813 8d78462 Thanks @qperrot! - Fix: warn user that delegation will fail if their Sei account has not yet been linked on-chain (no prior outbound transaction)

  • #18015 fe05001 Thanks @mcayuelas-ledger! - Sync the asset detail market price with chart scrubbing: hovering the line chart now updates the displayed price and date to the scrubbed point (hiding the percentage and fiat variation while scrubbing), wired through a shared ScrubbedPriceContext.

  • #18232 39a21c5 Thanks @LucasWerey! - Enable magnetic points on the asset line chart so the cursor snaps to the nearest data point

  • #17901 fd81ba0 Thanks @lysyi3m! - Implements the Celo fee currency selection plugin across mobile and desktop. Users can now select a fee currency (CELO or supported tokens) to pay transaction fees. Updates include UI integration, gas estimation adjustments, and descriptor enhancements for Celo transactions.

  • #18090 14c87ea Thanks @amaslakov! - Earning-choice modal on Tezos LWM: tap "Stake" now routes via the shared getTezosEarnFlow helper to NoFunds / EarnRewards (delegate or stake) / DelegationStarted / DelegationSummary depending on funds, delegation state and the llmTezosStaking flag. Helper hoisted to live-common.

  • #18048 7eb1ec7 Thanks @YazhuEth! - Fetch pending staking rewards for Cosmos-EVM hybrid chains (Sei) via the Cosmos distribution REST endpoint so Stake.amountRewarded is populated, and wire the per-row "Claim rewards" action on desktop so it opens the claim flow pre-selected on the chosen validator.

  • #18174 7584ec2 Thanks @ysitbon! - Pass the current app language to the feature-flags middleware (getAppLanguage selector in configureStore) so it can apply language filtering during resolution, making language-gated remote flags (languages_whitelisted / languages_blacklisted) resolve correctly.

  • #18152 c49b7a5 Thanks @LucasWerey! - Fix Asset Detail graph showing all-time high/low values that differed from the market stats table. On the "All" range, the graph's min/max markers are now anchored to the market all-time high/low, so both surfaces stay consistent.

  • #18106 e607d08 Thanks @claudiiafg! - Fix chart timeframe selector overlapping the Asset Detail sticky navbar on scroll

  • #17977 cc8ac1a Thanks @claudiiafg! - Fix Asset Detail analytics to match the tracking plan: add button_clicked tracking on the action bar, chart timeframe, addresses, favourites/hide, staking, market-stat and available-balance tooltips, and transactions; enrich transaction_clicked with page and currency; report currency as ledger currency id instead of ticker.

  • #18175 c32dafe Thanks @claudiiafg! - Fix asset detail market price hover date formatting by range to match spec without changing chart axis formatting.

  • #18093 314c95a Thanks @claudiiafg! - Fix Asset Detail analytics: report page name as Asset, set market banner as navigation source when opening from the portfolio market banner, and track average entry price tooltip via market_stat_definition.

  • #18107 e2ce03c Thanks @claudiiafg! - Fix asset detail address list showing default account names instead of user-renamed names from wallet state.

  • #17983 d63493d Thanks @claudiiafg! - Fix crypto icon size in Crypto Addresses accounts table assets column

  • #18109 ef35323 Thanks @claudiiafg! - Exclude hidden-from-portfolio assets from the global wallet balance and portfolio graph on desktop and mobile

  • #18108 55e0169 Thanks @claudiiafg! - Fix missing scrollbars on the transaction history page: keep column headers fixed above the list and show the vertical scrollbar on the scrollable body only.

  • #18214 689bfcb Thanks @LucasWerey! - Fix portfolio realised/unrealised return on Desktop differing from Mobile for the same synced accounts. The portfolio PnL view model passed an already-flattened accounts list to computePortfolioPnL, which flattens internally, double-counting token sub-accounts and inflating the returns. It now passes the top-level (non-flattened) accounts, matching Mobile.

  • #17963 6bb9e6d Thanks @claudiiafg! - Fix tx history back navigation when opened from the top bar. Pass the originating route as historyBackPath, accept any safe in-app return path, and pop the history stack on back instead of pushing a duplicate entry that trapped users between asset detail and tx history.

  • #18029 91e2a58 Thanks @mitchellv-ledger! - Add lastSeenDevice as fallback for onboarding completion screen to avoid confetti loop

  • #18261 0312daf Thanks @ysitbon! - Ignore net::ERR_TIMED_OUT (ErrorSimpleURLLoaderWrapper / browser_init) errors in Sentry and Datadog reporting

  • #18141 025825d Thanks @LL782! - Ignore "Memory Warning" errors in Datadog error reporting to reduce noise from spurious non-actionable errors.

  • #18016 4e8ba32 Thanks @hedi-edelbloute! - Feat: coin config override tool in developer settings

  • #17972 af4c3bc Thanks @mcayuelas-ledger! - Enhance the shared LineChart component with high/low value point markers, a hover scrubber showing a formatted date/price tooltip, and configurable area fill (showArea) and X/Y axes (showXAxis/showYAxis plus passthrough xAxis/yAxis config), and apply them to the AssetDetail chart.

  • #18111 b444b2f Thanks @gre-ledger! - fix(dev): stop the renderer dev server full-reloading on every source edit

    The dev server watched src/renderer as a static directory, so any source change triggered a full-page liveReload that pre-empted React Fast Refresh. Disabling static.watch lets HMR apply component updates in place.

  • #18188 9164970 Thanks @LucasWerey! - Bump Lumen design-system packages: lumen-design-core 0.1.16, lumen-ui-react 0.1.37, lumen-ui-rnative 0.1.38, lumen-ui-react-visualization 0.1.16, lumen-ui-rnative-visualization 0.1.15, and crypto-icons 2.0.4.

    Migrations required by the breaking changes in the range:

    • Menu (Radix UI → Base UI, react 0.1.36): migrated MenuTrigger asChildrender={...} and MenuItem onSelectonClick (Base UI fires onClick, not onSelect) in the AssetDetail options/chart menus and the Send network-fees / fee-asset selectors.
    • NavBar (react 0.1.36): renamed NavBarCoinCapsule's icon prop to leadingContent on the desktop asset header.
    • DotIndicator (rnative/react): size scale was renamed and rescaled. Remapped consumers to preserve the rendered size (xslg, default→xl) on the desktop unread indicators and mobile top-bar unread indicator.
    • Select removal (rnative 0.1.38): removed the now-deleted GlobalSelectBottomSheet from the mobile providers (no Select consumers remained).
  • #18392 e49da86 Thanks @desirendr! - LWD 4.8.0 release notes

  • #18053 4b8ec78 Thanks @ysitbon! - Fix Firebase remote config keys for FeatureIds whose snake_case ↔ camelCase round-trip is lossy via lodash (web3hub, ptxSwapReceiveTRC20WithoutTrx, llmAccountListUI, llmRebornLP). fetchRemoteFlags now uses a forward feature_${snakeCase(id)} → FeatureId lookup built from FeatureIdSchema.options, and matches Firebase keys case-insensitively. No LWD-side flag currently consumes the affected names, but the bug was structurally present and would silently drop any future lld*/lwd* flag ending in ≥2 consecutive uppercase letters or containing digits.

  • #18204 d649cf3 Thanks @RobinVncnt! - Add lwmBackupHub / lwdBackupHub Engagement feature flags (default disabled) for the Recover Backup Hub initiative, and reserve CODEOWNERS ownership of the upcoming BackupHub MVVM folders.

  • #17990 d081ef1 Thanks @sarneijim! - Extract onboarding widget control from lwdWallet40 into a standalone onboardingWidget feature flag.

  • #18168 8eeea4f Thanks @ysitbon! - Repoint the live-common FeatureFlags Context bridge to read feature-flag values from the Redux slice (@shared/feature-flags), gate app boot on the remoteFlagsReady selector, and remove the Firebase remote-config provider. The LiveConfig provider install + dev-only config-mismatch check move to firebase/remoteConfig.ts (installed once at renderer bootstrap), and AppVersionBlocker re-reads config_ll_min_version via subscribeToRemoteFlags. The Context bridge stays mounted (renamed FeatureFlagsContextBridge) until live-common's internal hooks migrate off the Context. No user-facing behaviour change.

  • #18167 83dcf4a Thanks @LucasWerey! - Add a chart options menu on the asset detail price chart letting users hide/show transaction (activity) markers. A new settings icon next to the range selector opens a menu (desktop) / bottom sheet (mobile) with a "Hide activity on price chart" toggle. The preference is persisted in the market store and applied across assets; when enabled, transaction markers are omitted from the chart while the all-time high/low markers remain.

  • #18036 ecb36c9 Thanks @mcayuelas-ledger! - Show unrealised, realised and total return cards in the portfolio PnL section with trend indicators, add a PnL sub-header with a details link, and refresh the related copy and disclaimer.

  • #18258 3624b3d Thanks @francois-guerin-ledger! - Support Monad native staking claim rewards: add the per-chain claimReward operation (keyed by the numeric validator id) and thread the validator id from the delegation through the claim flow on mobile and desktop. Always source validatorId from the delegation so claiming no longer fails with "monad staking requires valId" when the matched validator from the loaded list lacks an id.

  • #18164 16694d5 Thanks @francois-guerin-ledger! - Display a user's active Monad staking delegations and hide the unsupported "Redelegate" action.

    • coin-evm: add a bespoke fetchMonadStakes fetcher that enumerates the delegator's validators via the paginated getDelegations(delegator, startValId) precompile, reads each position with getDelegator (amount = stake + deltaStake + nextDeltaStake, so freshly delegated MON stays visible during the activation epoch), and resolves the validator display address via getValidator. Add a hasRedelegation(currencyId) helper (true only when the chain exposes a redelegate precompile).
    • live-common: thread the delegation's validatorId (from Stake.details) onto StakingDelegation to feed the upcoming undelegate/withdraw flows; re-export hasRedelegation.
    • ledger-live-desktop: omit the "Redelegate" item from the delegation row menu on chains without a redelegate precompile (e.g. Monad) instead of showing it disabled with a misleading tooltip.
  • #18257 fe3bfb8 Thanks @OlivierFreyssinet! - Bump Lumen UI packages: @ledgerhq/lumen-ui-react to 0.1.38, @ledgerhq/lumen-ui-react-visualization to 0.1.17, @ledgerhq/lumen-ui-rnative to 0.1.39, and @ledgerhq/lumen-ui-rnative-visualization to 0.1.16.

  • #18068 fb56998 Thanks @francois-guerin-ledger! - Support Monad native staking delegation: add the per-chain delegate operation (keyed by the numeric validator id) and thread the validator id from the delegate flow through to the transaction

  • #18003 e3a3e4f Thanks @Justkant! - Hide webview mobile view toggle when platform dev tools are disabled

  • #18163 ddfb84c Thanks @vcluzeau-ledger! - Make Recover URI templating actually replace protectId, drop unused protectServicesDesktop / protectServicesMobile params, and replace compatibleDevices with a hardcoded Nano S exclusion in isRecoverDisplayed.

    useReplacedURI previously only rewrote the placeholders protect-simu, protect-local-dev and protect-staging, so any URI hard-coded with protect-prod (e.g. the values shipped to PROD via Firebase Remote Config) was never re-templated when protectId changed. Switching the active Recover environment therefore required a manual find-and-replace across every URI in the feature flag. The regex now matches any protect-<env> segment, which is a no-op when protectId already equals that segment and a true substitution otherwise.

    compatibleDevices is replaced by a hardcoded check in isRecoverDisplayed — Nano S is the only device that does not support Recover and the rule is not expected to change. Dropping the array from the schema keeps the FF lean and removes the need to update Remote Config when a new device is supported.

    Also remove keys that have no consumer in either app — isNew, ledgerliveStorageState, onboardingCompleted.alreadySubscribedURI, and the entire onboardingRestore block on desktop; ledgerliveStorageState, restoreInfoDrawer.manualStepsURI, managerStatesData.NEW.learnMoreURI and managerStatesData.NEW.alreadySubscribedURI on mobile. usePostOnboardingURI is narrowed to Feature_ProtectServicesMobile since it is only called from the mobile app. Unknown keys still in Firebase are silently stripped by Zod, so this is forward-compatible with existing Remote Config payloads.

  • #18100 5d663fc Thanks @mcayuelas-ledger! - Refresh stale DADA-sourced asset prices by enabling polling: discovery/default rows in the desktop Assets section and the market price on the Asset Detail page (desktop & mobile) now refetch periodically instead of showing a one-time snapshot

  • #18025 19dbe4c Thanks @gre-ledger! - chore: upgrade the Rsbuild/Rspack build stack to v2

    Bump @rsbuild/core to 2.x, @rspack/core/@rspack/cli/@rspack/dev-server/@rspack/plugin-react-refresh to 2.x, @rslib/core to 0.22, @rsdoctor/rspack-plugin to 2.0.0-alpha.0, related plugins, and storybook-react-rsbuild to 3.3.4 (with the Storybook 10.x catalog bumped to 10.4). @swc/helpers is aligned to 0.5.23 so the _wrap_reg_exp runtime helper emitted by @swc/core resolves under Rspack v2's stricter exports enforcement (mobile bundle). Desktop rspack config updated for the v2 ReactRefreshRspackPlugin named export and a @sentry/types v6 resolution alias required by Rspack v2's stricter ESM linking. Rsdoctor loader analysis is disabled on mobile (its loader interceptor is not yet Rspack-v2 compatible); bundle analysis is unaffected.

  • #18081 6f84bbf Thanks @semeano! - Add private balance on the account's total balance

  • #18195 d32b48b Thanks @jiyuzhuang! - Add content card completeness verification

  • #18136 6d58638 Thanks @RobinVncnt! - feat: lwm-lwd counterfeit warning tracking

  • #17777 c06d330 Thanks @dilaouid! - feat(lwd): complete tracking for lwd new send flow

  • #18143 a216de7 Thanks @LucasWerey! - Hide x-axis on asset detail chart section

  • #17998 e3828a0 Thanks @Justkant! - Allow blob sources in desktop webview CSP

  • #18058 3aa4b01 Thanks @Justkant! - Fix dapp integration breaking when a Live App's Content-Security-Policy blocks inline script injection, by evaluating the Ethereum provider in the page main world via webFrame.executeJavaScript instead of an inline <script> tag

  • #18260 b2a31f9 Thanks @mitchellv-ledger! - Update lotties and copy in lwd and lwm product tours

  • #17903 e251664 Thanks @jiyuzhuang! - Add prompt layout

  • #18229 bbc72fe Thanks @francois-guerin-ledger! - fix(coin-evm): fetch missing validator names

  • #18103 3acac2b Thanks @KVNLS! - Fix market filter star assets dropdown

  • #17773 4ea3354 Thanks @liviuciulinaru! - Clean up legacy Swap code paths now that the Wallet 4.0 swap experience is the
    default. The Wallet 4.0 feature-config gating (useWalletFeaturesConfig /
    shouldDisplayWallet40MainNav) has been dropped from the swap surfaces, keeping
    only the v4 path:

    • Mobile: every Swap entry point (the ledgerlive://swap deeplink, no-funds
      drawers, staking error CTAs, …) now routes through Main → Swap → SwapTab,
      and the swap live-app handlers (pending operation, custom error, loading,
      history) always navigate via the SwapSubScreens navigator. The legacy
      top-level Swap navigator routing and its reset action have been removed.
    • Mobile: SwapTab always renders SwapLiveAppWallet40 (the legacy
      SwapLiveApp screen branch is gone) and its header stays hidden, since the
      Wallet 4.0 MainNavigator tab owns the chrome.
    • Desktop: the Swap2 page always renders with the Wallet 4.0 PageHeader
      layout, and SwapWebViewEmbedded no longer takes an isWallet40 prop (it
      always uses the v4 bordered container).
    • Mobile + Desktop: the lwm40enabled / lwd40enabled webview inputs sent to
      the swap live-app are now hardcoded to "true" instead of being derived from
      the wallet-features config.
    • Removed dead swap code left over from the v4 migration: the SwapLiveApp
      screen, the legacy WebView.tsx, the useSwapHeaderNavigation /
      useSwapNavigationHelper hooks, the ScreenName.SwapLiveApp enum entry, and
      the SwapLiveAppNavigationParams type.
  • #17925 42bf395 Thanks @mcayuelas-ledger! - Wire AssetDetail chart section to the Market /v3/markets/chart endpoint, share the selected range between the chart and the market price section, and percent-encode the asset id in the chart URL so ids containing reserved characters (e.g. arbitrum/erc20/...) resolve correctly.

  • #18227 e823b1f Thanks @KVNLS! - Add Ledger Sync activation banner on the Wallet 4.0 Accounts page

  • #17932 5842a85 Thanks @Valentin-Ledger! - Add earnUpselling and earnSimulator as Wallet 4.0 feature flag params, expose them in the Wallet 4.0 analytics attributes, and surface them in the desktop and mobile developer settings toggles.

  • #17672 14fbee8 Thanks @LucasWerey! - Wire mobile asset entry points (Market list, Market banner, Portfolio asset rows, Crypto/Stablecoin lists, Analytics distribution cards) to the new MVVM AssetDetail screen when shouldDisplayAggregatedAssets is true; fall back to the legacy MarketDetail / Accounts > Asset routes otherwise. Add a shared resolveAssetMarketInputs helper in @ledgerhq/asset-aggregation to derive marketApiId / knownLedgerIds / knownMarketId consistently across desktop and mobile, fixing the BNB-style ledger-id ≠ market-id mismatch that caused empty market data on the asset detail screen.

  • #18005 d5950ce Thanks @Justkant! - Fix webview NetworkErrorScreen not appearing on the first load by attaching webview event listeners through a callback ref instead of a one-shot mounted latch

  • #18006 27a6979 Thanks @amaslakov! - Fix Tezos transaction validation to gate on the spendable (liquid) balance instead of the total balance. Delegate, undelegate, send, stake, unstake, and finalize now correctly block when staked or unstaked-frozen funds leave too little liquid XTZ to cover fees, instead of passing client-side and failing at broadcast. Also consolidate useTezosStakingInfo's available balance onto the single source of truth (account.spendableBalance). On desktop, the staking flow's validator step now blocks before signing the initial delegation when the spendable balance can't cover the delegation fee, instead of letting it broadcast and fail. The displayed spendable/delegated balance now derives the unstaked-frozen total from the account-level field (the same source as the validation gate), so a failed unstake_requests fetch no longer transiently overstates spendable. The staking flow's "Use Max" / maximum-spendable amount now also excludes unstaked-frozen funds (not stakeable until finalized), matching the validation gate — previously it overstated the stakeable amount and produced an unsendable value.

    Also on desktop: show the staking and unstaking panels before the delegation panel; show the staked principal instead of the fee for stake, unstake, and finalize operations in the operations list and details drawer; and reword the stake insufficient-funds error to reference the balance instead of delegation.

Patch Changes

Don't miss a new ledger-live release

NewReleases is sending notifications on new releases.