Skip to content

RebelTechPro/Jsony

Repository files navigation

Jsony

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.

Jsony JSON formatter showing a tree view of a large JSON payload

What's here

  • 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.

Why

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.

How it works

A few decisions worth noting if you're poking around the code:

  • Heavy work off the main thread. JSON.parse is synchronous and freezes the UI on multi-MB inputs. Parsing, JSONPath evaluation, and diff all run in a Web Worker. The worker source is components/tools/json/parse.worker.ts, pre-bundled with esbuild into public/parse.worker.js via scripts/build-worker.mjs — Next.js 16 + Turbopack + output: "export" doesn't currently handle the standard new Worker(new URL(...)) pattern for static export, so this is the workaround until it does.
  • Virtualized tree rendering. @tanstack/react-virtual paints only the rows in view, so render cost is bounded by the viewport rather than the document.
  • Architecturally enforced privacy. next.config.ts has output: "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.

Local development

Requires Node 20+.

npm install
npm run dev

Then 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.

Project posture

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.

License

MIT.

About

JSON, fast and local

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors