Markdown in Discord: complete formatting guide (2026)
Every Markdown trick that works in Discord — bold, italic, headings, code blocks, spoilers, lists, and the syntax Discord supports that Markdown doesn't.
Discord supports Markdown - most of it, anyway. The dialect is its own thing: a strict subset of GitHub Flavored Markdown with a few Discord-only additions (spoilers, mentions) and a few surprising omissions (no tables, no images via Markdown). This is the complete reference for formatting Markdown in Discord in 2026.
The basics that work everywhere in Discord
Type these in any Discord message, server, DM, thread, or channel:
**bold**
*italic* or _italic_
***bold italic***
~~strikethrough~~
__underline__
`inline code`
||spoiler text||
Renders as: bold, italic, bold italic, strikethrough, underline, inline code, and a click-to-reveal spoiler.
Note: __underline__ in Discord is underline, not the bold-or-italic that double-underscore means in CommonMark. Discord overloads the syntax.
Headings (Discord 2023+)
# Big heading
## Medium heading
### Small heading
All three sizes render. Below the size of ###, Discord just shows the hash characters as plain text.
Code blocks with syntax highlighting
Fenced code blocks work in Discord exactly like GitHub:
```python
def hello():
print("highlights as Python")
```
The language tag after the opening fence enables syntax highlighting. Discord supports about 200 languages - the most common ones (Python, JavaScript, Bash, JSON, YAML, SQL, Go, Rust, C++) all work. See Markdown code blocks for the full list and the rules around escaping.
Lists
- Unordered item
- Second item
- Nested item (two-space indent)
1. Ordered item
2. Second item
Renders like you'd expect. Discord doesn't support task lists (- [x]) - they show as raw characters.
Block quotes
> Single-line quote
>>> Everything below this is a multi-line block quote
> that spans paragraphs.
> quotes one line. >>> quotes everything until the end of the message.
What Discord adds beyond Markdown
These are Discord-only syntaxes that don't exist in regular Markdown:
- User mentions:
<@USER_ID>- pings a user - Channel mentions:
<#CHANNEL_ID> - Role mentions:
<@&ROLE_ID> - Custom emoji:
<:name:id>and<a:name:id>for animated - Timestamps:
<t:UNIX_TIMESTAMP:R>for "5 minutes ago" style relative times - Spoilers:
||spoiler||(Discord-only - not in CommonMark) - Header dividers:
-#(small text, added in 2024)
What Discord doesn't support
Things Markdown supports that Discord doesn't:
- Tables - Discord shows the pipes as literal characters. If you have a table, the cleanest workaround is paste it into Markdown Tidy, export to PNG, drop the image into Discord.
- Images via Markdown -
doesn't work. Drag-drop the image directly, or paste the URL on its own line for an auto-embed. - Hyperlinks via Markdown in regular messages - Discord doesn't render
[text](url)in regular messages. (Server embeds and bot messages do.) - Nested code blocks - fenced blocks can't contain other fenced blocks.
- Footnotes - not supported.
Copy-pasting AI output into Discord
The most common Markdown-in-Discord scenario in 2026: you ask ChatGPT or Claude for something, copy the output, paste into Discord. Three things go wrong:
- Tables show as raw
| pipes |- Discord doesn't render Markdown tables. - Heading levels get cut off - Discord supports
#,##,###. Anything deeper renders as literal hashes. - Em dashes, smart quotes, zero-width spaces show through as themselves. Discord renders them but they look off.
If you need the cleaned-up version, paste into Markdown Tidy first - Tidy will fix the table, normalize the unicode, then you can export to PNG (for the table) or copy the cleaned Markdown back into Discord.
Discord vs Slack vs Confluence
If you're posting the same content in multiple places, the dialect changes per platform:
- Discord - this guide. Spoilers, no tables, custom mentions.
- Slack -
*bold*(one asterisk) instead of**bold**. No headings. Different code-block syntax. - Confluence - needs explicit Markdown-to-Confluence conversion; the inline editor doesn't accept Markdown directly.
For chat-output-to-clean-document workflows, the paste-vs-convert pattern covers the right order of operations.
Quick cheat sheet
**bold** → bold
*italic* → italic
__underline__ → underline (Discord)
~~strike~~ → strikethrough
||spoiler|| → spoiler (click to reveal)
`code` → inline code
```code``` → fenced block
> quote → blockquote
>>> multi → multi-line blockquote
- bullet → list
1. numbered → ordered list
# Heading → big heading
## Heading → medium heading
### Heading → small heading
-# small text → small text (subhead/caption)
Bookmark this; the syntax doesn't change often but every detail matters in a Discord paste.
Related articles
Markdown in React: rendering, sanitization, and the libraries that matter
How to render Markdown in a React app — react-markdown, MDX, and the security trade-offs. With code snippets you can paste into a project today.
Markdown code blocks: fenced, indented, language hints, escaping
Everything about Markdown code blocks — fenced vs indented, syntax highlighting, escaping backticks, nesting, and the rules that differ between renderers.
The AI-generated Markdown cleanup checklist (12 items)
Twelve specific things to clean up in AI-generated Markdown before you ship the document. What each one looks like, why it matters, and how to fix it.
GitHub Flavored Markdown: what's different from CommonMark
GitHub Flavored Markdown (GFM) extends CommonMark with tables, task lists, autolinks, strikethrough, and a few other features. Every difference, in one page.