Markdown Guide for Writers and Developers
Master Markdown syntax from basics to advanced features — tables, code blocks, task lists, and the differences between Markdown flavors.
Markdown is the closest thing the internet has to a universal writing format. It's used in GitHub READMEs, Notion documents, Slack messages, documentation sites, blog posts, and developer notes. Learn it once and you'll use it everywhere — for the rest of your career.
What is Markdown?
Markdown is a lightweight markup language created by John Gruber in 2004. The core idea: write in plain text using simple punctuation conventions, and it renders to beautifully formatted HTML.
This **bold text** and *italic text* render instantly.
Renders as: This bold text and italic text render instantly.
The raw text is still perfectly readable — even before rendering.
Basic syntax
Headings
# Heading 1
## Heading 2
### Heading 3
#### Heading 4
Use headings to create a document hierarchy. # H1 is typically the page title — use only one per document.
Emphasis
**bold text**
*italic text*
***bold and italic***
~~strikethrough~~
Lists
Unordered list:
- Item one
- Item two
- Nested item (indent with 2 spaces)
- Another nested item
- Item three
Ordered list:
1. First step
2. Second step
3. Third step
Links and images
[Link text](https://example.com)
[Link with title](https://example.com "Hover tooltip")


Blockquotes
> This is a blockquote.
> It can span multiple lines.
> You can nest blockquotes:
> > Like this.
Horizontal rule
---
(Three or more dashes, asterisks, or underscores on their own line)
Code blocks
Inline code uses single backticks:
Use the `console.log()` function for debugging.
Fenced code blocks use triple backticks with an optional language identifier for syntax highlighting:
```javascript
function greet(name) {
return `Hello, ${name}!`;
}
```
Supported languages include javascript, typescript, python, bash, sql, json, yaml, css, html, go, rust, and dozens more — depending on the renderer.
Tables
Markdown tables use pipe characters and dashes:
| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| Cell A | Cell B | Cell C |
| Cell D | Cell E | Cell F |
Align columns with colons in the separator row:
| Left | Center | Right |
|:-----|:------:|------:|
| L | C | R |
Tables are part of GitHub Flavored Markdown (GFM), not standard Markdown. They work in GitHub, VS Code, most documentation platforms, and MDX.
Task lists (GFM)
- [x] Write the introduction
- [x] Add code examples
- [ ] Review and publish
- [ ] Add images
Renders as interactive checkboxes on GitHub. Widely supported in modern Markdown renderers.
Markdown flavors
Original Markdown is intentionally minimal. Extensions have proliferated:
| Flavor | Used in | Key additions |
|---|---|---|
| CommonMark | Many platforms | Standardized spec |
| GitHub Flavored (GFM) | GitHub, GitLab | Tables, task lists, strikethrough, autolinks |
| MDX | React sites | JSX components inside Markdown |
| Pandoc Markdown | Academic docs | Footnotes, citations, math |
| MultiMarkdown | macOS tools | Tables, metadata, footnotes |
When in doubt, use GFM — it's the most widely supported extended flavor.
Front matter
Many Markdown processors support YAML front matter at the top of a file for metadata:
---
title: "My Article Title"
date: "2026-03-24"
author: "Jane Doe"
tags: ["markdown", "writing", "tools"]
published: true
---
# Article content starts here
Front matter is parsed separately from the document body and used for things like page titles, dates, and SEO metadata.
MDX: Markdown + JSX
MDX is Markdown that can contain React components. It's ideal for documentation and blog posts in React-based sites (Next.js, Gatsby, Astro):
import { Alert } from '../components/Alert'
## Important note
<Alert type="warning">
This feature is deprecated in v3.
</Alert>
Regular **Markdown** content continues below.
This blends the simplicity of Markdown with the power of interactive components.
Escaping special characters
Prefix special Markdown characters with a backslash to render them literally:
\*not italic\*
\# not a heading
\[not a link\]
Tips for better Markdown documents
- One sentence per line — Makes diffs cleaner in Git; renders identically since Markdown ignores single newlines.
- Blank line between blocks — Always leave a blank line between paragraphs, headings, lists, and code blocks.
- Consistent list markers — Pick
-or*for unordered lists and stick to it across a project. - Reference links for repeated URLs — Define once, use many times:
See the [documentation][docs] and [changelog][docs]. [docs]: https://example.com/docs - Alt text for every image — Essential for accessibility and SEO.
Checking readability
Markdown makes it easy to write — but easy writing can produce hard-to-read text. Use our Readability Score tool to check Flesch-Kincaid grade level, sentence complexity, and passive voice usage. Aim for clear, concise language at a Grade 8–10 reading level for general audiences.
Markdown is one of those tools that takes 10 minutes to learn and pays dividends for a lifetime. Start writing in it today — your future collaborators (and future self) will thank you.