Browser JSONL benchmark

Updated November 5, 2026

A web browser can work with a 5 GiB JSONL file without loading it into memory. In our test, JSONL Studio indexed 15.6 million lines in about 25 seconds, using a 475 KB index, and then jumped to any line in about 30 milliseconds or less. Browser memory peaked about 550 MB above its starting level.

Results: viewer

Measure Result
Time to index 25.1 s, or about 204 MiB per second
Index size in memory 475 KB
Jump to a line 15 to 31 ms across 4 jumps
Search, case-insensitive 36.8 s for the whole file
Search, case-sensitive 26.1 s for the whole file
Browser memory, start to peak 534 MB to 1,040 MB

A second run gave almost the same results: 24.1 s to index and 36.8 s to search. We asked the operating system to drop the file from its cache before the first run, but we can’t confirm that all of it was dropped.

Results: other tools

Each time covers the whole job on the same file. Peak memory is for the entire browser.

Tool Time Browser memory, start to peak
Split (OpenAI preset, 312 parts) 85 s 521 MB to 640 MB
Validate, plain JSONL 107 s 534 MB to 646 MB
Validate, OpenAI batch profile 150 s 528 MB to 1,107 MB
Convert to CSV (4.7 GB output) 338 s 532 MB to 2,694 MB

CSV conversion used the most memory, because the browser holds the output until you download it. We did not download the 4.7 GB result in this test. Correct CSV output is tested on small files.

Test setup

  • File: 5,368,709,322 bytes and 15,580,727 lines of synthetic chat-format records, about 345 bytes each
  • Browser: headless Chromium 156
  • Machine: a shared virtual server with 4 vCPUs and 8 GB of RAM, running Linux
  • Memory figure: total resident memory of all browser processes, sampled every 200 ms

Each row was checked for accuracy, not only speed. The test file has its line number written into every record, and each jump confirmed that it landed on the right record. Search found the one expected line.

Limits of this test

  • These are one or two runs on one machine, so treat them as a rough guide. Your disk, CPU and browser will change the results.
  • The rows are short and uniform. Files with very long lines will behave differently, and a single line must still fit in memory.
  • Multi-GB timings are from Chromium only.
  • 5 GiB is the largest file we tested. We expect larger files to work, because the index grows by only about 8 bytes per 256 lines, but we have not measured them.

How it works

The viewer reads the file in 16 MB pieces in a background thread and stores the byte position of every 256th line. To show a line, it finds the nearest stored position and reads only that part of the file.

Browsers also limit how tall a scrollable element can be, so a simple list of millions of rows fails. The viewer maps the scrollbar position to a line number instead.

Search decodes bytes with a one-byte-per-character encoding, so it can use the browser’s fast built-in text search while character positions still match byte positions. It then uses the index to turn a match position into a line number.

Try it with your own file in the JSONL viewer, or see other ways to open large JSONL files.