Skip to content

feat: add sell deeplink#40231

Merged
HowardBraham merged 2 commits intomainfrom
feat/add-sell-deeplink
Feb 24, 2026
Merged

feat: add sell deeplink#40231
HowardBraham merged 2 commits intomainfrom
feat/add-sell-deeplink

Conversation

@baptiste-marchand
Copy link
Contributor

@baptiste-marchand baptiste-marchand commented Feb 19, 2026

Description

Today, MetaMask supports a working buy deeplink that correctly routes users across platforms. However, the equivalent sell deeplink is missing on Extension, even though it exists on Mobile.
This PR Implements parity so that /sell deeplink works on Extension the same way /buy does

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Added a new sell deeplink

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/GE-123

Manual testing steps

  1. Open https://link.metamask.io/sell?chainId=59144&address=0x176211869cA2b568f2A7D4EE941E073a821EE1ff&amount=25
  2. You should be redirected to the sell page, with USDC on Linea selected. Amount is currently not correctly consumed by MMPortfolio => fix needed there

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

Low Risk
Adds a small, isolated route mapping that only constructs a redirect URL and updates i18n strings, with minimal impact on core wallet or security logic.

Overview
Adds a new /sell deep link route, mirroring existing /buy behavior, that redirects to the MetaMask Portfolio sell page and forwards all query parameters.

Registers the new route in the deep-link route index and adds the deepLink_theSellPage i18n string in en and en_GB.

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

@github-actions
Copy link
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.

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Feb 19, 2026

Builds ready [2b1db2a]
UI Startup Metrics (1450 ± 103 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup14501230176510315031630
load1240102115479412991399
domContentLoaded1233101615029112941387
domInteractive271695172472
firstPaint178721513188211330
backgroundConnect25823831013262284
firstReactRender19135072132
initialActions108112
loadScripts99179212579010501141
setupStore1374661520
numNetworkReqs312292202286
BrowserifyPower User HomeuiStartup18691409452044319042380
load12021072172413712271498
domContentLoaded11871061168913412081458
domInteractive3518177243463
firstPaint1817341182250315
backgroundConnect3822982395238358522
firstReactRender24155482841
initialActions105112
loadScripts92980914151289531205
setupStore18751102041
numNetworkReqs62371352271109
WebpackStandard HomeuiStartup8837201220959191082
load75062897193795922
domContentLoaded74362296592790917
domInteractive3017131222489
firstPaint1236529855164241
backgroundConnect30207193544
firstReactRender20124972136
initialActions104112
loadScripts74062095791788912
setupStore1262541321
numNetworkReqs312296202588
WebpackPower User HomeuiStartup1219914196918112941564
load71962211061027221008
domContentLoaded71061710951017121002
domInteractive38181242638110
firstPaint1416848773174286
backgroundConnect18012875996169325
firstReactRender21173432226
initialActions102111
loadScripts707616108599710993
setupStore1243751417
numNetworkReqs1133724550144214
FirefoxBrowserifyStandard HomeuiStartup16631420273120016851993
load13961179239916914101624
domContentLoaded13941179239416914081624
domInteractive973393997113193
firstPaint------
backgroundConnect5831142186188
firstReactRender14112021517
initialActions102012
loadScripts13681158237216513861593
setupStore238186321786
numNetworkReqs312097192586
BrowserifyPower User HomeuiStartup27961882839769128893590
load16251335663456016362171
domContentLoaded16241335663356016352171
domInteractive13138684116128402
firstPaint------
backgroundConnect325981041259352909
firstReactRender19146491926
initialActions105122
loadScripts15881303659955715972128
setupStore1388752190108590
numNetworkReqs64301603181120
WebpackStandard HomeuiStartup17261450329327817432017
load14671229306126214801621
domContentLoaded14671229306126214791621
domInteractive109281730171131200
firstPaint------
backgroundConnect58252253658123
firstReactRender16125661621
initialActions103122
loadScripts14441213304426114531577
setupStore217150221760
numNetworkReqs302097172771
WebpackPower User HomeuiStartup27311989394840929043636
load15651274261127516012237
domContentLoaded15641273261127516002236
domInteractive12230700119116340
firstPaint------
backgroundConnect3571181317274501917
firstReactRender23157592430
initialActions207122
loadScripts15211259255024915701992
setupStore18881212240271679
numNetworkReqs62261503486130
📊 Page Load Benchmark Results

Current Commit: 2b1db2a | Date: 2/19/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±40ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 741ms (±37ms) 🟢 | historical mean value: 724ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 81ms (±12ms) 🟢 | historical mean value: 86ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 40ms 1.03s 1.34s 1.08s 1.34s
domContentLoaded 741ms 37ms 719ms 1.02s 764ms 1.02s
firstPaint 81ms 12ms 60ms 180ms 92ms 180ms
firstContentfulPaint 81ms 12ms 60ms 180ms 92ms 180ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 58 Bytes (0%)
  • ui: 5 Bytes (0%)
  • common: 658 Bytes (0.01%)

@metamaskbotv2
Copy link
Contributor

metamaskbotv2 bot commented Feb 19, 2026

Builds ready [173216c]
UI Startup Metrics (1471 ± 117 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup14711227195911715341664
load12591038167810313201418
domContentLoaded12501035166610213071412
domInteractive291892172677
firstPaint176731328142219370
backgroundConnect25723730213263281
firstReactRender18123841928
initialActions106113
loadScripts1010796142310110761174
setupStore1373861521
numNetworkReqs312296202284
BrowserifyPower User HomeuiStartup3017151511711222430079833
load12951112179614613291635
domContentLoaded12731097178814213061590
domInteractive39202343136101
firstPaint230901336169273364
backgroundConnect1009311889515427154713
firstReactRender25165272840
initialActions105112
loadScripts1010837151313510441335
setupStore1666172028
numNetworkReqs81401472498126
WebpackStandard HomeuiStartup8957161143949581073
load76262895993856929
domContentLoaded75662394993848921
domInteractive3017121222581
firstPaint1336541969180251
backgroundConnect28196083341
firstReactRender2012172162132
initialActions104112
loadScripts75362194792839911
setupStore1273351324
numNetworkReqs312296202588
WebpackPower User HomeuiStartup1307928304731913571872
load7296131350117751965
domContentLoaded7196071341117739958
domInteractive39191412934120
firstPaint1506745977194304
backgroundConnect19114281293173336
firstReactRender23175342429
initialActions103111
loadScripts7166051327115737948
setupStore1252031417
numNetworkReqs985019330105167
FirefoxBrowserifyStandard HomeuiStartup17101408264521217172128
load14211180205713814571681
domContentLoaded14191180205713914571681
domInteractive84344086498187
firstPaint------
backgroundConnect65302143165156
firstReactRender14112721417
initialActions102012
loadScripts13901165202613114251628
setupStore308894911755
numNetworkReqs311996192787
BrowserifyPower User HomeuiStartup28542112865572329453771
load16131303667360616121983
domContentLoaded16131299667360616121982
domInteractive15850745125181407
firstPaint------
backgroundConnect43811615053235931203
firstReactRender19146771926
initialActions103122
loadScripts15781283664060315441952
setupStore11510840150106439
numNetworkReqs81321793499152
WebpackStandard HomeuiStartup17711477324530917742162
load15061217294829015111727
domContentLoaded15061217294829015111727
domInteractive112291555154131213
firstPaint------
backgroundConnect65261903270129
firstReactRender16136861623
initialActions102122
loadScripts14801197292228914941688
setupStore227206321762
numNetworkReqs312091172778
WebpackPower User HomeuiStartup27512085704951729133240
load15821351262322716302006
domContentLoaded15821351262222716302005
domInteractive16948656141190537
firstPaint------
backgroundConnect3951323484389430924
firstReactRender22165462430
initialActions213123
loadScripts15341328252920815831894
setupStore17318708184237563
numNetworkReqs82331993392152
📊 Page Load Benchmark Results

Current Commit: 173216c | Date: 2/19/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 977ms (±42ms) 🟢 | historical mean value: 1.03s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 685ms (±39ms) 🟢 | historical mean value: 726ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 75ms (±9ms) 🟢 | historical mean value: 84ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 977ms 42ms 944ms 1.26s 1.00s 1.26s
domContentLoaded 685ms 39ms 661ms 962ms 707ms 962ms
firstPaint 75ms 9ms 64ms 152ms 84ms 152ms
firstContentfulPaint 75ms 9ms 64ms 152ms 84ms 152ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs
  • background: 58 Bytes (0%)
  • ui: 5 Bytes (0%)
  • common: 658 Bytes (0.01%)

@baptiste-marchand baptiste-marchand added this pull request to the merge queue Feb 19, 2026
github-merge-queue bot pushed a commit that referenced this pull request Feb 19, 2026
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
Today, MetaMask supports a working buy deeplink that correctly routes
users across platforms. However, the equivalent sell deeplink is missing
on Extension, even though it exists on Mobile.
This PR Implements parity so that /sell deeplink works on Extension the
same way /buy does

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/40231?quickstart=1)

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Added a new sell deeplink

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/GE-123

## **Manual testing steps**

1. Open
https://link.metamask.io/sell?chainId=59144&address=0x176211869cA2b568f2A7D4EE941E073a821EE1ff&amount=25
2. You should be redirected to the sell page, with USDC on Linea
selected. Amount is currently not correctly consumed by MMPortfolio =>
fix needed there

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **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.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Adds a small, isolated route mapping that only constructs a redirect
URL and updates i18n strings, with minimal impact on core wallet or
security logic.
> 
> **Overview**
> Adds a new `/sell` deep link route, mirroring existing `/buy`
behavior, that redirects to the MetaMask Portfolio sell page and
forwards all query parameters.
> 
> Registers the new route in the deep-link route index and adds the
`deepLink_theSellPage` i18n string in `en` and `en_GB`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
173216c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Feb 19, 2026
@HowardBraham HowardBraham added this pull request to the merge queue Feb 24, 2026
Merged via the queue into main with commit 2c0c2a1 Feb 24, 2026
177 checks passed
@HowardBraham HowardBraham deleted the feat/add-sell-deeplink branch February 24, 2026 01:50
@github-actions github-actions bot locked and limited conversation to collaborators Feb 24, 2026
@metamaskbot metamaskbot added the release-13.21.0 Issue or pull request that will be included in release 13.21.0 label Feb 24, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.21.0 Issue or pull request that will be included in release 13.21.0 size-S team-engagement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants