JSONL viewer — open & query JSONL / NDJSON files in your browser
JSONL (also called NDJSON) is one JSON object per line — no enclosing array, no commas between records. It's the native shape of application logs, event streams, LLM and ML datasets, and database exports, because a process can append one line at a time. That's exactly why a plain JSON viewer chokes on it: the file isn't a single JSON value, so the parser fails on the second line. This page reads a .jsonl or .ndjson file the way the format actually works — line by line — using DuckDB's read_json_auto, turning each line into a table row and inferring the column types from a sample of the data.
Once it's a table you can do more than scroll. Nested objects become STRUCT columns and arrays become LIST columns, so structure survives instead of collapsing to text — reach into them with dot notation (payload.user_id) and index notation (tags[1]) right in the query editor. You get real SQL against the file: SELECT, WHERE, GROUP BY, aggregates, the lot, running over the whole file rather than the first N pretty-printed lines. When you've isolated the slice you want, export the query result to CSV or Parquet. It all runs on DuckDB-WASM in your browser, single-threaded here, so a big file just takes longer rather than failing.
Two honest caveats come from the format itself. Lines don't have to share a schema — different keys per row are legal in JSONL — and DuckDB unions every key it sees into one wide column set, filling absent keys with NULL. And type inference is sampled: a field that's an integer on most lines but a string on a few gets widened to a common type (usually VARCHAR), so eyeball the inferred schema before you trust a numeric aggregate. A malformed line surfaces as an error rather than being silently dropped. Everything happens locally — the file is never uploaded, which you can confirm in devtools: zero network calls carry your data.
Drop a file or click to browse
Drop a JSONL / NDJSON file — read locally in your browser, never uploaded
Frequently asked questions
- Is my JSONL file uploaded to a server?
- No. The file is read entirely in your browser by DuckDB-WASM — it never leaves your machine. There's no account and no backend that sees your data. Open devtools and watch the Network tab while you load a file: you'll see zero requests carrying its contents.
- How large a JSONL / NDJSON file can I open?
- There's no fixed row or size cap — the ceiling is your browser's memory, since the data is loaded locally. DuckDB runs single-threaded here (no SharedArrayBuffer), so a multi-GB file parses and queries more slowly rather than failing outright. Multi-hundred-MB logs are routine; very large exports are where you'll feel the wait.
- Can I run SQL on it, and what happens with inconsistent lines?
- Yes — every file opens as a real table you can query with SELECT / WHERE / GROUP BY, reaching into nested objects and arrays via dot notation (data.user.id) and index notation (items[1]). JSONL lines needn't share a schema: DuckDB unions all keys into one column set and fills missing ones with NULL, and it widens fields with mixed types (say int and string) to a common type, usually VARCHAR. Check the inferred schema before trusting an aggregate.