JSON, fast and local. A small set of fast, private developer tools for JSON and adjacent formats. Everything runs in your browser — your data never leaves the page.
Live at jsony.dev.
- JSON Formatter & Validator — format, validate, and explore JSON. Handles 50MB+ payloads without freezing the browser.
- JSON Diff — structural diff between two JSON documents. Highlights additions, removals, and modifications.
- JSON to CSV — convert JSON arrays to CSV with configurable delimiter and optional header row.
- JWT Decoder — decode JSON Web Tokens to inspect header, payload, and signature.
- Base64 Encoder & Decoder — UTF-8 safe encoder/decoder, supports standard and URL-safe alphabets.
The existing free JSON tools are slow on large payloads, ad-cluttered, send your data to servers, and have weak UX for exploring complex JSON. Jsony aims at the gaps:
- Handles big payloads. Parsing runs in a Web Worker; the tree view is virtualized. A 50MB document stays interactive — no main-thread block over 200ms, smooth scroll and expand.
- 100% client-side. Zero network calls with your input. No analytics that track you, no cookie banner, no ads above the fold. The source is MIT-licensed and lives in this repo, so the privacy claim is verifiable.
- Useful by default. JSONPath query bar for filtering and extracting from large documents. Smart error messages with line/column instead of "Unexpected token at position 1247." Paste auto-formats; copy gives you formatted output. Dark mode, keyboard navigation.
A few decisions worth noting if you're poking around the code:
- Heavy work off the main thread.
JSON.parseis synchronous and freezes the UI on multi-MB inputs. Parsing, JSONPath evaluation, and diff all run in a Web Worker. The worker source iscomponents/tools/json/parse.worker.ts, pre-bundled with esbuild intopublic/parse.worker.jsviascripts/build-worker.mjs— Next.js 16 + Turbopack +output: "export"doesn't currently handle the standardnew Worker(new URL(...))pattern for static export, so this is the workaround until it does. - Virtualized tree rendering.
@tanstack/react-virtualpaints only the rows in view, so render cost is bounded by the viewport rather than the document. - Architecturally enforced privacy.
next.config.tshasoutput: "export". There are no API routes; adding one that took user JSON as input would fail the build. The "nothing leaves the browser" claim is a build constraint, not a promise. - Dynamic imports for heavy libs. The tolerant parser (
jsonc-parser), JSONPath engine (jsonpath-plus), and diff library (jsondiffpatch) are code-split and loaded on demand. First-load JS stays under 150KB gzipped. - Static hosting. Cloudflare Pages serves the
out/directory directly. No SSR, no Node runtime in production.
Requires Node 20+.
npm install
npm run devThen open http://localhost:3000.
The dev and build scripts both pre-bundle the Web Worker via scripts/build-worker.mjs before invoking Next. If you change components/tools/json/parse.worker.ts, the change picks up on the next npm run dev start.
Personal project. Issues are welcome but there's no SLA — I'll get to them when I can. PRs are reviewed when I have time. If you find a parsing edge case or a perf regression, a fixture in the issue helps a lot.
MIT.
