Markdown Table Generator

Markdown table generator: convert CSV, text, or pasted data into GFM pipe tables for GitHub docs and wikis instantly. Free, private, no signup required.

One row per line. The first line becomes the table header. Output is a GitHub-flavored markdown (GFM) pipe table you can paste into READMEs, issues, and docs.

Updates automatically as you type.

Calculated in your browser; your inputs are not sent to us. Privacy

Results will appear here.
Calculation details
Every figure above is calculated locally in your browser from the assumptions shown. No inputs are sent anywhere. See the methodology section below for how this tool works.
Use this resultShare the current inputs, or ask ChatGPT to explain the calculation in context.
Ask an AI to explain this result
Share this result

Planning estimate only, not financial, tax, or legal advice. Verify assumptions and current rules before making decisions.

This tool runs in your browser. Your calculator inputs and results are never transmitted to us or to ad/affiliate partners. Ads and sponsored links may set third-party cookies to serve and measure them, but they never receive your calculation values. If you explicitly save a scenario, its permitted fields stay in local browser storage until you clear them. See our Privacy Policy.

Use this result

Share the current inputs or ask ChatGPT to explain the calculation in context.

More options
Report a calculation issue
Direct answer

What does this calculator estimate?

Markdown table generator: convert CSV, text, or pasted data into GFM pipe tables for GitHub docs and wikis instantly. Free, private, no signup required.

Transparent methodology

How this calculator works

Formula

Output is a GitHub-flavored pipe table: a header row, a separator line of dashes, then one row per data record, delimiter-separated.

Worked example

The default 3-column, 2-row grid emits a header line, a dashed separator, and two data rows, ready to paste into GitHub or docs.

Assumptions to verify

  • The first non-empty line is treated as the header row.
  • All rows are expected to have the same number of columns; mismatches are filled or trimmed.
  • Runs entirely in the browser; pasted data never leaves the page.

Frequently asked questions

Does this send my data anywhere?

No. Conversion happens locally in your browser. Nothing you paste is transmitted or stored.

What separators are supported?

Comma, pipe ( | ), and tab. The delimiter is chosen before conversion.

Cite this tool

BoringToolsKit. “Markdown Table Generator.” boringtoolskit.com/markdown-table-generator/. Free to reference in articles, syllabi, and answer posts with a link.

Privacy: Inputs and results stay in this browser. Any future sponsored recommendation or advertisement will be clearly labeled and kept separate from the calculation.

Worked example: four ragged comma rows

Four comma lines: Product,Price,Stock / Widget,4,12 / Gadget,9 / Sprocket,7,3. Each line is split on commas and trimmed, giving cell counts 3, 3, 2, 3. Widest wins: numCols = max(3,3,2,3) = 3. Line 1 is the header, so columns = 3 and data rows = 4 - 1 = 3.

Gadget,9 has only 2 cells, so it is padded to | Gadget | 9 | | and Stock renders blank rather than shifting values left. Output: 5 lines, 15 slots, 1 empty (header, separator, 3 body rows). The hero reads 3 col x 3 rows. No arithmetic touches the cells: 4 and 12 stay strings, so there is no total row and no numeric alignment.

Where the converter breaks: separators, ragged rows, one-line input

Quoting and escaping do not exist. Doe, John,42 under the comma delimiter becomes 3 cells (Doe / John / 42), so a comma in a value adds a column. Pipe mode strips edge pipes, then splits on each remaining |, so | a | b | and a | b both give 2 cells and a value containing a pipe cannot survive. Pick tab while pasting space-aligned text and each line stays 1 cell: a 1-column table reporting N rows.

Ragged input splits the summary from the output. With City,Notes / Paris,france / Berlin,germany,EU, header.length is 2, so the hero and Columns metric say 2, while numCols is 3: rows pad to 3 slots and the separator carries 3 dashes. A single line, City,Paris, is valid too: body is empty, the hero reads 2 col x 0 rows, Data rows 0, and the block is just | City | Paris | over | --- | --- |. Blank lines are dropped first, so 10 pasted lines with 3 blanks count as 7. Every separator is plain ---, so GFM left-aligns all columns; right-aligning Price needs :---:.