Markdown Table Generator
Turn CSV, TSV, semicolon, or pipe rows into GitHub-style Markdown tables with header detection, pipe escaping, and column audits.- {{ warning }}
{{ markdownOutput }}
| # | {{ header.label }} | Copy |
|---|---|---|
| {{ row.index }} | {{ cell }} | |
| No parsed rows to preview. |
| Column | Header | Alignment | Type | Max width | Fill | Note | Copy |
|---|---|---|---|---|---|---|---|
| {{ row.index }} | {{ row.header }} | {{ row.alignment }} | {{ row.type }} | {{ row.maxWidth }} | {{ row.fill }} | {{ row.note }} | |
| No column audit rows. | |||||||
{{ jsonOutput }}
Introduction:
Markdown tables sit between prose and spreadsheets. They turn a small grid into plain text that can be reviewed in a diff, edited in a terminal, pasted into a pull request, or stored beside documentation without carrying a workbook file. That makes them useful for README comparisons, issue comments, changelogs, runbooks, release checklists, command references, and compact status summaries.
The format is useful because it is simple, but that simplicity has rules. A GitHub Flavored Markdown table has a header row, a delimiter row made from hyphens and optional colons, and then any data rows. Pipes mark the cell boundaries. Raw spacing can make the table easier for humans to read, but the renderer cares more about the pipes, delimiter cells, and column count than about visual padding.
- Header row
- The first row of column names that gives each field a readable label.
- Delimiter row
- The second row, such as
| --- | ---: |, that tells the renderer a table has started and optionally sets alignment. - Literal pipe
- A
|character that belongs inside a cell value rather than between cells. It usually needs a backslash escape. - Ragged row
- A source row with a different number of cells from the intended table width.
Markdown tables work best for compact data: feature matrices, release checklists, short inventories, command references, configuration comparisons, and status summaries. They are weaker for long prose, merged cells, nested lists, formulas, sortable data, or wide tables that require horizontal scrolling. Valid Markdown can still be the wrong format when readers need filtering, calculations, or many columns.
Most table mistakes start before the Markdown is written. A missing comma in CSV can merge two values into one cell. An extra pipe inside a command option can split a cell in two. A first row full of numbers may be data rather than headers. These errors are easier to catch before publishing when source rows are parsed into a grid and the columns are audited instead of counting pipes by eye.
- Use Markdown tables for compact reference data that readers scan left to right.
- Use CSV, TSV, or a spreadsheet when the data needs filtering, formulas, or frequent updates.
- Use prose or lists when cells contain full paragraphs, multiple links, or nested structure.
GitHub-style table syntax is widely supported, but it is still an extension rather than a universal Markdown feature. The final check should always happen in the destination that will render the table, especially when the document moves between GitHub, static-site generators, note apps, wikis, or documentation platforms.
How to Use This Tool:
Start with the source rows, let the parser make a first pass, then inspect the grid before copying the Markdown.
- Paste rows into Source table, drop a CSV, TSV, TXT, or MD file onto the field, or use Browse CSV. Choose a file smaller than 4 MB for browser-side parsing.
- Leave Header row on auto detect for normal spreadsheet exports. Choose Use first row when row one is definitely labels, or Generate Column 1 headers when every source row is data.
- Keep Delimiter on auto detect for comma, tab, and semicolon data. Switch to Pipe when cleaning up an existing Markdown table.
- Use Column alignment for the general marker style. Add Alignment overrides such as
Status:centeror4:rightwhen one column needs a different alignment. - Keep Escape pipes on when cells may contain commands, options, paths, formulas, or labels with a literal
|. - Open Parsed Grid to confirm the row shape, then check Column Audit for inferred type, fill percentage, width, alignment, and notes.
- Copy or download from Markdown Table after the preview, warnings, and audit match the intended table. Paste-test the result in the documentation surface that will render it.
Interpreting Results:
Markdown table ready means the source produced at least one header and a rectangular table after parsing. The summary reports the data-row count, column count, resolved delimiter, header source, and alignment state so you can catch obvious mismatches quickly.
Table notes deserve attention even when the Markdown preview looks clean. A ragged-row warning means at least one source row had too many or too few cells, then the output was padded or trimmed to keep a rectangular table. An unclosed quote warning means a quoted field ran to the end of the source text, which can hide missing line breaks or delimiters.
Parsed Grid is the shape check. Use it to verify that names, statuses, numbers, and notes landed under the expected headers. Column Audit is the quality check: low fill can reveal missing values, an unexpected text type can reveal a delimiter problem, and a right-aligned ID column may need an override if it is a code rather than a quantity.
A clean generated table still needs a paste test in the target renderer. GitHub-style tables need a valid delimiter row, and GitHub's own documentation recommends a blank line before the table. Other Markdown processors may handle alignment, escaped pipes, inline HTML, or wide tables differently.
Technical Details:
GitHub Flavored Markdown treats tables as a block extension. The header row and delimiter row must agree on the number of cells for the table to be recognized. Data rows can be shorter or longer, but that usually means the author should inspect the result because empty cells may be inserted or extra cells may be ignored by a renderer.
Delimited source text has a different failure mode from Markdown. CSV-style quotes can contain separators, so "North, APAC" is one comma-delimited cell. Pipe tables use the same | character both as a separator and, sometimes, as literal content. Escaping literal pipes keeps values such as A\|B inside one Markdown cell.
Transformation Core:
| Stage | What happens | What to verify |
|---|---|---|
| Line normalization | Windows and classic Mac line endings are normalized so rows are handled consistently. | Line breaks in the source should match intended rows or quoted multiline cells. |
| Delimiter choice | Auto mode compares comma, tab, semicolon, and pipe separators outside quoted fields, then chooses the strongest repeated pattern. | The delimiter badge should match the real source format. |
| CSV-style parsing | Double-quoted fields can contain delimiters, and doubled quotes inside quoted fields are treated as literal quotes. | Names or regions with commas should stay in one cell. |
| Pipe cleanup | Leading and trailing empty cells are removed for pipe input, and old Markdown delimiter rows are skipped. | Existing Markdown tables should not keep their old separator row as data. |
| Header handling | Auto mode accepts a non-empty, unique, mostly non-numeric first row as headers; manual modes can force row one or generate numbered headers. | Generated headers mean row one was treated as data. |
| Rectangular output | Rows are padded to the widest parsed row so Markdown, grid, audit, and exports share the same table width. | Ragged-row notes identify source shape problems. |
| Markdown writing | Cells are trimmed when requested, literal pipes can be escaped, multiline cell text becomes <br>, and readable mode pads raw columns. |
Code snippets, options, and long text cells should render in the intended column. |
Markdown Syntax Map:
| Syntax part | Example | Meaning |
|---|---|---|
| Cell separator | | |
Divides one cell from the next. |
| Left alignment | :--- |
Common default for text columns. |
| Center alignment | :---: |
Useful for short statuses, flags, and compact labels. |
| Right alignment | ---: |
Useful for quantities that should scan by digit position. |
| Escaped pipe | \| |
Keeps a literal pipe inside the current cell. |
Formula Core:
The column audit uses simple ratios to summarize sparse and numeric columns. Auto alignment right-aligns a column when at least two thirds of its non-empty values look numeric.
A column with 9 non-empty cells across 10 data rows has 90% fill. If 6 of those 9 cells are numeric, the numeric ratio is 0.67, so auto alignment treats the column as mostly numeric and writes a right-aligned delimiter marker unless an override changes it.
Boundary Checks:
| Situation | Why it matters | Best check |
|---|---|---|
| Wide table | Raw Markdown and rendered output may become hard to scan. | Review the target page on a narrow viewport before publishing. |
| Long prose cell | Markdown tables do not support full block-level content inside cells. | Consider a list or subsection instead of forcing a table. |
| Numeric-looking code | IDs, ZIP codes, or version fragments may be right-aligned as numbers. | Use an alignment override for that column. |
| Destination change | Markdown processors do not all implement table extensions the same way. | Paste-test the final Markdown where readers will see it. |
Limitations, Privacy, and Accuracy Notes:
The parser helps with table shape, escaping, headers, and alignment, but it cannot know whether a value is semantically correct. A wrong owner name, stale status, or misleading column label can still produce valid Markdown.
Source rows and local files are read into the page for parsing. The generated Markdown, parsed grid, column audit, and JSON view are produced from that parsed table. Review any copied or downloaded output before sharing it in public repositories, issues, or documentation.
Markdown tables are not spreadsheets. They do not preserve formulas, merged cells, filters, hidden columns, workbook formatting, comments, or data validation. Export from the original spreadsheet to clean CSV or TSV when you need repeatable input.
Advanced Tips:
- Use Delimiter only when auto detection guesses the wrong source shape. Existing Markdown tables often need Pipe, while spreadsheet exports usually work best with auto detection.
- Set Header row manually when the first row contains IDs, dates, or numbers. Auto mode rejects mostly numeric headers to avoid turning data into labels.
- Keep Escape pipes on for command options, regular expressions, shell commands with a pipe, and labels such as
A|B. A literal pipe that is not escaped can create an extra column. - Use Alignment overrides for numeric-looking identifiers. A column of ZIP codes, versions, or ticket IDs may look numeric even though left alignment is easier to read.
- Raise Preview rows only when the page needs a larger visual check. The full generated Markdown is not trimmed by the preview limit.
Worked Examples:
Spreadsheet feature list. A CSV source starts with Feature,Owner,Status,Score and three data rows. Auto delimiter resolves comma input, auto header mode uses the first row as labels, and Column Audit right-aligns Score when the values are mostly numeric.
Quoted comma in a region name. A row such as "North, APAC",Lina,Ready keeps North, APAC in one cell because the comma is inside quotes. Without the quotes, the parsed grid would show an extra cell and the table could shift to the wrong headers.
Existing pipe table cleanup. Pasted pipe-table source can be parsed with the pipe delimiter. The old delimiter row is removed, leading and trailing pipe-only blanks are normalized, and a new delimiter row is written from the current alignment settings.
Literal pipe inside a value. A cell that should display A|B needs pipe escaping. The generated Markdown writes A\|B, which keeps the pipe inside the cell instead of creating an extra column.
FAQ:
Why did the first row become Column 1, Column 2, and so on?
The selected header rule treated the first row as data. Choose Use first row when row one contains real column labels.
Why are some rows padded with blank cells?
At least one source row had fewer cells than the widest parsed row. The output pads rows so every result view uses the same column count, and Parsed Grid shows where blanks were inserted.
Why did a column right-align automatically?
Auto alignment right-aligns a column when at least two thirds of its non-empty values look numeric. Use an alignment override when numeric-looking text should remain left-aligned.
Can Markdown tables contain line breaks inside cells?
Quoted multiline source cells are kept as one value and written with <br> inside the Markdown cell. Test the result in the destination renderer because line-break handling varies.
Why does a table render as plain text after I paste it?
Check that the header row and delimiter row have the same number of cells, that each delimiter cell has at least three hyphens, and that there is a blank line before the table where the destination requires one.
Does the source table need to leave the browser?
The source rows are parsed in the page. You choose what generated Markdown, CSV, DOCX, or JSON output to copy or download.
Glossary:
- CSV
- Comma-separated values, a common export format from spreadsheets and databases.
- TSV
- Tab-separated values, often useful when text fields contain commas.
- GitHub Flavored Markdown
- A Markdown dialect used by GitHub that includes table syntax as an extension.
- Delimiter
- The character that separates source cells, such as comma, tab, semicolon, or pipe.
- Delimiter row
- The Markdown row of hyphens and optional colons that separates headers from data.
- Column audit
- A review of each parsed column's header, alignment, inferred type, width, fill rate, and note.
References:
- GitHub Flavored Markdown Spec, GitHub, version 0.29-gfm.
- Organizing information with tables, GitHub Docs.