{"id":49004,"date":"2025-08-21T14:30:03","date_gmt":"2025-08-21T18:30:03","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=49004"},"modified":"2025-11-18T11:10:00","modified_gmt":"2025-11-18T16:10:00","slug":"removing-xslt-from-the-web-platform","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2025\/08\/21\/removing-xslt-from-the-web-platform\/","title":{"rendered":"Removing XSLT From the Web Platform"},"content":{"rendered":"<p><a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11523\">Mason Freed<\/a> (<a href=\"https:\/\/news.ycombinator.com\/item?id=44952185\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/github.com\/whatwg\/html\/issues\/11523\"><p>XSLT v1.0, which all browsers adhere to, was <a href=\"https:\/\/www.w3.org\/TR\/xslt-10\/\">standardized in 1999<\/a>. In the meantime, XSLT has evolved to v2.0 and v3.0, adding features, and growing apart from the old version frozen into browsers. This lack of advancement, coupled with the rise of JavaScript libraries and frameworks that offer more flexible and powerful DOM manipulation, has led to a significant <a href=\"https:\/\/chromestatus.com\/metrics\/feature\/timeline\/popularity\/78\">decline<\/a> in the use of client-side XSLT. Its role within the web browser has been largely superseded by JavaScript-based technologies such as JSON+React. The underlying libraries that browsers use to process these transformations (e.g. <a href=\"https:\/\/github.com\/GNOME\/libxslt\">libxslt<\/a> in Chromium) are complex, aging C\/C++ codebases. This type of code is notoriously susceptible to memory safety vulnerabilities like buffer overflows, which can lead to arbitrary code execution. Because client-side XSLT is now a niche, rarely-used feature, these libraries receive far less maintenance and security scrutiny than core JavaScript engines, yet they represent a direct, potent attack surface for processing untrusted web content. Indeed, XSLT is the source of several recent <a href=\"https:\/\/www.offensivecon.org\/speakers\/2025\/ivan-fratric.html\">high-profile security exploits<\/a> that continue to put browser users at risk.<\/p><p>For these reasons, I&rsquo;d like to raise the question of whether we should deprecate and remove XSLT from the web standard.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@Edent\/115048990801167629\">Terence Eden<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@Edent\/115048990801167629\"><p><a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11523\">August 1st<\/a> - Googler asks the community if XSLT should be removed from the HTML living standard.<\/p><p>Respondents overwhelmingly reject the suggestion.<\/p><p><a href=\"https:\/\/issues.chromium.org\/issues\/435623334#comment4\">August 6th<\/a> - Google starts work on removing XSLT from Chrome.<\/p><p><a href=\"https:\/\/github.com\/whatwg\/html\/pull\/11563\">August 14th<\/a> - Googler sends PR to remove XSLT from the standard.<\/p><p>Like, I don&rsquo;t have a particular view of whether this is a good idea or not. But these sham community engagement exercises piss me off.<\/p><\/blockquote>\n\n<p>Most of the critical comments got marked as off-topic or duplicates, and then the bug was locked.<\/p>\n\n<p><a href=\"https:\/\/news.ycombinator.com\/item?id=44953117\">spankalee<\/a>:<\/p>\n<blockquote cite=\"https:\/\/news.ycombinator.com\/item?id=44953117\"><p>This isn&rsquo;t Chrome doing this unilaterally. [&#8230;] representatives from every browser are supportive and there have been discussions about this in standards meetings [&#8230;] You can see from the WHATNOT meeting agenda that it was a Mozilla engineer who brought it up last time.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/wok.oblomov.eu\/tecnologia\/google-killing-open-web\/\">Oblomov<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=44949857\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/wok.oblomov.eu\/tecnologia\/google-killing-open-web\/\"><p>What I want to talk about in this article is the war Google has been waging on <a href=\"http:\/\/en.wikipedia.org\/wiki\/XML\">XML<\/a> for over a decade,\nwhy it matters that they&rsquo;ve finally encroached themselves enough to get what they want,\nand what we can do to fight this.<\/p><p>[&#8230;]<\/p><p>Just as <a href=\"https:\/\/www.citationneeded.news\/curate-with-rss\/\">RSS feeds are making a comeback<\/a>\nand users are starting to grow skeptic of the corporate silos,\nGoogle <a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11523\" title=\"Should we remove XSLT from the web platform?\">makes another run to kill XSLT<\/a>,\nthis time using the WHATWG as a sock puppet.\nParticularly of note, <a href=\"https:\/\/issues.chromium.org\/issues\/435623334\" title=\"Deprecate and remove XSLT\">the corresponding Chromium issue<\/a>\nwas created <em>before<\/em> the WHATWG Github issue.\nIt is thus to no one&rsquo;s surprise that the <em>overwhelmingly negative<\/em> reactions to the issue,\nthe detailed explanations about why XSLT is important,\nhow instead of removing it browsers should move to more recent versions of the standard,\nand even the indications of existing better and more secure libraries to base such new implementations on,\n<em>every<\/em> counterpoint to the removal\nhave gone <em>completely<\/em> ignored.<\/p>\n<p>[&#8230;]<\/p>\n<p>For example, he omitted that two new major versions of XSLT have been released since\nthis technology was first implemented in the browsers: XSLT&nbsp;2 in 2007, and XSLT&nbsp;3 in 2017.\nThis means that <a href=\"https:\/\/groups.google.com\/a\/chromium.org\/g\/blink-dev\/c\/zIg2KC7PyH0\/m\/a3VeYmvEAAAJ\" title=\"Intent to Deprecate and Remove: XSLT\">when Google first proposed to kill XSLT<\/a>,\na newer, considerably more powerful version of the standard had been released for six years already.\nAnd already at the time people were pleading for browsers support to be upgraded to the new version.<\/p>\n\n<p>It is thus not by chance or by lack of resources that browsers are stuck with the 1999 XSLT&nbsp;1:\nit has been an intentional choice <em>against the users' will<\/em> since <em>at least<\/em> 2013,\nthe year we already mentioned as the turning point for the centralization of the web.\nXSLT has been <em>intentionally boycotted<\/em> by Google, Apple and Mozilla:\nusing the excuse that it is not widely used today, after decades of undercutting any efforts in adoption,\nrefusing to fix bugs or even to provide meaningful errors to assist in debugging related issues,\nis a complete mockery of the victims of these <em>policy<\/em>.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@marcoarment\/115050185929899546\">Marco Arment<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@marcoarment\/115050185929899546\"><p>Fun fact: David Karp saved the world from XSLT being Tumblr&rsquo;s blog-theme language.<\/p><\/blockquote>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/05\/31\/browser-vendors-win-war-with-w3c\/\">Browser Vendors Win War With W3C<\/a><\/li>\n<\/ul>\n\n<p id=\"removing-xslt-from-the-web-platform-update-2025-09-04\">Update (<a href=\"#removing-xslt-from-the-web-platform-update-2025-09-04\">2025-09-04<\/a>): <a href=\"https:\/\/meyerweb.com\/eric\/thoughts\/2025\/08\/22\/no-google-did-not-unilaterally-decide-to-kill-xslt\/\">Eric Meyer<\/a> (<a href=\"https:\/\/news.ycombinator.com\/item?id=44987239\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/meyerweb.com\/eric\/thoughts\/2025\/08\/22\/no-google-did-not-unilaterally-decide-to-kill-xslt\/\"><p>As a very quick background, various people have proposed removing XSLT support from browsers a few times over the quarter-century-plus since support first landed.  It was discussed in both the early and mid-2010s, for example.  At this point, browsers all more or less support <a href=\"https:\/\/www.w3.org\/TR\/xslt-10\/\">XSLT 1.0<\/a>, whereas the latest version of XSLT is <a href=\"https:\/\/www.w3.org\/TR\/xslt-30\/\">3.0<\/a>.  I believe they all do so with C++ code, which is therefore not memory-safe, that is baked into the code base rather than supported via some kind of plugged-in library, like Firefox using <a href=\"https:\/\/github.com\/mozilla\/pdf.js\"> PDF.js<\/a> to support PDFs in the browser.<\/p><p>[&#8230;]<\/p><p>First of all, while Mason was the one to open the issue, this was done because the idea was raised in a periodic WHATNOT meeting (call), where someone at Mozilla was actually the one to bring it up, after it had come up in various conversations over the previous few months.  After Mason opened the issue, members of the Mozilla and WebKit teams expressed (tentative, mostly) support for the idea of exploring this removal.  Basically, <em>none<\/em> of the vendors are particularly keen on keeping native XSLT support in their codebases, particularly after <a href=\"https:\/\/www.neowin.net\/news\/google-project-zero-exposes-security-flaw-in-libxslt-library-used-in-gnome-applications\/\"> security flaws were found<\/a> in XSLT implementations.<\/p><p>[&#8230;]<\/p><p>Mason mentioned that they didn&rsquo;t have resources to put toward updating their XSLT code, and got widely derided for it. &ldquo;Google has trillions of dollars!&rdquo; people hooted.  <em>Google<\/em> has trillions of dollars.  The Chrome team very much does not.  They probably get, at best, a tiny fraction of one percent of those dollars.  Whether Google should give the Chrome team more money is essentially irrelevant, because that&rsquo;s not in the Chrome team&rsquo;s control.<\/p><p>[&#8230;]<\/p><p>That said, as a result of all this, I now strongly believe that every proposed-removal issue should point to the process and where the issue stands in it. (And write down the process if it hasn&rsquo;t been already.) This isn&rsquo;t for the issue&rsquo;s intended audience, which was other people within WHATWG who are familiar with the usual process and each other, but for cases of context escape, like happened here.  If a removal discussion is going to be held in public, then it should assume the general public will see it and provide enough context for the general public to understand the actual nature of the discussion.  In the absence of that context, the nature of the discussion will be assumed, and every assumption will be different.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11582\">Dmitrii Dimandt<\/a> (<a href=\"https:\/\/news.ycombinator.com\/item?id=44987346\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/github.com\/whatwg\/html\/issues\/11582\">\n<p>XSLT removal will break multiple government and regulatory sites across the world<\/p>\n<\/blockquote>\n\n<p><a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11578\">Tony Sullivan<\/a> (<a href=\"https:\/\/news.ycombinator.com\/item?id=44987552\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/github.com\/whatwg\/html\/issues\/11578\">\n<p>Should the web platform adopt XSLT 3.0?<\/p>\n<\/blockquote>\n\n<p id=\"removing-xslt-from-the-web-platform-update-2025-11-03\">Update (<a href=\"#removing-xslt-from-the-web-platform-update-2025-11-03\">2025-11-03<\/a>): <a href=\"https:\/\/groups.google.com\/a\/chromium.org\/g\/blink-dev\/c\/CxL4gYZeSJA\/m\/yNs4EsD5AQAJ\">Mason Freed<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=45779261\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/groups.google.com\/a\/chromium.org\/g\/blink-dev\/c\/CxL4gYZeSJA\/m\/yNs4EsD5AQAJ\"><p>For these reasons, Chromium would like to deprecate and remove XSLT. WHATWG decided to move XSLT deprecation to <a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11523\">stage 3<\/a>, indicating broad agreement. Both other browser engines are also planning to deprecate XSLT. The proposed timeline for Chromium is to deprecate in M143, remove in M155 (except for Origin Trial and Enterprise Policy users), and discontinue the Origin Trial and Enterprise Policy in M164.<\/p><\/blockquote>\n\n<p id=\"removing-xslt-from-the-web-platform-update-2025-11-05\">Update (<a href=\"#removing-xslt-from-the-web-platform-update-2025-11-05\">2025-11-05<\/a>): <a href=\"https:\/\/developer.chrome.com\/docs\/web-platform\/deprecating-xslt\">Mason Freed and Dominik R&ouml;ttsches<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=45823059\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/developer.chrome.com\/docs\/web-platform\/deprecating-xslt\">\n<p>Chromium has officially deprecated XSLT, including the\n<a href=\"https:\/\/developer.mozilla.org\/docs\/Web\/API\/XSLTProcessor\">XSLTProcessor<\/a>\nJavaScript API and the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Processing_Instruction#:%7E:text=The%20most%20common%20use%20of%20a%20processing%20instruction%20is%20to%20request%20the%20XML%20document%20be%20rendered%20using%20a%20stylesheet%20using%20the%20%27xml%2Dstylesheet%27%20target\">XML stylesheet processing\ninstruction<\/a>.\nWe intend to remove support from version 155 (November 17, 2026). The\n<a href=\"https:\/\/github.com\/mozilla\/standards-positions\/issues\/1287#issuecomment-3227145793\">Firefox<\/a>\nand\n<a href=\"https:\/\/github.com\/whatwg\/html\/issues\/11523#issuecomment-3149280766\">WebKit<\/a>\nprojects have also indicated plans to remove XSLT from their browser engines.\nThis document provides some history and context, explains how we are removing\nXSLT to make Chrome safer, and provides a path for migrating before these\nfeatures are removed from the browser.<\/p>\n<\/blockquote>\n\n<p id=\"removing-xslt-from-the-web-platform-update-2025-11-10\">Update (<a href=\"#removing-xslt-from-the-web-platform-update-2025-11-10\">2025-11-10<\/a>): See also: <a href=\"https:\/\/xslt.rip\/\">xslt.rip<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=45873434\">Hacker News<\/a>).<\/p>\n\n<p><a href=\"https:\/\/mastodon.social\/@jwz\/115527010269110761\">Jamie Zawinski<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@jwz\/115527010269110761\">\n<p>The World Wide Web Page xslt.rip is a thing of beauty on multiple levels. View source.<\/p>\n<\/blockquote>\n\n<p id=\"removing-xslt-from-the-web-platform-update-2025-11-18\">Update (<a href=\"#removing-xslt-from-the-web-platform-update-2025-11-18\">2025-11-18<\/a>): <a href=\"https:\/\/wok.oblomov.eu\/tecnologia\/google-killing-open-web-2\/\">Oblomov<\/a> (via <a href=\"https:\/\/news.ycombinator.com\/item?id=45954560\">Hacker News<\/a>):<\/p>\n<blockquote cite=\"https:\/\/wok.oblomov.eu\/tecnologia\/google-killing-open-web-2\/\"><p>They do not explain why they haven&rsquo;t decided to fix the security issues in the library instead,\nor adopt a more modern library written in a safe language, taking the opportunity to upgrade XSLT support\nto a more recent, powerful and easier-to-use revision of the standard.<\/p><p>Instead, what they do is to provide a &ldquo;polyfill&rdquo;, a piece of JavaScript that can allegedly used to supplant the functionality.\nCuriously, however, they do <em>not<\/em> plan to ship such alternative in-browser,\nwhich would allow a transparent transition without even a need to talk about XSLT <em>at all<\/em>.\nNo, they specifically refuse to do it, and instead are requesting anyone still relying on XSLT to\nreplace the invocation of the XSLT with a <em>non-standard<\/em> invocation of the JavaScript polyfill that should replace it.<\/p><p>This means that at least one of these two things are true:<\/p><ol><li><p>the polyfill is not, in fact, sufficient to cover all the use cases previously covered by the built-in support for XSLT,\nand insofar as it&rsquo;s not, they (Google) do not intend to invest resources in maintaining it,\nmeaning that the task is being dumped on web developers\n(<abbr title=\"In Other Words\">IOW<\/abbr>, Google is removing a feature that is going to create\n<em>more work<\/em> for web developers just to provide the same functionality that they used to have from the browsers);<\/p><\/li><li><p>insofar as the polyfill is sufficient to replace the XSLT support in the browser,\nthe policy to not ship it as a replacement confirms that the security issues in the XSLT library used in Chrome\nwere nothing more than excuses to give the final blow to RSS and any other XML format\nthat is still the backbone of an independent web.<\/p><\/li><\/ol><\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Mason Freed (Hacker News): XSLT v1.0, which all browsers adhere to, was standardized in 1999. In the meantime, XSLT has evolved to v2.0 and v3.0, adding features, and growing apart from the old version frozen into browsers. This lack of advancement, coupled with the rise of JavaScript libraries and frameworks that offer more flexible and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2025-08-21T18:30:06Z","apple_news_api_id":"b07e2b20-f848-41e0-9ec6-cf7512c609d9","apple_news_api_modified_at":"2025-11-18T16:10:08Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAABg==","apple_news_api_share_url":"https:\/\/apple.news\/AsH4rIPhIQeCexs91EsYJ2Q","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[412,51,339,346,991,52,457,96,866,2819],"class_list":["post-49004","post","type-post","status-publish","format-standard","hentry","category-technology","tag-chromium","tag-google","tag-html","tag-javascript","tag-open-source-software","tag-rss","tag-tumblr","tag-web","tag-xml","tag-xslt"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49004","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=49004"}],"version-history":[{"count":8,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49004\/revisions"}],"predecessor-version":[{"id":50091,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/49004\/revisions\/50091"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=49004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=49004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=49004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}