Utilia

Markdown Table Generator

Build Markdown tables in a grid, paste CSV or spreadsheet cells, set column alignment and copy a neatly aligned GitHub Flavored Markdown table.

The first row is the header. Press Enter to move down a row. Paste cells copied from a spreadsheet into any cell to fill the grid from there.

Preview

Import data

How to create a Markdown table

  1. Type your content in the grid. The first row is the header of the table.
  2. Use Add row, Add column, Remove last row and Remove last column, or the small × buttons, to shape the table. New empty table starts over with a 3 × 3 grid.
  3. Choose the alignment of each column in the menu above it: Default, Left, Center or Right.
  4. Keep Align the columns in the Markdown source checked for a table that is easy to read in plain text, or uncheck it for the shortest possible source.
  5. Copy the result, or download it as a .md file. The Preview shows how the table will look once rendered.

To start from existing data, paste it into Import data, pick a Format (or leave Auto-detect) and click Import. You can also paste a block of cells copied from Excel, LibreOffice or Google Sheets directly into any cell of the grid: the grid grows to fit the block, starting from that cell.

How Markdown tables work

Tables are not part of the original Markdown syntax. They come from the GitHub Flavored Markdown (GFM) specification, which GitHub, GitLab, Bitbucket, most static site generators, Obsidian, Notion exports and many documentation tools support. A GFM table has three parts:

  • a header row, with cells separated by pipes: | Name | Score |;
  • a delimiter row made of dashes, one cell per column: | --- | --- |;
  • any number of body rows.

The delimiter row also sets the alignment. A colon on the left (:---) aligns the column left, a colon on the right (---:) aligns it right, and colons on both sides (:---:) center it. Without a colon, the renderer uses its default, which is usually left.

A header is mandatory in GFM: a table without one is not recognized. If your data has no natural header, give the first row short column names.

Special characters and line breaks

A pipe inside a cell would end the cell, so this tool escapes it as \|. A pipe that is already escaped is left alone, so the output is never escaped twice. Markdown tables cannot contain real line breaks either: a line break inside imported data becomes <br>, which GitHub and most renderers display as a new line within the cell. Everything else, including **bold**, `code` and links, is kept as you typed it, so you can use inline Markdown in cells.

When columns are aligned, wide characters such as Chinese, Japanese or Korean text and emoji count as two columns, so the pipes line up in a monospace editor.

Importing CSV, spreadsheet cells or a Markdown table

Auto-detect first looks for a Markdown table anywhere in the pasted text, with its alignment. Otherwise the text is read as delimited data: tab-separated when the first line has a tab (what spreadsheets put on the clipboard), otherwise comma, semicolon or pipe, whichever appears most. Quoted values such as "Smith, Jr." are handled as in CSV. The grid holds up to 500 rows and 30 columns.

Frequently asked questions

Is my data sent anywhere?

No. The grid, the import and the Markdown output are all handled by this tool in your browser. Nothing you type or paste leaves your device.

Why does my table not render on my site?

Check that your renderer supports GFM tables and that the table has a blank line before it. Some Markdown engines, such as the original Markdown.pl, have no table support at all.

Can I edit an existing Markdown table?

Yes. Paste the whole table into Import data and click Import. The cells and the column alignments are loaded into the grid, ready to edit.

Can a cell contain several lines or a list?

Only inline content. Line breaks become <br>, but block elements such as lists, headings or code blocks are not allowed inside GFM table cells.

Is the aligned version different when rendered?

No. The extra spaces only make the source easier to read and to review in diffs. Both versions render the same table.