Skip to content

Conversation

@micaelae
Copy link
Member

@micaelae micaelae commented Dec 11, 2025

Description

This adds the utils and components that implement the new Bridge Asset Picker

  • components and storybook previews
  • fetch utils for the popular and searchQuery endpoints

Note that these components are not connected to the Swap page yet but can be previewed in the generated storybook link: https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/20310062179/storybook-build/index.html?path=/docs/pages-bridge-assetpicker--docs

Open in GitHub Codespaces

Changelog

CHANGELOG entry: feat: implement new bridge AssetPicker components

Related issues

Fixes:

Manual testing steps

Check storybook previews: https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/20310062179/storybook-build/index.html?path=/docs/pages-bridge-assetpicker--docs

Screenshots/Recordings

Before

After

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

Implements a new Bridge Asset Picker (with network filter, search, and popular tokens), integrates it into the bridge inputs, updates token/chain mappings and analytics, and refreshes tests, snapshots, styles, and stories.

  • UI (Bridge Asset Picker):
    • Add modal picker with network filter (NetworkPicker), searchable token list (BridgeAssetList/AssetListItem), loading skeleton, and SelectedAssetButton.
    • Integrate picker into BridgeInputGroup; remove old BridgeAssetPickerButton.
    • Make Row polymorphic with forwardRef; add related SCSS; update snapshots and Storybook stories.
  • Types/Utils:
    • Extend BridgeToken with name; TokenPayload.payload gains optional name and is non-null.
    • toBridgeToken now non-null, sets default name, assetId, and image.
    • setFromChain accepts token nullable.
  • Constants:
    • Add BRIDGE_CHAIN_ID_TO_NETWORK_IMAGE_MAP built from CHAIN_ID_TO_NETWORK_IMAGE_URL_MAP and CAIP IDs; expose for picker badges.
  • Analytics/Security:
    • Use securityWarnings (descriptions from token/tx alerts) in quote updates and switch events; tighten switch event guard.
  • Tests:
    • Update snapshots, add/adjust unit tests (e.g., slippage tests include token name), and add Storybook stories for new components.

Written by Cursor Bugbot for commit 05313a0. This will update automatically on new commits. Configure here.

@metamaskbot metamaskbot added the team-swaps-and-bridge Swaps and Bridge team label Dec 11, 2025
@metamaskbot
Copy link
Collaborator

metamaskbot commented Dec 11, 2025

✨ Files requiring CODEOWNER review ✨

🔄 @MetaMask/swaps-engineers (23 files, +1266 -293)
  • 📁 ui/
    • 📁 ducks/
      • 📁 bridge/
        • 📄 actions.ts +1 -1
        • 📄 types.ts +3 -1
        • 📄 utils.ts +2 -4
    • 📁 pages/
      • 📁 bridge/
        • 📁 __snapshots__/
          • 📄 index.test.tsx.snap +42 -36
        • 📁 layout/
          • 📄 row.tsx +19 -12
        • 📁 prepare/
          • 📁 __snapshots__/
            • 📄 prepare-bridge-page.test.tsx.snap +84 -72
          • 📁 components/
            • 📁 bridge-asset-picker/
              • 📄 asset.stories.tsx +72 -0
              • 📄 asset.tsx +134 -0
              • 📄 index.scss +14 -0
              • 📄 index.stories.tsx +100 -0
              • 📄 index.tsx +248 -0
              • 📄 lazy-asset-list.tsx +105 -0
              • 📄 loading-skeleton.stories.tsx +69 -0
              • 📄 loading-skeleton.tsx +39 -0
              • 📄 network-picker.stories.tsx +78 -0
              • 📄 network-picker.tsx +99 -0
              • 📄 selected-asset-button.tsx +80 -0
              • 📄 bridge-asset-picker-button.tsx +0 -96
            • 📄 bridge-input-group.tsx +7 -21
            • 📄 prepare-bridge-page.test.tsx +11 -0
            • 📄 prepare-bridge-page.tsx +54 -50
        • 📁 utils/
          • 📄 slippage-service.test.ts +4 -0
          • 📄 index.scss +1 -0

@metamaskbot
Copy link
Collaborator

Builds ready [9ce6a36]
UI Startup Metrics (1260 ± 103 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12601051147710313381417
load103685812778810831196
domContentLoaded102985312698710791189
domInteractive251594182282
firstPaint47181118937810041116
backgroundConnect21419625813218245
firstReactRender4732253245375
getState3617132174169
initialActions104111
loadScripts822655107584867974
setupStore1254351321
numNetworkReqs1368220676
BrowserifyPower User HomeuiStartup19291575235215920062252
load1089892145012711781293
domContentLoaded1077883143412511581281
domInteractive3017120212892
firstPaint74594145643311101287
backgroundConnect24820459270243509
firstReactRender52389995666
getState223156701100218357
initialActions102112
loadScripts85868411991239431068
setupStore1574171435
numNetworkReqs72602222467131
WebpackStandard HomeuiStartup808675108075847961
load64857081763692779
domContentLoaded64256581062686770
domInteractive2616104202289
firstPaint22484815179198699
backgroundConnect1063051226
firstReactRender53322143161127
getState301556114051
initialActions103111
loadScripts63956380261685765
setupStore1172741321
numNetworkReqs1367919674
WebpackPower User HomeuiStartup14201111206320316141765
load723595975100821911
domContentLoaded716587969100815903
domInteractive31181162427104
firstPaint31089904226328821
backgroundConnect82678016855559
firstReactRender50416655263
getState17814032930183240
initialActions102111
loadScripts71358596199807901
setupStore1574681435
numNetworkReqs72582472769140
FirefoxBrowserifyStandard HomeuiStartup13481089226721314371708
load1078917185213111281254
domContentLoaded1077913185113111281253
domInteractive67302113985138
firstPaint------
backgroundConnect51223154553163
firstReactRender37306173855
getState13788121130
initialActions102012
loadScripts1051901181112410991205
setupStore166211251246
numNetworkReqs1568621876
BrowserifyPower User HomeuiStartup26211641363852330713301
load1601970258048420332345
domContentLoaded1601969258048420322344
domInteractive1303199921987922
firstPaint------
backgroundConnect205241118256217987
firstReactRender553799125882
getState138641041100156216
initialActions218123
loadScripts1512952241144918942250
setupStore5053528248315
numNetworkReqs75571282086121
WebpackStandard HomeuiStartup15851335227016816341952
load1299113515578213451457
domContentLoaded1298112915578213451457
domInteractive792915934103133
firstPaint------
backgroundConnect55181973753152
firstReactRender4434104114661
getState237207331586
initialActions103122
loadScripts1272111214928013191427
setupStore2271753217100
numNetworkReqs1568521874
WebpackPower User HomeuiStartup25751757379753529223426
load18381100266048122662513
domContentLoaded18381100266048122662513
domInteractive288291148383381982
firstPaint------
backgroundConnect142251089191176319
firstReactRender5437100126085
getState1247624640147206
initialActions208123
loadScripts17671084263947422352446
setupStore274261412694
numNetworkReqs75571342285128
📊 Page Load Benchmark Results

Current Commit: 9ce6a36 | Date: 12/11/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±43ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 723ms (±39ms) 🟢 | historical mean value: 719ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±14ms) 🟢 | historical mean value: 76ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 43ms 1.01s 1.37s 1.08s 1.37s
domContentLoaded 723ms 39ms 697ms 1.02s 746ms 1.02s
firstPaint 77ms 14ms 56ms 208ms 84ms 208ms
firstContentfulPaint 77ms 14ms 56ms 208ms 84ms 208ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: -2.24 KiB (-0.03%)
  • common: 141 Bytes (0%)

@micaelae micaelae marked this pull request as ready for review December 11, 2025 17:22
@micaelae micaelae requested a review from a team as a code owner December 11, 2025 17:22
@micaelae micaelae enabled auto-merge December 11, 2025 17:22
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Bug: Missing null check causes crash when token undefined

The refactored code removed a conditional check that handled when token is null. Previously, when isAmountReadOnly && !token, a plain Button was rendered. Now SelectedAssetButton is always rendered with asset={(token as never) ?? undefined}. The SelectedAssetButton component types asset as BridgeToken (non-nullable) but when token is null, undefined is passed. The component then accesses asset.symbol, asset.chainId, asset.image directly, which will throw a runtime error when the destination token hasn't been selected yet.

ui/pages/bridge/prepare/bridge-input-group.tsx#L235-L244

>
{(onClickHandler) =>
(
<SelectedAssetButton
onClick={onClickHandler}
asset={(token as never) ?? undefined}
data-testid={buttonProps.testId}
/>
)
}

ui/pages/bridge/prepare/components/bridge-asset-picker/selected-asset-button.tsx#L29-L75

export const SelectedAssetButton = ({
asset,
...props
}: {
asset: BridgeToken;
} & SelectButtonProps<'div'>) => (
<SelectButton
borderRadius={BorderRadius.pill}
backgroundColor={BackgroundColor.backgroundDefault}
borderColor={BorderColor.borderMuted}
style={{
padding: 8,
paddingRight: 11,
minWidth: 'fit-content',
}}
size={SelectButtonSize.Lg}
alignItems={AlignItems.center}
descriptionProps={{
overflowWrap: OverflowWrap.BreakWord,
ellipsis: false,
}}
caretIconProps={{
name: IconName.ArrowDown,
style: { display: Display.None },
}}
label={asset.symbol}
startAccessory={
<BadgeWrapper
key={asset.assetId}
style={{ marginRight: 2 }}
badge={
<AvatarNetwork
name={NETWORK_TO_SHORT_NETWORK_NAME_MAP[asset.chainId]}
src={BRIDGE_CHAIN_ID_TO_NETWORK_IMAGE_MAP[asset.chainId]}
size={AvatarNetworkSize.Xs}
style={{ borderWidth: 1, borderRadius: 6 }}
hasBorder
/>
}
>
<AvatarToken src={asset.image} name={asset.symbol} />
</BadgeWrapper>
}
{...props}
/>
);

Fix in Cursor Fix in Web


@metamaskbot
Copy link
Collaborator

Builds ready [4f1585f]
UI Startup Metrics (1313 ± 122 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13131068162212214011570
load1078891136710311591263
domContentLoaded1071886136210211491252
domInteractive2916129232492
firstPaint56283134942310601176
backgroundConnect22520126513233247
firstReactRender4830140175680
getState361591154270
initialActions108112
loadScripts8546701129999191038
setupStore1273751325
numNetworkReqs1367819670
BrowserifyPower User HomeuiStartup19091608238415320052183
load1081886152413411591315
domContentLoaded1072879150713311521308
domInteractive3117126232799
firstPaint56499151942610411257
backgroundConnect24619859182237524
firstReactRender4838119104964
getState20314276196201280
initialActions103112
loadScripts85868512911319291099
setupStore1563761432
numNetworkReqs71571492067130
WebpackStandard HomeuiStartup8476851078858941005
load67558488975718850
domContentLoaded66957988274714844
domInteractive2815114232399
firstPaint27788860192263729
backgroundConnect136100121232
firstReactRender60341853472138
getState301464113950
initialActions104112
loadScripts66657787173712835
setupStore1143441320
numNetworkReqs1367920671
WebpackPower User HomeuiStartup13971050211120715811695
load7185651065102813883
domContentLoaded7115581059102805874
domInteractive30161502525100
firstPaint33987870235590813
backgroundConnect61859613042550
firstReactRender50388365261
getState19814566259224261
initialActions103012
loadScripts7085561051101802867
setupStore1484781237
numNetworkReqs74592143167147
FirefoxBrowserifyStandard HomeuiStartup13131079236223014061836
load1052899211514711301240
domContentLoaded1052899211514711301240
domInteractive6929104810384121
firstPaint------
backgroundConnect53194475553150
firstReactRender36296483759
getState166210311127
initialActions102122
loadScripts1024883201113211021190
setupStore135113151139
numNetworkReqs1568821875
BrowserifyPower User HomeuiStartup26881706427455030713470
load16731016324151121202407
domContentLoaded16731016324151121192407
domInteractive14832101923497946
firstPaint------
backgroundConnect2642511403032871097
firstReactRender5533101126076
getState153551258152160219
initialActions3032527
loadScripts1518987314047219602281
setupStore565108012549252
numNetworkReqs75551362189121
WebpackStandard HomeuiStartup15571232220217716351911
load12831080152710613651490
domContentLoaded12831079152710613651490
domInteractive732723143110132
firstPaint------
backgroundConnect61202434377137
firstReactRender42329184753
getState187212241549
initialActions103122
loadScripts12531065146610013291432
setupStore205165261582
numNetworkReqs1568021876
WebpackPower User HomeuiStartup26721746438455231203394
load18461118383849822292485
domContentLoaded18461118383849822282485
domInteractive154271151274100959
firstPaint------
backgroundConnect197241149244207992
firstReactRender5538118115971
getState1336832349163235
initialActions207123
loadScripts17261103278443621022453
setupStore534106112348260
numNetworkReqs73511422182121
📊 Page Load Benchmark Results

Current Commit: 4f1585f | Date: 12/11/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±43ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 716ms (±40ms) 🟢 | historical mean value: 724ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 75ms (±13ms) 🟢 | historical mean value: 79ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 43ms 1.00s 1.32s 1.04s 1.32s
domContentLoaded 716ms 40ms 696ms 997ms 726ms 997ms
firstPaint 75ms 13ms 56ms 192ms 84ms 192ms
firstContentfulPaint 75ms 13ms 56ms 192ms 84ms 192ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: -495 Bytes (-0.01%)
  • common: 110 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [adcdb33]
UI Startup Metrics (1308 ± 128 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13081044173812813981522
load1070875139211011381294
domContentLoaded1063872138610911281287
domInteractive2715117202385
firstPaint54885135443210681200
backgroundConnect21720027714223244
firstReactRender423177104370
getState3417107144053
initialActions103111
loadScripts85366811271059171064
setupStore1265461321
numNetworkReqs1368019672
BrowserifyPower User HomeuiStartup19131418250918520072312
load1077876172312811611264
domContentLoaded1067869170512811551258
domInteractive3217249302887
firstPaint55897133740710081220
backgroundConnect24219764578233536
firstReactRender48396665159
getState20014478582207269
initialActions102012
loadScripts85367414551249371048
setupStore1574271534
numNetworkReqs72572272967128
WebpackStandard HomeuiStartup819682103976862954
load66057384870705820
domContentLoaded65456784169701814
domInteractive2616102192384
firstPaint22886847153221685
backgroundConnect1163261130
firstReactRender52311432556105
getState301597133854
initialActions104112
loadScripts65156583368699806
setupStore1264461329
numNetworkReqs1367720672
WebpackPower User HomeuiStartup14281118202021015901827
load724598106799774909
domContentLoaded717590105098766899
domInteractive31161302627106
firstPaint311831069241316897
backgroundConnect92865916486567
firstReactRender50418365265
getState18514532935189264
initialActions102011
loadScripts714588104797763896
setupStore1784291638
numNetworkReqs70561642366136
FirefoxBrowserifyStandard HomeuiStartup13161090185217114581583
load1064905135510311411282
domContentLoaded1064905135510311401282
domInteractive66311623584142
firstPaint------
backgroundConnect49202414051142
firstReactRender37306063949
getState137116121232
initialActions103122
loadScripts103588913389311041196
setupStore185204301178
numNetworkReqs1568121877
BrowserifyPower User HomeuiStartup26711594377456531543509
load1669990268552521572437
domContentLoaded1669989268452521572437
domInteractive11932107718991367
firstPaint------
backgroundConnect200231175238208938
firstReactRender5738194196188
getState1336336846152225
initialActions2036427
loadScripts1557970265349219872393
setupStore3853726147119
numNetworkReqs74501432368133
WebpackStandard HomeuiStartup15121261214016815861900
load12571064156011413311504
domContentLoaded12561064155411413311504
domInteractive68272054093135
firstPaint------
backgroundConnect51201623155137
firstReactRender413290114265
getState177143221440
initialActions103112
loadScripts12291049153810813071471
setupStore175206281255
numNetworkReqs1568621876
WebpackPower User HomeuiStartup26021670374553230583375
load18321094271049323122609
domContentLoaded18321092270949323122608
domInteractive251281098350310969
firstPaint------
backgroundConnect14326969198169929
firstReactRender5635181166179
getState1347926046163237
initialActions2034424
loadScripts17541078268646522222452
setupStore3243505725194
numNetworkReqs75571242089119
📊 Page Load Benchmark Results

Current Commit: adcdb33 | Date: 12/11/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.06s (±44ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 742ms (±40ms) 🟢 | historical mean value: 737ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 79ms (±11ms) 🟢 | historical mean value: 84ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.06s 44ms 1.01s 1.35s 1.09s 1.35s
domContentLoaded 742ms 40ms 701ms 1.02s 771ms 1.02s
firstPaint 79ms 11ms 64ms 176ms 92ms 176ms
firstContentfulPaint 79ms 11ms 64ms 176ms 92ms 176ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -1.1 KiB (-0.02%)
  • ui: 894 Bytes (0.01%)
  • common: -2.67 KiB (-0.03%)

@metamaskbot
Copy link
Collaborator

Builds ready [3ef8d23]
UI Startup Metrics (1300 ± 113 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13001058166411313821489
load106587014439511251209
domContentLoaded105886514379511181203
domInteractive2917150222586
firstPaint56986128041310541179
backgroundConnect22020131916225249
firstReactRender463389124875
getState39181202144110
initialActions104112
loadScripts845663121791898996
setupStore1265151318
numNetworkReqs1368018665
BrowserifyPower User HomeuiStartup19121553230614419892224
load1090895138911611701294
domContentLoaded1079890138211711601282
domInteractive3017126222798
firstPaint590101140243810661262
backgroundConnect25620374998241563
firstReactRender50407365365
getState215148707103218279
initialActions102112
loadScripts86369311631169431077
setupStore1584461532
numNetworkReqs71581571968126
WebpackStandard HomeuiStartup81467699470861924
load66457286176727807
domContentLoaded65856785475723801
domInteractive261690192284
firstPaint24982858181225734
backgroundConnect1163051328
firstReactRender49331582646131
getState2815124153651
initialActions104112
loadScripts65556585274718799
setupStore1275371228
numNetworkReqs1367418668
WebpackPower User HomeuiStartup13891067202819114911743
load7155821067101797890
domContentLoaded7085771061101790883
domInteractive31161152526104
firstPaint28691879209300720
backgroundConnect72667013778542
firstReactRender50407555160
getState17713932830186236
initialActions102011
loadScripts7055751059100784880
setupStore1684591436
numNetworkReqs70551472068128
FirefoxBrowserifyStandard HomeuiStartup13661100227020714621772
load1086928205413311511233
domContentLoaded1085928205413311511233
domInteractive65309819773130
firstPaint------
backgroundConnect52222084062157
firstReactRender39317184058
getState136155161230
initialActions103012
loadScripts1056911203212711191188
setupStore136156161133
numNetworkReqs1568721776
BrowserifyPower User HomeuiStartup26881653363456831293467
load1690981250250121202409
domContentLoaded1690981250250121192409
domInteractive13432987210101915
firstPaint------
backgroundConnect202291123225213944
firstReactRender5838106126284
getState159671232127171298
initialActions3040523
loadScripts1590961240347520162279
setupStore5554018659297
numNetworkReqs75561392469128
WebpackStandard HomeuiStartup15951269207515016751886
load1314112716549913651511
domContentLoaded1313112616539913641511
domInteractive762916636102135
firstPaint------
backgroundConnect59211914058155
firstReactRender43338894457
getState2110169261687
initialActions102122
loadScripts1281110916269013311456
setupStore15487131448
numNetworkReqs1669022875
WebpackPower User HomeuiStartup27031766408256331373518
load18521180324551923302559
domContentLoaded18511180324551923302554
domInteractive216311075318210988
firstPaint------
backgroundConnect156251194212187928
firstReactRender5538120136075
getState1308026850166234
initialActions2037427
loadScripts17781157321948722432501
setupStore454106011637148
numNetworkReqs75531382468131
📊 Page Load Benchmark Results

Current Commit: 3ef8d23 | Date: 12/11/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±40ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 719ms (±38ms) 🟢 | historical mean value: 732ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±9ms) 🟢 | historical mean value: 83ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 40ms 1.01s 1.33s 1.08s 1.33s
domContentLoaded 719ms 38ms 697ms 1.00s 760ms 1.00s
firstPaint 76ms 9ms 60ms 148ms 88ms 148ms
firstContentfulPaint 76ms 9ms 60ms 148ms 88ms 148ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -1.1 KiB (-0.02%)
  • ui: 2.72 KiB (0.04%)
  • common: -2.43 KiB (-0.03%)

@metamaskbot
Copy link
Collaborator

Builds ready [bfd56db]
UI Startup Metrics (1267 ± 118 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup12671039178711813131400
load1049861146510110961184
domContentLoaded1042856145910110891169
domInteractive261596202282
firstPaint50670143040410231138
backgroundConnect20919425410212232
firstReactRender4432142154472
getState35186793954
initialActions105112
loadScripts839660121198890967
setupStore1172031218
numNetworkReqs181178181175
BrowserifyPower User HomeuiStartup19071599270318119852233
load1076877152513211711326
domContentLoaded1067868150913111621315
domInteractive32171862727101
firstPaint53699155341310061250
backgroundConnect24119663385227512
firstReactRender48407964958
getState19714771179200264
initialActions107112
loadScripts85767212361279531112
setupStore1585981436
numNetworkReqs65511291763114
WebpackStandard HomeuiStartup8696891062879341019
load68058188888738864
domContentLoaded67457688187732856
domInteractive2615112192279
firstPaint20983811127207606
backgroundConnect2661562931103
firstReactRender60352654354178
getState301573123756
initialActions105112
loadScripts67157487986724853
setupStore1052441121
numNetworkReqs181179181173
WebpackPower User HomeuiStartup14271071205621115881807
load7415961015105844935
domContentLoaded7345891008105831928
domInteractive33171632827108
firstPaint312106973235307870
backgroundConnect105866918299588
firstReactRender52428975368
getState18514131235191275
initialActions102112
loadScripts7315861005104828925
setupStore1474171434
numNetworkReqs68532152861127
FirefoxBrowserifyStandard HomeuiStartup15951200231419917011948
load12251025173412812831493
domContentLoaded12241025173312812831492
domInteractive923936649107183
firstPaint------
backgroundConnect74262915290196
firstReactRender46347785064
getState227206331599
initialActions203122
loadScripts11791003165211612301424
setupStore226235311895
numNetworkReqs201084201479
BrowserifyPower User HomeuiStartup26641591513459429963609
load1668978352251620532387
domContentLoaded1668978352251620532386
domInteractive16631230731696940
firstPaint------
backgroundConnect205221133231234959
firstReactRender5738190196195
getState1387233652161267
initialActions3141623
loadScripts1558958350248719412343
setupStore3453345236112
numNetworkReqs70501332084111
WebpackStandard HomeuiStartup16091313224617017181910
load13161113185911613901492
domContentLoaded13151112185811613901492
domInteractive782819636101132
firstPaint------
backgroundConnect64151623890140
firstReactRender42339794356
getState167128141738
initialActions103122
loadScripts12811088179611113481439
setupStore216209311494
numNetworkReqs20985201376
WebpackPower User HomeuiStartup27291803446652930943444
load18811146304343722522428
domContentLoaded18811146304343722522428
domInteractive212321097314153941
firstPaint------
backgroundConnect160251023169194319
firstReactRender5739123146184
getState1267432651149232
initialActions219123
loadScripts17871127301042221792361
setupStore45696610640176
numNetworkReqs67431282269120
📊 Page Load Benchmark Results

Current Commit: bfd56db | Date: 12/12/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.09s (±53ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 749ms (±48ms) 🟢 | historical mean value: 730ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 87ms (±14ms) 🟢 | historical mean value: 78ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.09s 53ms 981ms 1.41s 1.14s 1.41s
domContentLoaded 749ms 48ms 673ms 1.05s 794ms 1.05s
firstPaint 87ms 14ms 72ms 204ms 100ms 204ms
firstContentfulPaint 87ms 14ms 72ms 204ms 100ms 204ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: -175 Bytes (0%)
  • common: 110 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [22d1260]
UI Startup Metrics (1309 ± 97 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1309107316579713721433
load108088212858811421205
domContentLoaded107487512738811351196
domInteractive261685182281
firstPaint55495124841610781182
backgroundConnect21519930112217230
firstReactRender493286145481
getState391681134469
initialActions105112
loadScripts865669103888927983
setupStore1173741219
numNetworkReqs171174161167
BrowserifyPower User HomeuiStartup18901549266218519622329
load1055888160812311521261
domContentLoaded1044883159812211411234
domInteractive3117257312796
firstPaint5289113164019911247
backgroundConnect24920060995232553
firstReactRender49399375063
getState19414073178199258
initialActions103112
loadScripts83568613181199311024
setupStore1574071434
numNetworkReqs65531301662114
WebpackStandard HomeuiStartup8446731185898871022
load64856591579682820
domContentLoaded64256190678678815
domInteractive2615107202284
firstPaint24576921187226702
backgroundConnect316146304498
firstReactRender57341613354141
getState321694154159
initialActions104113
loadScripts63955990477676806
setupStore13755101438
numNetworkReqs181181181171
WebpackPower User HomeuiStartup14971163205121316181922
load7676351078107853957
domContentLoaded7596261069106843949
domInteractive35171483129120
firstPaint3011071088239282913
backgroundConnect77967115944644
firstReactRender55407465771
getState19615133036207272
initialActions103012
loadScripts7566241060105840941
setupStore1594271435
numNetworkReqs66502442661129
FirefoxBrowserifyStandard HomeuiStartup14391100245318315281780
load1120918207814012031291
domContentLoaded1120918207814011991291
domInteractive71312273789135
firstPaint------
backgroundConnect712120949105179
firstReactRender41318394462
getState146205201230
initialActions102022
loadScripts1084900198812811521252
setupStore1264381233
numNetworkReqs19979191376
BrowserifyPower User HomeuiStartup26221693390851430463266
load1668967255946820582317
domContentLoaded1668966255946720582317
domInteractive1293297422177930
firstPaint------
backgroundConnect17325994179205382
firstReactRender5535102126182
getState139581102107150225
initialActions203123
loadScripts1578949238744219452269
setupStore4753887657242
numNetworkReqs70541312087111
WebpackStandard HomeuiStartup15501284193814616341847
load12801067156411713721484
domContentLoaded12801066156411713711483
domInteractive71282354289130
firstPaint------
backgroundConnect57181743878136
firstReactRender40348974153
getState159180181526
initialActions103112
loadScripts12491050153910713261449
setupStore145117141435
numNetworkReqs19990201377
WebpackPower User HomeuiStartup26421735363053030623493
load18541115266250323372540
domContentLoaded18531114265450323362539
domInteractive274291058377330993
firstPaint------
backgroundConnect137261045147190321
firstReactRender55369496069
getState1327925248153232
initialActions3142426
loadScripts17981098258648022452497
setupStore545115615242202
numNetworkReqs70501262269122
📊 Page Load Benchmark Results

Current Commit: 22d1260 | Date: 12/12/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±51ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 725ms (±44ms) 🟢 | historical mean value: 730ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 77ms (±13ms) 🟢 | historical mean value: 78ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 51ms 1.01s 1.41s 1.08s 1.41s
domContentLoaded 725ms 44ms 699ms 1.05s 770ms 1.05s
firstPaint 77ms 13ms 60ms 188ms 92ms 188ms
firstContentfulPaint 77ms 13ms 60ms 188ms 92ms 188ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: -175 Bytes (0%)
  • common: 110 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [e0bcf37]
UI Startup Metrics (1272 ± 94 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1272104615289413271439
load106587213198911221223
domContentLoaded105886813118911141207
domInteractive2515109182170
firstPaint49976133141310271174
backgroundConnect21119525110216228
firstReactRender1483041525
getState3820107134359
initialActions105112
loadScripts8546531094909141006
setupStore1262541322
numNetworkReqs181179171168
BrowserifyPower User HomeuiStartup17931478246216718922106
load1064882159112811451269
domContentLoaded1054879157512711321263
domInteractive30171212425105
firstPaint56997158942310541206
backgroundConnect24219757774235425
firstReactRender14112931520
getState18914727928207245
initialActions102112
loadScripts84167912381199161056
setupStore1574881441
numNetworkReqs66521351962118
WebpackStandard HomeuiStartup792644106677841930
load63957084870668787
domContentLoaded63556684370663778
domInteractive2616123222289
firstPaint24472772170225668
backgroundConnect3261253251104
firstReactRender14103741423
getState3315136184263
initialActions102111
loadScripts63156483469661775
setupStore1153651120
numNetworkReqs181183191174
WebpackPower User HomeuiStartup13381011214222413791866
load7746301175111886962
domContentLoaded7666241168110876953
domInteractive34181312629105
firstPaint334102961250369908
backgroundConnect67863613557557
firstReactRender17142631723
getState17814976562179226
initialActions103012
loadScripts7636201165109868951
setupStore17861101541
numNetworkReqs66541401964123
FirefoxBrowserifyStandard HomeuiStartup13511047238220714131763
load1092897217716611361343
domContentLoaded1091897217716611341343
domInteractive7231116511786148
firstPaint------
backgroundConnect51162104359181
firstReactRender13103541321
getState135149161324
initialActions103112
loadScripts1060884215515311051304
setupStore13494121134
numNetworkReqs20988201380
BrowserifyPower User HomeuiStartup26381539408059331033371
load1761996281857722762604
domContentLoaded1761996281757722762603
domInteractive83323868181329
firstPaint------
backgroundConnect3871811894124991152
firstReactRender20126682227
getState1137020428129163
initialActions3141527
loadScripts1457982264347620352300
setupStore555108218323196
numNetworkReqs72521392278118
WebpackStandard HomeuiStartup15461288229019616181941
load12701111159411313431491
domContentLoaded12701111159411313421491
domInteractive813033050105199
firstPaint------
backgroundConnect58202824473140
firstReactRender16115561625
getState216232381467
initialActions113022
loadScripts1235109515729812821427
setupStore175214251645
numNetworkReqs20987201480
WebpackPower User HomeuiStartup27051671400359331923451
load20081164314653624642663
domContentLoaded20081163314553724642663
domInteractive7730101811766290
firstPaint------
backgroundConnect2922212663203411147
firstReactRender2412174232360
getState1147323936133185
initialActions311011028
loadScripts17921145297947522232497
setupStore42512121532186
numNetworkReqs71471492483122
📊 Page Load Benchmark Results

Current Commit: e0bcf37 | Date: 12/17/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±59ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 722ms (±52ms) 🟢 | historical mean value: 719ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 75ms (±10ms) 🟢 | historical mean value: 77ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 59ms 1.00s 1.39s 1.08s 1.39s
domContentLoaded 722ms 52ms 695ms 1.00s 749ms 1.00s
firstPaint 75ms 10ms 60ms 148ms 84ms 148ms
firstContentfulPaint 75ms 10ms 60ms 148ms 84ms 148ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: -175 Bytes (0%)
  • common: 110 Bytes (0%)

@metamaskbot
Copy link
Collaborator

Builds ready [05313a0]
UI Startup Metrics (1326 ± 132 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13261043166413214091568
load1124890141512112001348
domContentLoaded1117885140812011941340
domInteractive2816108202495
firstPaint181681248157199313
backgroundConnect22020327710225242
firstReactRender1493841623
getState351765104156
initialActions107112
loadScripts90567611861209751125
setupStore1263241420
numNetworkReqs171178161167
BrowserifyPower User HomeuiStartup17911345226617618732130
load1056873133811811551256
domContentLoaded1046865133211811471247
domInteractive3016123232692
firstPaint176721273129215309
backgroundConnect24919465692234581
firstReactRender14102221417
getState18314527226198233
initialActions102112
loadScripts83566711161159241041
setupStore17665111543
numNetworkReqs67561311664110
WebpackStandard HomeuiStartup8136631144908441018
load654581104586671816
domContentLoaded649574103985666811
domInteractive261692202389
firstPaint1016122345130199
backgroundConnect2961323143102
firstReactRender15103041623
getState3214141163753
initialActions103111
loadScripts646572103784664803
setupStore1164651219
numNetworkReqs181186181174
WebpackPower User HomeuiStartup1268978217320013331682
load734610109491760912
domContentLoaded728603108790751907
domInteractive33171462927114
firstPaint1226732557144246
backgroundConnect93764416493548
firstReactRender16122321720
getState16314320712170184
initialActions102112
loadScripts725601107889748898
setupStore1694691438
numNetworkReqs66531391763115
FirefoxBrowserifyStandard HomeuiStartup14511097252624215061947
load1141938228716911871451
domContentLoaded1141938228616911861451
domInteractive8029113611389136
firstPaint------
backgroundConnect61234135973182
firstReactRender13104141318
getState217900891325
initialActions103122
loadScripts1106922217815411431313
setupStore154221261243
numNetworkReqs19979191374
BrowserifyPower User HomeuiStartup26091531371556330553334
load16921008268056422502594
domContentLoaded16921007268056422502594
domInteractive1033398914696352
firstPaint------
backgroundConnect3482112974034061162
firstReactRender20126472128
getState12659102399131180
initialActions218227
loadScripts1431987251147419762401
setupStore455105911344197
numNetworkReqs71511472380116
WebpackStandard HomeuiStartup16911321255721617892131
load13891160202214314651605
domContentLoaded13891159202214314651604
domInteractive843021742110152
firstPaint------
backgroundConnect69212624986161
firstReactRender16126261826
getState196164251570
initialActions103122
loadScripts13481141190812814131576
setupStore224239331698
numNetworkReqs20988201477
WebpackPower User HomeuiStartup27151724447159931753654
load19961170306153524602740
domContentLoaded19951169305553524592740
domInteractive8428101711780288
firstPaint------
backgroundConnect3012512813313531108
firstReactRender20132942227
getState1216996391124190
initialActions411591626
loadScripts17701112289547221982532
setupStore564111918225212
numNetworkReqs71521442382117
📊 Page Load Benchmark Results

Current Commit: 05313a0 | Date: 12/17/2025

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.03s (±38ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 719ms (±36ms) 🟢 | historical mean value: 725ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 76ms (±10ms) 🟢 | historical mean value: 80ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.03s 38ms 1.01s 1.31s 1.07s 1.31s
domContentLoaded 719ms 36ms 700ms 979ms 743ms 979ms
firstPaint 76ms 10ms 60ms 160ms 84ms 160ms
firstContentfulPaint 76ms 10ms 60ms 160ms 84ms 160ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 1.01 KiB (0.02%)
  • ui: 247 Bytes (0%)
  • common: 157 Bytes (0%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants