FreeToGenerate.com

100% free · no sign-up · everything in your browser

3 × 3

Padding only affects the source you copy — every renderer produces the same table either way. It makes the Markdown readable in a plain text editor.

A table cell cannot contain a newline: the row is the line. A literal <br> is the usual workaround, and it only renders where the target allows raw HTML — so it is offered rather than done silently.

| Feature           | CommonMark | GitHub  |
| :---------------- | :--------: | :-----: |
| Headings          | Yes        | Yes     |
| Tables            | No         | Yes     |
| Pipe \| in a cell | n/a        | Escaped |

Pipes inside your cells are escaped automatically. An unescaped pipe ends the cell, which is the one thing that quietly breaks a table.

Tables are not part of CommonMark. They are a GitHub Flavored Markdown extension, so a renderer implementing only the core specification shows this as a paragraph of literal pipes.

Paste Markdown here to load it back into the grid above.

Also available in: Español · Português · Français · العربية

Markdown table generator

Fill in a grid and get valid Markdown, with the pipe escaping handled and the one fact about tables that trips people up spelled out.

What is a Markdown table generator?

Markdown tables are written as rows of text separated by pipe characters, with a row of dashes under the header. Typing them by hand is fine for three columns and miserable for eight, especially once you want the source lined up so it stays readable in an editor.

This one gives you a grid. Type into cells, add and remove rows and columns, set the alignment per column, and the Markdown updates as you go. Paste an existing table into the box at the bottom and it loads back into the grid so you can edit it.

Everything runs in your browser. Nothing is uploaded and there is no account.

How to use the Markdown table generator

  1. Fill in the grid. Add or remove columns and rows with the buttons above it. Each column header has four alignment buttons — default, left, centre and right — which write the colons into the dashed row for you.
  2. Choose how the source looks. Outer pipes and column padding are both optional and neither changes the rendered table; they only affect how readable the Markdown is in a plain text editor.
  3. Copy it, or paste one in. The copy button takes the Markdown. The box at the bottom goes the other way: paste a table and it is parsed back into the grid, or you get told why it is not a table.

Tables are not part of Markdown

This is the thing worth knowing before you paste a table anywhere, and it is easy to demonstrate rather than assert. CommonMark — the specification most Markdown parsers implement — has no table syntax at all. Not a limited version, not a different syntax: none.

This site already ships a CommonMark engine on its Markdown-to-HTML page, chosen because it scores 649 of the specification's 652 test cases. Hand that engine a perfectly ordinary table and it produces a paragraph containing literal pipe characters. There is no table element in the output, because as far as the specification is concerned you typed a sentence with some punctuation in it.

Tables come from GitHub Flavored Markdown, an extension GitHub defined and documented separately. That is why the same text renders as a table in a README, a GitHub issue and most documentation tools, and renders as a line of pipes in something that implements only the core specification. If a table you copied somewhere has ever shown up as gibberish, that is the reason, and it is not a bug in what you wrote.

The extension's rules are precise and this tool follows them. The dashed delimiter row is required — without it there is no table. The header row and the delimiter row must have the same number of cells, and the specification is explicit that if they do not, the table is simply not recognised. Body rows may vary: fewer cells than the header and empty ones are inserted, more and the excess is discarded. Alignment is a colon on the delimiter, left, right, or both for centred. Leading and trailing pipes are recommended for readability but not required.

The one that actually bites is the pipe. A pipe inside a cell ends that cell, so a row like “Salary | bonus” quietly becomes two columns and everything after it shifts. The specification says to escape it as a backslash followed by a pipe, and this tool does that for every cell automatically. Worth knowing that renderers vary on honouring the escape — the CommonMark-preset parser here splits an escaped pipe anyway — so a cell containing a pipe is the single most likely thing to break a table you did not write yourself.

Honest limitations

A cell cannot contain a line break. The row is the line, so there is no syntax for a second line inside a cell, and no amount of escaping produces one. The common workaround is a literal HTML break element, which this tool offers as an option rather than doing silently, because it only renders where the destination allows raw HTML — many Markdown pipelines strip it.

Cells hold inline Markdown only. Bold, italics, code spans and links all work inside a cell; headings, lists, block quotes and fenced code blocks do not, because those are block-level constructs and a cell is not a block. A bulleted list inside a table cell is a thing people reach for and it has no Markdown spelling.

Column padding is cosmetic. Lining the source up makes the raw text readable and has no effect whatsoever on what a renderer produces, so if your table is generated or very wide, turning it off costs you nothing but a tidy diff. It does make the file bigger, which matters if you are hand-editing a table with fifty rows.

The parser here applies the specification's recognition rule strictly, which means it refuses some things a lenient renderer would accept. That is deliberate: if the delimiter row does not match the header, the tool tells you rather than guessing, because a renderer that guesses differently is where the surprise comes from.

The engine carries 64 assertions, and the load-bearing one is a round trip through a real renderer rather than a table of expected strings — build a table, render it, check the cells that come out are the cells that went in. That is what catches the escaping, the padding and the delimiter row at once. A deliberate sabotage that stopped escaping pipes made the built table stop being a table at all, which is the page's argument demonstrated by its own test suite.

Why is it free?

Joining strings with pipes is not work anyone should pay for, and it happens on your machine. Nothing is uploaded, there is no account, and there is nothing to watermark.

If you have HTML rather than a grid, the HTML-to-Markdown converter on this site turns a table element into this syntax directly, and the Markdown-to-HTML page is the CommonMark engine described above.