Markdown Previewer
Render Markdown syntax to HTML in real time with live preview.
๐ How to Use
Type Markdown text. Supports # headings, **bold**, `code`, and more.
The rendered HTML is displayed in real time as you type.
Use ๐ Copy HTML to save the rendered HTML, or ๐พ Download to save the Markdown file.
About the Markdown Previewer
Markdown is a lightweight plain-text format that lets writers produce structured HTML without ever touching an angle bracket. It powers README files on GitHub, documentation sites, static-site generators, chat apps, and note-taking tools. This previewer takes the text you type, parses it into HTML in real time, and shows the rendered result side by side — so you see exactly how the published page will look while you write. Everything runs in your browser; no draft is ever uploaded.
How it works
The renderer targets CommonMark, the unambiguous specification of Markdown, layered with GitHub-Flavored Markdown (GFM) extras. The parser first tokenizes block-level constructs: headings (#, ##), ordered and unordered lists (1., -), fenced code blocks (triple backticks), blockquotes (>), thematic breaks, and paragraphs. It then resolves inline constructs inside each block: bold (**text**), italics (*text*), links ([text](url)), and inline code (single backticks). Each token becomes a corresponding HTML element, so Markdown is fundamentally a compiler from shorthand text to HTML.
GFM adds constructs that plain CommonMark lacks: pipe tables, task lists with [ ] / [x] checkboxes, and strikethrough with ~~text~~. Because the output is HTML that will live in a page, the rendered string is sanitized before insertion: raw <script> tags, inline event handlers such as onclick, and javascript: URLs are stripped. That sanitization is what prevents stored cross-site scripting (XSS) when user-authored Markdown is displayed — the single most important security property of any Markdown renderer.
Common use cases
- Drafting a project README and previewing it before pushing to GitHub
- Writing documentation that will be published as static HTML
- Checking that tables, task lists, and code fences render correctly
- Grabbing clean HTML to paste into a CMS or email template
- Reviewing GFM-specific syntax that plain Markdown parsers miss
Worked example
Given this Markdown snippet:
# Release notes
- Added **dark mode**
- Fixed `login` redirect
> Ships in v2.0
The renderer compiles it to this HTML:
<h1>Release notes</h1>
<ul>
<li>Added <strong>dark mode</strong></li>
<li>Fixed <code>login</code> redirect</li>
</ul>
<blockquote>
<p>Ships in v2.0</p>
</blockquote>
The heading, list, inline strong and code, and blockquote all map one-to-one from their Markdown shorthand.
Frequently asked questions
What flavor of Markdown does this support?
The renderer follows the CommonMark specification and adds GitHub-Flavored Markdown extras such as tables, task lists, strikethrough, and fenced code blocks. Together these cover the syntax most documentation and README files use.
Does Markdown compile to HTML?
Yes. Markdown is a plain-text shorthand. The parser tokenizes block and inline constructs and emits HTML elements, which the preview pane renders and the Copy HTML action lets you reuse elsewhere.
Is the rendered HTML safe from XSS?
The output is sanitized before it is inserted into the page, so raw script tags, inline event handlers, and javascript: URLs are stripped. You should still sanitize again if you embed the exported HTML into your own site, since trust boundaries differ.
Are my documents uploaded to a server?
No. Parsing, rendering, and HTML export all run locally in your browser. Drafts, notes, and any pasted content stay on your device.
What is the difference between block and inline Markdown?
Block constructs such as headings, lists, code fences, and blockquotes structure the document into elements. Inline syntax such as bold, italics, links, and inline code styles text within a paragraph. The parser handles each layer with its own rules.
Can I download the source Markdown?
Yes. The Download Markdown action saves the exact text in the input area as an .md file, preserving code fences, tables, and all formatting exactly as you wrote it.
๋งํฌ๋ค์ด ํ๋ฆฌ๋ทฐ์ด๋?
๋งํฌ๋ค์ด์ ์์ฑ์๊ฐ ๊บพ์ ๊ดํธ๋ฅผ ์ ํ ๋ง์ง์ง ์๊ณ ๊ตฌ์กฐํ๋ HTML์ ๋ง๋ค ์ ์๊ฒ ํด ์ฃผ๋ ๊ฐ๋ฒผ์ด ์ผ๋ฐ ํ ์คํธ ํ์์ ๋๋ค. GitHub์ README, ๋ฌธ์ ์ฌ์ดํธ, ์ ์ ์ฌ์ดํธ ์์ฑ๊ธฐ, ์ฑํ ์ฑ, ๋ ธํธ ์ฑ๊น์ง ๋๋ฃจ ์ฐ์ ๋๋ค. ์ด ํ๋ฆฌ๋ทฐ์ด๋ ์ ๋ ฅํ ํ ์คํธ๋ฅผ ๋ฐ์ ์ค์๊ฐ์ผ๋ก HTML๋ก ํ์ฑํ๊ณ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ๋๋ํ ๋ณด์ฌ ์ค๋๋ค — ๊ธ์ ์ฐ๋ ๋์ ๊ฒ์๋ ํ์ด์ง๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ์ง ์ ํํ ๋ณผ ์ ์์ต๋๋ค. ๋ชจ๋ ์ฒ๋ฆฌ๋ ๋ธ๋ผ์ฐ์ ์์ ์ด๋ฃจ์ด์ง๋ฉฐ ์ด๋ค ์ด์๋ ์ ๋ก๋๋์ง ์์ต๋๋ค.
์๋ ๋ฐฉ์
๋ ๋๋ฌ๋ ๋ชจํธํจ ์๋ ๋งํฌ๋ค์ด ํ์ค์ธ CommonMark๋ฅผ ๋์์ผ๋ก ํ๋ฉฐ, ๊ทธ ์์ GitHub-Flavored Markdown(GFM) ํ์ฅ์ ์น์ต๋๋ค. ํ์๋ ๋จผ์ ๋ธ๋ก ์์ค ๊ตฌ๋ฌธ์ ํ ํฐํํฉ๋๋ค. ์ ๋ชฉ(#, ##), ์์/๋น์์ ๋ชฉ๋ก(1., -), ํ์ค ์ฝ๋ ๋ธ๋ก(๋ฐฑํฑ ์ธ ๊ฐ), ์ธ์ฉ๊ตฌ(>), ์ํ์ , ๋จ๋ฝ ๋ฑ์
๋๋ค. ๊ทธ๋ค์ ๊ฐ ๋ธ๋ก ์์ ์ธ๋ผ์ธ ๊ตฌ๋ฌธ์ ํด์ํฉ๋๋ค. ๊ตต๊ฒ(**text**), ๊ธฐ์ธ์(*text*), ๋งํฌ([text](url)), ์ธ๋ผ์ธ ์ฝ๋(๋ฐฑํฑ ํ๋)์
๋๋ค. ๊ฐ ํ ํฐ์ ๋์ํ๋ HTML ์์๊ฐ ๋๋ฏ๋ก, ๋งํฌ๋ค์ด์ ๋ณธ์ง์ ์ผ๋ก ์ฝ์ด ํ
์คํธ์์ HTML๋ก ๊ฐ๋ ์ปดํ์ผ๋ฌ์
๋๋ค.
GFM์ ์ผ๋ฐ CommonMark์ ์๋ ๊ตฌ๋ฌธ์ ์ถ๊ฐํฉ๋๋ค. ํ์ดํ ํ
์ด๋ธ, [ ] / [x] ์ฒดํฌ๋ฐ์ค ์์
๋ชฉ๋ก, ~~text~~ ์ทจ์์ ์
๋๋ค. ์ถ๋ ฅ์ด ํ์ด์ง์ ๋ค์ด๊ฐ HTML์ด๋ฏ๋ก, ๋ ๋๋ง๋ ๋ฌธ์์ด์ ์ฝ์
์ ์ ์๋ํ์ด์ฆ๋ฉ๋๋ค. ๋ ๊ฒ์ <script> ํ๊ทธ, onclick ๊ฐ์ ์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ, javascript: URL์ด ์ ๊ฑฐ๋ฉ๋๋ค. ์ด ์๋ํ์ด์ง์ด ์ฌ์ฉ์๊ฐ ์์ฑํ ๋งํฌ๋ค์ด์ ํ์ํ ๋ ์ ์ฅํ XSS(ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํ
)๋ฅผ ๋ง์ ์ฃผ๋ฉฐ — ๋ชจ๋ ๋งํฌ๋ค์ด ๋ ๋๋ฌ์์ ๊ฐ์ฅ ์ค์ํ ๋ณด์ ์์ฑ์
๋๋ค.
์์ฃผ ์ฐ๋ ๊ฒฝ์ฐ
- ํ๋ก์ ํธ README๋ฅผ ์์ฑํ๊ณ GitHub์ ํธ์ํ๊ธฐ ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ
- ์ ์ HTML๋ก ๊ฒ์๋ ๋ฌธ์ ์์ฑํ๊ธฐ
- ํ ์ด๋ธ, ์์ ๋ชฉ๋ก, ์ฝ๋ ํ์ค๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋๋์ง ํ์ธํ๊ธฐ
- CMS๋ ์ด๋ฉ์ผ ํ ํ๋ฆฟ์ ๋ฃ์ ๊นจ๋ํ HTML ๊ฐ์ ธ์ค๊ธฐ
- ์ผ๋ฐ ๋งํฌ๋ค์ด ํ์๊ฐ ๋์น๋ GFM ์ ์ฉ ๊ตฌ๋ฌธ ๊ฒํ ํ๊ธฐ
์ฌ์ฉ ์
๋ค์ ๋งํฌ๋ค์ด ์กฐ๊ฐ์ด ์ฃผ์ด์ง๋ฉด:
# Release notes
- Added **dark mode**
- Fixed `login` redirect
> Ships in v2.0
๋ ๋๋ฌ๋ ์ด๊ฒ์ ๋ค์ HTML๋ก ์ปดํ์ผํฉ๋๋ค:
<h1>Release notes</h1>
<ul>
<li>Added <strong>dark mode</strong></li>
<li>Fixed <code>login</code> redirect</li>
</ul>
<blockquote>
<p>Ships in v2.0</p>
</blockquote>
์ ๋ชฉ, ๋ชฉ๋ก, ์ธ๋ผ์ธ strong๊ณผ code, ์ธ์ฉ๊ตฌ๊ฐ ๋ชจ๋ ๋งํฌ๋ค์ด ์ฝ์ด์์ ์ผ๋์ผ๋ก ๋์๋ฉ๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
์ด๋ค ๋งํฌ๋ค์ด ๋ณํ์ ์ง์ํ๋์?
๋ ๋๋ฌ๋ CommonMark ์ฌ์์ ๋ฐ๋ฅด๋ฉฐ ํ ์ด๋ธ, ์์ ๋ชฉ๋ก, ์ทจ์์ , ํ์ค ์ฝ๋ ๋ธ๋ก ๊ฐ์ GitHub-Flavored Markdown ํ์ฅ์ ์ถ๊ฐํฉ๋๋ค. ์ด ์กฐํฉ์ด ๋๋ถ๋ถ์ ๋ฌธ์์ README์์ ์ฐ๋ ๊ตฌ๋ฌธ์ ๋ค๋ฃน๋๋ค.
๋งํฌ๋ค์ด์ด HTML๋ก ์ปดํ์ผ๋๋์?
๋ค. ๋งํฌ๋ค์ด์ ์ผ๋ฐ ํ ์คํธ ์ฝ์ด์ ๋๋ค. ํ์๊ฐ ๋ธ๋ก๊ณผ ์ธ๋ผ์ธ ๊ตฌ๋ฌธ์ ํ ํฐํํ์ฌ HTML ์์๋ฅผ ๋ง๋ค์ด ๋ด๋ฉฐ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ฐฝ์ด ๊ทธ๊ฒ์ ๋ ๋๋งํ๊ณ Copy HTML ๋์์ผ๋ก ๋ค๋ฅธ ๊ณณ์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ๋๋ง๋ HTML์ด XSS์ ์์ ํ๊ฐ์?
์ถ๋ ฅ์ ํ์ด์ง์ ์ฝ์ ๋๊ธฐ ์ ์ ์๋ํ์ด์ฆ๋๋ฏ๋ก ๋ ๊ฒ์ script ํ๊ทธ, ์ธ๋ผ์ธ ์ด๋ฒคํธ ํธ๋ค๋ฌ, javascript: URL์ด ์ ๊ฑฐ๋ฉ๋๋ค. ๋ค๋ง ๋ด๋ณด๋ธ HTML์ ์์ ์ ์ฌ์ดํธ์ ์ฝ์ ํ ๋๋ ์ ๋ขฐ ๊ฒฝ๊ณ๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ค์ ์๋ํ์ด์ฆํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฌธ์๊ฐ ์๋ฒ๋ก ์ ๋ก๋๋๋์?
์๋๋๋ค. ํ์ฑ, ๋ ๋๋ง, HTML ๋ด๋ณด๋ด๊ธฐ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ๋ก์ปฌ๋ก ์คํ๋ฉ๋๋ค. ์ด์, ๋ฉ๋ชจ, ๋ถ์ฌ๋ฃ์ ๋ชจ๋ ์ฝํ ์ธ ๋ ๊ธฐ๊ธฐ์ ๋จธ๋ญ ๋๋ค.
๋ธ๋ก ๋งํฌ๋ค์ด๊ณผ ์ธ๋ผ์ธ ๋งํฌ๋ค์ด์ ์ฐจ์ด๋?
์ ๋ชฉ, ๋ชฉ๋ก, ์ฝ๋ ํ์ค, ์ธ์ฉ๊ตฌ ๊ฐ์ ๋ธ๋ก ๊ตฌ๋ฌธ์ด ๋ฌธ์๋ฅผ ์์๋ก ๊ตฌ์กฐํํฉ๋๋ค. ๊ตต๊ฒ, ๊ธฐ์ธ์, ๋งํฌ, ์ธ๋ผ์ธ ์ฝ๋ ๊ฐ์ ์ธ๋ผ์ธ ๊ตฌ๋ฌธ์ ๋จ๋ฝ ์์ ํ ์คํธ๋ฅผ ๊พธ๋ฐ๋๋ค. ํ์๋ ๊ฐ ๊ณ์ธต์ ์์ฒด ๊ท์น์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์๋ณธ ๋งํฌ๋ค์ด์ ๋ค์ด๋ก๋ํ ์ ์๋์?
๋ค. Download Markdown ๋์์ด ์ ๋ ฅ ์์ญ์ ํ ์คํธ๋ฅผ ๊ทธ๋๋ก .md ํ์ผ๋ก ์ ์ฅํ๋ฉฐ, ์ฝ๋ ํ์ค, ํ ์ด๋ธ, ๋ชจ๋ ์์์ด ์์ฑํ ๊ทธ๋๋ก ๋ณด์กด๋ฉ๋๋ค.