Open or paste a CSV file and a pipe table appears next to the options, ready for a README, an issue or a wiki page. A | inside a value is written as \| so it can never split a cell, line breaks inside a cell become <br>, and number columns are right-aligned. The file is converted in your browser and never uploaded.
How to convert CSV to Markdown
- Select Open file, drop a
.csv,.tsvor.txtfile on the tool, or choose Paste. The delimiter is detected; set it, the encoding or First row contains column names under Import settings if the guess is wrong. - Pick the Column alignment and how Line breaks inside cells are written. The Markdown tab shows the exact text the download will contain.
- Select Copy to paste the table straight into GitHub, GitLab or your editor, or Download Markdown to save a
.mdfile.
If your file has no header row, turn off First row contains column names: Markdown tables always need a header, so the columns are named Column 1, Column 2 and so on. To render the same data as a web table instead, use CSV to HTML.
Markdown table options
| Numbers right, text default | The default. A column is right-aligned (---:) only if every non-empty value is a plain number; 00731 or 12 kg keep the column at the renderer’s default alignment. |
|---|---|
| Default (none), Left, Center, Right | Apply one alignment to every column: plain ---, :---, :---: or ---: in the delimiter row. |
| Keep as <br> | A line break inside a cell becomes <br>, which GitHub and most renderers display as a new line within the cell. This is the default. |
| Replace with a space | Each line break becomes one space, for renderers that strip HTML. |
| Escape Markdown characters | On by default. *, _, [, ], <, >, #, ~ and the backtick get a backslash so a value such as *fast* or <b> shows as typed instead of becoming formatting or HTML. Turn it off only when the cells hold Markdown you want rendered. |
| Align the columns in the source text | On by default. Pads cells with spaces so the raw .md file reads as a grid. Wide characters such as Chinese, Japanese or Korean count as two columns. Turn it off for the smallest output; the rendered table looks the same. |
Pipes, line breaks and leading zeros
- Pipes and backslashes are always escaped (
\|,\\), even with Escape Markdown characters off, because an unescaped|would start a new cell. - Quoted commas and line breaks are read per RFC 4180, so
"Cable tidy, 3-pack"stays in one cell. Each value that contained a line break is counted in a notice above the preview. - Values are written as text:
00731keeps its zeros and34.90keeps its trailing zero. Nothing is rounded or reformatted. - A blank header becomes
Column 3and a repeated onename (2), so every column has a distinct heading. - Markdown renderers trim spaces at the start and end of a cell, and a table cannot contain lists or paragraphs; keep such content in a separate document.
When the Markdown table renders wrongly
- Text after the table joins its last row. A table ends only at a blank line or the start of another block, so leave an empty line after it.
- All values are in one column. The delimiter was guessed wrong. Set Comma, Semicolon, Tab or Pipe under Import settings and open the file again.
- **Backslashes appear before * or _ in the result.** That is the escaping at work in a renderer that ignores it. Turn off Escape Markdown characters if your data has no formatting characters to protect.
- Line breaks show as a literal tag. The renderer does not allow HTML. Choose Replace with a space under Line breaks inside cells.
Limits and privacy
Files up to 25 MB, 100,000 rows or 2 million cells open with a live preview of the first 200 rows. Larger files are converted in streaming mode: the file is read twice in chunks (once to measure the columns and their widths, once to write), a notice says the download covers the whole file, and Copy is not offered. A single output file is capped at 4 GB.
The conversion runs in a background worker in this tab, so the page stays responsive and Cancel stops it. The CSV is never sent to a server. To check a large file before converting it, open it in the CSV viewer.
Example: a product list as a Markdown table
A product list with a leading-zero SKU, a pipe inside a name, a quoted comma and a two-line note, converted with the default settings. price is right-aligned because every value is a number; sku is not, because 00731 is kept as text.
sku,name,price,note 00731,"Desk lamp | brass",34.90,"Ships in 2 days from Leeds" 00732,"Cable tidy, 3-pack white",4.50,Back-ordered until 14 March 2025 00733,USB-C hub,129.00,
| sku | name | price | note | | ----- | ------------------------ | -----: | -------------------------------- | | 00731 | Desk lamp \| brass | 34.90 | Ships in 2 days<br>from Leeds | | 00732 | Cable tidy, 3-pack white | 4.50 | Back-ordered until 14 March 2025 | | 00733 | USB-C hub | 129.00 | |
Questions and answers
Does the output work on GitHub?
Yes. It is a GitHub Flavored Markdown pipe table: a header row, a delimiter row with optional alignment colons, and one line per CSV row. GitLab, Obsidian and most static-site generators read the same syntax.
Why do I see `\|` in the source?
A plain | ends a cell in a Markdown table. The backslash tells the renderer to show the pipe as text, so Desk lamp | brass stays in one cell.
Can I convert a Markdown table back to CSV?
Not on this page. It converts CSV and TSV into Markdown only.