Markdown Table Generator
Type in the grid, copy the pipes. Alignment colons and padding handled for you.
Row 1 is the header row. Pipes you type are escaped automatically.
Everything runs in your browser — nothing you type is uploaded.
What a Markdown table actually is
A Markdown table is three kinds of line stacked together: a header row, a separator row made of dashes, and any number of body rows. Every row is a single line wrapped in pipe characters, and every line must have the same number of pipes. That is the whole format. The separator row is what turns the block into a table rather than a paragraph of pipes, and it is also where column alignment is declared.
Because rows are line-based, whitespace inside a row is cosmetic. |Name|Role| and | Name | Role | render identically. That freedom is why the "pad cells so the pipes line up" option exists: the rendered result never changes, but the raw file becomes readable in a code editor and diffs stay legible in pull requests.
Worked example: a 3 x 3 table
Type a header of Name, Role, Team, then two data rows, and the generator emits this:
| Name | Role | Team |
| :----------- | :------------ | :------- |
| Ada Lovelace | Engineer | Platform |
| Grace Hopper | Compiler lead | Tooling |
Column one is padded to 12 characters because "Ada Lovelace" is the longest value in it; column two to 13 for "Compiler lead". Turn padding off and the same table collapses to | Name | Role | Team | with a bare | :--- | :--- | :--- | underneath. Both render to exactly the same HTML table on GitHub. Padding is for humans reading the source.
Alignment, demonstrated
Alignment is carried by colons in the separator row and nothing else. Set column three to right and column two to center and the separator becomes:
| Item | Qty | Price |
| :------- | :------: | -----: |
| Keyboard | 2 | 89.00 |
| Cable | 12 | 4.50 |
The practical rule for US and UK writers is simple: text left, numbers right, short status labels center. Right-aligned numbers let a reader compare magnitudes by scanning the last digit column, which is why finance and inventory tables in READMEs almost always right-align money. A column with no colon at all is left-aligned by nearly every renderer, but writing :--- makes the intent explicit and survives copy-paste into tools with different defaults.
Escaping pipes and other awkward characters
The one character that genuinely breaks a Markdown table is the pipe itself. An unescaped | inside a cell silently splits it, so a row that should have three cells suddenly has four and the renderer either drops the overflow or shifts everything sideways. The fix is a backslash: a \| b. This generator escapes pipes in your text automatically, so you can paste command lines like ps aux | grep node straight into a cell.
Backticks are safe and useful: wrapping a cell in code formatting stops Markdown from interpreting underscores and asterisks inside it. If you need a literal backslash before a pipe, write two. Angle brackets are passed through as HTML by GitHub, so <div> in a cell should be wrapped in backticks or escaped as <div>. And there is no way to include a real newline inside a cell — a row ends at the line break. Use a <br> tag when the renderer supports HTML, or split the content across two rows when it does not.
Where these tables render, and where they do not
Tables are not part of the CommonMark core specification. They arrived through GitHub Flavored Markdown and were adopted from there. In practice they work on GitHub (READMEs, issues, PR comments, wikis), GitLab, Bitbucket, Gitea, Obsidian, Joplin, Typora, VS Code's built-in preview, Discord messages, Reddit's newer fancy-pants editor, Slack canvases, and static site generators such as Jekyll with kramdown, Hugo with Goldmark, Docusaurus and MkDocs.
They do not work in a strict CommonMark parser with no extensions, in older forum software, in most plain-text email clients, and in some documentation pipelines that predate GFM. If you are writing for an unknown renderer, test one small table before committing to a document full of them. When tables fail, they fail loudly — the reader sees a wall of pipes — so it is usually obvious.
Limitations worth knowing before you start
Markdown tables have no merged cells, no row spans, no column spans, no nested tables and no captions. There is no way to set a column width; the renderer sizes columns from content. If you need any of that, hand-write an HTML table instead, since both GitHub and most static site generators will render raw HTML inside a Markdown document.
Two more practical notes. First, the pipe alignment in this tool counts characters, so columns containing CJK or emoji characters can look ragged in a monospace editor even though the raw file is correct — the rendered output is unaffected. Second, very wide tables are painful on phones; GitHub adds a horizontal scrollbar, but a table with eight columns of prose is usually better restructured as a list. Aim for a table that fits a laptop screen without scrolling, and reach for the column dropdown here to trim before you paste rather than after.
Sources & further reading
Frequently asked questions
How do I set column alignment in a Markdown table?
Alignment lives in the separator row, the line of dashes under the header. A colon on the left (:---) forces left alignment, colons on both sides (:---:) centers the column, and a colon on the right (---:) right-aligns it. Plain dashes (---) leave it to the renderer, which almost always means left. This generator writes those colons for you when you change the alignment dropdowns.
How do I put a pipe character inside a cell?
Escape it with a backslash: \| renders as a literal pipe instead of splitting the cell. An unescaped pipe silently creates an extra column and shifts everything after it. This tool escapes pipes in your text automatically, so you can type a|b and get the right output.
Can a Markdown table cell contain multiple lines?
Not with real line breaks — a table row must stay on one line, so pressing Enter inside a cell ends the row. On GitHub, GitLab and most GFM renderers you can use a <br> tag inside a cell to force a visual line break. That is an HTML fallback, not core Markdown, so plain CommonMark parsers will show the tag as text.
Where do Markdown tables actually render?
Tables are not in the CommonMark core spec; they come from the GitHub Flavored Markdown extension. They render on GitHub, GitLab, Bitbucket, Obsidian, Notion pastes, Discord, VS Code preview and most static-site generators with GFM enabled. Reddit supports them in the newer editor, while plain-vanilla CommonMark parsers and some older forum engines will show the raw pipes.