JSON VIEWER← Back to viewer

Privacy & local-first architecture

The short version: your JSON never leaves your browser. Below is exactly how, and exactly what the handful of analytics events do and don't record — not an aspirational claim, the real list.

Where your document goes

Your JSONYour BrowserWeb WorkerResult on screen

Parsing, formatting, diffing, repairing, converting, validating against a schema, decoding a JWT — every one of these runs inside a Web Worker in your browser tab. Notice there's no arrow pointing to a server in that diagram — none of these tools have a backend to send your document to. The parsed document itself is never sent as a network request, not even to this site's own servers.

What's stored on your device (and how to clear it)

A few conveniences — reopening a recent file, keeping a saved schema — need somewhere to live. Everything below stays on your device, in this browser, and syncs nowhere:

  • Recent files (full document text, for one-click reopen)IndexedDB, this browser only
  • Saved JSON SchemaslocalStorage, this browser only
  • JSONPath query historylocalStorage, this browser only
  • Pinned tool shortcuts, theme, editor/format preferenceslocalStorage, this browser only

Every one of these has its own one-click clear (recent files, saved schemas, query history — each list has a Clear action), or wipe all of it at once from Settings → Privacy → Clear local data.

What analytics does and doesn't record

This site uses Google Analytics (GA4) for basic usage counts — which features get used, how often people hit a parse error. Every event below is metadata aboutyour document (a byte count, a line number, an enum label) — never its keys, values, paths, or content. This is the complete, current list; it's generated by hand from the same source file the app itself imports events from.

EventWhat it records
json_loadedhow the document arrived (paste/drop/recent/share/edit), its byte size, row count
json_parse_failedhow it arrived, its byte size, the line number the parse error occurred on
document_editedbyte size after the edit
feature_usedwhich feature (e.g. "minify", "repair", "convert") — an enum label, not its input/output
share_link_createdbyte size of the document, length of the generated URL fragment
share_link_openedlength of the incoming URL fragment
compare_startednothing beyond the event firing
compare_completedcount of changed rows in the diff
schema_validatedwhich JSON Schema draft, whether it passed, count of errors
jwt_decodedwhether the token decoded successfully — never the token itself
api_response_parseddetected body kind (json/html/xml/text), the HTTP status code
jsonl_processedtotal record count, valid record count
jsonpath_query_runcount of matches, whether it errored — never the expression or results
convertedwhich conversion target (e.g. "TypeScript"), its category (code/data)

Source

This isn't a policy document written separately from the code — it describes lib/analytics.ts and workers/json.worker.ts as they actually are. The project is open source: read the code yourself. Built by devure.in.