99tools

Markdown Table Builder

runs in your browser

Build a Markdown table in a grid, or paste CSV, spreadsheet cells or an existing table. Align, sort and reorder rows and columns, then copy GitHub Markdown.

Layout

Table

3 columns × 2 rows
ABC
Header row
1
2
Enter moves down a row (Shift+Enter up) and adds one at the end. Paste cells copied from a spreadsheet into any cell to fill the grid from there. Cells you type take Markdown: **bold**, `code`, [links](https://example.com). Up to 200 rows and 20 columns.

Output

80 chars
Format

Preview

rendered as GFM

The rendered table appears here.

Import

Markdown, CSV or spreadsheet cells

The first row becomes the header. In Markdown, the first table found is read, as GitHub reads it. As plain text, the characters Markdown would treat as formatting (such as * _ ` < and [) are escaped so they show as written; this applies to cells pasted into the grid too.

about this tool

Build a table without counting pipes

Type into the grid: the top row is the header, and every row after it is a row of the table. Add rows and columns, move them, sort by any column, swap rows and columns with Transpose, and choose each column's alignment. Enter moves down a row (Shift+Enter moves up) and adds one at the end, so a list can be typed without reaching for the mouse. Sorting, deleting, importing, pasting, Transpose and Clear can each be undone. The Markdown underneath updates as you type, with a GitHub Flavored Markdown preview beside it, and copies or downloads as a .md file — or as the HTML that Markdown renders to, for places that do not read Markdown.

Cells you type take Markdown: **bold**, backtick code, links. The builder handles what a table needs on top of that. Every pipe that is not already escaped gets a backslash, inside code spans too, since otherwise it would end the cell. A line break inside an imported cell becomes <br>, because a table row is a single line. The ends of each cell are trimmed, which a table does anyway. The aligned layout pads every column to one width so the source lines up in a monospaced editor, counting Chinese, Japanese and Korean characters and most emoji as two columns wide, by the Wide and Fullwidth characters of Unicode's East Asian Width table; the compact layout leaves the padding out, and renders the same.

Bring a table in

Paste into the import box and the tool works out what it is. Cells copied from Excel, Google Sheets or Numbers arrive separated by tabs; any tab in the paste makes it read that way. CSV is read properly, with quoted fields, and commas and line breaks inside quotes, and a separator of semicolons or pipes is detected as well as commas. CSV and spreadsheet cells are taken as plain text unless you untick that: anything Markdown would read as formatting — an asterisk, an underscore, a backtick, <, a bracket — gets a backslash, so List<String> or a*b*c shows exactly as it was.

A Markdown table, from a README or a pull request, is read by the rules of the GitHub Flavored Markdown spec and the way cmark-gfm applies them: the header must have as many cells as the delimiter row, outer pipes are optional, \| is a pipe inside a cell, short rows are padded with empty cells, cells past the header's width are left out, and a blank line or the start of another block — a quote, a heading, a list item, a code fence — ends the table. GitHub drops the extra cells without a word; the tool tells you how many. Only the first table in the text is taken, skipping any shown inside fenced code; tables inside block quotes or list items are not looked for. The first row of anything imported becomes the header, since a Markdown table must have one. A block of cells copied from a spreadsheet can also be pasted straight into any cell of the grid, and fills in from there, adding rows and columns as it needs.

Sorting

Sorting orders the body rows by one column. Numbers come first, by value — plain numbers and ones with thousands commas, not ones with a currency sign or a unit, which count as text. Text follows in natural order, so "item 2" comes before "item 10", ignoring case and accents. Blank cells go last whichever way you sort, rows that tie keep their order, and the header row never moves.

Limits

The grid takes up to 200 body rows and 20 columns, and a cell up to 1,000 characters; a Markdown table bigger than that is hard to read as source, and the CSV viewer opens and sorts larger data. Markdown tables cannot merge cells, hold a block such as a list or a code block, or go without a header row (its cells can be left blank) — those are limits of the format, not the tool. Inside backtick code in a table, a backslash cannot be shown right before a pipe: GFM always takes it as escaping the pipe. To see a whole document with its tables rendered, the Markdown editor previews it as you type. Nothing you type or paste leaves the page.

questions

How do I make a table in Markdown?
Write a header row with the cells between pipes, then a delimiter row of dashes, one per column, then a row per line: | Name | Age | on top, | --- | --- | beneath it, and | Ada | 36 | for each row. This is the GitHub Flavored Markdown table extension, which GitHub, GitLab, most static site generators and most Markdown editors read. A table always has a header row, though its cells can be left blank.
How do I align a column left, right or centre?
With colons in the delimiter row: :--- is left, ---: is right, and :---: is centred. A plain --- leaves it to whatever displays the table, which usually means left. Pick an alignment above each column and the builder writes the colons, and in the aligned layout pads the source so it reads as a table in a plain text editor too.
How do I put a pipe character or a line break in a cell?
A pipe has to be escaped as \| or it ends the cell — inside backtick code as well, which the GFM spec requires; the builder adds the backslash for you. A table row is one line, so a cell cannot hold a real line break: <br> is the usual way, and GitHub shows it as a new line. Line breaks inside imported CSV or spreadsheet cells are turned into <br> for you.
Can I turn a spreadsheet or CSV into a Markdown table?
Yes. Copy the cells in Excel, Google Sheets or Numbers and paste them into the import box — they arrive separated by tabs — or paste CSV, with quoted fields, commas and line breaks inside quotes handled, and semicolon or pipe separators detected. The first row becomes the header, and cells are kept as plain text, so an asterisk or a <tag> shows as written. A block of copied cells can also be pasted straight into any cell of the grid.
Can I edit a table that is already written in Markdown?
Paste it into the import box and it is read the way GitHub reads it: optional outer pipes, escaped pipes kept as text, short rows padded with empty cells, and cells past the header’s width left out — the tool says how many, since GitHub drops them silently. Only the first table in the text is taken. Edit it in the grid, then copy it back out.