Markdown lists
A dash and a space makes a bullet. A number, a dot and a space makes a numbered list. Nesting works by indenting, and the amount of indentation is where it usually goes wrong.
- first
- second
- third
`*` and `+` do the same thing. Pick one and stay with it.
- first
- second
- third
- first
- second
- third
All ones still renders 1, 2, 3. Handy when you reorder often, because you never renumber by hand.
- parent
- child
- child
- another parent
step one
A paragraph belonging to step one.
step two
What usually goes wrong
- Nesting needs two spaces for a bulleted list and three for a numbered one, because the indent has to line up past the marker. Get it wrong and the child becomes a sibling.
- A blank line between items turns a tight list into a loose one, and every item gets wrapped in a paragraph with extra spacing. It is valid, just visibly different.
- Starting a line with a number and a dot creates a list even when you meant a year:
1994. A good yearbecomes a numbered item. Escape it as1994\. - A list needs a blank line before it if a paragraph comes directly above, or some renderers swallow it into the paragraph.
Where it behaves differently
It renders as written on GitHub, GitLab, Obsidian, VS Code preview, Notion and Discord. Everywhere else in this table it does something else, and that is worth reading before you paste.
| Platform | Behaviour |
|---|---|
| Slack | Slack documents no list syntax. Typing - and a space makes the composer build one, but the message is not markdown. |
For the .md file that arrives in Mail
A markdown file on a phone is the worst case: no editor, no preview, and a share sheet full of apps that want to import it into a library. The iPhone and iPad app opens it where it landed, renders it, and lets you edit and save it back.
For iPhone and iPad.