Hi Yoav,

Thanks for the input. Responses below and inline.


  *
Can you expand on how developers are supposed to use this? Would they need to 
add particular attributes that would let the browser know that the modules 
preloaded are CSS/JSON? Is there a way for developers to detect browser support 
for this? What happens if there isn't? Is there a risk of preloading modules 
that would then not be used?

Good point, there's no explainer and the summary was missing examples as to how 
this is supposed to be used, so this has been addressed with the new sentence 
"Style modules can be preloaded with <link rel="modulepreload" as="style" 
href="..."> and JSON modules can be preloaded with <link rel="modulepreload" 
as="json" href="...">." The "as" attribute is necessary to opt into these new 
supported module types, and absence of it defaults to a script modulepreload.

For this feature, developers don't need to detect support, as preloads are a 
hint for the renderer to preload for a later import, and they can't guarantee 
that a preload has completed by the time it's used. If the import was 
preloaded, it's a cache hit, and if not, it's a fetch - either way there's 
still an import, so there's no need to detect support. For browsers that don't 
support modulepreload, a <link rel="modulepreload"> tag does nothing, and for 
browsers that only support script modulepreloads (and not style or JSON), <link 
rel="modulepreload" as="style"> was considered invalid and will also do nothing 
(see 
wpt.live/preload/modulepreload-as.html<https://wpt.live/preload/modulepreload-as.html>).
 Note that some browsers do log to the console when invalid values are used for 
modulepreloads.

Preloading modules that are not used later wastes bandwidth, but there's no 
risk of site compat. Many browsers will also notify developers of this 
situation in developer tools - Chrome logs "The resource <URL> was preloaded 
using link preload but not used within a few seconds from the window's load 
event. Please make sure it has an appropriate `as` value and it is preloaded 
intentionally.".


  *
Links to the positions filed?

I updated the links inline in the original email, but they look similar to the 
old links, so it probably looked like I didn't update anything. Here they are 
separately: https://github.com/mozilla/standards-positions/issues/1342 and 
Support style and JSON as modulepreload destinations · Issue #603 · 
WebKit/standards-positions<https://github.com/WebKit/standards-positions/issues/603>.


-Kurt

________________________________
From: Yoav Weiss (@Shopify) <[email protected]>
Sent: Tuesday, January 27, 2026 11:57 PM
To: blink-dev <[email protected]>
Cc: Mike Taylor <[email protected]>; blink-dev <[email protected]>; 
Kurt Catti-Schmidt (SCHMIDT) <[email protected]>
Subject: Re: [EXTERNAL] Re: [blink-dev] Intent to Ship: JSON and style support 
for link rel=modulepreload



On Tuesday, January 27, 2026 at 8:34:32 PM UTC+1 Mike Taylor wrote:

Thanks - looks like we're just waiting for annevk (or another HTML editor) to 
merge https://github.com/web-platform-tests/wpt/pull/56617 and 
https://github.com/whatwg/html/pull/11981#issuecomment-3771477272?


On 1/23/26 12:35 p.m., Kurt Catti-Schmidt (SCHMIDT) wrote:
Hi Mike,

Thanks for taking a look. Standards Positions for WebKit and Mozilla have been 
filed and added to chromestatus. I also added the Finch feature name to 
chromestatus and updated the fields in the email below.

-Kurt

________________________________
From: Mike Taylor <[email protected]><mailto:[email protected]>
Sent: Thursday, January 22, 2026 6:58 PM
To: Kurt Catti-Schmidt (SCHMIDT) 
<[email protected]><mailto:[email protected]>
Cc: blink-dev <[email protected]><mailto:[email protected]>
Subject: [EXTERNAL] Re: [blink-dev] Intent to Ship: JSON and style support for 
link rel=modulepreload


On 1/22/26 3:56 p.m., Chromestatus wrote:

Contact emails
[email protected]<mailto:[email protected]>

Explainer
No information provided

Can you expand on how developers are supposed to use this? Would they need to 
add particular attributes that would let the browser know that the modules 
preloaded are CSS/JSON?
Is there a way for developers to detect browser support for this? What happens 
if there isn't? Is there a risk of preloading modules that would then not be 
used?

Good point, there's no explainer and the summary was missing examples as to how 
this is supposed to be used, so this has been addressed with the new sentence 
"Style modules can be preloaded with <link rel="modulepreload" as="style" 
href="..."> and JSON modules can be preloaded with <link rel="modulepreload" 
as="json" href="...">." The "as" attribute is necessary to opt into these 
module types.

For this feature, developers don't need to detect support, as preloads are a 
hint for the renderer to preload for a later import. If the import was 
preloaded, it's a cache hit, and if not, it's a fetch - either way there's 
still an import statement, so there's no need to detect support. For browsers 
that don't support modulepreload, a <link rel="modulepreload" as="style"> does 
nothing, and for browsers that only support script modulepreloads, <link 
rel="modulepreload" as="style"> is considered invalid and will also do nothing 
(see 
wpt.live/preload/modulepreload-as.html<https://wpt.live/preload/modulepreload-as.html>).
 Note that some browsers do log to the console when invalid values are used for 
modulepreloads, but this won't break any sites.

Preloading modules that are not used later wastes bandwidth, but there's no 
risk of site compat. Many browsers will also notify this in developer tools - 
Chrome logs "The resource <URL> was preloaded using link preload but not used 
within a few seconds from the window's load event. Please make sure it has an 
appropriate `as` value and it is preloaded intentionally.".



Specification
https://github.com/whatwg/html/pull/11981

Summary
Adds support for JSON and style module types as <link rel="modulepreload"> 
destinations. <link rel="modulepreload"> is already supported in Chromium (see 
https://chromestatus.com/feature/5762805915451392), but it currently only 
supports preloading script-like module scripts. This feature addresses a 
functionality gap, as JSON and CSS module scripts are supported in Chromium 
elsewhere but are not supported as <link rel="modulepreload"> destinations. 
Style modules can be preloaded with <link rel="modulepreload" as="style" 
href="..."> and JSON modules can be preloaded with <link rel="modulepreload" 
as="json" href="...">.

Blink component
Blink>DOM<https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3EDOM%22>

Web Feature ID
modulepreload<https://webstatus.dev/features/modulepreload>

Motivation
Style and JSON are fully supported as modules in Chromium (see 
https://chromestatus.com/feature/5948572598009856 and 
https://chromestatus.com/feature/5749863620804608), but <link 
rel=modulepreload> only supports preloading script modules. This feature 
addresses a gap in the platform. In addition, supporting "style" as a 
modulepreload destination addresses a pain point identified when using external 
files with Declarative CSS Modules (see 
https://chromestatus.com/feature/4790543041298432).

Initial public proposal
https://github.com/whatwg/html/issues/10233

TAG review
No information provided

TAG review status
Not applicable

Risks


Interoperability and Compatibility
No information provided

Gecko: No signal (Support style and JSON as modulepreload destinations · Issue 
#1342 · 
mozilla/standards-positions<https://github.com/mozilla/standards-positions/issues/1342>)

WebKit: No signal Support style and JSON as modulepreload destinations · Issue 
#603 · 
WebKit/standards-positions<https://github.com/WebKit/standards-positions/issues/603>
Issues don't count as formal position requests - can we please file them? See 
https://www.chromium.org/blink/launching-features/wide-review/#signal-process

Links to the positions filed?

I updated the links inline in the original email, so it probably looks like I 
missed it. Here they are: 
https://github.com/mozilla/standards-positions/issues/1342 and Support style 
and JSON as modulepreload destinations · Issue #603 · 
WebKit/standards-positions<https://github.com/WebKit/standards-positions/issues/603>.



Web developers: No signals

Other signals:

Ergonomics
This feature will increase ergonomics with CSS Module Scripts (see 
https://chromestatus.com/feature/5948572598009856) and Declarative CSS Module 
Scripts (see https://chromestatus.com/feature/4790543041298432). No known 
ergonomics risks.

Activation
No polyfill is necessary, as a module import will succeed regardless of whether 
it's preloaded or not. In unsupported browsers, it will do nothing.

Security
No security risks.

WebView application risks

Does this intent deprecate or change behavior of existing APIs, such that it 
has potentially high risk for Android WebView-based applications?

No information provided


Debuggability
Basic support via the Network tab in DevTools, which displays preloaded 
resources from this feature.

Will this feature be supported on all six Blink platforms (Windows, Mac, Linux, 
ChromeOS, Android, and Android WebView)?
Yes

Is this feature fully tested by 
web-platform-tests<https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?
Yes
https://github.com/web-platform-tests/wpt/pull/56617

Flag name on about://flags
No information provided

Finch feature name
ModulePreloadStyleJson

Non-finch justification
This is not a new feature, just an expansion of an existing feature, so Finch 
is not necessary.
Per 
https://chromium.googlesource.com/chromium/src/+/HEAD/docs/flag_guarding_guidelines.md#When-is-a-flag-required,
 we should land this change behind a feature flag, in case things go 
unexpectedly wrong. Can you do that?
Done via ModulePreloadStyleJson

Rollout plan
Will ship enabled for all users

Requires code in //chrome?
False

Tracking bug
https://issues.chromium.org/issues/466888680

Measurement
There is already a UseCounter for <link type=modulepreload> (see 
https://chromestatus.com/metrics/feature/timeline/popularity/2232). I plan on 
adding an additional UseCounter for style module preloads.

Estimated milestones
Shipping on desktop
146
Shipping on Android
146
Shipping on WebView
146


Anticipated spec changes

Open questions about a feature may be a source of future web compat or interop 
issues. Please list open issues (e.g. links to known github issues in the 
project for the feature specification) whose resolution may introduce web 
compat/interop risk (e.g., changing to naming or structure of the API in a 
non-backward-compatible way).

No information provided

Link to entry on the Chrome Platform Status
https://chromestatus.com/feature/5202661416763392?gate=6500470023651328

This intent message was generated by Chrome Platform 
Status<https://chromestatus.com/>.
--
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to 
[email protected]<mailto:[email protected]>.
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69728ee9.050a0220.19f748.008b.GAE%40google.com<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69728ee9.050a0220.19f748.008b.GAE%40google.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/IA1PR00MB2537349F2C6F3D8223AA2D8FD691A%40IA1PR00MB2537.namprd00.prod.outlook.com.

Reply via email to