ALL DEVELOPER TOOLS56
CSV to Markdown Table
CSV to Markdown Table — and Back Again
Paste or drop a CSV and get a Markdown table you can put straight into a README. It converts the other way too.
About CSV to Markdown Table
Writing a Markdown table by hand is tedious and getting one out of a spreadsheet is worse, so this does both directions: a CSV becomes a table you can paste into a README, and a table pasted back becomes CSV again. Everything happens in the tab. The part worth caring about is escaping, because it is where hand-rolled converters quietly produce the wrong table rather than failing. A pipe character ends a cell in Markdown, so a single URL with a query string in it turns a two-column table into a three-column one — and the result is still a valid table, just not yours. Pipes are escaped here, and so are backslashes, which would otherwise eat the escape. Line breaks are the other case: a Markdown table row cannot contain one at all, so a multi-line CSV cell becomes a break tag, which is what every renderer expects and what survives a round trip back to CSV. Going the other way, the alignment row is recognised as structure rather than read as data, which is the mistake that inserts a row of dashes into your spreadsheet. Columns are padded so the Markdown source lines up in a plain text editor and in a diff — every renderer ignores that padding, so it costs nothing but readability, and it can be turned off. A ragged CSV, where some rows have fewer fields than others, is padded out rather than rejected, because a table with a missing cell is more useful than an error.
Questions
Why does it escape pipes?
Because a pipe ends a cell in Markdown, so one unescaped pipe silently changes the shape of your table. A single URL with a query string in it turns a two-column table into a three-column one — and the output is still a valid Markdown table, just not the one your data describes, which is why it is easy to miss. Backslashes are escaped too, since otherwise they would consume the escape character.
What happens to a cell with a line break in it?
It becomes a break tag. A Markdown table row cannot contain a real newline at all — the row ends there — so the choice is between a break tag, dropping the break, or refusing the file. The break tag is what every Markdown renderer understands, and it survives a round trip back to CSV, which the other two options do not.
Can it go the other way?
Yes, and the swap button feeds the current result back in, so a round trip is one click. That is worth doing on anything important: if a table comes back out as the CSV you put in, nothing was lost in between. Going from Markdown to CSV, the alignment row is recognised as structure rather than read as data — which is the mistake that inserts a row of dashes into your spreadsheet.
What does 'line the columns up' actually change?
Only the source. It pads each cell with spaces so the table is readable as plain text and in a diff, which is where you will actually look at it. Every Markdown renderer ignores that padding entirely, so the rendered table is identical either way. It is on by default because an unpadded table is unpleasant to read in a pull request, and it can be turned off when you want the smallest possible output.
What if some rows have fewer columns than others?
They are padded out to the widest row rather than rejected. A ragged CSV is common — a trailing comma, an export that omits empty trailing fields — and a table with a couple of empty cells is far more useful than an error message. The row count and column count are shown so you can see what it decided.
Is my file uploaded to a server?
No. Transmute processes everything locally in your browser using JavaScript and WebAssembly. Your files never leave your device — there is no server, no upload, no cloud processing.