tsvkit.org
TSV Toolkit
Sample data Say hi →
74 tools · Free · Browser-based · No signup

Convert, repair, and reshape TSV (Tab-Separated Values) in seconds.

browser-based TSV utilities · updated 28 July 2026

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.

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]