Markdown Table Generator

Paste any tabular data — CSV from a spreadsheet, tab-separated from a database export, an existing messy Markdown table — and get a clean, aligned Markdown table. The tool auto-detects the separator, lets you set per-column alignment, and re-renders on every keystroke. Output is ready to drop into a README, a GitHub issue, a docs page, or anywhere else Markdown is rendered.

Column alignment:

      

How to Use This Tool

  1. Paste your data — CSV, TSV, pipe-separated, or even an existing Markdown table. Separator is auto-detected.
  2. Toggle header row if the first line of your input is column headers. Most CSV exports include them.
  3. Set per-column alignment — left, center, right, or default. The alignment selectors appear automatically once data is parsed.
  4. Copy the output — the Markdown table appears below and re-renders on every change. Click Copy to paste into your README, docs, or issue.

About Markdown Tables

Markdown tables aren't part of the original Markdown spec — they were added by GitHub Flavored Markdown (GFM) in 2014 and have since been adopted by every major Markdown renderer in active use: GitHub, GitLab, Bitbucket, Reddit, Discourse, MkDocs, Docusaurus, Hugo, Jekyll, Obsidian, and the standard CommonMark extensions. The syntax is simple: pipes separate columns, hyphens form a separator row, and colons in the separator row control alignment.

The most common pain point is producing tables that render correctly when your data comes from somewhere else — a database query result, a spreadsheet export, a CSV from an API. Hand-converting CSV to Markdown is tedious and easy to get wrong on edge cases like commas inside quoted fields, pipes inside cells, or inconsistent column counts per row. This tool handles all of those automatically.

Tables in Markdown are best for genuinely tabular data — comparison matrices, parameter references, lookup tables, status grids. For more complex layouts (cells with multiple paragraphs, nested lists, images), HTML <table> elements are still allowed inside Markdown and render correctly almost everywhere. Don't try to force everything into a Markdown table; reach for HTML or a different structure when the data doesn't fit.

Frequently Asked Questions

What input formats does this generator accept?
Comma-separated values (CSV), tab-separated values (TSV), and pipe-separated (existing Markdown tables or other pipe-delimited text). The tool detects which separator your input uses by counting consistent separators per line and picks the most likely one. You can also paste an existing Markdown table — separator lines like |---|---| are recognized and stripped so the data flows through cleanly with the alignment markers preserved or replaced by your chosen alignment.
How does column alignment work in Markdown tables?
Markdown table alignment lives in the separator row directly below the headers. A column with :--- is left-aligned, :---: is center, ---: is right, and plain --- is the renderer's default (usually left). This tool generates the appropriate separator based on your per-column alignment selectors and lets you change them after generating without re-pasting the data.
Will this work for GitHub, GitLab, Discord, Slack, or Obsidian?
GitHub, GitLab, Reddit, Discourse, MkDocs, Docusaurus, Obsidian, Notion (with caveats), and most Markdown renderers use GitHub Flavored Markdown's table syntax, which is what this tool produces. Discord and Slack do not render Markdown tables — they fall back to displaying the raw text, which works as a monospace alignment but isn't a true table. For Slack/Discord output, use the pipe-aligned output here but treat it as preformatted text.
How are special characters like pipes inside cells handled?
A literal | inside a cell breaks the table because the renderer interprets it as a column separator. This tool escapes pipes inside cells as \|, which Markdown renderers display as a literal pipe. Other characters with special meaning in Markdown (asterisk, underscore, brackets) pass through unchanged — Markdown rendering inside cells is normal table behavior. Newlines inside a cell are converted to <br> since GFM tables don't support multi-line cells natively.
Why is my output table not aligned visually in the source?
GitHub Flavored Markdown does not require source-level pipe alignment for the table to render correctly — |a|b|c| and | a | b | c | both produce identical rendered output. This tool pads cells to make the source readable, but if your data has very wide cells the source will still look uneven. The rendered table will be aligned correctly regardless. If you want source-level alignment with mixed-width cells, paste the output through a Markdown formatter or your editor's auto-format.