Markdown Table Validator
Paste a Markdown table to find what stops it rendering, with line numbers, and fix it with one click.
How to validate a Markdown table in 3 steps
Paste the table
Paste the table, or the lines around it, into the Markdown box. It is checked as you type; the badge above shows the issue count and a health score.
Read the issues
Click the issue badge or Options to see each problem with its line number, the offending text and a suggested fix. Filter by errors, warnings and infos.
Auto-repair and copy
Click Auto-repair to rebuild the delimiter row, pad ragged rows, escape pipes and remove hidden characters, then copy the fixed Markdown from the output.
Example
| Field | Type | Required | | --- | --- | | id | string | yes | | tags | string[] | no | deprecated | | email | string
| Field | Type | Required | Column 4 | | ----- | -------- | -------- | ---------- | | id | string | yes | | | tags | string[] | no | deprecated | | email | string | | |
Options explained
- Health badge
- A 0–100% score: each error costs 25 points, each warning 5 and each info 1. The table counts as valid when there are no errors.
- Auto-repair
- Rewrites the table with a valid delimiter row, equal cell counts, escaped pipes, closed code spans and hidden characters removed. It returns only the table, so text above or below it is dropped.
- Severity filter
- Shows all issues or only one level.All · Errors (the table will not render or will misalign) · Warnings (portability or data issues) · Infos (suggestions)
- Platform render predictions
- A quick estimate of whether GitHub, GitLab, Obsidian, Notion and a CommonMark-based renderer would show a table, based on the issues found. It is a heuristic, not a live render.
- Test broken scenarios
- Loads an example with a known problem so you can see how each issue is reported and repaired.Missing delimiter & ragged · Unescaped pipes · Hidden zero-width spaces · No blank line · Clean benchmark
- Reset
- Restores the table the page loaded with.
- Output format and Spacing
- The output panel shows the parsed table in the format you pick. Copying it gives you a cleanly formatted version even if you skip Auto-repair.Markdown (Padded / Compact / No outer pipes) · HTML · CSV · TSV · JSON · LaTeX · SQL · Jira
Related tools
Also useful
Next steps
- Markdown Table FormatterAlign columns and pad cells so the raw table is readable.
- Markdown Table SorterSort rows alphabetically or numerically by any column.
- Markdown Table TransposeSwap rows and columns.
- Markdown Table EditorPaste an existing Markdown table and edit cells visually.
- Markdown Table to ImageRender the table as a PNG or SVG for slides and posts.
Convert Markdown to…
- Markdown Table to CSVExport a Markdown table as RFC 4180 CSV.
- Markdown Table to TSVCopy as tab-separated values that paste cleanly into Excel and Sheets.
- Markdown Table to HTMLExport semantic <table> markup.
- Markdown Table to JSONExport rows as an array of JSON objects.
- Markdown Table to LaTeXExport LaTeX tabular code for papers and Overleaf.
Convert to Markdown from…
- CSV to Markdown TableConvert CSV text or .csv files, including quoted cells.
- Excel to Markdown TablePaste cells copied from Excel straight into a Markdown table.
- Google Sheets to Markdown TablePaste a copied range or a public sheet URL.
- TSV to Markdown TableConvert tab-separated text into a Markdown table.
- HTML Table to MarkdownConvert <table> markup into a Markdown table.
About this tool
When a Markdown table shows up as a block of pipes instead of a table, the cause is usually one character: a delimiter row with one cell too few, a dash missing, an unescaped pipe or an invisible zero-width space pasted from a chat app. The validator checks the table line by line as you type, tells you which line is wrong and why, and Auto-repair rewrites it as a valid GitHub Flavored Markdown table.
- Checks as you type, with line and column numbers
- Finds missing or malformed delimiter rows
- Flags header/delimiter cell-count mismatches and ragged rows
- Detects hidden zero-width characters and unclosed backticks
- Warns about a missing blank line before the table
- One-click Auto-repair to valid GFM
- Runs in your browser; nothing is uploaded
Technical details
What the validator checks
The validator reads the pasted text line by line and checks the table against GitHub Flavored Markdown rules. Errors are problems that stop the table rendering or shift cells; warnings are things that render on GitHub but break elsewhere or lose data; infos are style suggestions.
- Delimiter row: Must be the second line, contain only -, : and |, and have exactly as many cells as the header. Each cell needs at least one hyphen; three is the convention.
- Cell counts: Rows with more cells than the header lose the extras on GitHub; rows with fewer are padded with empty cells. Both are reported so you can decide.
- Escaping: Unescaped | in cell text and unclosed backticks are reported. Write a literal pipe as \|, also inside code spans, because GFM splits cells on | even there.
- Invisible characters: Zero-width spaces and byte-order marks copied from chat apps or documents can break alignment and are flagged.
- Blank line: GitHub renders a table directly under a paragraph, but many renderers and markdownlint (MD058) expect a blank line before it.
- Headers: Empty and duplicate header names are reported because they break CSV and JSON exports and are unclear for screen readers.
Common problems and fixes
The validator says the table is valid but GitHub shows plain text
Cause: The table is indented four or more spaces, sits inside a code fence or a list item with wrong indentation, or the file is not rendered as Markdown (for example a .txt file).
Fix: Start the table at column 0 with a blank line before it, outside code fences, in a .md file.
A pipe inside backticks still splits the cell on GitHub
Cause: GFM splits table cells on | even inside code spans, so `a | b` becomes two cells.
Fix: Write it as `a \| b`. GitHub renders the backslash-escaped pipe as a plain | inside the code span.
Auto-repair added a column called “Column 3”
Cause: A row had more cells than the header, and Auto-repair keeps the data instead of dropping it.
Fix: Rename the new header, or delete the column in the Editor if the extra cell was a mistake.
Frequently asked questions
Why is my Markdown table not rendering?
The most common causes are a missing or malformed delimiter row (the | --- | line under the header), a delimiter row with a different number of cells than the header, a table indented four or more spaces so it becomes a code block, and a missing blank line before the table in renderers other than GitHub. Paste the table above to see which one applies.
Do all rows need the same number of cells?
Only the header and delimiter rows must match exactly; otherwise the table does not render. Body rows can differ: GitHub fills short rows with empty cells and drops extra cells, which silently hides data. The validator reports both cases.
How many dashes does the delimiter row need?
At least one hyphen per cell in GFM, optionally with colons for alignment (:-, -:, :-:). GitHub’s docs use three, which is the convention and what the repaired output uses.
How do I fix a pipe character that splits a cell?
Escape it as \|. That applies inside backticks too: GFM splits cells on | even in code spans, so write `a \| b`. Auto-repair escapes pipes in the output for you.
Does a table need a blank line before it?
Not on GitHub, which renders a table directly under a paragraph line. Many other renderers and markdownlint (rule MD058) expect a blank line before and after, so the validator warns about it.
What does Auto-repair change?
It rebuilds the delimiter row to match the header, pads short rows, turns extra cells into a new column instead of dropping them, escapes pipes, closes unclosed backticks and removes zero-width characters. It returns only the table, so copy it back into your document in place of the old one.
Is the health score the same as “will it render”?
No. The score is a summary (an error costs 25 points, a warning 5, an info 1). Any error means a renderer will likely refuse or misalign the table; warnings and infos are about portability and style.
Is my table uploaded to check it?
No. Validation and repair run in your browser; the table is not sent to a server.