# all·markdown

What is Markdown?

Markdown is a way of writing formatted text as plain text. You type a few punctuation conventions — # for a heading, **bold**, a hyphen for a list item — and a renderer turns them into formatting. The file itself stays readable either way, which is the whole idea.

This is Markdown — edit the left side and watch the right

Result

Open the full editor Runs in this tab — nothing is uploaded.

How it works

There are two halves, and keeping them separate explains almost everything about the format.

The file is plain text. It has no hidden formatting, no binary wrapper, and no application that owns it. Open it in anything — Notepad, an email, a terminal — and you see exactly what is there.

The renderer reads those conventions and produces HTML. GitHub has one, your editor has one, this page has one. Nothing is stored in the file about fonts or colours or margins, because that is the renderer's business, not the document's.

This is why the same file can become a web page, a PDF and a Word document without being converted first. It was never in a format that needed converting.

Why it exists

John Gruber released Markdown in 2004, with input from Aaron Swartz. The design goal was unusually specific: a Markdown document should be publishable as plain text, without looking like it had been marked up.

That is why the conventions look familiar. People writing email had been using *asterisks* for emphasis and hyphens for lists for years. Markdown mostly wrote down what everyone was already doing, rather than inventing notation.

Compare a heading in HTML with the same heading in Markdown:

<h2>Getting started</h2>

## Getting started

Both produce the same output. Only one of them still reads as a heading when nothing is rendering it.

The six things that cover most writing

WhatHowMore
Heading# One, ## TwoHeadings
Bold and italic**bold**, *italic*Emphasis
Link[text](url)Links
List- item or 1. itemLists
Code`inline` or three backticksCode blocks
Quote> quotedQuotes

Everything else — tables, footnotes, task lists, images — can be looked up on the day it is needed. That is what the cheat sheet is for.

What it is good at

What it is not good at

Markdown has no page layout, no columns, no precise positioning, no styling and no way to make a cell span two columns. That is deliberate — the moment a format can express those, the file stops being readable as text — but it means a magazine spread or a complex report is the wrong job for it.

Where you need one of those things occasionally, raw HTML is allowed inside Markdown and is the intended escape hatch. Where you need them constantly, use something else.

Markdown compared with the alternatives

FormatHow it differs
HTMLMarkdown becomes HTML. Anything Markdown does, HTML does in more characters — and HTML does much more besides, which is why Markdown lets you embed it.
Rich text (Word, Google Docs)Formatting lives in the file rather than in the renderer. Better for layout, worse for diffing, and dependent on an application.
LaTeXFar more powerful for maths and typesetting, far less readable as source. Markdown is for prose; LaTeX is for documents where the typesetting is the point.
reStructuredTextStricter and more capable, with directives and cross-references built in. Common in Python documentation; harder to write from memory.
AsciiDocCloser to reStructuredText in power, closer to Markdown in feel. A reasonable choice for books and manuals.

Why there is more than one Markdown

The original 2004 specification was short, and short specifications leave gaps. Implementations filled them differently, so the same file could render three ways.

CommonMark is the effort that pinned the ambiguous cases down. GitHub Flavored Markdown is CommonMark plus tables, task lists, strikethrough and automatic links — and it is what most people mean when they say Markdown today.

Writing GFM is the safe default. The GitHub Markdown guide covers what it adds, and each syntax page says where its element is an extension rather than standard.

Where you will run into it

README files and issue comments on GitHub and GitLab. Documentation sites built with Hugo, Jekyll, Docusaurus or MkDocs. Notes in Obsidian, Notion and Bear. Messages in Discord and, in a modified form, Slack. Instruction files read by coding assistants. Static site content, changelogs, and most technical writing produced in the last decade.

Common questions

What is Markdown, in one sentence?
A way of writing formatted text as plain text: a handful of punctuation conventions — hashes for headings, asterisks for emphasis, hyphens for lists — that a renderer turns into HTML. The file stays readable whether or not anything renders it.
Is Markdown a programming language?
No. It is a markup language, which describes how text is structured rather than telling a computer what to do. There are no variables, conditions or loops — a Markdown file has exactly one meaning and cannot execute anything.
Who created Markdown and when?
John Gruber released it in 2004, with input from Aaron Swartz. The stated goal was that a Markdown document should be publishable as plain text without looking like it had been marked up — which is why every convention resembles what people were already typing in email.
Do I need to learn all of it?
No. Six things cover almost everything anyone writes: headings, bold, italic, links, lists and code. The rest — tables, footnotes, task lists — can be looked up on the day you need them, which is what a cheat sheet is for.
What is the difference between Markdown and HTML?
Markdown is a shorthand that becomes HTML. Anything Markdown can express, HTML can too, in more characters; the reverse is not true, which is why Markdown lets you drop raw HTML in for the things it has no syntax for. Markdown is for writing, HTML is for rendering.
Why are there different versions of it?
The original specification was short and ambiguous, so implementations disagreed. CommonMark pinned down the ambiguous cases, and GitHub Flavored Markdown adds tables, task lists and strikethrough on top. In practice, writing GFM is a safe default.