CSV to Markdown Table
Turn CSV into a GitHub-flavoured Markdown table in your browser. Aligned columns, escaped pipes, and nothing uploaded.
Related tools
All Data tools →This tool runs entirely in your browser. Nothing you enter is sent to our servers, so there is nothing for us to store or see.
About the CSV to Markdown Table
Paste CSV and get a GitHub-flavoured Markdown table back as you type — ready for a README, a pull request, an issue comment or any wiki that speaks Markdown. Everything runs in this page on your own device, so nothing you paste is uploaded.
Two characters break a Markdown table and both appear in ordinary data. A pipe inside a value ends the cell early, silently shifting everything after it into the wrong columns — so pipes are escaped. A line break inside a value ends the row, because a Markdown table row is defined as a single line and there is no continuation syntax; those become <br>, which is the only thing that renders as a line break inside a cell on GitHub and most other renderers.
Columns are padded so the raw Markdown lines up as a readable text table in your editor, not just once rendered. That costs a few extra spaces in the source and makes the difference between a table somebody can edit by hand afterwards and one they cannot. You can turn padding off if you would rather have the most compact output possible.
Alignment is set through the delimiter row — :---, :---: or ---: — and applies to every column. Markdown requires a header row for a table to render at all, so if your file has no headings one is generated rather than leaving you with output that quietly refuses to display.
How to use the CSV to Markdown Table
-
Paste your CSV
Paste into the left pane, or drop a .csv file onto it — dropping reads the file locally and never uploads it.
-
Choose alignment
Left, centre or right, written into the delimiter row so every renderer honours it. Choose none for a plain delimiter row.
-
Decide about padding
Leave padding on so the raw Markdown lines up in your editor and can be edited by hand. Turn it off for the most compact output.
-
Copy it in
The table appears on the right as you type. Copy it straight into your README, issue or wiki page, or download it as a .md file.
Frequently asked questions
Is my data uploaded anywhere?
No. The conversion runs inside your browser and nothing is sent to a server. You can disconnect from the internet once the page has loaded and it will keep working exactly as before.
What happens to a pipe character in my data?
It is escaped as \| so it stays part of the value. This matters more than it sounds: an unescaped pipe ends the cell early and shifts every value after it one column to the left, producing a table that renders perfectly well with the data in the wrong places.
Can a cell contain a line break?
Not literally — a Markdown table row is defined as one line and there is no continuation syntax. Line breaks inside a value are converted to a <br> tag, which is what GitHub and most other renderers display as a line break inside a cell. Nothing is lost.
Why does my table have a generated header row?
Because Markdown requires one. A table without a header and its delimiter row does not render as a table at all, so if you untick "First row is a header" the columns are named Column 1, Column 2 and so on rather than handing you output that silently refuses to display.
Should I leave padding on?
Usually yes. Padding aligns the raw Markdown into a readable text table, which is what lets somebody edit a row by hand later without counting pipes. It has no effect on the rendered result, so turn it off only if you want the smallest possible diff.