CSV Viper
CSV VIPERPINKVIPER LABS
Download — free
Windows · reads the file where it lies

Open the file
Excel won't.

A spreadsheet gives up at 1,048,576 rows. A text editor tries to load four gigabytes into memory and takes your afternoon with it. CSV Viper indexes the file once and then never reads more than a screenful — so the size of what you opened stops being your problem.

1.2 GB · 8,459,121 rows · indexed in 2.6 seconds

localhost:8143 — CSV Viper LIVE
CSV VIPERPINKVIPER LABS
▤ leads-master-2026.csv · 1.2 GB
Delim Comma Text UTF-8
Find in file…
Columns Export
indexing… 16 cols R1 · id
A running mock-up of the real interface. The numbers are the ones measured on a 1.2 GB file.
The wall

Every other tool has a number
it stops at.

You already know what happens. You double-click a vendor export, wait four minutes, and get told the file is too large — or worse, get shown the first million rows with no warning about the rest.

01 / SPREADSHEETS
1,048,576

Then it truncates.

Excel's row limit is a hard stop. An 8-million-row list opens as an 8-million-row list minus 7 million rows, and nothing on screen says so.

02 / TEXT EDITORS
4.0 GB → RAM

Then it swaps.

Loading the whole file into memory to show you forty lines of it is a strange trade, and on a 4 GB export it is one your machine loses.

03 / PREVIEW TOOLS
First 1,000

Then it guesses.

Anything that samples the head of the file will tell you the column types are clean, right up until row 4,000,201 proves otherwise.

How it works

A row is a byte offset.
That's the whole trick.

One pass over the file records where each row begins. After that, showing row 8,412,006 is one seek and one small read — exactly the same work as showing row 3. The size of the file stops entering into it.

Refinement one

Checkpoints, not every row.

An offset for every row costs eight bytes a row — 80 MB of index for a 10-million-row file, which has to be built, written, read back and held in memory. So only every Nth offset is kept, with N sized so the forward read from a checkpoint is about 64 KB.

  • ▸The index for 8.46 million rows is 150 KB, not 68 MB.
  • ▸Reaching any row is one seek plus a few dozen rows of parsing.
  • ▸It is cached, so the second time you open that file it is instant.
THE FILE — 1.2 GB ▲ a checkpoint every ~64 KB — 150 KB of index in total SHOW ME ROW 8,412,006 64 KB → parse forward 1 seek · 0.8 ms · the same for row 3 or row 8 million
Fig 1 — why file size stops mattering
Refinement two

A newline inside quotes
is not a new row.

This is the failure that costs you a case. A viewer that splits on newlines shows every row after the first multi-line note shifted by one — silently, plausibly, with the phone number now sitting under the wrong name.

  • ▸The scan tracks quote parity in whole 8 MB blocks, so correctness costs no speed.
  • ▸Doubled quotes ("") add two and cannot flip it — which is exactly right.
  • ▸Tested against a file with 1,691 embedded newlines: row count matched exactly.
SPLIT ON NEWLINES 4417 Rivera "spoke to her on the 4th" 512-555-0148 4418 Okafor 512-555-0199 ✕ one row became two — and every row after it is now off by one, with no warning CSV VIPER 4417 Rivera "spoke to her on the 4th" 512-555-0148 4418 Okafor 512-555-0199 ✓ one row, with its newline intact, and the rows below it still aligned AND WHEN THE QUOTING IS ACTUALLY BROKEN: ⚠ a quote with no partner — the row count below is too low [ FIX IT ]
Fig 2 — the error you would never have caught
Move things around

Put the fields where
you actually look.

Vendor files arrive in vendor order. The column you care about is the fourteenth one, and you scroll sideways to it four hundred times a day. Drag the header and it moves — and it stays moved.

⇄

Drag to reorder

Grab a header, drop it where you want it. A pink line shows where it will land.

📌

Freeze to the left

Pin the phone number or the ID and it stays put while the other ninety columns scroll past.

◧

Hide the noise

A vendor's forty internal tracking fields do not have to be on your screen.

✎

Rename headers

Call c_fname_1 what it actually is. The new name is what the export writes.

↔

Fit to contents

Double-click a header edge and the column becomes exactly as wide as what is in it.

⌸

Remembered per file

Open the same file next week and the fields are where you left them. Nothing is written beside your data.

⤓

Export in that order

One forward pass writes a new file with the columns as shown, minus the hidden ones. Size is irrelevant.

◫

Row view

Double-click any row to read it one field per line — the only sane way to read a 90-column record.

Measured, not promised

What a gigabyte
actually costs.

One file: 1.2 GB of lead data, 8,459,121 rows, 16 columns, 1,691 of them carrying newlines inside quoted fields.

OperationResultWhat it means
Index the whole file2.6 s 471 MB/s — the disk is the limit, not the program
Reopen it laterinstant the index is cached and reloaded, not rebuilt
Any screenful, anywhere0.8 ms row 8 million costs what row 3 costs
Search the whole file4.9 s 248 MB/s, then the grid shows only matching rows
Size of the index150 KB for 8.46 million rows — kept away from your data
Rows visible while indexing0.3 s you scroll it while the count is still climbing
Row count vs. a strict CSV parserexact 8,459,121 both ways, embedded newlines and all

Measured on an NVMe SSD. On an external USB disk the same work is bounded by what the disk can hand over — the index pass reads the file once and nothing more, which is the least any tool could read.

What it swallows

The files that break
everything else.

Real exports are not RFC 4180. They are whatever the vendor's script produced at 3 a.m., and a viewer that only reads clean CSV is a viewer you cannot use.

✓Newlines inside quoted fields ✓Tab, pipe, semicolon and colon delimited ✓No header row ✓Windows-1252 and Latin-1 ✓UTF-16 from Excel and SQL Server ✓Doubled quotes ✓Ragged rows ✓CR-only line endings ✓No trailing newline ✓Broken quoting — detected and reported
The one that matters

It tells you when
the file is lying.

One unpaired quote character makes everything after it look like a single enormous field, and the row count silently collapses. CSV Viper catches it two ways — an odd number of quote characters across the whole file, which valid CSV cannot produce, or a single row measured in megabytes.

Then it says so, in a bar above the grid, with one button to re-read the file treating quotes as ordinary text. It is never applied for you: a file with a genuinely huge field would be damaged by that "fix", so the decision stays with the person who can tell the difference.

AND THE EXCEL SPECIAL: export.csv i.d. ,.n.a.m.e. ,.c.i.t.y UTF-16 — two bytes per character one pass export (utf-8).csv id,name,city opens immediately · original untouched DELIMITER, ENCODING AND HEADER ARE GUESSES — AND ALL THREE ARE ONE DROPDOWN AWAY. Delim Comma ▾ Text UTF-8 ▾ Header row
Fig 3 — changing your mind costs nothing
Where your data goes

Nowhere.

It runs on your machine, reads files by path, and has no outbound network call anywhere in it. There is no account, no cloud, and nothing to upload.

01 / NO UPLOAD

The file never moves.

A browser upload would copy four gigabytes through memory before anything could start. Pointing at the file instead is why the first screenful is instant — and why the file stays where you put it.

02 / NO NETWORK

Nothing phones home.

No telemetry, no update check, no licence ping. Unplug the network and it behaves exactly the same way.

03 / NO LITTER

Nothing beside your data.

Index cache, column layouts and recent files live in your own AppData folder. Read-only shares and locked-down drives are read, never written to.

Why it exists

Built by someone who
had the file open.

This started as a bad afternoon. A vendor sent an export too big for a spreadsheet and too awkward for a text editor, and the column that mattered was the fourteenth one — so the job became scrolling sideways, eight million times.

Everything here is a decision made while actually looking at that file. The index is checkpointed because building an 80 MB one was slow. Quote parity is tracked because the first version got the row count wrong and looked completely convincing while doing it. The broken-quoting warning exists because a file lied and nearly got away with it.

There is no sorting, because sorting a four-gigabyte file honestly needs a second index and nobody should pretend otherwise. There is no editing, because it is a viewer. What it does, it does at the speed of your disk.

PINKVIPER LABSSoftware for people with the file already open
What it costs

Nothing. It's free.

No trial that expires, no row limit that appears at the worst moment, no account, no upsell inside the program. It is a finished tool given away finished — because the fastest way to show you what PinkViper Labs builds is to hand you something that works.

CSV Viper · Windows
Free
NO ACCOUNT · NO EXPIRY · NO LIMITS
  • ✓No row limit and no file size limit
  • ✓Column order, widths and pins remembered per file
  • ✓Whole-file search and export
  • ✓Signed installer — no "unrecognised app" warning
  • ✓Works offline forever, on as many of your machines as you like
Download for Windows

What the alternatives cost

Cloud CSV tools$50–95 / month
Heavyweight text editors~$60 / year
Other CSV desktop apps$29–79 one-time
Command-line toolsfree, if you learn them
CSV Viperfree, and it has a window

The cloud ones are cheapest for a month and most expensive by March — and every one of them needs the file uploaded before it can show you a single row. This one reads it where it sits, and asks for nothing.

More from the same workshop

If this one helped,
the paid ones are better.

CSV Viper came out of a much bigger problem: what to actually do with a file that size once you can finally see it.

Frequently asked

The short answers.

How big can the file actually be?
There is no built-in limit, and no point in the design where size changes the approach. A gigabyte is tested and documented above; the same code path handles ten. What grows is the one-off index pass, which reads the file exactly once at whatever speed your disk manages.
Does it change my file?
No. It is a viewer. The only thing it ever writes is an export you asked for, to a new filename you chose — and even that is written to a temporary name and renamed at the end, so an interrupted export can never leave behind a file that looks finished.
Can it sort?
Not today, and the reason is honest: sorting a multi-gigabyte file means building a second index keyed on a column, which is a bigger piece of work than the rest of the viewer put together. Search, filter-to-matches and go-to-row cover most of what sorting gets used for. Doing it properly is on the list.
What happens while it is still indexing?
You use it. Rows appear about three tenths of a second in, and the row count climbs in the status bar as the scan runs. Nothing is hidden behind a modal progress dialog.
My file's quoting is a mess. Then what?
It is detected and reported in a bar above the grid, with one button that re-reads the file treating quotes as ordinary characters. It is never applied automatically, because a file with a genuinely enormous field would be damaged by that fix and only you can tell the two apart.
It's free. What's the catch?
There isn't one, but there is a reason. PinkViper Labs sells other tools — List Viper in particular, which does the heavy processing on the same kind of files — and the most honest advertisement for those is a free one that works. So: no trial clock, no row cap, no nagging, no account, and nothing collected. If this site vanished tomorrow the copy on your disk would keep opening files exactly as it does today.
Does it need internet, an account or a licence server?
None of the three. It runs entirely on your machine and makes no outbound requests at all.
Mac or Linux?
Windows for now. The engine is plain Python and would port, but the window, the file picker and the installer are Windows pieces.
Get it

Stop waiting for a spreadsheet
to decide it can't.

Point it at the biggest file you have. It will be on screen before you have finished reading this sentence.

Windows 10 / 11 · 64-bit · free · no account · no upload