100% local — your data never leaves your browser

CSV to Markdown — A Table for Your README

Turn a CSV table into a Markdown pipe table. Paste it into a README, an issue or a pull request and it renders as a table on GitHub.

Instant Private Zero cookies
Delimiter

CSV input

Markdown output

What this tool does

The header row becomes the table header, a | --- | separator follows, and each CSV row becomes a table row. The result is a GitHub-flavoured pipe table you can paste straight into a README, an issue or a pull request description.

The input delimiter is detected, so a semicolon-separated export works unchanged.

What is escaped, and what is not

Only the pipe. A cell containing x|y is written x\|y, because an unescaped pipe would split the cell in two.

Everything else stays Markdown and is rendered as such: *bold* comes out bold, [text](url) becomes a link, # at the start of a cell stays a literal # because headings need their own line. This is deliberate — a table of links or emphasised values is the common case — but it means a cell holding literal asterisks will not survive as written.

The step that cannot be undone

A pipe table row is one line. A CSV field may contain a line break, and there is nowhere to put it: such a cell is flattened, the break replaced by a space.

That is the only lossy part of this conversion, and no option can fix it — the format simply has no room. If the line breaks carry meaning, keep the data in CSV, or build an HTML table instead.

A header row alone is not enough: the tool needs at least one data row to produce a table.

Private by design

Everything runs locally in your browser with JavaScript. Your data is never uploaded, which makes the tool safe for sensitive content, and it keeps working offline.

Frequently asked questions

Why did my cell render as bold?
Because cell contents are left as Markdown. `*bold*` renders bold and `[text](url)` becomes a link — usually what you want in a README. Only the pipe is escaped, because it would otherwise split the cell.
What happens to a line break inside a cell?
It becomes a space. A pipe table row is a single line, so there is no lossless option — this is the one step of the conversion that cannot be undone. If the line breaks matter, keep the data in CSV or use an HTML table.
Can I set the column alignment?
Not here. The separator row is written with plain `---`, which leaves every column at the renderer default. Edit that row afterwards if you want `:---` or `---:`.

Related converters