StringToolsStringTools

Markdown Preview

Write Markdown and see it rendered as formatted HTML in real time. Use the toolbar to insert syntax, then copy the Markdown or HTML output.

Mitul MandankaFounder, Progragon Technolabs · 15+ years building software
Updated June 20267 min read
143 words · 873 chars
Markdown873 chars
Preview

Welcome to Markdown Preview

Getting Started

This is a live preview of your Markdown. Start typing on the left to see the rendered output here.

Text Formatting

You can write bold text, italic text, strikethrough, and inline code.

Links & Images

Visit StringToolsApp

Lists

Unordered list:

  • First item
  • Second item
  • Third item

Ordered list:

  1. Step one
  2. Step two
  3. Step three

Code Block

function greet(name) {
  return `Hello, ${name}!`;
}

Blockquote

Markdown is a lightweight markup language that you can use to add formatting elements to plaintext documents.

Table

Feature Supported
Headings Yes
Lists Yes
Code Yes
Tables Yes

Start editing to see your own Markdown rendered in real time!

TL;DR

There is no single "Markdown." The text you write is interpreted by a specific flavor. The two that matter most are CommonMark (the strict, unambiguous spec) and GitHub Flavored Markdown (GFM), a superset that adds tables, task lists, strikethrough, and autolinks. The preview above renders GFM, so it matches what you will see on GitHub. If your ~text~ or | a | b | table is not rendering somewhere else, that target almost certainly speaks plain CommonMark, not GFM.

CommonMark vs GitHub Flavored Markdown: what actually differs

John Gruber's original 2004 Markdown had no formal spec, so every parser behaved slightly differently. CommonMark (2014) fixed that with a precise, testable specification. GFMis CommonMark plus a handful of extensions GitHub needed. Everything valid in CommonMark is valid in GFM, but not the reverse. The five GFM-only features below are the usual culprits when Markdown "works on GitHub but breaks elsewhere."

GFM extensionSyntaxIn plain CommonMark
Tables| H1 | H2 | then | --- | --- |Rendered as literal text with pipes
Task lists- [ ] todo / - [x] doneA normal bullet with literal [ ]
Strikethrough~~gone~~Literal tildes around the word
AutolinksA bare https://example.comPlain text, not a clickable link
Disallowed raw HTML<script>, <iframe> filteredRaw HTML passed through unchanged

Reddit comments, Slack, Discord, and many static-site generators use neither pure CommonMark nor full GFM — each has its own dialect. When in doubt, assume the smallest common subset: headings, emphasis, links, lists, and code.

Markdown syntax cheat sheet (syntax → result)

Every row below works in the preview above. Rows marked GFM are extensions that will notrender in a strict CommonMark parser. The "Renders as" column describes the resulting HTML element so you know what to expect downstream.

You typeRenders asFlavor
# TitleHeading level 1 (<h1>)CommonMark
###### SubHeading level 6 (max depth)CommonMark
**bold**Bold (<strong>)CommonMark
*italic* or _italic_Italic (<em>)CommonMark
`code`Inline code (<code>)CommonMark
Three backticks + langFenced code blockCommonMark
[text](url)Link (<a href>)CommonMark
![alt](url)Image (<img>)CommonMark
> quoteBlockquote (<blockquote>)CommonMark
- item / 1. itemUnordered / ordered listCommonMark
--- on its own lineHorizontal rule (<hr>)CommonMark
Two trailing spacesHard line break (<br>)CommonMark
~~struck~~Strikethrough (<del>)GFM
- [x] doneChecked task list itemGFM
Pipe table + --- separatorTable (<table>)GFM
Bare https://...Auto-linked URLGFM

Escaping special characters so they print literally

Markdown treats a set of punctuation marks as syntax. To show one of them as a literal character, put a backslash \ in front of it. Without the backslash, the parser eats the character and may also swallow the text around it.

Typed:    Use \*literally\* not as emphasis
Renders:  Use *literally* not as emphasis

Typed:    Costs 5\$ and 50\%
Renders:  Costs 5$ and 50%

Typed:    A path C:\\Users\\me
Renders:  A path C:\Users\me

CommonMark lets you backslash-escape any ASCII punctuation character — all 32 of them. That includes $ and % from the example above. The full set is:

! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ `{ | } ~

Two important exceptions: a backslash before any other character (like \a) is left untouched as a literal backslash, and escapes do not work inside code spans or fenced code blocks. Inside backticks, every character is already literal, so a backslash there is just a backslash.

Five rendering surprises that trip everyone up

1. A single line break does nothing

Pressing Enter once joins two lines into the same paragraph. To force a visible break you need either a blank line (new paragraph) or two trailing spaces at the end of the first line (a <br>). This is the number-one "why is my list/poem on one line" complaint.

2. Lists need a blank line before them

A list that immediately follows a paragraph with no blank line in between is often absorbed into that paragraph, and the rules for when it can interrupt one differ between parsers. Play it safe: always leave one empty line above your first - or 1..

3. Underscores inside words can italicize unexpectedly

In the original Markdown, snake_case_namecould render "case" in italics. CommonMark fixed this — intra-word underscores no longer trigger emphasis — but some older parsers and chat apps still misbehave. Use backticks for identifiers to be safe.

4. Numbered lists ignore your numbers

Writing 1., 1., 1. still renders 1, 2, 3 — the parser only reads the first number to decide the starting point and counts up from there. To start at 5, write 5. on the first item.

5. Raw HTML may or may not survive

CommonMark passes inline HTML straight through. GFM and most hosted platforms sanitize it, stripping <script>, <iframe>, style attributes, and event handlers for security. If your embedded HTML vanishes on GitHub or a CMS, sanitization — not a syntax error — is the cause.

Markdown questions people actually search

Why doesn't my table render outside of GitHub?

Tables are a GFM extension, not part of core CommonMark. If a target speaks strict CommonMark (some static-site setups, plain Markdown previewers, basic chat apps), your pipes and dashes show up as literal text. You need a parser with GFM or the "tables" extension enabled — the preview above already has it on.

How do I add a line break without a new paragraph?

End the line with two spaces and then press Enter. That produces a single <br> while keeping the text in the same paragraph. Many editors trim trailing whitespace on save, so if it stops working, that is usually why — use a backslash at end of line as a GFM-safe alternative.

How do I show a literal asterisk, backtick, or hash?

Put a backslash in front of it: \*, \#, \|. For a literal backtick, the cleanest trick is to wrap it in a longer run of backticks, for example two backticks around ` a backtick `. Escapes do not work inside code spans, where everything is already literal.

Is the rendered HTML here the same as GitHub's?

Structurally, yes — this preview renders GitHub Flavored Markdown, so tables, task lists, strikethrough, and autolinks all match. The visual styling (fonts, colors, spacing) is ours, but the underlying HTML elements GitHub generates are the same. For pixel-exact preview, paste into a draft issue on GitHub itself.

Why did my <script> or inline HTML disappear?

GFM and nearly every hosted Markdown platform sanitize raw HTML to prevent cross-site scripting. Tags like <script>, <iframe>, <style>, and inline event handlers (onclick) get stripped. Plain CommonMark would keep them, which is exactly why hosted platforms add a sanitizer on top.

Does my Markdown get sent to a server?

No. The site is a static export with no backend. Parsing and rendering run entirely in your browser's JavaScript engine, so your draft never leaves your device. You can confirm in DevTools → Network: typing triggers zero outbound requests.