Skip to content

Markdown Table to HTML Converter

Paste a Markdown table and copy HTML <table> code with thead/tbody and align attributes, with cell text escaped.

Paste a Markdown table

Sample data shown — paste or drop your own to replace it.

Converts as you type. CSV, TSV, HTML and JSON are detected too.
Output
<div class="table-responsive overflow-x-auto">
<table class="markdown-table min-w-full border-collapse">
  <thead>
    <tr>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="left">Feature</th>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="center">Free Tier</th>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="center">Pro ($12/mo)</th>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="center">Enterprise</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="border px-4 py-2" align="left">Unlimited Tables</td>
      <td class="border px-4 py-2" align="center">Yes</td>
      <td class="border px-4 py-2" align="center">Yes</td>
      <td class="border px-4 py-2" align="center">Yes</td>
    </tr>
    <tr>
      <td class="border px-4 py-2" align="left">Custom Formatting</td>
      <td class="border px-4 py-2" align="center">Basic</td>
      <td class="border px-4 py-2" align="center">Advanced</td>
      <td class="border px-4 py-2" align="center">Full Suite</td>
    </tr>
    <tr>
      <td class="border px-4 py-2" align="left">Team Sharing</td>
      <td class="border px-4 py-2" align="center">No</td>
      <td class="border px-4 py-2" align="center">Up to 10</td>
      <td class="border px-4 py-2" align="center">Unlimited</td>
    </tr>
    <tr>
      <td class="border px-4 py-2" align="left">Priority Support</td>
      <td class="border px-4 py-2" align="center">Community</td>
      <td class="border px-4 py-2" align="center">24h SLA</td>
      <td class="border px-4 py-2" align="center">Dedicated Rep</td>
    </tr>
  </tbody>
</table>
</div>
4 rows × 4 columns
Rendered Preview
FeatureFree TierPro ($12/mo)Enterprise
Unlimited TablesYesYesYes
Custom FormattingBasicAdvancedFull Suite
Team SharingNoUp to 10Unlimited
Priority SupportCommunity24h SLADedicated Rep

How to convert a Markdown table to HTML in 3 steps

  1. Paste the Markdown table

    Paste it into the Paste Markdown box (CSV, TSV, JSON and HTML tables are detected too), or upload a file. If the text holds several tables, the first one is converted.

  2. Check the HTML

    The HTML tab on the right is already selected and updates as you type. The preview below it shows the rendered table. Use Edit grid to change cells or alignment.

  3. Copy the HTML

    Click Copy HTML and paste it into your page, CMS HTML block or template, or open Download for an .html file.

Example

Markdown table
| Plan | Uptime | Price |
| :--- | :---: | ---: |
| Starter | 99.5% | $9 |
| Team & Co | 99.9% | $29 |
| Enterprise | 99.99%<br>(SLA) | **Custom** |
HTML output
<div class="table-responsive overflow-x-auto">
<table class="markdown-table min-w-full border-collapse">
  <thead>
    <tr>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="left">Plan</th>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="center">Uptime</th>
      <th class="border px-4 py-2 bg-gray-50 text-left font-semibold" align="right">Price</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td class="border px-4 py-2" align="left">Starter</td>
      <td class="border px-4 py-2" align="center">99.5%</td>
      <td class="border px-4 py-2" align="right">$9</td>
    </tr>
    <tr>
      <td class="border px-4 py-2" align="left">Team &amp; Co</td>
      <td class="border px-4 py-2" align="center">99.9%</td>
      <td class="border px-4 py-2" align="right">$29</td>
    </tr>
    <tr>
      <td class="border px-4 py-2" align="left">Enterprise</td>
      <td class="border px-4 py-2" align="center">99.99%<br>(SLA)</td>
      <td class="border px-4 py-2" align="right">**Custom**</td>
    </tr>
  </tbody>
</table>
</div>

Options explained

Paste Markdown box
Converts 150 ms after you stop typing, and immediately on paste. The badge shows the detected format. Only the first table in the text is used.
Upload file
Reads a .md, .csv, .tsv, .json, .html, .txt or Excel file from your computer without uploading it anywhere..md · .csv · .tsv · .json · .html · .txt · .xlsx · .xls · .ods
Paste / Sample / Clear
Paste reads the clipboard, Sample loads an example Markdown table, Clear empties the box.
Edit grid / Markdown tabs
Fix cells, rename headers or set column alignment, which becomes the align attribute in the HTML. The Markdown tab shows the source and stays in sync.
Tools
Auto-align (numbers right, text left), header case, transpose, and quick or deep clean for stray spaces and blank rows.Auto-align · UPPER · lower · Title Case · Transpose · Quick clean · Deep clean
Output tabs
This page opens on HTML. The same table can be switched to Markdown, CSV, TSV, JSON, LaTeX, SQL or Jira. Flavor, Spacing and Collapsible <details> appear on the Markdown tab only and do not change the HTML.HTML (selected) · Markdown · CSV · TSV · JSON · LaTeX · SQL · Jira
Copy HTML
Copies exactly what the output box shows: the wrapper div, the table with its classes, thead, tbody and align attributes.
Download
Saves the active tab as table.html, or the table as an Excel workbook, a CSV file or a PNG image..html · .xlsx · .csv · .png
Copy link
Copies a URL that reopens this table. The table is stored after #md= in the link, which browsers do not send to a server.

Convert Markdown to…

Convert to Markdown from…

Browse all 36 tools

About this tool

Paste a Markdown table and copy a standard HTML table: <thead> and <tbody>, <th> header cells, align attributes from your column alignment, and a scrolling wrapper div. Cell text is escaped so characters like & and < cannot break the markup, and a <br> in a cell stays a line break. The output has no inline styles but does carry Tailwind-style class names, so remove them if your site does not use them. Inline Markdown in cells (bold, links, code) is not converted. Everything runs in your browser.

  • Real <thead>/<tbody> table with <th> header cells
  • Column alignment written as align="left|center|right"
  • Cell text escaped: & < > " cannot break the markup
  • <br> in a cell stays a line break
  • Wrapper div with overflow-x-auto for wide tables
  • No inline styles; Tailwind-style class names on each element
  • Edit cells and alignment before copying
  • Runs in your browser; the table is not uploaded

Technical details

What the generated HTML looks like

The tool writes a standard HTML table: a <div class="table-responsive overflow-x-auto"> wrapper, then <table> with <thead> (one row of <th> cells) and <tbody> (one <tr> per row). There are no inline style attributes. Each element carries utility class names (Tailwind CSS style, such as border px-4 py-2) so it looks reasonable on sites that use them.

  • Alignment: A column aligned in Markdown (:--- :---: ---:) gets align="left", "center" or "right" on its <th> and every <td>. The align attribute is obsolete in HTML5 but browsers still honor it; replace it with CSS text-align if you need valid modern markup.
  • Escaping: Cell text has & < > and " converted to &amp; &lt; &gt; &quot;, so text like a<b or Tom & Jerry is shown literally and HTML typed into a cell is not interpreted.
  • Line breaks: A <br> in a Markdown cell is kept as a real <br>. This is the only HTML tag that passes through.
  • No inline Markdown: **bold**, *italic*, `code` and [links](https://example.com) are not converted; they appear as the literal characters. Edit the HTML afterwards if you need <strong> or <a>.
  • Classes: The wrapper, table, th and td classes are fixed. They do nothing without matching CSS; delete them or style them yourself on sites that do not use Tailwind.
  • Header: A table with a header row gets <thead>; a headerless table (delimiter row first) gets only <tbody>.
  • Pipes: A pipe written as \| in Markdown comes out as a plain | in the HTML.

Tips and best practices

Remove the classes if your site does not use Tailwind

Search and replace the regular expression class="[^"]*" (with its leading space) with nothing in your editor to get plain <table> markup, then style it with your own CSS.

Inline the CSS for email

Many email clients ignore class names and the generated HTML has no inline styles, so add style attributes (or run it through an inliner) before sending.

Add scope and a caption for accessibility

The output has no <caption> or scope attributes. Add <caption> after the opening <table> tag and scope="col" on the <th> cells if the table needs to be announced properly by screen readers.

Common problems and fixes

Bold, links or code in my cells show up as raw Markdown

Cause: Cell text is escaped and inline Markdown is not converted to HTML.

Fix: Replace them in the HTML, for example **x** with <strong>x</strong>, or render the whole Markdown with a Markdown processor instead.

The table has no borders or padding on my site

Cause: The classes are Tailwind-style utilities, and your site does not include them.

Fix: Add your own CSS for table, th and td, or load Tailwind. The wrapper and table also have the hooks table-responsive and markdown-table.

Only the first of several tables was converted

Cause: The converter reads one table at a time.

Fix: Paste each table separately, or copy just the table you want.

HTML I typed in a cell appears as text

Cause: Cell content is escaped on purpose, so it cannot inject markup. Only <br> is kept.

Fix: Edit the generated HTML by hand where you need tags such as <a> or <strong>.

Platform compatibility

PlatformSupportNotes
Tailwind CSS sites SupportedThe utility classes (border, px-4, py-2, bg-gray-50) style the table as generated.
Bootstrap SupportedThe wrapper’s table-responsive class gives horizontal scrolling; add class="table" to the table for Bootstrap’s table styles.
WordPress and other CMS HTML blocks SupportedPaste into a Custom HTML or code-view block. Without matching CSS the table shows with the theme’s default table styles.

Frequently asked questions

How do I convert a Markdown table to HTML?

Paste the Markdown table into the box above. The HTML tab on the right is already selected and updates as you type; click Copy HTML and paste it into your page. Header cells go into <thead> and the other rows into <tbody>.

Does it convert bold, italic, links and code inside cells?

No. Cell text is escaped, so **bold** and [text](https://example.com) appear as literal characters in the HTML. Only <br> is kept as a line break. Replace the rest by hand, for example **x** with <strong>x</strong>.

Is the column alignment kept?

Yes. A column aligned with :--- :---: or ---: gets align="left", align="center" or align="right" on its header and every cell. The align attribute is obsolete in HTML5 though browsers still honor it; use CSS text-align if you need valid modern markup.

What are the class names in the output?

The wrapper div, table, th and td carry Tailwind-style utility classes (such as border px-4 py-2) plus the hooks table-responsive and markdown-table. They do nothing without matching CSS. Delete them with a search and replace of class="[^"]*" if your site does not use Tailwind.

Does the HTML include inline styles, or work in email?

There are no inline style attributes. Many email clients ignore class names, so for email add inline styles (or run the HTML through a CSS inliner) before sending.

Is the output safe to paste into a CMS?

Cell text is escaped (& < > and "), so text typed in a cell cannot add tags or scripts. The markup itself is a plain table inside a div, which WordPress and most CMS HTML or code blocks accept.

Can I convert several Markdown tables at once?

No. Only the first table in the pasted text is converted. Paste each table on its own to get HTML for the others.

Can I convert a whole Markdown document to HTML here?

No. This page converts one table. Headings, paragraphs and lists are not rendered, and text outside the table is ignored. Use a Markdown processor for full documents.