← Deprecate and remove XSLT

v152 · origin trial · enterprise policy · escape hatches

“XSLT” deprecation trial & XSLTEnabled

Chrome-only escape hatches — time-boxed to Chrome 176

  • Chrome · trial + policy from 152
  • Edge · enterprise policy applicable (Chromium)
  • Firefox · n/a
  • Safari · n/a

Both mechanisms end in Chrome 176 (Aug 17, 2027) per the removal guide — they buy migration time, they do not preserve the feature. ChromeStatus: 4709671889534976 — Deprecate and remove XSLT.

Two sanctioned mechanisms keep XSLT working past the Chrome 158 removal: the “XSLT” deprecation origin trial (a reverse trial — a token that re-enables a removed feature for your origin, Chrome 152–175) and the XSLTEnabled enterprise policy (admin-deployed, same window). This page documents both contracts: registration, token serving, scope, and end-of-life.

Time-boxed by design — plan the real migration

The trial and policy stop functioning in Chrome 176 (Aug 17, 2027), after which XSLT is disabled for all users. Registering is cheap; migrating is the actual work — see migration paths.

the “XSLT” deprecation origin trial

Trial nameXSLT (origin trials console; ChromeStatus origin-trial id 1902207892610613249)
TypeDeprecation trial (origin_trial_type: "deprecation" in the runtime flag record) — a token restores the disabled feature instead of enabling a new one
WindowChrome 152–175 (desktop, Android, WebView) — live from Aug 25, 2026; ends before the final M176 removal
EffectBoth removed surfaces return on the served origin: window.XSLTProcessor is present again and XSLT processing instructions run
Third-party tokensSupported (origin_trial_allows_third_party: true) — embedders can enable XSLT for their embedded contexts
Insecure originsAllowed (origin_trial_allows_insecure: true) — notable because intranet/embedded XML devices often run plain HTTP
Ownermasonfreed@google.com; feedback template on issues.chromium.org

registration and serving

  1. Register your origin for the XSLT trial at the origin trials console (or for third-party use, request a third-party token). Registration opened ahead of M152 — the Request for Deprecation Trial (Jun 2026) deliberately runs the trial early so sites can test before M158.
  2. Serve the token on every page that needs XSLT, either as a meta tag or an HTTP header:
<meta http-equiv="origin-trial" content="TOKEN_FROM_DEVELOPER.CHROME.COM/ORIGINTRIALS">

# or, as a response header:
Origin-Trial: TOKEN_FROM_DEVELOPER.CHROME.COM/ORIGINTRIALS

For local development, the equivalent is the feature flag rather than a token: chrome://flags/#xslt set to Enabled, or launch with --enable-blink-features=XSLT (the runtime feature is public: true).

Source: ChromeStatus API record, origin-trial stage; runtime flag record; blink-dev — Request for Deprecation Trial.

the XSLTEnabled enterprise policy

PolicyXSLTEnabled (Chrome Enterprise policy list)
AvailableLive for testing from Chrome 146 (Mar 10, 2026) per the removal guide — before the M158 removal, so enterprises can test both states
Type and defaultBoolean policy; template default: null means unset, not enabled or disabled. With no policy, the browser default and field trials determine availability.
Statestrue explicitly enables XSLT; false explicitly disables it; unset (null in the template) follows browser defaults and field trials. The policy covers both XSLTProcessor and XSL processing instructions.
Supported platformsTemplate supported_on: chrome.*:146-, chrome_os:146-, android:146-, webview_android:146-. Dynamic refresh and per-profile configuration are supported.
EffectLets an enterprise keep XSLT enabled past the removal date for managed browsers; also usable to test the disabled state early
End of lifeThe current Chrome removal guide plans Chrome 176 (Aug 17, 2027) for both mechanisms. The machine-readable policy template still says removal in M164 in its description (checked 2026-10-08); these primary sources disagree. Re-check before relying on the policy beyond M164.
DiscoveryPair with the Legacy Technology Report to find deprecated-feature usage across the fleet before deciding where to set the policy

Deployment uses the standard Chromium policy mechanisms — for example:

# Linux: /etc/opt/chrome/policies/managed/xslt.json
{ "XSLTEnabled": true }

# Windows (registry): HKLM\Software\Policies\Google\Chrome
"XSLTEnabled" = 1 (DWORD)

# macOS: defaults write com.google.Chrome XSLTEnabled -bool true
Source: Chrome Enterprise policy definition data (XSLTEnabled, id 1429; schema, default, platforms and description); removal guide (timeline); rendered policy list.

error and edge behavior

SituationBehavior
Token expired or for the wrong originStandard origin-trial handling: the feature stays disabled — no XSLT-specific error surface is defined by the sources (2026-07-29)
Token served only on some pagesTrial state is per-document: pages without the token see the removed behavior (raw XML / no XSLTProcessor)
Trial window ends (M176)Tokens and the XSLTEnabled enterprise policy stop being honored; XSLT is disabled for everyone — there is no second extension on the record
Policy vs trial conflictNot specified in the sources; both independently restore the feature, and the sources define no precedence (recorded as an open question in the critique)
Source: removal guide; ChromeStatus record.

browser compatibility

BrowserEscape hatchWindow
ChromeDeprecation trial + XSLTEnabled policy152–175 (both end in 176)
EdgeChromium-based; the enterprise policy applies — no separate statement on the recordFollows Chromium
FirefoxNone on the record—
SafariNone on the record (WebKit's position mentions possibly matching a reverse-trial origin list)—
Source: ChromeStatus record; WebKit position comment.

security and privacy

Source: runtime flag record; removal guide.