Free tool

Markdown table generator

This free markdown table generator (also called an md table maker) turns a spreadsheet- style grid into clean, properly aligned GitHub-flavored Markdown. Type into the cells or paste data straight from Excel or Google Sheets, set alignment per column, and copy or download the finished table — no account, no server, no formatting headaches.

Markdown table generator

Build a table in a spreadsheet-like grid, or paste data from Excel/Sheets, and get clean GitHub-flavored Markdown plus a live preview — instantly.

Free & unlimitedNo upload — 100% privateGFM compatible

Edit your table

Tab moves between cells, Enter moves down a row (adding one if needed). Click the alignment icon in a header to cycle left → center → right.

Markdown

| Column 1 | Column 2 | Column 3 |
| -------- | -------- | -------- |
|          |          |          |
|          |          |          |
|          |          |          |

Preview

Column 1Column 2Column 3
emptyemptyempty
emptyemptyempty
emptyemptyempty

Everything happens locally in your browser — your table data is never uploaded to a server, so this works offline once the page has loaded and stays private for sensitive data.

How to make a markdown table

  1. Fill in the grid. The editor starts with a 3×3 grid — click any cell and type. Use Tab to move to the next cell and Enter to drop down a row.
  2. Or paste your data. Switch to Paste data, copy a range from Excel or Google Sheets, and paste it in. The tool detects tabs or commas automatically and fills the grid for you.
  3. Add rows and columns. Use the + Row and + Column buttons to grow the table, or the minus buttons on any row or column header to remove one.
  4. Set alignment. Click the alignment icon next to a column header to cycle it between left, center, and right — this controls the colons in the separator row of the generated markdown.
  5. Copy or download. The markdown pane on the right updates live. Copy it straight to your clipboard, or download it as a standalone .md file.

Everything — grid editing, parsing pasted data, and generating markdown — happens locally in your browser. Nothing is ever uploaded, so this works for sensitive spreadsheets and internal documentation alike.

Markdown table syntax, explained

A markdown table is built from three kinds of lines: a header row, a separator row, and one or more data rows. Every row starts and ends with a pipe character (|), and each cell is separated by another pipe:

| Name         | Role      | City    |
| ------------ | --------- | ------- |
| Ava Thompson | Engineer  | Austin  |
| Liam Chen    | Designer  | Toronto |

The second line — the separator row — is what tells a markdown renderer “this is a table, not just text with pipes in it.” It must contain at least three dashes per column (---), and the number of columns in the separator row must match the header row exactly. Leading and trailing pipes on each line are optional in most parsers, but including them (as this tool does) is the most compatible and readable form, and it's what padding relies on to look tidy in a raw text editor.

You don't need to manually align the pipes for the table to render correctly — markdown parsers only care about the pipes and dashes, not whitespace. But padding every column to the same width, the way this generator does by default, makes the raw markdown far easier to read and edit by hand, especially in a README or a pull request diff.

Alignment colons: left, center, and right

Markdown tables support per-column alignment using colons in the separator row. This is the one piece of table syntax that trips people up most often, so here's exactly how it works:

AlignmentSeparator syntaxExample
Left (default)---| --- |
Center:---:| :---: |
Right---:| ---: |

A colon on the left side of the dashes (:---) means left-aligned, a colon on both sides (:---:) means centered, and a colon only on the right (---:) means right-aligned. No colons at all defaults to left alignment in virtually every renderer. In this tool, you don't need to remember any of that — click the alignment icon in a column header (it cycles ⬅ left → ↔ center → ➡ right) and the correct colon syntax is generated for you automatically.

Alignment is purely a rendering hint. It changes how the cell text sits inside the rendered<table>, but it has zero effect on the underlying data — sorting, parsing, or converting the table elsewhere will treat every cell the same regardless of its alignment.

GFM support: where markdown tables work (and where they don't)

Tables are not part of the original Markdown specification written by John Gruber in 2004 — they were added later by GitHub as an extension, now known as GitHub Flavored Markdown (GFM). GFM tables are the de facto standard today and are supported almost everywhere you'd expect:

  • GitHub and GitLab — READMEs, issues, pull request descriptions, wikis
  • Static site generators — Jekyll, Hugo, Docusaurus, VuePress, MkDocs
  • Documentation tools — Notion (via markdown import), Obsidian, Confluence markdown macros
  • Chat and dev tools — Slack (limited), Discord (no tables), many AI chat interfaces
  • Static blog engines and CMSs that render Markdown, like Ghost and Gatsby

A few places don't support GFM tables at all — plain CommonMark renderers, some email clients, and a handful of chat apps will just show the raw pipes and dashes as literal text. If your target doesn't render GFM tables, you'll need an HTML <table> instead; you can always paste the markdown into a converter like our markdown to HTML converter to get plain HTML markup that works anywhere.

Escaping pipes and other special characters

Because the pipe character (|) has special meaning inside a markdown table, any pipe that appears inside a cell's actual content has to be escaped with a backslash, or it will be misread as a column boundary and quietly break your table's structure. For example, if a cell needs to contain cost | revenue, it must be written as cost \| revenue. This tool escapes pipes for you automatically, so you can type or paste | directly into any cell without thinking about it.

The other character worth knowing about is the line break. Standard markdown table cells cannot contain a real newline — the table syntax is line-based, so a raw newline inside a cell would end the row early. To put a line break inside a cell, use the HTML tag <br>, which every GFM renderer honors inside table cells even though raw HTML isn't otherwise common in markdown tables. If you paste multi-line data into a cell here, it's converted to <br> automatically so the table structure stays intact.

Backslashes themselves are also escaped (as \\) so that a literal backslash in your data isn't misread as the start of an escape sequence for a following character.

When tables beat lists (and when they don't)

Markdown gives you two main ways to present structured information: a table, or a bulleted/numbered list. Choosing the right one makes a real difference in how easy your content is to scan.

Reach for a table when:

  • You're comparing the same attributes across multiple items — pricing tiers, feature comparisons, API parameters with type/required/default columns, or a changelog with version/date/notes.
  • Readers need to scan a column, not just a row. A table lets someone's eye track down a single column (e.g. every “price”) far faster than hunting through nested list items.
  • The data is naturally tabular — rows and columns with a consistent shape, like a spreadsheet export or a database result set.

Stick with a list when:

  • Items don't share the same attributes. Forcing dissimilar content into columns often produces a table full of empty or awkward cells.
  • You have long, prose-like content per item. Tables compress badly when cells need multiple sentences — a list with bold labels reads better.
  • Order or hierarchy matters more than comparison — step-by-step instructions, nested outlines, or a simple checklist are all better served by an ordered or nested list.
  • The table would only have one or two columns. At that point a table adds visual noise without adding scannability — a plain list does the same job with less syntax.

A good rule of thumb: if you catch yourself explaining “column two is X and column three is Y” for every single item, it's a table. If you're explaining one thing about each item, it's a list.

Common markdown table mistakes to avoid

  • Mismatched column counts. Every row — header, separator, and data — must have the same number of cells. A row with a missing pipe silently shifts every column after it.
  • Fewer than three dashes. Some strict parsers require at least three dashes (---) per column in the separator row; one or two dashes can fail to render as a table.
  • Unescaped pipes in cell content. A stray | inside a cell (like in a code snippet or a Unix path) will break the row unless it's escaped as \|.
  • No blank line before the table. Many markdown renderers require a blank line between the preceding paragraph and the table, or the table won't be recognized at all.
  • Trying to nest another table or a multi-paragraph block inside a cell. Table cells are single-line; nested block-level markdown generally isn't supported.

Building your table with a grid editor like this one sidesteps all of these — the column counts always match, the separator row is generated correctly, and pipes are escaped automatically.

Who uses a markdown table generator?

  • Developers building README files, API documentation, and comparison tables in pull request descriptions without hand-aligning pipes.
  • Technical writers maintaining docs sites (Docusaurus, MkDocs, Hugo) that render GFM markdown directly from source files.
  • Product managers pasting a spec or comparison straight from a spreadsheet into a Notion page, wiki, or Linear/GitHub issue.
  • Students and researchers formatting data tables for markdown-based note apps like Obsidian or for a static academic site.
  • Open-source maintainers keeping a CHANGELOG, contributor list, or feature matrix tidy and consistently formatted across many edits.

Frequently asked questions

How do I make a table in markdown?
Write a header row, a separator row of dashes (at least three per column, wrapped in pipes), and one or more data rows — each cell separated by a pipe character. This tool builds all three lines for you from a spreadsheet-style grid, so you never have to hand-align the pipes.
How do I align columns in a markdown table?
Add colons to the separator row: :--- for left, :---: for center, and ---: for right. Click the alignment icon on a column header in this tool and it inserts the correct colons automatically.
How do I put a line break inside a markdown table cell?
Use the HTML tag <br> inside the cell — a real newline isn't allowed because table syntax is line-based. This tool converts any multi-line paste into <br> automatically to keep the table structure intact.
How do I escape a pipe character inside a table cell?
Put a backslash before it, like \|, so it's treated as literal text instead of a column separator. This tool escapes every pipe in your cell content automatically when it generates the markdown.
Can I paste data from Excel or Google Sheets?
Yes. Switch to Paste data mode and paste a copied range directly — the tool detects tabs (from Excel/Sheets) or commas (from CSV) automatically and fills the grid, using the first row as the header.
Do markdown tables work everywhere?
Tables are a GitHub Flavored Markdown (GFM) extension, not part of original Markdown, but GFM is the de facto standard — GitHub, GitLab, most static site generators, and note apps like Obsidian all support it. A few strict CommonMark renderers and some chat apps don't; convert to HTML if you need universal compatibility.

Build the table, then shorten the link

fewly turns any URL into a short, branded, trackable link — free to start, no credit card.