Skip to content

Markdown Table Generator

Make a Markdown table in a spreadsheet-style grid, set column alignment, and copy Markdown that renders on GitHub.

Row
1
🟢 Done
2
🟡 In Progress
3
Output
| Task                |     Status     | Priority |
| :------------------ | :------------: | -------: |
| Launch website      |    🟢 Done     |     High |
| Write documentation | 🟡 In Progress |   Medium |
| User testing        |   ⚪ Planned   |      Low |
3 rows × 3 columns
Rendered Preview
TaskStatusPriority
Launch website🟢 DoneHigh
Write documentation🟡 In ProgressMedium
User testing⚪ PlannedLow

How to make a Markdown table in 3 steps

  1. Pick a size or a starting point

    Click the size button (it shows rows × columns, e.g. 3×3) and choose a size, or open Templates or Mock data. You can also paste cells from Excel or Google Sheets into the grid.

  2. Type in the grid

    Click a cell and type. Tab moves right and Enter moves down; both add a row when you reach the end. Open a column’s ▾ menu to align it left, center or right.

  3. Copy the Markdown

    The output updates on every keystroke. Click Copy Markdown and paste it into your README, issue or notes, or use Download for .md, .xlsx, CSV or PNG.

Example

Typed into the grid (Price right, Seats center)
Plan      Price   Seats
Free      $0      1
Team      $12     10
Business  $40     Unlimited
Generated Markdown (GFM, padded)
| Plan     | Price |   Seats   |
| :------- | ----: | :-------: |
| Free     |    $0 |     1     |
| Team     |   $12 |    10     |
| Business |   $40 | Unlimited |

Options explained

Size (rows × columns)
Starts a new blank table: hover the matrix, click a preset, or enter exact rows and columns and pick header names. On phones, the Rows and Columns steppers resize the current table and keep your data.Presets 2×2 to 10×5 · up to 100 rows × 50 columns · headers: Col 1, 2… / A, B, C… / Field_1, 2…
Templates
Loads a ready-made table you can edit (API endpoints, SaaS pricing, tech stack, sprint backlog and more). “Convert a bullet list / text” turns pasted lines into rows, splitting on tabs, pipes, commas, semicolons or colons.7 templates
Mock data
Fills the grid with realistic sample rows, useful for testing a layout or a renderer.Users & Contacts · E-Commerce Inventory · Cloud / Server Nodes · Financial & Assets · 3, 5, 10 or 15 rows
Tools
One-click changes to the whole table: header case, auto-align (numbers right, short status values centered, text left), transpose, and quick or deep clean.UPPER · lower · Title Case · Auto-align · Transpose · Quick clean · Deep clean
Cell toolbar
Wraps the selected text in Markdown: bold, italic, inline code, strikethrough or a link, or inserts a status badge. The Rich/Raw toggle shows cells rendered or as raw Markdown.Shortcuts: Ctrl/⌘+B, I, E, K · Ctrl/⌘+Shift+X (strike) · Ctrl/⌘+D (duplicate row) · Alt+↑/↓ (move row)
Column menu (▾)
Per-column actions: set alignment, sort the rows A → Z or Z → A by this column, insert a column left or right, move, duplicate or delete it.
Flavor
Output syntax. GFM is right for GitHub, GitLab, Obsidian and most editors. MultiMarkdown and Pandoc Pipe currently produce the same pipe table as GFM; reStructuredText writes a simple table and Org-mode an Org table.GitHub Flavored (default) · MultiMarkdown · Pandoc Pipe · reStructuredText · Org-mode
Spacing
Padded lines the pipes up in a code editor; Compact removes the padding; No outer pipes drops the leading and trailing | (Prettier style). All three render the same.Padded (default) · Compact · No outer pipes
Collapsible <details>
Wraps the table in <details><summary> so long tables start collapsed on GitHub.Off by default
Credit comment
Appends an HTML comment crediting markdowntables.com. It is invisible when rendered.Off by default
Output format
Tabs above the output switch the same table to another format without re-entering it.Markdown · HTML · CSV · TSV · JSON · LaTeX · SQL · Jira
Download
Saves the active format as a file, or the table as an Excel workbook, CSV or a PNG image..md (or active format) · .xlsx · .csv · .png
Copy link
Copies a URL that reopens this table. The table is stored after #md= in the link, a part of the URL browsers do not send to the server.
Browse all 36 tools

About this tool

Type your table into the grid and the generator writes the Markdown for you: the header row, the delimiter row with alignment colons, escaped pipes and padded columns. Start from a blank size, one of seven templates or mock data, or paste cells straight from a spreadsheet. The same table can be copied as HTML, CSV, JSON, LaTeX, SQL or Jira markup, or downloaded as an Excel file or PNG.

  • Spreadsheet-style grid: Tab and Enter add rows as you type
  • Column alignment written as :---, :---: and ---:
  • Pipes in cells escaped as \| automatically
  • Paste cells from Excel or Google Sheets into the grid
  • 7 templates and a mock-data generator
  • Export Markdown, HTML, CSV, JSON, LaTeX, SQL, Jira, .xlsx or PNG
  • Undo/redo, draft autosave and shareable links
  • Runs in your browser; table contents are not uploaded

Technical details

What the generated Markdown looks like

The generator writes a GitHub Flavored Markdown (GFM) pipe table: a header row, a delimiter row, then one line per row, with cells separated by |. Tables are a GFM extension, not part of core CommonMark (spec 0.31.2), so any renderer that supports GFM tables (GitHub, GitLab, Obsidian, VS Code preview, remark-gfm, markdown-it) shows the output the same way.

  • Header row: The first grid row is always the header. GFM tables cannot be headerless; leave the header cells blank if you do not want visible titles.
  • Delimiter row: One cell per column with at least three hyphens; colons set alignment (:--- left, :---: center, ---: right, --- default).
  • Escaped pipes: A | typed in a cell is written as \|. That includes pipes inside backticks, because GFM splits cells on | even in code spans.
  • Line breaks: Type <br> where you want a break. A real newline would end the row, so pasted multi-line text is converted to <br> too.
  • Padding: Padded output adds spaces so the pipes line up in a monospace editor. Renderers ignore the padding, so it only affects the source.

Common problems and fixes

The pasted table shows up as plain text

Cause: The table is indented four or more spaces (so it becomes a code block), sits inside a fenced code block, or follows a paragraph with no blank line in a renderer that requires one.

Fix: Paste it at the start of a line with a blank line before and after. GitHub renders a table right after a paragraph, but many other renderers and linters (markdownlint MD058) expect the blank line.

I need merged cells, a multi-line list or a heading inside a cell

Cause: GFM tables have no colspan or rowspan, and each cell holds inline content only.

Fix: Use <br> for line breaks and inline HTML such as <ul><li> for short lists. For merged cells, switch to an HTML <table> with colspan/rowspan, which GitHub renders.

Columns shift after editing the Markdown by hand

Cause: A | was added inside a cell without a backslash, so the renderer saw an extra column.

Fix: Write it as \|, or paste the table back into the grid and copy it again; the generator escapes pipes for you.

Platform compatibility

PlatformSupportNotes
GitHub & GitLab SupportedPipe tables with alignment, <br> and inline HTML such as <sub>, <sup> and <kbd> render in READMEs, issues, PRs and wikis.
Obsidian SupportedRenders in Reading view and Live Preview.
Notion SupportedPaste the Markdown and Notion converts it into a simple table.
GitHub Pages (Jekyll) SupportedBuilt with Kramdown, not GFM, but pipe tables and alignment colons work.
CommonMark core ExtensionTables are not in core CommonMark 0.31.2; the renderer needs a GFM table extension.

Frequently asked questions

How do I make a table in Markdown?

Write a header row, then a delimiter row of hyphens, then one line per row, separating cells with pipes: "| Name | Role |", "| --- | --- |", "| Ada | Engineer |". Each delimiter cell needs at least one hyphen (three is the convention) and the header and delimiter rows must have the same number of cells. The generator above writes all of this for you as you type.

Can I merge cells in a Markdown table?

No. GitHub Flavored Markdown has no colspan or rowspan. If you need merged cells, write the table in HTML with colspan/rowspan attributes (GitHub, GitLab and Obsidian render it), or use MultiMarkdown, which spans a cell across columns with ||. Our Merged cells page under Syntax shows each option.

How do I add a line break in a table cell?

Type <br> where the line should break, for example "First line<br>Second line". A real newline ends the table row, so Markdown tables need the HTML tag. GitHub, GitLab, Obsidian and VS Code preview all render <br> inside cells.

Does the table work in GitHub, Obsidian and Notion?

Yes. The default GFM output renders in GitHub and GitLab READMEs, issues and wikis, and in Obsidian Reading view and Live Preview. Pasting it into Notion converts it into a simple table. Discord and Slack messages do not render Markdown tables; use the Unicode box style in the Formatter and send it inside a code block.

How do I right-align or center a column?

Open the ▾ menu on the column header and pick the alignment. The delimiter row then shows ---: for right, :---: for center and :--- for left. Tools › Auto-align does it for every column at once (numbers right, short status values centered).

How do I put a pipe character | inside a cell?

Type it normally. The generator writes it as \| so it does not split the cell, including inside backticks, where GitHub would otherwise still treat it as a column break.

Can I paste data from Excel or Google Sheets?

Yes. Copy the cells, click a cell in the grid and paste. When the grid is blank or still shows the sample, the first pasted row becomes the header and the grid resizes to fit; otherwise the cells are pasted from the cell you clicked.

Is the generator free, and is my table private?

It is free with no signup. The table is built in your browser and not uploaded; a draft is kept in your browser’s local storage so it survives a reload (the restore notice has a Start blank button to discard it). Copy link stores the table in the part of the URL after #, which browsers do not send to the server.