Markdown Table Diff
Compare two versions of a Markdown table and see which rows were added, removed or changed, cell by cell.
| Status | Product | Plan | Price | Status |
|---|---|---|---|---|
| ~ | Pro App | Monthly | $15$19 | Active |
| · | Team App | Annual | $120 | Active |
| - | Enterprise | Custom | $500 | Active |
| + | Solo App | Monthly | $9 | Active |
How to compare two Markdown tables in 3 steps
Paste the old version
Paste the original table into Original Table (Version A). The row and column count appears above the box.
Paste the new version
Paste the updated table into Modified Table (Version B). The Visual Diff Matrix updates as you type: + added, − deleted, ~ modified with old → new values.
Copy the diff
Click Copy Unified Diff to get a ```diff code block that GitHub and GitLab show with red and green lines in a PR or issue comment.
Example
| Product | Plan | Price | | --- | --- | --: | | Pro App | Monthly | $15 | | Team App | Annual | $120 | | Enterprise | Custom | $500 | | Product | Plan | Price | | --- | --- | --: | | Pro App | Monthly | $19 | | Team App | Annual | $120 |
```diff | Product | Plan | Price | | --- | --- | --- | - | Pro App | Monthly | $15 | + | Pro App | Monthly | $19 | | Team App | Annual | $120 | - | Enterprise | Custom | $500 | ```
Options explained
- Version A / Version B
- The two Markdown tables to compare. Each box reads the first pipe table in what you paste; formatting and padding differences are ignored.
- Summary counts
- Rows added, deleted and modified, the total number of changed cells, or “100% Identical” when nothing differs.
- Visual Diff Matrix
- The merged view: unchanged rows plain, added rows marked +, deleted rows marked −, and modified rows showing each changed cell’s old and new value.
- Copy Unified Diff
- Copies a ```diff fenced block: unchanged rows indented, removed rows prefixed with -, added rows with +. A modified row appears as a - line followed by a + line.
- Reset
- Reloads the two sample tables.
Related tools
Next steps
- Markdown Table FormatterAlign columns and pad cells so the raw table is readable.
- Markdown Table ValidatorFind broken delimiter rows, column mismatches and unescaped pipes.
- 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.
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
A line diff of a Markdown table is hard to read: re-padding one column makes every line look changed. This tool compares two tables by their cell values instead, ignoring spacing, and shows which rows were added or removed and exactly which cells changed from what to what. Copy the result as a ```diff block to explain a pricing, config or changelog update in a pull request.
- Cell-level comparison with old → new values
- Counts added, deleted and modified rows; an inserted row is one addition
- Matches columns by header name: added, removed, moved and renamed columns are listed
- Ignores padding and spacing differences
- Copies a ```diff block for GitHub and GitLab
- Live update as you edit either table
- Runs in your browser; nothing is uploaded
Technical details
How the comparison works
Both inputs are parsed into tables first, so differences in padding, outer pipes or delimiter dashes do not count as changes; only cell values do. Columns are matched by header name, and rows are aligned with a longest-common-subsequence over their cells, so an inserted or deleted row is one addition or deletion.
- Row alignment: Rows identical in both versions are matched first. Between them, a row that kept its ID-like first column (unique in both versions) or at least half of its cells is Modified; any other leftover row is Added (only in B) or Deleted (only in A).
- Modified: At least one cell differs (after trimming spaces) in a column that exists in both versions; each change is shown as old → new.
- Columns: Matched by header name, ignoring case and spacing. A column only in B is Added, only in A is Removed, one that changed position is Moved, and one that kept its values under a new name is Renamed. Cells in added or removed columns are shown but not counted as cell changes.
- Unified diff: The copied block shows the header as - / + lines when columns changed, writes each version in its own column order, and escapes | in cells as \|.
- Reordered rows: A row that moved to a different position is reported as a deletion plus an addition; sort both versions by the same key if order does not matter.
Common problems and fixes
A moved row shows as deleted and added
Cause: Rows are matched in order, so a row that changed position is a deletion in one place and an addition in another.
Fix: Sort both versions by the same column (an ID or name) in the Sorter, then compare again.
A column shows as removed and another as added
Cause: A header was reworded, so the two versions share no header name for it (a rename is detected only when the column sits at the same position and most of its values are unchanged).
Fix: Make the header names match in both versions to compare that column’s cells.
The diff block shows as plain text
Cause: It was pasted without the surrounding ```diff and ``` lines, or into a tool that does not highlight diff blocks.
Fix: Paste the whole copied block, including the fences, into a GitHub or GitLab comment or Markdown file.
Frequently asked questions
How do I compare two Markdown tables?
Paste the old table into Version A and the new one into Version B. The matrix below highlights added rows, deleted rows and each changed cell with its old and new value, and the counts show how many rows and cells changed.
Does it ignore spacing and alignment padding?
Yes. Both tables are parsed before comparing, so re-padded columns, compact versus padded style and outer pipes do not register as changes. Only cell values (trimmed) are compared.
How do I show table changes in a GitHub pull request?
Click Copy Unified Diff and paste the block into the PR description or a comment. GitHub renders a ```diff block with removed lines in red and added lines in green.
Why does every row look modified after I inserted one row?
It should not: rows are aligned by content, so an inserted row is reported as one added row and the rest stay unchanged. A row that only moved to a different position is reported as deleted plus added; sort both versions by the same key column if order does not matter.
Can it compare tables with different columns?
Yes. Columns are matched by header name, ignoring case and spacing, so added, removed, moved and renamed columns are listed above the matrix and cells are compared per column. The copied diff shows the header as - and + lines when the columns changed.
Is my data uploaded?
No. Both tables are compared in your browser and nothing is sent to a server.