jsonloupe MIT · no account
local-first · no backend, no telemetry

A loupe for JSON that is too big — and too precise — for your viewer.

Five-million-element arrays open instantly. Int64 IDs and exact decimals survive paste → edit → copy without a single rounded digit. Diff, query, decode Zstd payloads, export CSV — all inside your browser tab.

0 bytes uploaded · no account · MIT

Paste JSON paste and it opens · nothing leaves this tab
⌃↵ to open

Built for the payloads that break other viewers

lossless numbers

Int64 and exact decimals

IDs beyond 2^53 survive paste → view → edit → copy → download with every digit intact. Nothing is coerced to a float, ever.

scale

Five million elements, instantly

Virtualized tree with chunked expansion — [0 … 9999] range rows — and parsing, diffing, search and compression all off the UI thread.

payloads

Compressed input is first-class

Raw .zst, Base64-Zstd, or PostgreSQL \x… bytea is detected, decoded in the worker, and opened with a transformation trace.

diff

Semantic side-by-side compare

Arrays align by identity, so reordering does not drown you in false changes. Ignore noisy fields by key or path prefix.

navigation

Paths, lenses, and “same value”

Copy any node as JSONPath, JSON Pointer, or JS accessor. Epoch → local date, lat/lng, uuid flags, and byte weight on collapsed nodes.

export

Tables and RFC 4180 CSV

Any array becomes a sortable table; export the table or a query result as exact-digit CSV in the current sort order.

A query language, not a search box

Filter, pluck, group and count across the whole document — evaluated in the worker, never on the main thread.

$.tasks[?(@.status == 'FAILED')]
  | group(@.failureReason)
  | count()

Diff that understands identity

Align arrays by id, a composite key, or automatic detection — then read what actually changed instead of a wall of index shifts.

~ changed 37 + added 12 − removed 4 ⇅ reordered 5

Your documents never leave your machine

Parsing, diffing and querying run in a web worker; documents are stored in IndexedDB on your own disk. There is no server to send them to. Ask — the optional English-to-query feature — stays off until you add your own API key, and even then it sends only the document's shape: field names and types, never values, shown to you in full before anything is sent.

fetch calls in app3 · all opt-in Ask
telemetrynone
licenseMIT
typescriptstrict

Choose comparison baseline

The open document stays current. The selected document appears on the left.

Transport size inspector

Exact UTF-8 → Zstd → Base64 → envelope sizes. Recompression runs in the worker; captured Zstd bytes are shown separately when available.

Editable budget examples choose the exact stage each limit measures
Thresholds are local presets, not universal platform limits.