Client-Side Tools Are a Security Decision, Not a Performance One
"Runs in your browser" is usually sold as a speed feature. It is not. The round trip to a server for formatting a 4 KB JSON document was never the bottleneck, and nobody has ever abandoned a formatter because it took 200 milliseconds. The reason it matters is that the alternative is a data disclosure, and most people performing that disclosure do not register that they are doing it.
The thing that actually happens
An API returns something you do not understand. It is one line, 12 KB, unreadable. You select it, copy it, search for "json formatter", click the first result, paste, and read the formatted output.
In the four seconds that took, you transmitted a production API response to a third party you have never evaluated, over which you have no agreement, whose retention policy you have not read, and whose server logs you will never see. If that response contained a customer email address, an internal user ID, a session token, a signed URL, or a row from a database, you have just exported it.
This is not hypothetical and it is not rare. It is the single most common way internal data leaves companies that have otherwise serious security programmes — not through a breach, but through a developer being helpful at speed.
The paste is the incident. Everything after it is someone else's retention policy.
Why it does not feel like an incident
Every other channel for moving data out of a company has friction that prompts a moment of thought. Email has a recipient you have to type. File sharing has a permission dialogue. Slack has a channel name that reminds you who is in it. Uploading to a service has a progress bar and usually a login.
Pasting into a textarea has none of that. There is no recipient, no dialogue, no upload indicator, and frequently no visible indication that a network request happened at all. The interaction is indistinguishable from pasting into a local text editor, so it is filed mentally as a local action. It is not one.
Formatters are a particularly bad case because the input is, by definition, data you could not read yourself. You cannot sanity-check what you are sending, because not understanding it is the reason you are there.
How to tell what a tool actually does
A site claiming to be client-side is easy to verify, and worth verifying once for anything you use regularly.
- Open the network tab, then use the tool. If formatting produces a request carrying your input, it is server-side regardless of what the front page says. This takes ten seconds and is definitive.
- Turn off your network and reload. A genuinely client-side tool keeps working once the page has loaded. Most will not even notice.
- Read the page source. For a small tool the logic should be visible and legible. If the formatting happens somewhere you cannot see, treat that as the answer.
- Check what else is on the page. Client-side processing does not mean nothing is transmitted — analytics and ad scripts still phone home. They see your URL and your visit, not your textarea contents, and that distinction is worth understanding rather than assuming either extreme.
That last point applies to this site too. The tools here process input in the page and never transmit it; the analytics and advertising scripts in the page header are a separate matter, described in the privacy policy. Claiming otherwise would be the same category of vagueness this post is complaining about.
The counter-argument, taken seriously
"Client-side" is a claim, and you are trusting it. A page that processes your data locally today could ship different JavaScript tomorrow, and you would not notice. That is a real limitation and it is worth stating plainly rather than waving away.
What it buys you is a meaningful reduction in exposure rather than a guarantee. There is no server-side log by construction, so there is nothing to subpoena, breach or retain by accident. A server-side tool that promises not to store your input is asking you to trust a policy; a client-side tool is asking you to trust that the code you can read is the code that runs. The second is a weaker promise than "we are airgapped" and a considerably stronger one than "we say we delete it".
For anything genuinely sensitive the correct answer remains a local tool — jq, your editor's built-in formatter, a scratch file in your IDE. Every language you already have installed can pretty-print JSON in one line. The browser tool is for the case where that is inconvenient enough that the realistic alternative is not "use jq", it is "paste it into the first search result".
What to do about it
For yourself: learn one local formatting command and make it reflexive. python3 -m json.tool, jq ., or your editor's format-document shortcut. Most of the time that is genuinely faster than opening a browser tab.
For a team: this is worth one sentence in an onboarding document, because it is entirely a matter of awareness. Nobody pastes a customer record into a random website on purpose. They do it because at that moment it did not feel like sending anything anywhere.
Say it once, early, and it changes behaviour permanently — which is unusual for security advice and the reason it is worth saying.