← Chrome 152 reference

v152 · stepped rollout · origin trial · removal

Deprecate and remove XSLT

Baseline widely available — removal in progress

  • Chrome · deprecated 143, removal planned 158
  • Edge · follows Chromium
  • Firefox · removal planned (Gecko supportive)
  • Safari · removal planned (WebKit cautiously supportive)

The webstatus.dev xslt feature is Baseline widely available (high since 2018-01-29) — and is now being removed from the web platform: the milestone=152 listing files this feature under both “Stepped rollout” and “Origin trial” (a deprecation trial), verified 2026-07-29. All three engine projects have indicated plans to remove XSLT, per the Chrome for Developers removal guide.

Chrome is deprecating and removing client-side XSLT 1.0 support — both the XSLTProcessor JavaScript API and the <?xml-stylesheet type="text/xsl" ?> processing instruction — because the aging libxslt C library is a memory-safety attack surface that processes untrusted web content, while XSLT usage has fallen to roughly 0.02% of page loads. Removal from Stable is planned for Chrome 158 (Nov 17, 2026); sites can buy migration time with the “XSLT” deprecation origin trial (152–175) or the XSLTEnabled enterprise policy, both of which stop working in Chrome 176 (Aug 17, 2027).

Removal in progress — act before Chrome 158

XSLT is deprecated as of Chrome 143 (deprecation warnings in the console and Lighthouse) and is already disabled by default on Canary/Dev/Beta. If your site or product depends on it:

Source: Chrome for Developers — Removing XSLT for a more secure browser; about_flags.cc; ChromeStatus API record.

at a glance

What it isThe deprecation and staged removal of client-side XSLT 1.0 from Chrome (and, per their stated plans, from Gecko and WebKit): the XSLTProcessor JS API plus XSLT processing instructions
Milestone listingChrome 152 — “Stepped rollout” and “Origin trial” (the deprecation trial goes live in 152; listing verified 2026-07-29; the listing is authoritative per gendn invariant #2)
Key datesDeprecated 143 (Dec 2, 2025) · pre-stable disabled from 148 · deprecation trial + enterprise policy from 152 (Aug 25, 2026) · Stable removal 158 (Nov 17, 2026) · trial/policy end 176 (Aug 17, 2027) — full timeline
Removed surfaceXSLTProcessor interface (constructor + 8 methods) · <?xml-stylesheet type="text/xsl" ?> PI processing
NOT removedXML itself, DOMParser/XMLSerializer, <?xml-stylesheet type="text/css" ?> (XML+CSS styling stays), XPath (document.evaluate)
Runtime featureXSLT in runtime_enabled_features.json5: status stable, public: true, origin_trial_feature_name: "XSLT", origin_trial_type: "deprecation"; toggle at chrome://flags/#xslt
UsageXSLTProcessor: ~0.01–0.1% of page loads (avg ~0.05%); XSL processing instructions: ~0.001% — above the 0.001% deprecation threshold, justified on security grounds
Vendor positionsGecko supportive · WebKit cautiously supportive · web developers vocal, negative
ChromeStatus4709671889534976 — Deprecate and remove XSLT (Blink component Blink>XML, owner masonfreed@google.com)
Source: chromestatus.com/feature/4709671889534976; developer.chrome.com removal guide; runtime flag record.

reference routes

why it is being removed

Three converging reasons, per the removal guide and the Intent to Deprecate and Remove:

Of ~220 surveyed sites using XSLTProcessor, roughly 72% still function with XSLT disabled (many have JS fallbacks such as Saxonica); of the visibly broken remainder, the polyfill restored functionality in 82% of cases — the rest mostly hit CORS limits (details).

Source: developer.chrome.com removal guide; ChromeStatus record (motivation, interop risks).

what exactly is removed

ComponentFate
XSLTProcessor class (new XSLTProcessor() and its 8 methods)Removed. IDL is gated [RuntimeEnabled=XSLT]; when the feature is off, window.XSLTProcessor is undefined
<?xml-stylesheet type="text/xsl" href="..."?> (and application/xslt+xml)Removed. The XML document renders untransformed; Chrome shows a warning banner linking to an extension search
<?xml-stylesheet type="text/css" ?>Kept. Styling raw XML with CSS is explicitly not part of the removal
XML parsing (DOMParser, XMLSerializer, XMLHttpRequest.responseXML)Kept. libxml2 is separately being replaced by a Rust XML parser, transparently to developers (gendn covers that at v151 XML parsing in Rust)
XPath (document.evaluate)Kept. Not part of this removal
Source: developer.chrome.com removal guide (“What is being removed?”, “XML + CSS is not being removed”); xslt_processor.idl.

deprecation and removal timeline

The current plan (per the ChromeStatus record, updated 2026-07-15, and the removal guide). The original Intent (Oct 2025) proposed removal in M155 with trial/policy ending M164; the timeline was extended after feedback — the dates below are the extended, current ones. One source discrepancy is recorded honestly: the removal guide says pre-stable disabling began in M145 Canary while the ChromeStatus experiment plan says M148 (Mar 10, 2026 Canary).

MilestoneDateWhat happens
Chrome 142Oct 28, 2025Early-warning console messages added
Chrome 143Dec 2, 2025Official deprecation — deprecation warnings appear in the console and in Lighthouse
Chrome 145/148Dec 2025 / Mar 10, 2026 (Canary)Canary, Dev, and Beta releases begin disabling XSLT by default as an early warning (guide says M145; ChromeStatus stage says M148)
Chrome 146Mar 10, 2026XSLTEnabled enterprise policy goes live for testing — lets enterprises test disabling early and keep XSLT past the removal date
Chrome 152Aug 25, 2026“XSLT” deprecation origin trial goes live (this is why the feature is in the v152 listing) — sites register to keep XSLT working past the removal date
Chrome 158Nov 17, 2026XSLT stops functioning on Stable for everyone except origin-trial and enterprise-policy participants
Chrome 176Aug 17, 2027Origin trial and enterprise policy stop functioning — XSLT disabled for all users

As a compact checklist:

142 (2025-10-28)  console early warnings
143 (2025-12-02)  DEPRECATED — console + Lighthouse warnings
145/148           pre-stable channels disable XSLT by default
146 (2026-03-10)  XSLTEnabled enterprise policy live for testing
152 (2026-08-25)  "XSLT" deprecation origin trial live (152-175)
158 (2026-11-17)  REMOVED from Stable (trial/policy holders excepted)
176 (2027-08-17)  trial + policy end — disabled for everyone
Source: developer.chrome.com removal guide (timeline); ChromeStatus API record, stage experiment goals; blink-dev — Request for Deprecation Trial (Jun 2026).

how to detect XSLT usage

new ReportingObserver((reports, observer) => {
  reports.forEach((report) => {
    if (report.body.id === "XSLT") {
      // XSLT usage was detected — report it back here.
    }
  });
}, { types: ["deprecation"], buffered: true }).observe();
MechanismWhere it works
Console + Lighthouse deprecation warningsChrome/Edge 143+ (other engines may coordinate their own warnings — proposed, not confirmed)
ReportingObserver deprecation report "XSLT"Chromium browsers supporting the Reporting API
typeof XSLTProcessor existence checkAll browsers (a plain feature detect)
Legacy Technology ReportChrome Enterprise managed fleets
Source: developer.chrome.com removal guide ("How to detect usage of XSLT"); xslt_processor.idl.

migration paths

In rough order of long-term preference, per the removal guide:

PathWhen to choose itContract
Server-side transformationYou control the server and the XML pipelineRun the XSLT on the server, ship rendered HTML; or migrate endpoints to JSON and render client-side with JS/DOM
JSON + JavaScript renderingLong-term rewrite; the modern toolchainFetch JSON, build DOM with JS or a framework — the actively-maintained, sandboxed replacement for the client-side-transform use case
SaxonJS (Saxonica)You need real, current XSLT in the browserFull XSLT 3.0 (and upcoming 4.0) in JavaScript — far beyond the browsers' frozen 1.0
XSLT polyfillFastest stopgap for existing codeWASM build of libxslt+libxml2; full XSLTProcessor replacement + automatic PI handling via one added <script> line — see API usage and PI usage. Known limits: CORS on xsl:include/xsl:import/document() fetches, synchronous methods fail for those cases, UTF-8 only, no-quirks-mode rendering difference. Published on npm as xslt-polyfill
XSLT polyfill browser extensionYou cannot modify the source (e.g. unmodifiable embedded devices)Applies the polyfill to raw XML pages with XSLT PIs or XSLTProcessor calls, user-side

Use-case guidance from the removal guide:

Source: developer.chrome.com removal guide ("How to migrate", "Specific use cases"); xslt_polyfill README (implementation, limitations).

standards discussion and vendor positions

The standards venue is whatwg/html#11523 — “Should we remove XSLT from the web platform?” (opened Aug 2025, labeled removal/deprecation, stage: 3 — the WHATWG stage indicating broad agreement to proceed). Much of XSLT was never fully specified: the WHATWG DOM Standard carries a minimal §9 XSLT / XSLTProcessor section whose complete definition is still tracked as open work in whatwg/dom#181, and Chromium's own IDL comments that Gecko's interface definition is the closest thing to a spec.

Existing WPT coverage under wpt.fyi/results/dom/xslt will need to change or be removed as engines remove the feature (per the ChromeStatus record).

Source: whatwg/html#11523; ChromeStatus record (vendor views, WPT description).

examples

Feature-detecting the removal and falling back to the polyfill (full contract on the XSLTProcessor page):

if (typeof XSLTProcessor === "undefined") {
  // Native XSLT is gone (Chrome 158+, or pre-stable channels now).
  // Load the WASM polyfill, which restores window.XSLTProcessor:
  await import("xslt-polyfill");
}
const processor = new XSLTProcessor();
processor.importStylesheet(xsltDoc);
const fragment = processor.transformToFragment(xmlDoc, document);

Migrating a PI-styled XML document with one line (details on the processing-instruction page):

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="demo.xsl"?>
<page>
  <script src="xslt-polyfill.min.js" xmlns="http://www.w3.org/1999/xhtml"></script>
  ...content...
</page>
Live example from the Chrome Platform Showcase (route HEAD-checked 200, 2026-07-29). Related concepts: XSLT polyfill explorer, RSS without XSLT, OPML importer.Source: chrome-platform-showcase
Source: polyfill usage per the xslt_polyfill README; detection snippet per the removal guide.

browser compatibility

XSLT 1.0 is Baseline widely available (webstatus xslt, high since 2018-01-29). BCD support for api.XSLTProcessor as of 2026-07-29 — note that BCD has not yet recorded the deprecation (status.deprecated: false); the removal columns below come from the ChromeStatus record and removal guide, not BCD:

BrowserXSLT support (BCD)Removal plan
Chrome1Deprecated 143; Stable removal 158 (Nov 17, 2026); trial/policy escape until 176
Edge12Follows Chromium
Firefox1Removal planned — Gecko supportive; no dated plan on the record
Safari3.1Removal planned — WebKit cautiously supportive (waits for one engine to remove first)
Source: BCD api.XSLTProcessor.json; webstatus.dev xslt feature; whatwg/html#11523.

specifications

DocumentStatus
WHATWG DOM Standard — §9 XSLT (XSLTProcessor)Living standard; minimal IDL-only section — complete definition still open (whatwg/dom#181). Removal discussion at whatwg/html#11523 (stage 3)
XSL Transformations (XSLT) Version 1.0W3C Recommendation, Nov 16, 1999 — the transformation language itself; unchanged in browsers since
Associating Style Sheets with XML documentsW3C Recommendation — the xml-stylesheet PI grammar (CSS use remains; XSLT use is being removed)
Removing XSLT for a more secure browserChrome for Developers guide (Oct 29, 2025) — the canonical removal plan, timeline, and migration documentation
Source: documents as linked, fetched 2026-07-29.

see also