Skip to content
ALL DEVELOPER TOOLS56
JSON FormatterTXT → JSONJSON to CSVJSON → CSVCSV to JSONCSV → JSONSQL FormatterSQL → SQLMarkdown to HTMLMD → HTMLHTML to MarkdownHTML → MDXML FormatterXML → XMLBase64 Encode/DecodeTXT → B64URL Encode/DecodeTXT → URLJWT DecoderJWT → JSONHTML Entity Encode/DecodeTXT → HTMLUUID Generator— → UUIDPassword Generator— → TXTHash GeneratorTXT → HASHLorem Ipsum Generator— → TXTQR Code GeneratorTXT → PNGColor Picker & Converter— → HEXCSS Gradient Generator— → CSSBox Shadow Generator— → CSSRegex TesterTXT → MATCHCron Expression GeneratorTXT → CRONTimestamp ConverterNUM → DATEText DiffTXT → DIFFText Case ConverterTXT → TXTWord CounterTXT → STATSSubtitle ConverterSUBS → SRT · VTT · ASSYAML to JSONYAML → JSONJSON to YAMLJSON → YAMLYAML FormatterYAML → YAMLJSON MinifyJSON → JSONSort & Dedupe LinesTXT → TXTLine Ending ConverterTXT → CRLF · LF · CRXLSX to CSVXLSX → CSVCharset ConverterTEXT → UTF-8HAR ViewerHAR → TABLE · HARJWT EncoderJSON → JWTHMAC GeneratorTXT → MACFile ChecksumFILE → VERDICTWi-Fi QR Code Generator— → QRChmod CalculatorOCTAL → RWXHTTP Status CodesCODE → MEANINGByte ConverterSIZE → UNITSTime Zone ConverterTIME → ZONESAspect Ratio CalculatorSIZE → RATIOURL ParserURL → PARTSExtract ArchiveARCHIVE → FILES · ZIPCreate ZIPFILES → ZIPUnzip FilesZIP → FILESDOCX to MarkdownDOCX → MDSVG OptimizerSVG → SVGBarcode Generator— → BARCODEQR Code ReaderIMG → TEXTVCF to CSVVCF → CSVICS to CSVICS → CSVCSV to Markdown TableCSV → MDBcrypt Generator— → HASH
ENGINE NATIVE JSACCEPTS CSV MD

CSV to Markdown Table

NATIVE JSTOOL 189 OF 190

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.

ENGINENATIVE JS
ACCEPTSCSV MD
MAX SIZENONE
UPLOADNEVER
01Paste or type CSV into the left pane — it starts with an example you can replace.
02The Markdown table appears on the right as you type; set the alignment if you want it.
03Press Copy to take the table, or Download to save it.

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.

Related