Skip to content
FormatKit

Free Markdown table generator

Markdown tables without counting pipes

Fill in a grid and this free generator writes the pipe table for you — alignment colons in the delimiter row, pipes inside cells escaped, and the whole thing padded so it reads in a diff. No signup and nothing to install. Rows can come from typing, from spreadsheet cells on the clipboard, or from a Markdown table you already have and want to edit further, up to 4,000 cells.

  • 100% free
  • No signup
  • Up to 4,000 cells
  • Paste from a spreadsheet
  • Per-column alignment

3 columns × 3 rows

1
2
3

Enter drops to the next row and adds one at the bottom. ⌘/Ctrl with the arrow keys moves a row up or down.

Markdown

| Flag     | Default | What it does                           |
| -------- | :-----: | -------------------------------------- |
| --watch  | false   | Rebuild whenever a source file changes |
| --out    | dist/   | Directory the bundle is written to     |
| --minify | true    | Strip whitespace and rename locals     |
Pipe style320 characters

How a repository host will draw it

FlagDefaultWhat it does
--watchfalseRebuild whenever a source file changes
--outdist/Directory the bundle is written to
--minifytrueStrip whitespace and rename locals

How to make a Markdown table

From an empty grid to a table in your README.

  1. Fill the grid, or bring rows in

    Type into the cells — Enter drops to the next row and adds one when you reach the bottom, and ⌘/Ctrl with an arrow key moves a whole row up or down. To start from data you already have, copy cells out of Excel, Google Sheets or Numbers and press Ctrl+V (⌘V) with the page in focus; tab-separated, comma-separated and semicolon-separated blocks are all recognised.

  2. Set the alignment on the columns that need it

    Each column header has a small select under it: Default, Left, Centre or Right, showing the delimiter cell it produces — ---, :---, :---: or ---:. Numbers usually want Right and short labels usually want Centre. The right-hand pane redraws immediately so you can see the effect rather than remembering which side the colon goes on.

  3. Take the table in the shape your file wants

    Padded output lines every pipe up, which reads better in a pull-request diff; unticking it gives the compact form, which is identical to the parser and about 40% shorter on a wide table. Copy puts it on the clipboard and Save .md writes table.md.

Technical specifications

Output syntaxGitHub-flavoured pipe tables — one header row, one alignment row, any number of body rows
AlignmentPer column, written into the delimiter row as :---, :---:, ---: or plain ---, and previewed live
Pipe stylesPadded to the column width, or compact; leading and trailing pipes optional on both
Accepted importsTab, comma, semicolon and pipe separated text, RFC 4180 quoting included, plus an existing Markdown table for further editing
EscapingA pipe inside a cell becomes \|, and a newline inside a cell becomes <br> on the way out
Grid ceiling4,000 cells — for example 40 columns by 100 rows
KeyboardEnter moves down and appends a row at the bottom; ⌘/Ctrl with an arrow key moves the current row up or down
Processing locationYour browser — the grid contents are never uploaded
PriceFree, no signup, no row limit beyond the grid ceiling

Frequently asked questions

How do I align a Markdown column?

Put a colon in the delimiter row: :--- is left, ---: is right, :---: is centred, and --- with no colon leaves it to the renderer, which means left in practice. The colons go in the second row of the table — the one made of dashes under the header — and nowhere else; adding them to a data row does nothing. On this page the select under each column header writes them for you, which also avoids the common mistake of putting a colon on only one side and getting left alignment when you wanted centred.

Can a cell contain a line break?

Not as a real newline — a pipe table is defined one row per line, so a newline inside a cell ends the row. The workaround every renderer accepts is a literal <br> tag inside the cell, which this generator inserts for you if you paste multi-line content into the grid. If the content genuinely needs paragraphs, lists or code blocks inside a cell, no pipe table will hold it and you need an HTML table instead.

What if my data contains a pipe character?

It gets escaped as \| automatically, which is the only escape a GFM table understands. That matters more often than it sounds: a regular expression, a shell command with a pipeline, or a union type like string | null in a column of TypeScript signatures will all break the table silently, turning one cell into two. The escape happens on the way out, so the grid keeps showing the character you typed.

Can I paste rows straight out of Excel or Google Sheets?

Yes — a spreadsheet puts tab-separated text on the clipboard, and pressing Ctrl+V (⌘V) anywhere on this page loads it into the grid with the first row read as the header. The delimiter is detected by seeing which of tab, comma, semicolon and pipe splits the sample into a consistent number of fields, with tabs winning a tie because a tab inside a cell is far rarer than a comma. Quoted fields containing the delimiter, and doubled quotes inside them, are handled the way RFC 4180 says.

Can a Markdown table have merged cells or two header rows?

No. The GFM table extension supports exactly one header row, one alignment row and any number of body rows, with no colspan, no rowspan and no nested structure — the grammar has no room for them. If your table needs any of that, write it as an HTML table, which is legal inside Markdown and renders on GitHub, and build it in the multi-format table generator instead.

Why does my table render on GitHub but not in my docs site?

Because tables are not part of Markdown — they are a GitHub extension, and a parser running strict CommonMark treats the whole block as an ordinary paragraph full of pipe characters. Docs generators differ on this: most enable a tables plugin by default, some ship it switched off, and a few support a different table syntax entirely. Before relying on one in a published document, check it under both flavours in the Markdown preview.

Can I edit a table I already wrote?

Yes, paste it back in — press Import data, drop the existing table in the box and press Load into the grid, or just paste it anywhere on the page. The delimiter row is read for the column alignment, cell text comes back exactly as written so **bold** and `code` survive the round trip, and ragged rows are padded to the header width. This is the fastest way to add a column to a table that is already three screens wide.

About the pipe table

The table you are building is not part of Markdown. John Gruber’s original had no tables and CommonMark still has none; the pipe syntax comes from the GitHub-flavoured Markdown specification, where it is one of five extensions bolted onto the base grammar. That inheritance explains its shape. The delimiter row under the header is not decoration — it is the only thing that tells the parser this block is a table at all, which is why a header with three cells over a delimiter row with two produces a paragraph full of punctuation rather than an error. It also explains the limits: one header row, no merged cells, no block content inside a cell, because the grammar reads a table one line at a time.

Padding is the part people argue about, and the answer is that it makes no difference to the output. |a|b| and a neatly aligned block parse to the same table, so the choice is entirely about how the source reads in a pull request. Padded tables diff badly when a value gets longer — one wide cell reflows every line in the block — so the practical habit is to build the content first and pad at the end, which is what the tick box on this page is for. Two escapes are worth knowing regardless of style: a pipe inside a cell must be written \| or it ends the cell, and a newline inside a cell has to become <br> because the row is the line.

If your table has outgrown the syntax — merged headers, a cell with a list in it, a column of paragraphs — stop fighting it and write HTML instead, which Markdown allows inline and repository hosts render. The multi-format table generator takes the same grid and emits HTML, CSV, JSON, SQL, LaTeX and box-drawn text for exactly that reason. In the other direction, if the data is still in a delimited file, load it in the CSV viewer first to check the delimiter and the header row before pasting it here.

Where the grid lives

Everything you type stays in this tab: the grid is React state, the table is built by JavaScript already loaded, and no row is sent to a server. Closing the page discards it — there is no saved document and no account holding one.