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.