The Markdown to HTML converter on this page turns any Markdown document into valid, ready-to-publish HTML in real time. Type or paste on the left, watch the rendered preview appear on the right, and switch to the Raw HTML tab when you need to copy the source. The conversion happens entirely inside your browser, so your draft never leaves your device.
The converter follows the CommonMark specification with GitHub Flavored Markdown (GFM) extensions enabled, which means tables, fenced code blocks, task lists, and strikethrough all work the way they do on GitHub. Every block of HTML the converter produces is sanitized with DOMPurify before it reaches the preview, so even if you paste Markdown that contains raw <script> tags or onclick handlers, nothing harmful executes.
This tool is built for the moments where you have content in one shape and need it in another quickly: pasting a chunk of notes into a CMS that only accepts HTML, prepping an email signature, exporting Obsidian or Notion content for a static site, or sanity-checking how a README will render before you push the commit. There is no character limit, no signup wall, and no upload. Use the Sample button to load a representative Markdown document and explore the features, then clear it and paste your own.
Below the tool you will find a complete Markdown syntax reference, a list of the most common rendering errors and how to fix them, and answers to the questions people ask most often about converting Markdown.
What is Markdown?
Markdown was introduced by John Gruber and Aaron Swartz in 2004 as a “humane” alternative to writing HTML by hand. The design goal was a syntax so unobtrusive that an unrendered Markdown file would still read as a plain text document: a heading was just a line prefixed with a hash, emphasis was an asterisk or underscore, a link was bracketed text followed by a parenthesised URL.
That design has aged remarkably well. In 2026, Markdown is the default writing format on GitHub, GitLab, Reddit, Discord, Notion-style editors, most static site generators, and a growing share of internal documentation tools. The CommonMark specification, finalised in 2014 and refined since, gave the once-loose syntax a precise grammar that every modern parser implements the same way — which is why what you write here renders identically wherever Markdown is supported.
Why convert Markdown to HTML?
Most publishing systems still consume HTML at some point in their pipeline. Even when you author in Markdown, the file that hits the browser is HTML. Reasons people convert manually:
- CMS migration. Moving content out of WordPress, Ghost, or a custom CMS into a static site framework like Hugo, Jekyll, or Astro — and the reverse.
- Email and newsletters. Mailing tools usually expect HTML; writing in Markdown is faster and keeps the source clean.
- AI prompts and outputs. Modern LLMs return Markdown by default, and many downstream tools need HTML.
- Documentation and READMEs. A quick visual check that your README will render correctly before you commit.
- One-off snippets. Generating a styled table or list to drop into a Google Doc, a Slack canvas, or a Confluence page.
Doing this through a code editor or build pipeline takes minutes; doing it here takes seconds.
Complete Markdown syntax reference
Headings
Use one to six hash marks at the start of a line, followed by a space and the heading text.
# Heading level 1
## Heading level 2
### Heading level 3
#### Heading level 4
##### Heading level 5
###### Heading level 6
You can also use the setext style for H1 and H2 only, underlining the text with === or --- on the next line, but the ATX style above is more common.
Text formatting
| Goal | Syntax | Result |
|---|---|---|
| Bold | **bold** |
bold |
| Italic | *italic* |
italic |
| Bold + italic | ***both*** |
both |
| Strikethrough (GFM) | ~~struck~~ |
|
| Inline code | `code` |
code |
Lists
Unordered lists use -, *, or +. Ordered lists use any number followed by a period — the actual sequence is generated for you.
- First item
- Second item
- Nested item (indent by two spaces)
- Third item
1. Step one
2. Step two
3. Step three
Task lists are a GFM extension and render as checkboxes:
- [x] Completed task
- [ ] Outstanding task
Links
[Inline link](https://example.com)
[Link with title](https://example.com "Hover text")
[Reference-style link][docs]
<https://example.com>
[docs]: https://example.com
Reference-style links keep long URLs out of the prose and are easier to maintain in long documents.
Images


![Reference-style image][hero]
[hero]: /assets/hero.jpg
The alt text is required for accessibility; it appears when the image fails to load and is what screen readers announce.
Code
Inline code is wrapped in single backticks. For longer snippets, fence the block with triple backticks and an optional language hint so syntax highlighters know what to do:
```javascript
function greet(name) {
return `Hello, ${name}!`;
}
A four-space indented block is the older, fallback form and still works.
#### Blockquotes
```markdown
> A single-line quote.
> A multi-line quote
> continues on the next line.
> > Nested quotes use a second `>`.
Tables (GFM)
Pipes separate cells, hyphens form the divider row, and colons in the divider control column alignment.
| Left | Center | Right |
| :--- | :----: | ----: |
| A | B | C |
| D | E | F |
Horizontal rules
Three or more hyphens, asterisks, or underscores on their own line produce a horizontal rule: ---, ***, ___.
Escaping special characters
Prefix any Markdown control character with a backslash to display it literally: \*not italic\*, \#not a heading, \[not a link\].
Common Markdown errors and fixes
Tables do not render. Markdown tables need a blank line above the first row, and the divider row must have at least one hyphen per column. The pipe count must match across the header, divider, and body rows.
List items run together. Strict CommonMark allows tight lists where items have no blank line between them; some other flavours require blank lines for nested content to render. If a nested paragraph or code block fails to associate with its parent item, add a blank line.
Line breaks disappear. Markdown treats a single newline as a soft wrap, not a paragraph break. Insert a blank line to start a new paragraph, or end a line with two trailing spaces to force a <br>.
Images do not appear. Confirm the URL is reachable, that you started the line with !, and that any special characters in the URL are escaped or percent-encoded.
Code block looks like a paragraph. Use exactly three backticks to open and close. If your code contains triple-backtick examples, fence with four backticks.
Bold text shows asterisks instead of styling. Check that the opening and closing markers match (** opens and ** closes), and that there is no space immediately after the opening marker. ** word** is not bold; **word** is.
Markdown use cases in 2026
GitHub READMEs and issues. Every README, every issue body, every pull request description on GitHub is Markdown. Writing them in a converter like this lets you preview before posting.
Static site generators. Hugo, Jekyll, Astro, Eleventy, Docusaurus, and MkDocs all consume Markdown as their primary content format. Converting to HTML manually is useful when you need to inspect what the generator will see.
Note-taking and knowledge bases. Obsidian, Logseq, Notion, Bear, and modern wiki tools store notes as Markdown files. Exporting a single note as HTML for sharing is a one-click operation.
Documentation portals. Almost every documentation platform — Read the Docs, GitBook, Mintlify, Docusaurus — accepts Markdown source.
AI prompts and outputs. Most LLMs format their responses in Markdown by default. Converting that output to HTML is often the first step in piping AI content into a CMS or email.
Markdown flavours explained
CommonMark is the standardised core. It defines exactly how the original Gruber syntax should be parsed, leaving no ambiguity for implementers.
GitHub Flavored Markdown (GFM) is CommonMark plus tables, fenced code blocks with language hints, strikethrough, autolinks, and task lists. It is the most widely supported superset.
MultiMarkdown, Pandoc Markdown, and others add features like footnotes, citations, math, and definition lists. These do not render consistently outside their respective tools.
This converter uses CommonMark as its base with the GFM extensions enabled, which is the combination most people expect when they say “Markdown” in 2026.
Frequently Asked Questions
Is my Markdown stored or sent anywhere?
No. Every keystroke, every conversion, every preview happens entirely inside your browser. The Markdown source never leaves your device and is not logged on any CalcMojo server. Close the tab and the content is gone.
What flavour of Markdown does this support?
CommonMark with GitHub Flavored Markdown extensions enabled. That means standard headings, lists, links, images, code, and blockquotes work everywhere, and GFM features like tables, fenced code with language hints, strikethrough, autolinks, and task lists also render correctly.
Can I use HTML inside my Markdown?
Yes — Markdown allows inline HTML by design, and the parser will preserve it. However, every HTML fragment is run through DOMPurify before reaching the preview. That means <div>, <span>, <img>, and similar tags pass through, but <script> tags, inline event handlers, and other potentially dangerous constructs are stripped.
Why does my output look different from another converter?
Different converters implement different Markdown flavours and configuration defaults. Some collapse single newlines into <br> tags (the “breaks” option); this tool follows CommonMark and treats single newlines as soft wraps. If you need explicit line breaks, end a line with two trailing spaces.
Can I customise the output styling?
The Preview tab shows a styled rendering for readability, but the HTML emitted to the Raw HTML tab and to the download is clean, unstyled markup. You can drop it straight into any page or wrap it in your own CSS.
Is there a file size limit?
There is no enforced limit. The converter runs on your CPU, so very large documents (hundreds of kilobytes of Markdown) may take a fraction of a second longer to render but will still work.
Does this work offline?
Once the page has loaded, the conversion runs without further network requests. If you load the page while online and then disconnect, you can keep typing and converting until you close the tab.
Data accurate as of: May 2026