Markdown Table Generator🔒 100% local
Generate Markdown tables from pipe-separated or CSV data. Configurable column alignment.
Builds a Markdown table from pasted rows, with a dropdown that sets alignment for every column at once. Despite the page description mentioning CSV data, the parser splits rows only on the pipe character, so comma-separated input becomes a single column holding the literal text. The column count comes from the first row and later rows are padded or truncated to match.
How to use it
- Paste pipe-separated rows, one row per line, with the header first and no separator line of your own.
- Choose None, Left, Center or Right in the alignment dropdown.
- Press Generate Table, then Copy Output. The strip above the output shows the same text with pipes and line breaks written out plainly.
Worked example
Header 1|Header 2|Header 3
---|---|---
Cell 1|Cell 2|Cell 3
Cell 4|Cell 5|Cell 6, alignment Nonebecomes| Header 1 | Header 2 | Header 3 |
|---|---|---|
| --- | --- | --- |
| Cell 1 | Cell 2 | Cell 3 |
| Cell 4 | Cell 5 | Cell 6 |The second line is the separator the tool generates. Because the pasted dashes row is also kept as data, the table ends up with two separator rows; delete that line from the input to avoid it.
Name,Age
John,30 with Center selectedbecomes| Name,Age |
|:---:|
| John,30 |Commas are not delimiters, so this is a one-column table containing the literal text. Use pipes when pasting spreadsheet data.
When to use it
- Writing a table for a README or a pull request description.
- Making a fixed comparison table for a wiki page.
- Converting notes that are already pipe-separated into Markdown without retyping them.
What it does not do
- Alignment applies to all columns at once; there is no way to right-align one column and centre another.
- Empty cells are dropped rather than preserved, so a row of a||c shifts left and no longer lines up under its own header.
- Extra cells beyond the first row's column count are discarded silently, and short rows are padded with blanks.
- The preview strip injects your text into the page as HTML, so a cell containing markup renders instead of being shown literally. Only your own input can be affected, but it makes that strip useless for checking escaped output.
- Multi-line cells and quoted fields are not supported, so a value containing a comma or a line break cannot be represented.