md0.io supports GitHub Flavored Markdown (GFM), which extends the CommonMark spec with tables, task lists, strikethrough, and fenced code blocks with language identifiers. This reference covers every syntax element you can use across md0 tools.
Headers
Use # symbols to define heading levels. The number of # characters sets the level.
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
Leave a blank line before and after headings to avoid parsing ambiguity.
Emphasis
*italic* or _italic_
**bold** or __bold__
***bold and italic*** or ___bold and italic___
~~strikethrough~~
Strikethrough (~~) is a GFM extension and may not render in all markdown parsers outside of GitHub.
Lists
Unordered Lists
Use -, *, or + as list markers. They can be mixed but consistency is preferred.
- First item
- Second item
- Third item
Ordered Lists
1. First item
2. Second item
3. Third item
The numbers you use do not have to be sequential. Most renderers will output the correct sequence regardless of the numbers in the source.
Nested Lists
Indent with two or four spaces to create sub-items:
- Parent item
- Child item
- Another child
- Grandchild item
- Back at top level
Task Lists
GFM task lists use [ ] for incomplete and [x] for completed items:
- [x] Write the introduction
- [x] Add code examples
- [ ] Review for accuracy
- [ ] Publish
Links
Inline Links
[Link text](https://example.com)
[Link with title](https://example.com "Title text")
Reference-Style Links
Define a link reference by ID and reuse it throughout the document:
[Link text][link-id]
[link-id]: https://example.com "Optional title"
Bare URLs
GFM auto-links plain URLs when they begin with http:// or https://:
https://example.com
Images
Image syntax is identical to links with a ! prefix. The alt text is shown when the image fails to load and is read by screen readers.


Reference-style images work the same way as reference-style links.
Code
Inline Code
Wrap inline code with single backticks:
Use `npm install` to install dependencies.
Fenced Code Blocks
Use triple backticks with an optional language identifier for syntax highlighting:
```javascript
function greet(name) {
return `Hello, ${name}!`;
}
```
Common language identifiers: bash, javascript, typescript, python, html, css, json, sql, yaml, markdown.
Blockquotes
Use > at the start of a line to create a blockquote. They can be nested:
> This is a blockquote.
>
> It can span multiple paragraphs.
> First level quote
>> Nested quote
>>> Deeply nested
Tables
GFM tables use pipe characters to separate columns. The second row defines alignment.
| Column A | Column B | Column C |
|----------|----------|----------|
| Cell 1 | Cell 2 | Cell 3 |
| Cell 4 | Cell 5 | Cell 6 |
Column Alignment
Control alignment with colons in the separator row:
| Left | Center | Right |
|:---------|:--------:|---------:|
| left | center | right |
:---= left-aligned (default):---:= center-aligned---:= right-aligned
The Table Editor and Table Generator handle pipe alignment automatically.
Horizontal Rule
Three or more hyphens, asterisks, or underscores on their own line:
---
***
___
Leave blank lines before and after a horizontal rule to prevent it being parsed as a heading underline.
Escaping Special Characters
Prefix any markdown syntax character with a backslash to render it as a literal character:
\*not italic\*
\# not a heading
\[not a link\]
\`not code\`
\\ a literal backslash
Characters that can be escaped: \ ` * _ { } [ ] ( ) # + - . ! |
Line Breaks
A single newline in the source does not produce a line break in the output. To add a hard line break within a paragraph, end the line with two or more spaces, or use a \ at the end of the line (GFM extension):
Line one
Line two (preceded by two spaces)
Line one\
Line two (GFM backslash break)
To start a new paragraph, leave a blank line between blocks of text.