How the table generator works

The grid sits at the top of this page, and it behaves like a very small spreadsheet. You type into cells, not into punctuation, and the Markdown pane below writes itself.

In short
  • This page is for tables you are inventing; to convert one you already have, use the table to Markdown converter.
  • The top row of the grid is the header, and every row under it is data.
  • Each column has its own left, center and right button, so the delimiter row is never typed by hand.
  • The grid is JavaScript in your own tab, so nothing you type is uploaded.

Set the size, then fill the cells

Start by choosing how many columns the table needs, and how many data rows will sit under the header. Nothing is locked in, so guess roughly and adjust as the content takes shape.

Then type. Move between cells with Tab and Shift+Tab, or click straight into the one you want. Cell contents can carry inline formatting, so **bold**, `code` and [label](https://example.com) behave exactly as they do everywhere else in Markdown.

Set alignment with one click per column

Above each column is a control for left, center or right. This is the part hand-written tables get wrong most often, because alignment depends on a row of colons and dashes that is easy to mistype. Here it costs one click.

Copy the output, keep the data

The Markdown pane updates as you type, so the syntax on screen is always current. Paste it into a README, a GitHub issue, a wiki page, a Discord message, or into the MD Editor on our homepage if you want to carry on writing the document around it. The other Markdown tools run the same way, with nothing sent to a server.

Tip: Decide the columns before you type a single cell. Adding a column later means revisiting every row, which is the one edit a grid does not make painless.

Illustration of a spreadsheet-style grid on the left turning into pipe-delimited Markdown table syntax on the right

From grid to Markdown: a worked example

Say you need a small pricing table with four columns and four data rows. The header cells are Plan, Seats, Price and Support. Two columns stay left aligned because they hold names, Seats is centered because the values are short, and Price is set right so the numbers line up on their last digit.

Fill in the four data rows and the generator produces exactly this:

| Plan       | Seats | Price | Support   |
| :--------- | :---: | ----: | :-------- |
| Starter    |   3   |    $0 | Community |
| Team       |  25   |   $49 | Email     |
| Business   |  100  |  $149 | Priority  |
| Enterprise | 500+  |  $299 | Dedicated |

Three details in that block are worth a closer look.

Three details in the output

  • The second line is the delimiter row, and it is not decoration. Without it the block is not a table at all, only six lines of text with pipe characters in them.
  • The colons carry the alignment. :--- means left, :---: means center, and ---: means right.
  • The padding spaces are cosmetic. Renderers strip them, which is exactly why editing a wide table by hand is such a chore.

The same table in five steps

  1. Set the grid to four columns and four data rows.
  2. Type the four header cells along the top row.
  3. Click center above Seats and right above Price.
  4. Fill in the data rows, one plan per row.
  5. Copy the Markdown pane and paste it where the table belongs.

Paste that block into the editor and the preview confirms the result before it ever reaches your README. If any of the syntax looks unfamiliar, the cheat sheet has the whole language on one page, and what Markdown actually is explains why punctuation turns into formatting.

Alignment: the one row that does the work

Alignment lives entirely in the delimiter row, the second line of every Markdown table. Each cell in that row describes the column above and below it.

Every delimiter cell, valid and invalid

This reference covers every form you are likely to meet, including the four that quietly break the table.

Delimiter cellAlignmentValid in GFMNotes
---DefaultYesRenders left in almost every viewer
:---LeftYesExplicit left, the safest choice for text columns
:---:CenterYesA colon on both ends
---:RightYesThe convention for numbers, prices and dates
:-:CenterYesOne dash is enough, longer runs are cosmetic
-DefaultYesThe shortest legal delimiter cell
: --- :NoneNoA space between colon and dashes voids the cell
===NoneNoEquals signs are never accepted, the table fails
Delimiter row missingNoneNoWithout it the lines stay plain text with pipes
Fewer cells than the headerNoneNoCell counts must match the header row exactly

Two habits that keep alignment useful

  • Right align anything numeric. A column of prices or counts is far easier to compare when the digits stack up.
  • Treat alignment as presentation only. Some static-site themes override it in CSS, and plain-text viewers ignore it. Use it to help people scan, never to carry meaning.

Watch out: A malformed delimiter cell does not produce a wonky table. It produces no table at all, and the whole block drops back to plain text with visible pipes.

Why tables are an extension, not core Markdown

Tables came to Markdown through GitHub, not through the original 2004 specification, so they belong to the GitHub Flavored Markdown dialect. Almost everything modern supports them, but a strict CommonMark parser with no extensions will not. For the full picture of what can go inside a cell, see the Markdown tables guide, and how to make a table in Markdown answers the question in short form.

Pasting from Excel, Google Sheets or a CSV

Some tables are half invented and half copied. You are drafting a comparison here, but the numbers already sit in a sheet somewhere. The grid takes those rows directly.

Tab-separated cells from a spreadsheet

Copy a block of cells out of Excel, Numbers or Google Sheets and the clipboard carries them as tab-separated values: one line per row, a tab between columns. Paste that into the grid and it splits back into cells on its own. A forty-row table then costs one keystroke instead of forty careful lines.

Comma-separated CSV text

CSV behaves the same way. This is what a small export looks like:

Region,Q1,Q2
North,1420,1655
South,980,1130
East,2075,1980

Paste it in, set the two number columns to right alignment, and you get:

| Region |   Q1 |   Q2 |
| :----- | ---: | ---: |
| North  | 1420 | 1655 |
| South  |  980 | 1130 |
| East   | 2075 | 1980 |

Two kinds of cell need attention before you paste.

Two cells that need care

  • A cell holding a pipe character. | is the column separator, so the row splits in two. Escape it as \| and the cell survives. This bites anyone documenting keyboard shortcuts, regular expressions or command-line syntax.
  • A cell holding a line break. A table row has to sit on one line, so replace the break with <br>.

Already have the whole table? Use the converter

There is a line worth drawing here. If the table is finished and you only want it as Markdown, this grid is the long way round. Send it to the table to Markdown converter instead, which reads spreadsheet cells, CSV text or a raw HTML <table> and returns the syntax in one paste.

Tip: Building something new, cell by cell? Stay here. Translating something that already exists? Convert it. That single question decides which page saves you time.

For whole documents rather than single tables, the HTML to Markdown converter handles a pasted page, and Markdown to HTML covers the reverse trip.

What goes wrong, and the fix

A broken Markdown table almost always fails in one of four ways, and each has a symptom you can see.

The table renders as text with visible pipes

Nine times out of ten the delimiter row is missing or malformed, or the table has no blank line above it. A table needs an empty line between it and the paragraph before, and its second line must be the dashes-and-colons row.

The column counts do not match

If the header has four cells and the delimiter row has three, most parsers refuse to build the table at all. A pipe inside your data causes the same fault from the other direction, since it adds a cell where you did not want one. Escape it as \|. Backticks will not save you, because inline code does not protect a pipe inside a table cell.

Generating the grid removes this failure mode completely, which is the main reason to use a generator on anything wider than three columns.

Alignment appears to be ignored

Check the destination rather than the syntax. Some documentation themes and email clients strip table CSS, and a few older parsers support tables without supporting alignment. Preview the result in the Markdown viewer or the editor to confirm the syntax is right before you blame it.

The table is too wide, or a cell is too big

  • Nine columns. Unreadable on a phone, and clipped when the page is saved as a PDF. Cut optional columns, shorten the headers, or turn the table on its side so the long axis runs down the page.
  • Line breaks vanishing inside a cell. That is expected behaviour. Use <br> instead.
  • A cell that wants paragraphs, a list or a code block. The content has outgrown a table. Split it into headed sections, or write that part as raw markup, a trade-off Markdown versus HTML discusses.

Support data verified

Frequently Asked Questions

Is this Markdown table generator free?

Yes, completely. There is no account, no limit on rows or columns, and no watermark on the output. The grid runs as JavaScript inside your browser, so the data you type is never uploaded to a server.

Can I set a different alignment for each column?

Yes. Every column has its own left, center and right control, and the generator writes the matching delimiter row: :---, :---: or ---:. Right alignment is the usual choice for numbers and currency.

Can I paste a table from Excel or Google Sheets?

Yes. Copy the cells in your spreadsheet and paste them into the grid. The clipboard carries tab-separated values, which the generator splits back into rows and columns. Comma-separated (CSV) text works the same way.

Which platforms render Markdown tables?

Tables come from the GitHub Flavored Markdown extension, so GitHub, GitLab, Discord, Obsidian, Notion, VS Code and most static site generators all handle them. A strict CommonMark parser with no extensions enabled will not.

How do I put a pipe character inside a cell?

Escape it with a backslash: \|. Without the backslash the parser treats it as a column separator and the row breaks apart. The tables guide covers escaping and other cell-content edge cases.

Keep learning

Try the Editor

Open Editor