Page MenuHomePhabricator

Use native URL API instead of mw.Uri in MediaWiki and WMF-deployed extensions
Closed, ResolvedPublic

Description

mw.Uri is a common utility used by MediaWiki Core, extensions and user scripts but now browsers themselves provide something that shares many functionalities with it https://developer.mozilla.org/en-US/docs/Web/API/URL which we've already started to use here and there. Let's see if we can reduce mediawiki.Uri uses to see if deprecation or removal is feasible or not.

Code search: https://codesearch.wmcloud.org/search/?q=mw%5C.Uri&files=&excludeFiles=&repos=
Global search: https://global-search.toolforge.org/?q=mw%5C.Uri&regex=1&namespaces=2%2C4%2C8&title=%28Gadgets-definition%7C.*%5C.%28js%7Ccss%7Cjson%29%29

Guide: https://www.mediawiki.org/wiki/Migrating_mw.Uri_to_URL


As of 2025-05-15 enwiki, commonswiki, wikidata.org, the following modules use mw.Uri

Codesearch: https://codesearch.wmcloud.org/search/?q=mw\.uri&i=fosho

Object.entries(mw.loader.moduleRegistry).flatMap(([module, config]) => config.dependencies.includes("mediawiki.Uri") ? [module] : [] );

As of 2025-06-10, Code search results for the last stragglers: https://codesearch.wmcloud.org/deployed/?q=mw\.Uri|mediawiki\.Uri

Details

Related Changes in Gerrit:
SubjectRepoBranchLines +/-
mediawiki/coremaster+44 -0
mediawiki/coremaster+3 -17
mediawiki/coremaster+2 -2
mediawiki/extensions/CentralAuthmaster+2 -2
mediawiki/extensions/SearchVuemaster+29 -27
mediawiki/extensions/Flowmaster+11 -22
mediawiki/extensions/ReportIncidentmaster+0 -1
mediawiki/extensions/Flowmaster+11 -15
mediawiki/extensions/MediaSearchmaster+25 -21
mediawiki/coreREL1_44+10 -1
mediawiki/coreREL1_43+10 -1
mediawiki/coremaster+10 -1
mediawiki/extensions/UploadWizardmaster+12 -15
mediawiki/extensions/AdvancedSearchmaster+0 -1
mediawiki/extensions/RevisionSlidermaster+0 -1
mediawiki/extensions/UploadWizardmaster+14 -15
mediawiki/extensions/PageTriagemaster+16 -20
mediawiki/extensions/Translatemaster+56 -54
mediawiki/coremaster+102 -81
mediawiki/extensions/UrlShortenermaster+0 -1
mediawiki/extensions/RelatedArticlesmaster+0 -1
mediawiki/extensions/CentralNoticemaster+52 -61
mediawiki/extensions/TwnMainPagemaster+3 -3
mediawiki/extensions/MultimediaViewermaster+19 -21
mediawiki/extensions/TranslationNotificationsmaster+7 -8
mediawiki/coremaster+3 -0
mediawiki/coremaster+1 -0
mediawiki/extensions/ShortUrlmaster+2 -2
mediawiki/extensions/DonationInterfacedeployment+4 -5
mediawiki/extensions/Wikistoriesmaster+4 -4
mediawiki/extensions/QuickSurveysmaster+7 -4
mediawiki/extensions/CheckUsermaster+2 -3
mediawiki/extensions/ConfirmEditmaster+27 -23
mediawiki/extensions/UniversalLanguageSelectormaster+5 -5
mediawiki/extensions/DonationInterfacemaster+4 -5
mediawiki/extensions/Kartographermaster+4 -4
mediawiki/extensions/FundraiserLandingPagemaster+5 -5
mediawiki/coremaster+96 -61
mediawiki/extensions/CirrusSearchmaster+11 -8
mediawiki/extensions/Wikibasemaster+14 -18
mediawiki/extensions/WikibaseMediaInfomaster+2 -4
mediawiki/coremaster+8 -7
mediawiki/skins/Vectormaster+14 -5
mediawiki/coremaster+9 -14
mediawiki/extensions/UrlShortenermaster+9 -9
mediawiki/coremaster+13 -11
Show related patches Customize query in gerrit

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes

@WikiBayer in this edit you broke a widely used gadget. Specifically, your edit on line 517 which changed var url = new mw.Uri(); to var url = new URL(); is causing an error, because the native URL API requires at least one parameter to be passed to its constructor.

Huji triaged this task as High priority.Mar 29 2025, 7:39 PM

Temporarily elevating the priority, because many users across many wikis use that gadget and lost the functionality today. Please reduce priority once the issue I just reported is fixed.

Pppery raised the priority of this task from High to Needs Triage.Mar 29 2025, 7:40 PM
Pppery subscribed.

I've reverted that edit for now.

This is the second time I have seen issues related to deprecating mw.Uri and replacing it with the native URL(). May I propose that someone writes a guidance for it?

The two issues that I have seen so far are: (a) not passing any parameters to URL() and (b) not updating the rest of the code to adjust the way properties of the new URL() objects have to be retrieve, which is sometimes different than how the properties of the old mw.Uri() instances were retrieved (see this example; specifically, mw.Uri() allows you to retrieve certain properties using dot notation, but URL() does not).

Change #1141459 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/UrlShortener@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141459

Change #1141463 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/UploadWizard@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141463

Change #1141466 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/RevisionSlider@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141466

Change #1141467 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/AdvancedSearch@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141467

Change #1141950 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/skins/MinervaNeue@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141950

Change #1141961 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/CentralNotice@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141961

Change #1141962 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/RelatedArticles@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141962

Change #1141961 abandoned by Simon04:

[mediawiki/extensions/CentralNotice@master] Use browser native URL instead of mw.Uri

Reason:

Err, too late. Duplicate of I18acc08a2b7a8e6b2e1e90a02d6211b225314332.

https://gerrit.wikimedia.org/r/1141961

Change #1141962 merged by jenkins-bot:

[mediawiki/extensions/RelatedArticles@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141962

Change #1143105 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/Translate@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143105

Change #1143147 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/core@master] rcfilters: Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143147

This is the second time I have seen issues related to deprecating mw.Uri and replacing it with the native URL(). May I propose that someone writes a guidance for it?

The two issues that I have seen so far are: (a) not passing any parameters to URL() and (b) not updating the rest of the code to adjust the way properties of the new URL() objects have to be retrieve, which is sometimes different than how the properties of the old mw.Uri() instances were retrieved (see this example; specifically, mw.Uri() allows you to retrieve certain properties using dot notation, but URL() does not).

I wrote a help page, I hope it is still useful: https://www.mediawiki.org/wiki/Migrating_mw.Uri_to_URL

@Od1n @simon04 I'd appreciate if you could review it, and maybe add any other common cases you've encountered, since you've both been working on updating lots of code.

Ladsgroup renamed this task from Consider use of native URL API instead of mw.Uri to Use native URL API instead of mw.Uri.May 7 2025, 5:50 PM

(We are way past "considering" it)

Change #1143148 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@master] Link mw.Uri migration guide in docs and log warnings

https://gerrit.wikimedia.org/r/1143148

Change #1141459 merged by jenkins-bot:

[mediawiki/extensions/UrlShortener@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141459

See https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Translate/+/1143105/comment/d9516fbe_140eacce/. Could we have a solution for mass-updating (but not completely overwriting) query parameters, without having to copy and paste a three-line snippet all over the place?

Change #1143147 merged by jenkins-bot:

[mediawiki/core@master] rcfilters: Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143147

Change #1143631 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/ReportIncident@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143631

Change #1143634 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/SearchVue@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143634

Change #1143649 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/core@master] Add mw.util.extendParams to ease mw.Uri migration

https://gerrit.wikimedia.org/r/1143649

Change #1143657 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/PageTriage@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143657

Change #1143105 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143105

Change #1146196 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/MediaSearch@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1146196

Change #1146717 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/core@master] Make mw.util.getParamValue use URLSearchParams

https://gerrit.wikimedia.org/r/1146717

Checked https://gerrit.wikimedia.org/r/c/mediawiki/extensions/UploadWizard/+/1141463.

The pages, such Special:UploadWizard and Special:MediaSearch do display the warning This page is using the deprecated ResourceLoader module "mediawiki.Uri" when load, but the warning might be triggered by other modules that are loaded on those pages.

Will check on commons wiki production after deployment.

Change #1143657 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143657

Change #1141463 merged by jenkins-bot:

[mediawiki/extensions/UploadWizard@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141463

Change #1141466 merged by jenkins-bot:

[mediawiki/extensions/RevisionSlider@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141466

Change #1141467 merged by jenkins-bot:

[mediawiki/extensions/AdvancedSearch@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1141467

Change #1112312 abandoned by Dylsss:

[mediawiki/extensions/UploadWizard@master] Use browser native URL instead of deprecated mw.Uri

https://gerrit.wikimedia.org/r/1112312

Change #1143148 merged by jenkins-bot:

[mediawiki/core@master] Link mw.Uri migration guide in docs and log warnings

https://gerrit.wikimedia.org/r/1143148

Change #1151061 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@REL1_43] Link mw.Uri migration guide in docs and log warnings

https://gerrit.wikimedia.org/r/1151061

Change #1151062 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@REL1_44] Link mw.Uri migration guide in docs and log warnings

https://gerrit.wikimedia.org/r/1151062

Change #1151061 merged by jenkins-bot:

[mediawiki/core@REL1_43] Link mw.Uri migration guide in docs and log warnings

https://gerrit.wikimedia.org/r/1151061

Change #1151062 merged by jenkins-bot:

[mediawiki/core@REL1_44] Link mw.Uri migration guide in docs and log warnings

https://gerrit.wikimedia.org/r/1151062

Change #1151742 had a related patch set uploaded (by Simon04; author: Simon04):

[mediawiki/extensions/Flow@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1151742

Change #1146196 merged by jenkins-bot:

[mediawiki/extensions/MediaSearch@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1146196

Change #1119875 abandoned by Bartosz Dziewoński:

[mediawiki/extensions/Flow@master] Change deprecated use of mw.Uri

Reason:

Superseded by https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Flow/+/1151742 – sorry!

https://gerrit.wikimedia.org/r/1119875

Change #1151742 merged by jenkins-bot:

[mediawiki/extensions/Flow@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1151742

Assuming that the scope of this task is just extensions deployed on Wikimedia wikis, it looks like it's almost done. Everything listed in the description is resolved, but I did some more code-searching and found a few more results that were missed (or perhaps were added in the meantime). I'll update it, we'll fix them, and then I think this can be closed.

matmarex renamed this task from Use native URL API instead of mw.Uri to Use native URL API instead of mw.Uri in MediaWiki and WMF-deployed extensions.Jun 10 2025, 5:46 PM
matmarex updated the task description. (Show Details)

Change #1143631 merged by jenkins-bot:

[mediawiki/extensions/ReportIncident@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143631

I don’t think these are false positives.

  • JSDoc usage (all three cases) allows passing either strings or mw.Uri objects as parameters – if mw.Uri is removed, this makes no sense anymore, and {string|mw.Uri} should be replaced with either {string} (i.e. disallow passing objects) or {string|URL}. (I’m leaning towards the former, unless there are compelling reasons for keeping the complexity – the fact that this hasn’t come up while cleaning up extensions indicates that it’s rarely if at all used. On-wiki code hasn’t been updated yet, though, so it’s possible that this leniency is used there.)
  • The code comment also mentions mw.Uri in present tense. In this case, I’d definitely update it to URL, not remove: that casting – despite the function not being documented to accept objects – is probably there for a reason.

Change #1143634 merged by jenkins-bot:

[mediawiki/extensions/SearchVue@master] Use browser native URL instead of mw.Uri

https://gerrit.wikimedia.org/r/1143634

Change #1169747 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/extensions/CentralAuth@master] Replace mentions of mw.Uri in documentation and comments

https://gerrit.wikimedia.org/r/1169747

Change #1169748 had a related patch set uploaded (by Bartosz Dziewoński; author: Bartosz Dziewoński):

[mediawiki/core@master] Replace mentions of mw.Uri in documentation and comments

https://gerrit.wikimedia.org/r/1169748

Change #1169747 merged by jenkins-bot:

[mediawiki/extensions/CentralAuth@master] Replace mentions of mw.Uri in documentation and comments

https://gerrit.wikimedia.org/r/1169747

Change #1169748 merged by jenkins-bot:

[mediawiki/core@master] Replace mentions of mw.Uri in documentation and comments

https://gerrit.wikimedia.org/r/1169748

matmarex removed a project: Patch-For-Review.
matmarex updated the task description. (Show Details)

Looks all done! Thanks everyone.

Test wiki on Patch demo by EGardner (WMF) using patch(es) linked to this task was deleted:

https://patchdemo.wmcloud.org//wikis/be7e72f4e3/w/

Change #1146717 abandoned by Jdlrobson:

[mediawiki/core@master] Make mw.util.getParamValue use URLSearchParams

https://gerrit.wikimedia.org/r/1146717

Change #1143649 abandoned by Simon04:

[mediawiki/core@master] Add mw.util.extendParams to ease mw.Uri migration

https://gerrit.wikimedia.org/r/1143649