Formatting a Markdown table by hand is tedious. Counting pipes, lining up dashes, and keeping columns aligned eats time you could spend writing. A Markdown table generator handles the formatting so you can focus on the content.
Generate Markdown tables instantly →
GFM Table Syntax in 60 Seconds
GitHub Flavored Markdown (GFM) tables are the standard format supported by GitHub, GitLab, VS Code, Obsidian, Notion, and most Markdown renderers.
The structure:
| Name | Role | Status |
|---------|-----------|--------|
| Alice | Engineer | Active |
| Bob | Designer | Active |
| Charlie | Manager | Away |
Three rules:
- Header row: column names separated by pipes (
|) - Separator row: dashes and optional colons for alignment
- Data rows: one record per line
That’s it. Leading and trailing pipes are optional but recommended for readability.
Column Alignment
Control alignment with colons in the separator row:
| Syntax | Alignment |
|---|---|
--- or :--- | Left (default) |
:---: | Center |
---: | Right |
Example — mixed alignment:
| Item | Qty | Price |
|:---------|:----:|--------:|
| Widget | 10 | $9.99 |
| Gadget | 3 | $24.99 |
| Doohickey| 25 | $1.49 |
Rendered, the Item column is left-aligned, Qty is centered, and Price is right-aligned — useful for numeric columns.
How to Use the Markdown Table Generator
The tool offers three input modes:
Manual Visual Editor
Start with an empty grid and type directly into cells. Buttons let you:
- Add Row / Remove Row — grow or shrink the table vertically
- Add Column / Remove Column — adjust width on the fly
- Alignment selector per column — choose left, center, or right from a dropdown in each header cell
The Markdown output updates live as you type. Click Copy to grab the formatted table.
Best for: creating a table from scratch when you know the structure and have a small dataset.
CSV Paste
Paste CSV data — from a spreadsheet export, a database query result, or a text file. The tool auto-detects the delimiter (comma, tab, or semicolon) and parses it into the visual editor and Markdown output simultaneously.
Example — paste this:
language,paradigm,year
Python,multi-paradigm,1991
Go,concurrent,2009
Rust,systems,2015
TypeScript,typed,2012
And get this Markdown table:
| language | paradigm | year |
|------------|----------------|------|
| Python | multi-paradigm | 1991 |
| Go | concurrent | 2009 |
| Rust | systems | 2015 |
| TypeScript | typed | 2012 |
Best for: converting spreadsheet data or query results to documentation tables.
JSON Paste
Paste a JSON array of objects. Keys become the header row; values populate data rows. If your API returns a list of records, you can paste it directly.
Example — paste this:
[
{ "endpoint": "/users", "method": "GET", "auth": true },
{ "endpoint": "/login", "method": "POST", "auth": false },
{ "endpoint": "/profile", "method": "PUT", "auth": true }
]
Result:
| endpoint | method | auth |
|----------|--------|-------|
| /users | GET | true |
| /login | POST | false |
| /profile | PUT | true |
Best for: documenting API responses, configuration objects, or any structured data you already have in JSON format.
Pipe Characters in Cell Content
GFM tables use | as a column delimiter, so literal pipes inside cell content must be escaped as \|. The generator handles this automatically.
Manual example:
| Expression | Meaning |
|------------|---------------------|
| `a \| b` | Logical OR |
| `a && b` | Logical AND |
| `a ?? b` | Nullish coalescing |
If you’re writing tables by hand, remember to escape any pipe characters in your content. The tool does it for you when you use the visual editor or import mode.
Common Use Cases
README tables — dependency lists, feature comparison matrices, configuration options. These are the most common Markdown tables in the wild.
| Package | Version | License |
|---------------|---------|---------|
| react | 18.3.0 | MIT |
| typescript | 5.4.5 | Apache |
| eslint | 9.0.0 | MIT |
API documentation — endpoint listings, parameter tables, response field descriptions.
Changelogs — structured version history with columns for version, date, and summary.
Data comparisons — side-by-side feature comparisons for tools, services, or approaches.
Converting Code to a Markdown Table
If you have a code-defined data structure — a Python list of dicts, a Go struct slice, a JavaScript array of objects — paste the JSON representation into the JSON Paste tab. Python’s json.dumps(), Go’s encoding/json, and JavaScript’s JSON.stringify() all output JSON that the tool can parse.
import json
data = [
{"tool": "Prettier", "lang": "JS/TS", "config": ".prettierrc"},
{"tool": "Black", "lang": "Python", "config": "pyproject.toml"},
{"tool": "gofmt", "lang": "Go", "config": "built-in"},
]
print(json.dumps(data, indent=2))
# Paste the output into the JSON tab
Markdown Table Limitations
GFM tables have a few constraints worth knowing:
- No cell merging: every cell is independent. For merged cells, use an HTML
<table>element inside your Markdown. - No multi-line cells: each cell must be on one line. Long content gets truncated visually in narrow views.
- Plain text only: you can use inline Markdown inside cells (
**bold**,`code`,[link](url)), but block elements (code blocks, lists) don’t work inside table cells. - Rendering required: raw Markdown tables look messy in a plain text editor. Use a preview to verify the rendered output.
Quick GFM Table Reference
| Element | Syntax |
|---|---|
| Header separator | --- |
| Left align | :--- |
| Center align | :---: |
| Right align | ---: |
| Escaped pipe | | |
| Bold in cell | **text** |
| Code in cell | `code` |
| Link in cell | [label](url) |
Stop hand-coding table pipes. Try the Markdown Table Generator →