Cheatsheets:Markdown

From Wikibase
Revision as of 15:50, 19 August 2026 by Rongzhou (talk | contribs)
Jump to navigation Jump to search

Languages: English · français · Esperanto

Quick reference for smart people — part of our dev cheatsheets collection.

Markdown is plain text with a few markers that a renderer turns into HTML. This page is a syntax reference for CommonMark, the standard. GitHub Flavored Markdown (GFM) extensions are covered in the GFM extensions section.

New to Markdown? CommonMark interactive tutorial may interest you.

Basic example: Pancake recipe

Markdown source Compiled to HTML Rendered in the browser
# Pancakes

A quick pancake recipe for two.

## Ingredients

- 150 g flour
- 250 ml milk

## Steps

1. Mix the flour and milk.
2. Cook the batter in a pan.
<h1>Pancakes</h1>
<p>A quick pancake recipe for two.</p>
<h2>Ingredients</h2>
<ul>
<li>150 g flour</li>
<li>250 ml milk</li>
</ul>
<h2>Steps</h2>
<ol type="1">
<li>Mix the flour and milk.</li>
<li>Cook the batter in a pan.</li>
</ol>

Pancakes

A quick pancake recipe for two.

Ingredients

  • 150 g flour
  • 250 ml milk

Steps

  1. Mix the flour and milk.
  2. Cook the batter in a pan.

Paragraphs and line breaks

  • Two paragraphs must be separated by a blank line.
  • A single newline becomes a space when rendered.
  • For a hard linebreak within a paragraph, use \
line one
line two

Rendered:

line one line two

line one\
line two

Rendered:

line one
line two

Headings

One to six # markers set the level.

Source Level
# Pancakes h1
## Ingredients h2
... ...
###### Note h6

A space between the last marker and the text is required:

Wrong (no space) Right
#Pancakes

Rendered: the line stays a paragraph and the # is literal:

#Pancakes

# Pancakes

Rendered: a level-1 heading:

Pancakes

Emphasis

Source Rendered
*italic* or _italic_ italic
**bold** or __bold__ bold
***both*** both

Emphasis needs word boundaries — underscores inside a word are literal, not emphasis.

Source foo_bar_baz renders as foo_bar_baz, not as "foobarbaz". Fix: use asterisks around whole words instead:

*foo bar* baz

Inline links take the form [text](URL); images add a ! and an alt text: ![alt text](image.png).

Source Rendered
[CommonMark](https://commonmark.org) CommonMark
![alt text](image.png) alt text

Reference-style links separate the link text from the URL: [text][ref] in the text, and the definition [ref]: URL anywhere in the document. Here ... stands for the rest of the document between the two snippets:

Source Rendered
[CommonMark][cm]

... 

[cm]: https://commonmark.org
CommonMark

Lists

Unordered markers -, * and + are interchangeable. Ordered lists number from the first item's number, whatever you write:

3. Mix the flour and milk.
4. Cook the batter in a pan.

Rendered:

  1. Mix the flour and milk.
  2. Cook the batter in a pan.

The numbering starts at 3, as typed — the first item's number sets the start.

Nest with an indentation:

- fruit
  - apple
  - pear
- veg

Rendered:

  • fruit
    • apple
    • pear
  • veg

A blank line between items makes a loose list — each item is wrapped in a paragraph:

Without (tight) With a blank line (loose)
- fruit
- veg

Rendered:

  • fruit
  • veg
- fruit

- veg

Rendered:

  • fruit

  • veg

Code

Inline code — backticks; when the code itself contains a backtick, use two backticks:

Source Rendered
`pip install markdown` pip install markdown
`` `expr` `` `expr`

Fenced blocks — three backticks; the word after the opening fence enables syntax highlighting:

```python
print("hi")
```

Rendered:

print("hi")

Legacy syntax: indented code blocks. Four leading spaces also produce a code block, without highlighting:

    print("hi")

Rendered:

print("hi")

This form is not recommended — it is easy to break (a blank line ends it, and the indentation must change inside lists). You may still see it in older documents; use fenced blocks instead.

Blockquotes

A line starting with > is a blockquote; an empty > keeps paragraphs separate inside the quote.

> quoted line
>
> second quoted line

Rendered:

quoted line

second quoted line

Nested quotes — >>:

> outer
>
> > inner

Rendered:

outer

inner

GFM extensions

GitHub Flavored Markdown (GFM) used on GitHub and increasingly elsewhere, extends commonMark syntax with the following additions:

Strikethrough — two tildes:

Source Rendered
~~struck~~ struck

Tables

| Left | Center | Right |
|:-----|:------:|------:|
| a    | b      | c     |

When rendered, the first column is left-aligned (:-----), the second center-aligned (:-----:) and the third right-aligned (-----:):

LeftCenterRight
abc

Task lists

- [x] mix the batter
- [ ] cook the pancakes

Rendered:

☑ mix the batter
☐ cook the pancakes

Escaping

A backslash makes the next character literal:

Source Rendered
\*not italic\* *not italic*
\# not a heading # not a heading

Markdown inside an HTML block is not parsed — raw HTML passes through untouched.

<div>
*bold?* no, raw
</div>

renders the *bold?* literally. Fix: don't wrap Markdown in raw HTML at all:

*bold?* yes

Further reading