#1192: Incubation: speculation rules `form_submission` field for prerendering
Discussions
Log in to see TAG-private discussions.
Discussed
Feb 9, 2026 (See Github)
Xiaocheng to take a look.
Discussed
Feb 23, 2026 (See Github)
XH: This is a proposal from Chrome team. Major goal is to support prerendering of form submission navigations. e.g. search results page. This is not covered by existing spec rules API. Motivation makes a lot of sense but I have some complaints, first is non technical. I don't see enough dev signals. They refernce Chromium bug with only 2 stars. Then, regarding their approach, don't see enough justification to add form submission. First reason they give is it allows Chrome to bypass internal checks, don't think this is valid. Second reason is this allows spec rules to avoid waste which I also don't think is good motivation. It's ok if you allow developers to write [missed]. Third point is I do think [missed]. Last thing is speculation rules for form submission, we need to be much more careful because the URL contains user input. E.g. we don't want to do prerender each time the user types. Don't see much consideration of that. I also have a question regarding this part, because it can be considered part of UA duties, but a naive implementation [missed]. Must this actually be specified, or is this something a UA can use to differentiate?
JY: I think this kind of thing should be specified. Otherwise there might be extra fetches if not implemented. We can agree on what the first implementation does, or make changes, but they should start by writing down what they're doing. Separately, this is good feedback.
MC: Haven't looked at fallback model. It adds that new property there. That was the only thing that jumped out at me.
JY: I think it's not described.
MC: It's a dictionary so in old browsers would be ignored so you'd still fetch everything.
JY: Might not fetch it because there wouldn't be links, would be a form action. As Xiaocheng pointed out, they wouldn't actuall prerender the form actions. Might still be worth asking them to write that down in the explainer. Xiaocheng are you good to ac Marcos' concern and send?
XH: About the fallback model. I don't see any problems with that. Re: Marcos' concdrn, in my understanding, speculation rules don't support form submission navigation.
MC: If parser who doesn't know about these, does it drop the prop or the entire rule? So they have two prerender properties, is really confusing.
JY: In example it's not the same.
MC: If you look at the object, it's two different things.
JY: Won't work
MC: Yeah
JY: I think form_submission=true won't break on browsers that won't recognize it.
MC: My question still holds, it's still weird.
JY: I'm sure that's an accident, you can't make a diciontary like that.
XH: Still a good question to ask. My gut feeling is it'll be dropped if not recognized. I also feel like it probably doesn't matter because form submission is unlikely to appear
MC: Still feels weird because you've got prerender, form submission, a bunch of URLs, if they made a mistake, how do they say to do form submission without a bunch of URLs? Something is weird here.
JY: They've also done something weird in the HTML spec. Don't know that we need to comment on this but hte HTML spec says the ruleset the values corresponding to the rulesset must be valid rules, must not inlcude this key, so you must violate the rule in HTML to use this rule thing. But this kind of MUST is the wrong style of rule in the spec, we constrain the UA, not the document, so there must be another rule that says what to do.
XH: Just noticed Marcos' point, won't be a valid object
JY: Actual parsing says skip the rule if it's invalid according to the rules. It'll skip anything with the form submission field. So not dictionary parsing, it's their own thing. I still feel Xiaocheng's comment is the right one to send.
Comment by @xiaochengh Feb 25, 2026 (See Github)
Hi @robertlin-chromium, the TAG discussed this at a Breakout. Allowing search result pages to be prerendered looks like an important use case to us, and we'd like to see more work in this direction. We also have the following comments.
Security and privacy
We found that this feature requires more security and privacy considerations than the existing speculation rules. Form data usually contains user input, and therefore, allowing form submission navigations to be prefetched/prerendered introduces a new way to expose user's sensitive information. The situation can be even worse if autofilled data is exposed. We'd like to see the privacy and security considerations section reworked.
API design
-
It's unclear why the
form_submissionfield is needed. The alternatives considered section gives two reasons: (1) to lift certain internal restrictions of Chrome, and (2) to avoid resource wasting. Neither requires spec changes as they can be fixed or optimized by the UA internally. -
Backward compatibility design. When a UA that doesn't support this feature parses a rule with a
form_submissionfield, how does it fall back? Does it ignore the field as treat it as a normal rule, or discard the rule completely? -
The find matching links algorithm currently only covers
<a>and<area>, and we need to augment it to cover form submission URLs. This is not mentioned by the explainer.
Eagerness
Unlike <a> and <area>, whose URLs are pretty much static, form submission URLs often include user input and are much more dynamic. The eagerness of such speculative loads must be carefully designed, otherwise the feature may either lead to huge resource waste or little effect.
For example, we don't want to prerender /search?q=f and /search?q=fo while the user is typing foo in the search field; but if we wait too long after the user finishes typing, they may have already hit the "Search" button and it's too late for us to start prerendering.
Since the eagerness strategy can be critical to the success of the feature, we'd like the spec to include more details instead of leaving everything as UA implementation internals.
Minor comments regarding the explainer
- The example, with duplicate
"prerender"keys, is not a valid JSON as required by the spec. We'd like to see a better example. - https://issues.chromium.org/issues/346555939 is filed by the Chrome team with only 2 stars. Is there a stronger reference for developer support?
Comment by @robertlin-chromium Mar 4, 2026 (See Github)
Hello TAG reviewer, thanks for the comments. About the concerns:
Security and privacy As noted in the explainer, our intention is not to automatically speculate such navigations, for some of the reasons you’ve given and others. In short the heuristics of when to speculate are not as clear as they are for links. The current scope of the feature therefore is to simply allow such prerenders to be used if they are manually triggered by developers.
So a developer could trigger prerenders with this new parameter based on their own heuristics (e.g. when typing in an input field is paused, when a search field is tabbed out of, when the Submit button is hovered… etc.) and this feature just adds the ability of any manually triggered prerenders to be used when the form is submitted. We have examples of developers attempting this and then being surprised that the prerender is not used.
We have had requests to automatically trigger form-based speculations, like we do for other speculations but for the reasons discussed here, this is more complicated than for links and upon speaking to that developer they understand why this is out of scope. If we ever introduced such functionality that would be a new feature and we would raise a new request for review with TAG.
Therefore, since there is no auto-triggering of speculations, we foresee no new security or privacy issues that are not already present with developer-triggered fetch requests.
API design
The (2) is the case that CSP policy form-action: ‘none’ can be set, and under the current design prerendering will always be prepared as non-form navigation, so upon prerender activation the prerendered result needs to be dropped, and this causes a waste of resource. Also we notice that in the existing spec https://html.spec.whatwg.org/multipage/browsing-the-web.html#populating-a-session-history-entry step 5.4 (should navigation response to navigation request of type in target be blocked by Content Security Policy) is run after navigation starts while CSP check for form-action directive is pre-navigation. Without this field, prerendering will always be prepared as non form submission and will actually break the current spec. Prerender activation needs to be started to check whether the prerendered page is eligible. For 1) this is therefore likely to affect all browsers, not just Chrome but yes there are other, potentially Chrome-specific, reasons why we are proposing this approach but there is precedence with another field to lift a Chromium internal limitation before. https://github.com/w3ctag/design-reviews/issues/931 .
As per spec, rules with new params should be dropped if params are not in the table. As this is a progressive enhancement such UAs will not benefit, it also will not waste any prerenders since they will not be initiated.
The find matching links algorithm is for document rules, and we will only support form_submission to be used for list rules, which specify urls explicitly.
Eagerness The rules will be injected into the page manually by the developer on their own heuristics (as the user types into a field, or on hovering the submit/search button). So it’s not “UA implementation internals”. We can add recommendations/warnings to the spec for developers as to when/how to use this, but this feels more appropriate for documentation/guidance than the specification.
Note, in terms of the Speculation Rules eagerness field, this will technically use the immediate eagerness value. The other values such as eager, moderate or conservative are for automatic triggering of links in the document which, as per above, are out of scope.
Minor comments regarding the explainer Thanks for noticing that. It is fixed by https://github.com/WICG/nav-speculation/pull/427 We have more signals from places like WebPerf Slack (12-14 +1’s) and private conversations. We can try to get people to be more public about this if necessary.
Discussed
Mar 16, 2026 (See Github)
(Skipped.)
OpenedFeb 12, 2026
Explainer
https://github.com/WICG/nav-speculation/blob/main/prerendering-form-submission.md
The explainer
Where and by whom is the work is being done?
Feedback so far
You should also know that...
こんにちは TAG-さん! I'm requesting a TAG review of a new field
<!-- Content below this is maintained by @w3c-tag-bot -->form_submissionfor speculation rules prerendering. This extends speculation rules syntax to allow developers to specify the form_submission field for prerender.Track conversations at https://tag-github-bot.w3.org/gh/w3ctag/design-reviews/1192