Convert, repair, and reshape TSV (Tab-Separated Values) in seconds.
A complete toolkit for the data that arrives out of psql, mysql --batch, Excel's "Save As → Text (Tab delimited)", a copied spreadsheet range, or a bioinformatics pipeline. Everything runs in your browser — nothing is uploaded, and every page works offline once loaded.
- CSV · JSON · JSONL
- Excel (.xlsx) · clipboard paste
- HTML table · Markdown table
- XML · YAML
- CSV · JSON · JSONL
- Excel · SQL inserts
- HTML · Markdown · LaTeX
- XML · YAML · GeoJSON
- JS / Python / PHP · ASCII table
- Fix ragged rows
- Escape / unescape tabs and newlines
- CRLF ↔ LF · BOM
- UTF-16 / Latin-1 → UTF-8
- Extract / reorder · delete · insert
- Split / combine columns
- Header tools · trim · truncate
- Find & replace · fill blanks
- Round numbers · reformat dates · anonymize
Where TSV usually comes from
TSV (Tab-Separated Values) is the format you get when you ask a database for plain text:
psql -A -F$'\t', mysql --batch, sqlite3 -separator $'\t' all produce it by default.
Excel's Save As → Text (Tab delimited) writes the same thing, and so does every spreadsheet
when you copy a range to the clipboard — which makes paste from Excel
the fastest route from a sheet to JSON, SQL, or Markdown. Bioinformatics formats
— .bed, .gff, NCBI annotation dumps, Ensembl exports — are TSV
under different extensions. Tabs win over commas in those settings because real-world data
contains commas; it almost never contains tabs.
Why TSV breaks, and what fixes it
Unlike CSV, TSV has no quoting in its specification: a field simply may not contain a tab,
a carriage return, or a line feed. Every characteristic TSV failure follows from that rule
being broken somewhere upstream. A tab inside a free-text field splits one row into two
columns — the validator finds it and
fix ragged rows makes the file loadable again. A newline inside
a field turns one record into two short lines. A Windows export leaves \r on the
end of every last field, which is why normalising line endings
resolves diffs that show every row as changed. Excel's Unicode Text export is UTF-16,
unreadable by most Unix tooling until you
convert the encoding. And three invisible BOM bytes will
either fix Excel's UTF-8 handling or break your first column name, depending on which
direction you need — that page does both.
Converting between formats
Going to or from CSV is the most common ask. The
TSV → CSV converter handles RFC 4180 quoting
so embedded commas and newlines survive the trip; the
CSV → TSV converter reverses it. For JSON, the
TSV → JSON converter defaults to strings (no
silent coercion of leading zeros or boolean-looking fields) with an opt-in toggle to coerce
numbers, booleans, and nulls; TSV → JSONL is the
newline-delimited form that bulk loaders and fine-tuning APIs want. The
TSV → SQL generator emits batched
INSERT statements for PostgreSQL, MySQL, SQLite, or SQL Server, and
the schema generator writes the
CREATE TABLE to go with them. Both directions of Excel are covered —
Excel → TSV with a sheet picker, and
TSV → XLSX for a real workbook.
Looking at a TSV
Tabs aren't visible — so a TSV with one stray space-vs-tab swap looks fine in a text editor and breaks in every parser. The TSV viewer renders the file as a clean table so the shape is obvious at a glance, and the validator calls out ragged rows by line number. Stats gives you count / nulls / unique / min / max / mean per column, value counts shows the real categories in a column and the typos hiding among them, and TSV diff compares two files as tables rather than as lines — so you find out which cell changed, not just which row. To edit by hand without Excel silently converting your IDs to dates, use the grid editor.
Cleaning, reshaping, analysing
Filter rows takes a small expression syntax
(column = "value", age > 30, name contains "smith",
combinable with AND / OR). Sort
is multi-key and numeric-aware, dedupe works on whole
rows or a key subset, and join does an inner, left,
right, or full outer join of two files on a shared column — the operation that usually sends
people to a database. Group and aggregate is
GROUP BY without one, and pivot /
unpivot move between the long format that tools
want and the wide format people read.
What they have in common
Everything runs in your browser. The files you drop or paste never leave your machine — there is no server component handling data. No size cap beyond your browser's memory, no account required, nothing for me to leak. Two pages load SheetJS from a CDN to read and write Excel workbooks; the parsing still happens locally. See the privacy policy for the longer version.
Sensible defaults, no hidden magic. Values stay as strings unless you explicitly ask otherwise. Tabs are tabs — no auto-detection guess that picks comma when the data looked CSV-ish. Quoting is parsed when present (RFC 4180 style) but not added on the way out unless the value contains a tab, newline, or quote.
Free, no warranty. Read the terms before relying on the output for anything load-bearing. Bug reports and feature requests are welcome — drop me a line.
— S., [email protected]