Skip to content

feat(swaps): show fee rebate banner in Swaps (SWAPS-5293) - #47618

Open
bfullam wants to merge 4 commits into
mainfrom
swaps-5293-rebate-banner
Open

bfullam wants to merge 4 commits into
mainfrom
swaps-5293-rebate-banner

Conversation

@bfullam

@bfullam bfullam commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Description

Adds the fee rebate banner, "You’re getting X% back on fees", directly above the CTA button in Swaps. This mirrors Mobile's implementation (metamask-mobile#37623). Users who are eligible for a rebate see what share of the MetaMask fee they'll get back, paid to their Money account.

How it works:

  • useSwapsRebate hook: calls RewardsMoneyController:getSwapsRebateQuote (already in the extension) with the active quote, through a route messenger that allows only that action.
    • It calls once when the banner mounts, and again only when the MetaMask fee token changes. It never refetches on quote refresh.
    • It returns rebateBips / 100, but only when eligible is true and reason is null.
    • Any error hides the banner and is not retried. The CTA button never waits on the request.
  • SwapsRebateBanner: shows the message, the existing money.png icon, and a "Trading Rewards" info tooltip. It renders nothing when there's no rebate. The tooltip popover is given zIndex: 20 so it paints above the sticky CTA footer.
  • Feature flag: the feature is behind the version-gated swapsRebateBannerEnabled remote flag ({ enabled, minimumVersion }), the same key Mobile uses. It defaults to off, and when it's off the endpoint isn't called. The flag is registered as inProd: false in feature-flag-registry.ts.

Changelog

CHANGELOG entry: Added a fee rebate banner to Swaps for users eligible for a MetaMask fee rebate

Related issues

Fixes: SWAPS-5293

Manual testing steps

Until the endpoint returns a rebate for your account, you can force one by temporarily replacing the controller call in ui/hooks/bridge/useSwapsRebate.ts with Promise.resolve({ eligible: true, rebateBips: 1000, reason: null }).

  1. Enable the swapsRebateBannerEnabled remote flag, for example in .manifest-overrides.json with { "enabled": true, "minimumVersion": "0.0.0" }.
  2. Run the extension and open Swaps.
  3. Pick a token pair that charges a MetaMask fee and enter an amount.
  4. Verify that "You’re getting 10% back on fees" appears above the CTA button.
  5. Hover the info icon and verify that the "Trading Rewards" tooltip appears above the footer.
  6. Wait for the quote to refresh and verify that the banner stays and the rebate endpoint is not called again.
  7. Disable the flag, or have the endpoint return eligible: false or an error, and verify that no banner is shown and the swap flow is unchanged.

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Low Risk
Promotional UI behind a remote flag that fails closed; it uses an existing rewards endpoint and does not gate or alter swap execution.

Overview
Adds an optional Trading Rewards banner above the Swaps prepare CTA that tells eligible users what % of the MetaMask fee they’ll get back (paid in mUSD to Money), aligned with Mobile.

The flow is gated by the remote swapsRebateBannerEnabled flag (defaults off). When enabled, useSwapsRebate calls RewardsMoneyController:getSwapsRebateQuote via a scoped route messenger, converts eligible rebateBips to a display percentage, and does not block the swap button. Rebates are fetched on mount and only when the MetaMask fee token changes (not on quote refresh); failures or ineligibility hide the banner. SwapsRebateBanner renders the message, Money icon, and tooltip (with elevated z-index over the sticky footer). New locale strings and unit/component tests cover the hook and banner.

Reviewed by Cursor Bugbot for commit 63cdc7d. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@github-actions github-actions Bot added the size-M label Nov 4, 2026
@metamask-ci metamask-ci Bot added the team-swaps-and-bridge Swaps and Bridge team label Nov 4, 2026
@metamask-ci

metamask-ci Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

✨ Files requiring CODEOWNER review ✨

🔄 @MetaMask/swaps-engineers (5 files, +383 -0)
  • 📁 ui/
    • 📁 hooks/
      • 📁 bridge/
        • 📄 useSwapsRebate.test.ts +178 -0
        • 📄 useSwapsRebate.ts +69 -0
    • 📁 pages/
      • 📁 bridge/
        • 📁 prepare/
          • 📄 prepare-bridge-page-footer.tsx +2 -0
          • 📄 swaps-rebate-banner.test.tsx +51 -0
          • 📄 swaps-rebate-banner.tsx +83 -0

@metamask-ci

metamask-ci Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor
Builds ready [f7cca83]
⚡ Performance Benchmarks (Total: 🟢 6 pass · 🟡 3 warn · 🔴 4 fail)

Baseline (latest main): f693520 | Date: 11/3/2026 | Pipeline: 41843704172 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 4 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ loadNewAccount/load_new_account: +183%
  • ↑ loadNewAccount/total: +183%
  • ↓ loadNewAccount/inp: -10%
  • ↑ loadNewAccount/fcp: +13%
  • ↑ loadNewAccount/cls: +282%
  • ↑ confirmTx/longTaskTotalDuration: +44%
  • ↑ confirmTx/longTaskMaxDuration: +64%
  • ↑ confirmTx/tbt: +75%
  • ↓ confirmTx/inp: -13%
  • ↑ confirmTx/lcp: +21%
  • ↑ bridgeUserActions/bridge_load_page: +66%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +100%
  • ↑ bridgeUserActions/longTaskCount: +36%
  • ↑ bridgeUserActions/longTaskTotalDuration: +79%
  • ↑ bridgeUserActions/longTaskMaxDuration: +44%
  • ↑ bridgeUserActions/tbt: +148%
  • ↑ bridgeUserActions/total: +18%
  • ↑ bridgeUserActions/inp: +10%
  • ↑ bridgeUserActions/cls: +281%
  • ↑ loadNewAccount/load_new_account: +183%
  • ↑ loadNewAccount/total: +183%
  • ↓ loadNewAccount/inp: -10%
  • ↓ loadNewAccount/fcp: -30%
  • ↑ loadNewAccount/lcp: +1294%
  • ↓ confirmTx/longTaskCount: -100%
  • ↓ confirmTx/longTaskTotalDuration: -100%
  • ↓ confirmTx/longTaskMaxDuration: -100%
  • ↓ confirmTx/tbt: -100%
  • ↓ confirmTx/inp: -13%
  • ↓ confirmTx/fcp: -39%
  • ↑ confirmTx/lcp: +1335%
  • ↑ bridgeUserActions/bridge_load_page: +246%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +145%
  • ↓ bridgeUserActions/longTaskCount: -100%
  • ↓ bridgeUserActions/longTaskTotalDuration: -100%
  • ↓ bridgeUserActions/longTaskMaxDuration: -100%
  • ↓ bridgeUserActions/tbt: -100%
  • ↑ bridgeUserActions/total: +78%
  • ↑ bridgeUserActions/inp: +62%
  • ↓ bridgeUserActions/fcp: -51%
  • ↑ bridgeUserActions/lcp: +1335%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.0s
  • 🟡 confirmTx/FCP: p75 1.8s
  • 🟡 bridgeUserActions/FCP: p75 1.8s
  • 🟡 bridgeUserActions/LCP: p75 2.5s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ startupStandardHome/uiStartup: +17%
  • ↑ startupStandardHome/load: +13%
  • ↑ startupStandardHome/domContentLoaded: +13%
  • ↑ startupStandardHome/domInteractive: +27%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -29%
  • ↑ startupStandardHome/loadScripts: +12%
  • ↑ startupStandardHome/setupStore: +108%
  • ↑ startupStandardHome/longTaskTotalDuration: +11%
  • ↑ startupStandardHome/longTaskMaxDuration: +13%
  • ↑ startupStandardHome/tbt: +17%
  • ↑ startupStandardHome/fcp: +13%
  • ↑ startupStandardHome/lcp: +11%
  • ↑ startupStandardHome/cls: +400%
  • ↓ startupStandardHome/uiStartup: -37%
  • ↓ startupStandardHome/load: -32%
  • ↓ startupStandardHome/domContentLoaded: -34%
  • ↓ startupStandardHome/domInteractive: -53%
  • ↓ startupStandardHome/backgroundConnect: -32%
  • ↓ startupStandardHome/firstReactRender: -99%
  • ↓ startupStandardHome/initialActions: -50%
  • ↓ startupStandardHome/loadScripts: -32%
  • ↑ startupStandardHome/setupStore: +35%
  • ↓ startupStandardHome/fcp: -36%
  • ↓ startupStandardHome/lcp: -30%
User Journey Benchmarks · Samples: 5 · mock API 🔴 2
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total

📈 Results compared to the previous 5 runs on main

  • ↑ onboardingImportWallet/srpButtonToSrpForm: +53%
  • ↑ onboardingImportWallet/confirmSrpToPwForm: +45%
  • ↑ onboardingImportWallet/pwFormToMetricsScreen: +41%
  • ↑ onboardingImportWallet/metricsToWalletReadyScreen: +25%
  • ↓ onboardingImportWallet/doneButtonToHomeScreen: -92%
  • ↓ onboardingImportWallet/openAccountMenuToAccountListLoaded: -73%
  • ↓ onboardingImportWallet/longTaskCount: -100%
  • ↓ onboardingImportWallet/longTaskTotalDuration: -100%
  • ↓ onboardingImportWallet/longTaskMaxDuration: -100%
  • ↓ onboardingImportWallet/tbt: -100%
  • ↓ onboardingImportWallet/total: -85%
  • ↑ onboardingNewWallet/srpButtonToPwForm: +61%
  • ↑ onboardingNewWallet/createPwToRecoveryScreen: +20%
  • ↑ onboardingNewWallet/skipBackupToMetricsScreen: +24%
  • ↑ onboardingNewWallet/agreeButtonToOnboardingSuccess: +19%
  • ↓ onboardingNewWallet/doneButtonToAssetList: -71%
  • ↓ onboardingNewWallet/longTaskCount: -62%
  • ↓ onboardingNewWallet/longTaskTotalDuration: -75%
  • ↓ onboardingNewWallet/longTaskMaxDuration: -40%
  • ↓ onboardingNewWallet/tbt: -100%
  • ↓ onboardingNewWallet/total: -66%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↓ dappPageLoad/pageLoadTime: -71%
  • ↓ dappPageLoad/domContentLoaded: -40%
  • ↓ dappPageLoad/firstPaint: -57%
  • ↓ dappPageLoad/firstContentfulPaint: -57%
Bundle Size Diffs [🚨 Warning! Bundle size has increased!]
Status Bundle Total Diff Change
✅ background 15.26 MiB +608 Bytes 0.00%
🚨 ui 19.34 MiB +8.09 KiB +0.04%
✅ common 0 Bytes 0 Bytes 0.00%
✅ other 4.44 MiB -10 Bytes 0.00%
✅ content scripts 3.23 MiB -59 Bytes 0.00%
✅ unzipped 79.64 MiB -253.22 KiB -0.31%
✅ zip 23.81 MiB -260.99 KiB -1.06%

@metamask-ci

metamask-ci Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor
Builds ready [9d66552]
⚡ Performance Benchmarks (Total: 🟢 9 pass · 🟡 2 warn · 🔴 2 fail)

Baseline (latest main): f693520 | Date: 11/3/2026 | Pipeline: 41847630290 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]

Regressions (🔴 2 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ loadNewAccount/load_new_account: +179%
  • ↑ loadNewAccount/total: +179%
  • ↓ loadNewAccount/inp: -10%
  • ↓ loadNewAccount/fcp: -28%
  • ↑ loadNewAccount/cls: +278%
  • ↑ confirmTx/longTaskMaxDuration: +11%
  • ↓ confirmTx/inp: -44%
  • ↓ confirmTx/fcp: -32%
  • ↓ confirmTx/lcp: -25%
  • ↓ bridgeUserActions/bridge_load_page: -20%
  • ↓ bridgeUserActions/bridge_load_asset_picker: -25%
  • ↓ bridgeUserActions/bridge_search_token: -10%
  • ↓ bridgeUserActions/longTaskTotalDuration: -36%
  • ↓ bridgeUserActions/longTaskMaxDuration: -41%
  • ↓ bridgeUserActions/tbt: -77%
  • ↓ bridgeUserActions/total: -15%
  • ↓ bridgeUserActions/inp: -26%
  • ↓ bridgeUserActions/fcp: -31%
  • ↓ bridgeUserActions/lcp: -29%
  • ↑ bridgeUserActions/cls: +281%
  • ↑ loadNewAccount/load_new_account: +182%
  • ↑ loadNewAccount/total: +182%
  • ↓ loadNewAccount/inp: -18%
  • ↓ loadNewAccount/fcp: -74%
  • ↑ loadNewAccount/lcp: +1086%
  • ↓ confirmTx/longTaskCount: -100%
  • ↓ confirmTx/longTaskTotalDuration: -100%
  • ↓ confirmTx/longTaskMaxDuration: -100%
  • ↓ confirmTx/tbt: -100%
  • ↓ confirmTx/fcp: -65%
  • ↑ confirmTx/lcp: +853%
  • ↑ bridgeUserActions/bridge_load_page: +96%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +95%
  • ↓ bridgeUserActions/bridge_search_token: -12%
  • ↓ bridgeUserActions/longTaskCount: -100%
  • ↓ bridgeUserActions/longTaskTotalDuration: -100%
  • ↓ bridgeUserActions/longTaskMaxDuration: -100%
  • ↓ bridgeUserActions/tbt: -100%
  • ↑ bridgeUserActions/total: +11%
  • ↓ bridgeUserActions/fcp: -73%
  • ↑ bridgeUserActions/lcp: +1062%
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
🟡 loadScripts

📈 Results compared to the previous 5 runs on main

  • ↑ startupStandardHome/uiStartup: +14%
  • ↑ startupStandardHome/load: +10%
  • ↑ startupStandardHome/domContentLoaded: +10%
  • ↑ startupStandardHome/domInteractive: +27%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -29%
  • ↑ startupStandardHome/setupStore: +108%
  • ↓ startupStandardHome/longTaskCount: -29%
  • ↑ startupStandardHome/tbt: +14%
  • ↑ startupStandardHome/fcp: +11%
  • ↑ startupStandardHome/lcp: +12%
  • ↑ startupStandardHome/cls: +400%
  • ↑ startupStandardHome/domInteractive: +43%
  • ↑ startupStandardHome/backgroundConnect: +14%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -50%
  • ↑ startupStandardHome/setupStore: +149%
  • ↑ startupStandardHome/inp: +150%
  • ↑ startupStandardHome/fcp: +46%
  • ↑ startupStandardHome/lcp: +12%
User Journey Benchmarks · Samples: 5 · mock API
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]
🟡 total
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↓ onboardingImportWallet/metricsToWalletReadyScreen: -10%
  • ↓ onboardingImportWallet/doneButtonToHomeScreen: -92%
  • ↓ onboardingImportWallet/openAccountMenuToAccountListLoaded: -74%
  • ↓ onboardingImportWallet/longTaskCount: -100%
  • ↓ onboardingImportWallet/longTaskTotalDuration: -100%
  • ↓ onboardingImportWallet/longTaskMaxDuration: -100%
  • ↓ onboardingImportWallet/tbt: -100%
  • ↓ onboardingImportWallet/total: -85%
  • ↑ onboardingNewWallet/srpButtonToPwForm: +29%
  • ↑ onboardingNewWallet/createPwToRecoveryScreen: +18%
  • ↑ onboardingNewWallet/skipBackupToMetricsScreen: +20%
  • ↑ onboardingNewWallet/agreeButtonToOnboardingSuccess: +11%
  • ↓ onboardingNewWallet/doneButtonToAssetList: -70%
  • ↓ onboardingNewWallet/longTaskCount: -62%
  • ↓ onboardingNewWallet/longTaskTotalDuration: -75%
  • ↓ onboardingNewWallet/longTaskMaxDuration: -40%
  • ↓ onboardingNewWallet/tbt: -100%
  • ↓ onboardingNewWallet/total: -66%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↓ dappPageLoad/pageLoadTime: -50%
  • ↓ dappPageLoad/firstPaint: -33%
  • ↓ dappPageLoad/firstContentfulPaint: -33%
Bundle Size Diffs [🚨 Warning! Bundle size has increased!]
Status Bundle Total Diff Change
✅ background 15.26 MiB +608 Bytes 0.00%
🚨 ui 19.34 MiB +8.13 KiB +0.04%
✅ common 0 Bytes 0 Bytes 0.00%
✅ other 4.44 MiB -10 Bytes 0.00%
✅ content scripts 3.23 MiB -59 Bytes 0.00%
✅ unzipped 79.64 MiB -253.17 KiB -0.31%
✅ zip 23.81 MiB -260.98 KiB -1.06%

@bfullam
bfullam marked this pull request as ready for review November 4, 2026 14:55
@bfullam
bfullam requested a review from a team as a code owner November 4, 2026 14:55

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 592d76f. Configure here.

Comment thread ui/hooks/bridge/useSwapsRebate.ts Resolved
@metamask-ci

metamask-ci Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor
Builds ready [592d76f]
⚡ Performance Benchmarks (Total: 🟢 6 pass · 🟡 3 warn · 🔴 4 fail)

Baseline (latest main): f693520 | Date: 11/3/2026 | Pipeline: 41852752373 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 4 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟡 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟡 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ loadNewAccount/load_new_account: +182%
  • ↑ loadNewAccount/total: +182%
  • ↑ loadNewAccount/fcp: +11%
  • ↑ loadNewAccount/cls: +282%
  • ↑ confirmTx/longTaskTotalDuration: +50%
  • ↑ confirmTx/longTaskMaxDuration: +77%
  • ↑ confirmTx/tbt: +97%
  • ↑ confirmTx/fcp: +12%
  • ↑ confirmTx/lcp: +13%
  • ↑ bridgeUserActions/bridge_load_page: +59%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +193%
  • ↑ bridgeUserActions/longTaskCount: +36%
  • ↑ bridgeUserActions/longTaskTotalDuration: +54%
  • ↑ bridgeUserActions/longTaskMaxDuration: +19%
  • ↑ bridgeUserActions/tbt: +83%
  • ↑ bridgeUserActions/total: +22%
  • ↑ bridgeUserActions/fcp: +12%
  • ↑ bridgeUserActions/lcp: +15%
  • ↑ bridgeUserActions/cls: +281%
  • ↑ loadNewAccount/load_new_account: +185%
  • ↑ loadNewAccount/total: +185%
  • ↓ loadNewAccount/fcp: -33%
  • ↑ loadNewAccount/lcp: +1266%
  • ↓ confirmTx/longTaskCount: -100%
  • ↓ confirmTx/longTaskTotalDuration: -100%
  • ↓ confirmTx/longTaskMaxDuration: -100%
  • ↓ confirmTx/tbt: -100%
  • ↓ confirmTx/inp: -21%
  • ↓ confirmTx/fcp: -36%
  • ↑ confirmTx/lcp: +1299%
  • ↑ bridgeUserActions/bridge_load_page: +242%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +115%
  • ↓ bridgeUserActions/longTaskCount: -100%
  • ↓ bridgeUserActions/longTaskTotalDuration: -100%
  • ↓ bridgeUserActions/longTaskMaxDuration: -100%
  • ↓ bridgeUserActions/tbt: -100%
  • ↑ bridgeUserActions/total: +40%
  • ↑ bridgeUserActions/inp: +54%
  • ↓ bridgeUserActions/fcp: -40%
  • ↑ bridgeUserActions/lcp: +1381%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 1.9s
  • 🟡 confirmTx/FCP: p75 1.9s
  • 🟡 bridgeUserActions/FCP: p75 1.9s
  • 🟡 bridgeUserActions/LCP: p75 2.6s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ startupStandardHome/uiStartup: +11%
  • ↑ startupStandardHome/domInteractive: +21%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -29%
  • ↑ startupStandardHome/setupStore: +88%
  • ↓ startupStandardHome/longTaskCount: -29%
  • ↑ startupStandardHome/tbt: +10%
  • ↑ startupStandardHome/cls: +400%
  • ↓ startupStandardHome/uiStartup: -39%
  • ↓ startupStandardHome/load: -36%
  • ↓ startupStandardHome/domContentLoaded: -37%
  • ↓ startupStandardHome/domInteractive: -56%
  • ↓ startupStandardHome/backgroundConnect: -35%
  • ↓ startupStandardHome/firstReactRender: -99%
  • ↓ startupStandardHome/initialActions: -50%
  • ↓ startupStandardHome/loadScripts: -36%
  • ↑ startupStandardHome/setupStore: +14%
  • ↓ startupStandardHome/fcp: -41%
  • ↓ startupStandardHome/lcp: -34%
User Journey Benchmarks · Samples: 5 · mock API 🔴 2
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total

📈 Results compared to the previous 5 runs on main

  • ↓ onboardingImportWallet/srpButtonToSrpForm: -17%
  • ↓ onboardingImportWallet/pwFormToMetricsScreen: -18%
  • ↓ onboardingImportWallet/metricsToWalletReadyScreen: -32%
  • ↓ onboardingImportWallet/doneButtonToHomeScreen: -92%
  • ↓ onboardingImportWallet/openAccountMenuToAccountListLoaded: -74%
  • ↓ onboardingImportWallet/longTaskCount: -100%
  • ↓ onboardingImportWallet/longTaskTotalDuration: -100%
  • ↓ onboardingImportWallet/longTaskMaxDuration: -100%
  • ↓ onboardingImportWallet/tbt: -100%
  • ↓ onboardingImportWallet/total: -86%
  • ↑ onboardingNewWallet/skipBackupToMetricsScreen: +26%
  • ↓ onboardingNewWallet/agreeButtonToOnboardingSuccess: -14%
  • ↓ onboardingNewWallet/doneButtonToAssetList: -78%
  • ↓ onboardingNewWallet/longTaskCount: -100%
  • ↓ onboardingNewWallet/longTaskTotalDuration: -100%
  • ↓ onboardingNewWallet/longTaskMaxDuration: -100%
  • ↓ onboardingNewWallet/tbt: -100%
  • ↓ onboardingNewWallet/total: -74%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↓ dappPageLoad/pageLoadTime: -48%
  • ↓ dappPageLoad/firstPaint: -28%
  • ↓ dappPageLoad/firstContentfulPaint: -28%
Bundle Size Diffs [🚨 Warning! Bundle size has increased!]
Status Bundle Total Diff Change
✅ background 15.26 MiB +641 Bytes 0.00%
🚨 ui 19.34 MiB +8.13 KiB +0.04%
✅ common 0 Bytes 0 Bytes 0.00%
✅ other 4.44 MiB -10 Bytes 0.00%
✅ content scripts 3.23 MiB -59 Bytes 0.00%
✅ unzipped 79.64 MiB -252.78 KiB -0.31%
✅ zip 23.81 MiB -260.86 KiB -1.06%

@metamask-ci

metamask-ci Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor
Builds ready [63cdc7d]
⚡ Performance Benchmarks (Total: 🟢 9 pass · 🟡 1 warn · 🔴 3 fail)

Baseline (latest main): f693520 | Date: 11/3/2026 | Pipeline: 41855264915 | Baseline logs

Metricschrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 load_new_account(p95) [CI log]🔴 load_new_account(p95) [CI log]
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]

Regressions (🔴 3 failures)

Interaction Benchmarks · Samples: 5 🔴 2
Benchmarkchrome-webpackfirefox-webpack
loadNewAccount
[Sentry log · main/release]
🔴 [CI log]
🔴 load_new_account
🔴 [CI log]
🔴 load_new_account
confirmTx
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]
bridgeUserActions
[Sentry log · main/release]
🟢 [CI log]🟡 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ loadNewAccount/load_new_account: +180%
  • ↑ loadNewAccount/total: +180%
  • ↑ loadNewAccount/cls: +282%
  • ↑ confirmTx/longTaskTotalDuration: +25%
  • ↑ confirmTx/longTaskMaxDuration: +41%
  • ↑ confirmTx/tbt: +43%
  • ↓ confirmTx/inp: -21%
  • ↓ confirmTx/fcp: -13%
  • ↑ bridgeUserActions/bridge_load_page: +27%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +59%
  • ↑ bridgeUserActions/longTaskCount: +36%
  • ↑ bridgeUserActions/longTaskTotalDuration: +20%
  • ↓ bridgeUserActions/longTaskMaxDuration: -17%
  • ↓ bridgeUserActions/inp: -12%
  • ↓ bridgeUserActions/fcp: -14%
  • ↑ bridgeUserActions/cls: +281%
  • ↑ loadNewAccount/load_new_account: +183%
  • ↑ loadNewAccount/total: +183%
  • ↓ loadNewAccount/inp: -25%
  • ↑ loadNewAccount/fcp: +20%
  • ↑ loadNewAccount/lcp: +1279%
  • ↓ confirmTx/longTaskCount: -100%
  • ↓ confirmTx/longTaskTotalDuration: -100%
  • ↓ confirmTx/longTaskMaxDuration: -100%
  • ↓ confirmTx/tbt: -100%
  • ↓ confirmTx/inp: -21%
  • ↓ confirmTx/fcp: -29%
  • ↑ confirmTx/lcp: +1346%
  • ↑ bridgeUserActions/bridge_load_page: +184%
  • ↑ bridgeUserActions/bridge_load_asset_picker: +119%
  • ↑ bridgeUserActions/bridge_search_token: +32%
  • ↓ bridgeUserActions/longTaskCount: -100%
  • ↓ bridgeUserActions/longTaskTotalDuration: -100%
  • ↓ bridgeUserActions/longTaskMaxDuration: -100%
  • ↓ bridgeUserActions/tbt: -100%
  • ↑ bridgeUserActions/total: +69%
  • ↑ bridgeUserActions/inp: +62%
  • ↑ bridgeUserActions/fcp: +26%
  • ↑ bridgeUserActions/lcp: +1334%

🌐 Core Web Vitals — 🟢 good · 🟡 needs improvement · 🔴 poor (web.dev thresholds)

  • 🟡 loadNewAccount/FCP: p75 2.1s
  • 🟡 bridgeUserActions/FCP: p75 2.2s
  • 🟡 bridgeUserActions/LCP: p75 2.5s
Startup Benchmarks · Samples: 100
Benchmarkchrome-webpackfirefox-webpack
startupStandardHome
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↑ startupStandardHome/uiStartup: +13%
  • ↑ startupStandardHome/load: +10%
  • ↑ startupStandardHome/domInteractive: +21%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -29%
  • ↑ startupStandardHome/setupStore: +153%
  • ↑ startupStandardHome/tbt: +13%
  • ↑ startupStandardHome/fcp: +10%
  • ↑ startupStandardHome/cls: +400%
  • ↓ startupStandardHome/domInteractive: -36%
  • ↓ startupStandardHome/firstReactRender: -98%
  • ↓ startupStandardHome/initialActions: -50%
  • ↑ startupStandardHome/setupStore: +138%
  • ↓ startupStandardHome/fcp: -33%
User Journey Benchmarks · Samples: 5 · mock API 🔴 1
Benchmarkchrome-webpackfirefox-webpack
onboardingImportWallet
[Sentry log · main/release]
🟢 [CI log]🔴 [CI log]
🔴 total
onboardingNewWallet
[Sentry log · main/release]
🟢 [CI log]🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↓ onboardingImportWallet/doneButtonToHomeScreen: -92%
  • ↓ onboardingImportWallet/openAccountMenuToAccountListLoaded: -74%
  • ↓ onboardingImportWallet/longTaskCount: -100%
  • ↓ onboardingImportWallet/longTaskTotalDuration: -100%
  • ↓ onboardingImportWallet/longTaskMaxDuration: -100%
  • ↓ onboardingImportWallet/tbt: -100%
  • ↓ onboardingImportWallet/total: -85%
  • ↑ onboardingNewWallet/srpButtonToPwForm: +36%
  • ↑ onboardingNewWallet/createPwToRecoveryScreen: +19%
  • ↑ onboardingNewWallet/skipBackupToMetricsScreen: +16%
  • ↑ onboardingNewWallet/agreeButtonToOnboardingSuccess: +23%
  • ↓ onboardingNewWallet/doneButtonToAssetList: -79%
  • ↓ onboardingNewWallet/longTaskCount: -62%
  • ↓ onboardingNewWallet/longTaskTotalDuration: -66%
  • ↓ onboardingNewWallet/longTaskMaxDuration: -36%
  • ↓ onboardingNewWallet/tbt: -99%
  • ↓ onboardingNewWallet/total: -75%
Dapp Page Load Benchmarks · Samples: 100
Benchmarkchrome-webpack
dappPageLoad
[Sentry log · main/release]
🟢 [CI log]

📈 Results compared to the previous 5 runs on main

  • ↓ dappPageLoad/pageLoadTime: -51%
  • ↓ dappPageLoad/firstPaint: -23%
  • ↓ dappPageLoad/firstContentfulPaint: -23%
Bundle Size Diffs [🚨 Warning! Bundle size has increased!]
Status Bundle Total Diff Change
✅ background 15.26 MiB +641 Bytes 0.00%
🚨 ui 19.34 MiB +8.14 KiB +0.04%
✅ common 0 Bytes 0 Bytes 0.00%
✅ other 4.44 MiB -10 Bytes 0.00%
✅ content scripts 3.23 MiB -59 Bytes 0.00%
✅ unzipped 79.64 MiB -252.77 KiB -0.31%
✅ zip 23.81 MiB -260.86 KiB -1.06%

@sonarqubecloud

sonarqubecloud Bot commented Nov 4, 2026

Copy link
Copy Markdown

This branch had an error being deployed

1 failed and 1 inactive deployments
pr-comment — 63cdc7de Deployed Nov 4, 2026 by bfullam via Publish prerelease / Publish prerelease #172653
segment-schema — 63cdc7de Deployed Nov 4, 2026 by bfullam via propose #3106
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size-M team-swaps-and-bridge Swaps and Bridge team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants