CSV to Markdown Table
Paste a CSV, get a GitHub-flavored Markdown table. Headers auto-detected, alignment configurable. Runs in your browser — no upload.
- Paste a CSV into the left textarea.
- Pick column alignment (default keeps the renderer’s choice).
- Click Convert to render. The output appears on the right.
- Copy or download the Markdown — paste it into any GFM-aware target.
What does it do?
Parses CSV with PapaParse and emits a GitHub-flavored Markdown table — header row, separator with optional column alignment, then data rows. Pipe characters and newlines inside cells are escaped or replaced so the table stays valid GFM. Whitespace inside cells is preserved.
Common gotchas
GFM tables have a few formatting rules that surprise people on first use.
- Pipes inside cells. A literal `|` inside a cell breaks GFM table parsing. The output escapes them as `\|` — most renderers accept that, a few legacy tools may not.
- Newlines inside cells. GFM tables do not support multi-line cells. Embedded newlines are replaced with a single space; extreme cases may need post-processing.
- Empty cells. Empty cells render as empty cells (`| |`). Some renderers compress consecutive `|`-`|` to a narrower column — that is a renderer choice, not a CSV-side issue.
- Heterogeneous row lengths. Rows shorter than the header get empty trailing cells; rows longer than the header are silently truncated. Either case produces a parser warning in the status line.
- Numeric IDs that lose leading zeros. Dynamic typing is OFF for this tool — `007` stays as `007` in the output. The CSV parser preserves the source string verbatim.
- Wrong delimiter. PapaParse auto-detects comma, tab, semicolon, and pipe. If the table looks like one giant column, the delimiter wasn’t detected — paste from a known-good source or pre-process to use commas.
Frequently asked questions
Does this support tab-separated input?
Yes — PapaParse auto-detects TSV, semicolon, pipe, and comma. The Markdown output is always pipe-delimited (the GFM standard).
Can I get pipe-aligned (pretty-print) output?
No — output uses single-space padding for compactness. Most editors and Markdown renderers handle the table identically regardless of source-file column alignment. If you need visual alignment in the source, use a Markdown table-formatting plugin in your editor.
Why does the alignment dropdown change all columns at once?
Per-column alignment requires a more elaborate UI than fits in v1. The current control sets the same alignment for every column. To get per-column alignment, copy the output and edit the separator row by hand.
How big a CSV can it handle?
Up to about 10 MB before the textarea slows down. Very large tables are rare in Markdown rendering — most of the time they are paginated rather than scrolled.
Is my CSV uploaded?
No. Everything runs in your browser — your data is parsed by JavaScript on this page and never sent to any server.
Why are my numbers showing as text?
Markdown tables are pure text — there is no number type. The output is always string-encoded. Markdown renderers will style numbers consistently if you apply CSS, but the source is text.