dataeng.tools

Convert CSV to TSV — Free, Private, In-Browser

A CSV and a TSV are the same kind of file: flat, untyped, delimited text with a header row and one record per line. Converting between them changes exactly one thing — the field separator goes from a comma to a tab. There is no schema to preserve, no type inference to get wrong, and no compression on either side; the same values are just rearranged around a different delimiter. The reason to do it is almost always a downstream tool that specifically wants tabs — a bulk loader, a legacy import step, or a script that splits on \t and nothing else. If the receiver is delimiter-agnostic, you don't need this conversion at all.

The real payoff is quoting, or the lack of it. Commas turn up constantly in real data: addresses, free-text notes, currency with thousands separators, concatenated names. In a CSV every one of those values has to be wrapped in double quotes per RFC 4180, with embedded quotes doubled, so a naive comma-splitter downstream breaks on them. Tabs almost never appear inside real values, so once the delimiter is a tab most of that quoting simply disappears and the file gets flatter and easier to parse. The caveat is the mirror image: the rare value that does contain a literal tab, or a newline, now needs quoting or escaping instead. DuckDB applies that automatically on the way out, so the output stays parseable.

Because both formats are just text, the values themselves come through untouched — a number is the same string of digits, a timestamp the same ISO-ish string, NULLs stay as empty fields, and nothing is re-typed because there are no types to begin with. The header row carries over, and the file size stays roughly the same since neither format is compressed. What's worth checking is the receiving dialect: whether it expects LF or CRLF line endings, how it treats a quoted field, and whether any column holds embedded newlines. Everything runs locally in your browser via DuckDB-WASM — the CSV is parsed and rewritten on your own machine and is never uploaded.

Drop a file or click to browse

Drop a CSV file — processed locally, never uploaded

Frequently asked questions

Why convert to TSV instead of keeping the CSV?
Do it when a downstream tool specifically wants tab-delimited input — some loaders and legacy scripts split on tabs and nothing else. The practical win is that comma-heavy fields (addresses, notes, currency) stop needing quotes, since tabs almost never collide with real data. If the receiver accepts either delimiter, CSV is the more widely supported format and you can skip the conversion.
What happens to a value that contains a literal tab?
It gets wrapped in double quotes and any embedded double quote is doubled — the same RFC 4180-style escaping CSV uses for commas, just now triggered by a tab or an embedded newline instead. DuckDB does this automatically on write, so the file stays parseable. In practice it's rare: literal tabs seldom appear inside real values, which is exactly why TSV needs so little quoting.
Do my data types or values change in the conversion?
No. Both CSV and TSV are untyped text, so numbers, dates, and booleans are stored as their string representation in both. The output is effectively identical to the input except that the delimiter changes from comma to tab, quoting is dropped from fields that only needed it because they held a comma, and quoting is added to any value that now contains a tab, a double quote, or a newline.
Is my file uploaded anywhere?
No. The CSV→TSV conversion runs entirely in your browser via DuckDB-WASM. Your file never leaves your device.
How large a file can I convert?
It's bounded by your browser's available memory rather than any server limit — files in the hundreds of MB are routine. DuckDB runs single-threaded here, so very large files just take a little longer.
Do I need an account?
No — it's free and requires no sign-up.

Do more with your CSV file

Related conversions