Posts

FreeFormatter is gone: a working alternative to its XSL Transformer (2026)

14 Aug 2026

FreeFormatter.com shut down in 2026. Here is what happened, a feature-by-feature mapping of its XSL Transformer to XSLT Playground, and a runnable example — including real Saxon XSLT 2.0/3.0, which FreeFormatter never had.

Quick answer: FreeFormatter.com was retired by its owner in 2026 and its XSL Transformer is offline for good, with no redirect and no designated successor. The closest free replacement for the transform workflow is XSLT Playground — paste stylesheet, paste XML, get output — with one real upgrade: it runs XSLT 1.0, 2.0 and 3.0 on a genuine Saxon HE backend, which FreeFormatter never offered.

What happened to FreeFormatter

If you visit FreeFormatter.com today you get a single farewell note instead of the tool list. The owner cites three reasons for pulling the plug: hosting costs, an advertising model he’d grown to dislike (his words: ad networks turned the pages into a “flickering landfill of pop-ups”), and the observation that “AI can now do most of what this site was created to do”. No redirect, no handover, no archive of the tools.

Credit where due: FreeFormatter ran for well over a decade, was free the whole time, and its XSL Transformer was many developers’ first contact with running a stylesheet outside an IDE. It shows up in years of Stack Overflow answers. Those links are all dead now, which is presumably why you are here.

Feature-by-feature: XSL Transformer → XSLT Playground

FreeFormatter XSL TransformerIn XSLT Playground
Paste XML + paste XSL, click TransformSame flow: XML goes in the input panel, stylesheet in the editor, run
XSLT 1.0-era processingXSLT 1.0, 2.0 and 3.0 — real Saxon HE on the server, selectable per run
Single input documentMultiple XML inputs as named parameters — see the parameters guide
Basic error message on failureSaxon error codes with exact line numbers — decoded in the error reference
No debuggingExecution trace: see which templates fired, with what context
No persistenceUp to 3 workspaces in localStorage, export/import as JSON
Free, no signupFree, no signup

The honest caveat: FreeFormatter was a Swiss-army site (JSON formatters, escapers, generators, validators). XSLT Playground only replaces the XSLT/XML transform and validation part — but it replaces it with something deeper than what was lost.

The upgrade you get for free: XSLT 2.0/3.0

FreeFormatter’s transformer handled everyday 1.0-style transforms but never ran a real Saxon 2.0/3.0 engine. This stylesheet, for example, would have been out of reach there — xsl:for-each-group is XSLT 2.0:

Input XML:

<orders>
  <order id="1" region="EMEA" amount="120"/>
  <order id="2" region="APAC" amount="75"/>
  <order id="3" region="EMEA" amount="300"/>
</orders>

Stylesheet (run with version 2.0):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/orders">
    <summary>
      <xsl:for-each-group select="order" group-by="@region">
        <region name="{current-grouping-key()}"
                total="{sum(current-group()/@amount)}"/>
      </xsl:for-each-group>
    </summary>
  </xsl:template>
</xsl:stylesheet>

Output (exactly as Saxon returns it):

<?xml version="1.0" encoding="UTF-8"?>
<summary>
   <region name="EMEA" total="420"/>
   <region name="APAC" total="75"/>
</summary>

Grouping is the single most common reason people outgrow 1.0 tooling — the for-each-group deep dive covers the patterns.

Other options

A broader comparison of free online testers (Saxon HE vs Saxon-JS, multi-input support, validation) is in Best free online XSLT 3.0 testers compared — written before FreeFormatter closed, so mentally strike it from that table.

The bigger picture

FreeFormatter’s shutdown is one of two 2026 events reshaping where XSLT runs: the other is Chrome removing native XSLT support in November 2026. The direction is the same in both cases — XSLT is moving off the browser and off ad-supported utility sites, and onto server-side processors. If your workflow depended on FreeFormatter, pointing it at a real Saxon backend is the durable fix, not a sideways move.

Try your old FreeFormatter workflow now: xsltplayground.com — paste, pick a version, run.