---
url: https://findutils.com/guides/markdown-to-html
title: "Markdown to HTML: Get Markup You Can Paste Into a CMS"
description: "Convert Markdown to HTML in your browser, with GFM tables and task lists. Learn what a fragment is, when you need a full document, and why raw HTML is escaped."
category: converters
content_type: guide
guide_type: subtopic
cluster: data-conversion
locale: en
read_time: 7
status: published
author: "olgunozoktas"
published_at: 2026-09-21T12:00:00Z
excerpt: "A CMS body field takes HTML and rejects Markdown. Convert the draft, choose a fragment or a whole document, and understand the two things this converter deliberately refuses to do."
tag_ids: ["converters", "markdown", "html", "data-conversion", "developer-tools"]
tags: ["Converters", "Markdown", "HTML", "Data Conversion", "Developer Tools"]
primary_keyword: "markdown to html"
secondary_keywords: ["convert markdown to html", "md to html", "markdown to html converter", "gfm to html", "markdown table to html"]
tool_tag: "markdown-to-html"
related_tool: "markdown-to-html"
related_tools: ["markdown-to-html", "html-to-markdown", "markdown-previewer", "markdown-to-word", "markdown-to-pdf"]
og_image: "/images/content/guides/markdown-to-html-cover-20260921.webp"
image_alt: "Scattered blank cards on a desk rearranged into a neatly indented, nested stack."
updated_at: "2026-09-21T12:00:00Z"
---

Markdown is what you write in; HTML is what most systems actually take. FindUtils [Markdown to HTML](/convert/markdown-to-html/) converts a draft into markup you can paste into a CMS body field, an email template or a static page, and it does it in the browser — the document is never uploaded.

This guide covers the choice that trips people up (fragment or whole document), what the converter carries over, and the two things it refuses to do on purpose.

## Fragment or Whole Document

A **fragment** is just the converted content: headings, paragraphs, lists, tables. No `<html>`, no `<head>`, no doctype. It is what a CMS body field, a template partial or an existing page wants, because those already have a document around them. This is the default.

A **whole document** wraps that fragment in a minimal HTML5 shell — a doctype, a UTF-8 charset, a viewport meta and a title — so the file opens in a browser on its own. Turn on **Full HTML document** when you want a standalone `.html`, not when you are pasting into something.

The title comes from your first H1 unless you type one, and falls back to `Document` when the Markdown has no heading at all. Getting a page titled `Document` in a browser tab is the usual sign that a draft started with a paragraph rather than a `#` line.

## What It Converts

| Markdown | Comes through | Notes |
|---|---|---|
| Headings `#` to `######` | Yes | `<h1>`–`<h6>` |
| Bold, italic, bold-italic | Yes | `<strong>`, `<em>` |
| Strikethrough `~~x~~` | Yes | `<del>` |
| Inline code and fenced blocks | Yes | Fences keep the language as `class="language-js"` |
| Pipe tables with alignment | Yes | `:---`, `---:`, `:---:` become `style="text-align:…"` |
| Task lists `- [x]` | Yes | Disabled checkbox inputs |
| Nested lists | Yes | Indentation decides the level |
| Blockquotes, including nested | Yes | Multiple `>` lines merge into one block |
| Links, images, bare URLs | Yes | Destinations are checked — see below |
| Footnotes `[^1]` | **No** | Comes through as literal text |
| Reference-style links `[a][1]` | **No** | Comes through as literal text |
| Setext headings (`===` underline) | **No** | Reads as a paragraph |

The last three are worth knowing before you paste a long document and wonder why one paragraph looks wrong.

## Raw HTML Is Escaped, Not Passed Through

If your Markdown contains `<div class="callout">`, the output shows that text on the page rather than creating a div. That is deliberate, and it is the single most important thing to know about this converter.

The reason is the preview pane. Because every raw tag is escaped before any markup is built, the only tags in the output are ones the converter produced itself — so the rendered preview cannot execute anything that came from your document. A converter that passed HTML through could not safely show you the result.

If you need HTML carried through untouched, this is the wrong tool for that job. Most people do not: a draft written in Markdown rarely contains markup on purpose.

## Link Destinations Are Checked

Links and images may point at `http`, `https`, `mailto` or `tel` URLs, or at ordinary relative and anchor paths. Anything else — including `javascript:` and `data:` URLs — is replaced with `#blocked-unsafe-url`.

This matters because converted HTML usually ends up pasted into somebody else's page. A Markdown file that arrived by email or came out of a scraper is untrusted input, and a link in it is the easiest thing to weaponise. If you see `#blocked-unsafe-url` in your output, the source contained a destination that would not have been safe to publish.

## Single Line Breaks Behave Like GitHub

A single newline inside a paragraph is a **soft break**: it renders as a space, exactly as it does in a `.md` file on GitHub. Two paragraphs need a blank line between them.

For a real line break inside a paragraph, end the line with two spaces or a trailing backslash. This is the most common surprise when someone converts a document written in a chat-style editor, where every Enter key press looked like a new line.

## Converting

1. Paste the Markdown into the left panel, or drop a `.md`, `.markdown` or `.txt` file onto it. The conversion runs as you type.
2. Leave **Full HTML document** off for a fragment, or turn it on for a standalone file.
3. Read the **HTML** tab for the markup, or switch to **Preview** to see it rendered.
4. Copy the HTML, or download it as an `.html` file named after the file you dropped.

The footer line under the panels reports how many lines and bytes the output is, and whether you are looking at a fragment or a full document.

## Previewer or Converter?

Both exist and they answer different questions. FindUtils [Markdown Previewer](/developers/markdown-previewer/) answers *what does this look like* — it is for writing and checking as you go. The converter answers *what do I paste*: it leads with the markup, keeps the rendered view on a second tab, and hands you a file at the end.

If you want the opposite direction, [HTML to Markdown](/convert/html-to-markdown/) converts a page back into Markdown, and the two together cover the round trip.

For a document rather than markup, [Markdown to Word](/convert/markdown-to-word/) produces a `.docx` and [Markdown to PDF](/convert/markdown-to-pdf/) produces a PDF.

## The Same Conversion From Code

The converter on this page, the REST endpoint at `api.findutils.com` and the MCP tool at `mcp.findutils.com` all run the same module, so a document converted here and the same document converted from a script come out identical. The [API reference](/api/markdown-to-html/) shows the request shape; the [MCP reference](/mcp/markdown-to-html/) shows the connect command.

That is worth stating because it has not always been true on the web generally: two surfaces of the same tool quietly running two different renderers is a common way for a pipeline to disagree with a preview.

## Limits

- Up to about 10 MB of Markdown, far more than a README or an article.
- No syntax highlighting. Fenced blocks carry `class="language-x"` for a highlighter on your page to pick up; the converter does not colour code itself. For coloured output as an image, use [Code to Image](/developers/code-screenshot-generator/).
- No sanitising of HTML you bring — because none is passed through in the first place.
- No CSS. The output is structural markup; styling is your page's job.

## Privacy

The conversion runs in your browser, and a dropped file is read locally with the File API. Nothing is sent to a server and nothing is stored. Unpublished drafts, internal documentation and client work are exactly the documents that should not be pasted into an unknown website to change their format, and you can confirm nothing leaves the tab in your browser's network panel.
