Discord Markdown
Discord supports most of Markdown plus a few formats of its own — and one
rule that is backwards from everywhere else: __underscores__
make underline, not bold. Everything Discord renders is
below.
Edit this — the preview uses standard Markdown, so compare it with Discord
Result
Runs entirely in this tab. Open the full editor to work on a real document.
The preview above renders standard Markdown, which is the point: the two places it disagrees with Discord — underline and spoilers — are exactly the Discord-only formats worth knowing about.
Text formatting
| Format | Syntax | Notes |
|---|---|---|
| Bold | **bold** | Two asterisks only |
| Italic | *italic* or _italic_ | Either works |
| Underline | __underline__ | Discord only — this is bold elsewhere |
| Bold italic | ***both*** | Three asterisks |
| Strikethrough | ~~struck~~ | Two tildes |
| Spoiler | ||hidden|| | Discord only — click to reveal |
| Inline code | `code` | Backticks disable all other formatting inside |
| Subtext | -# small text | Discord only — smaller, muted |
The underscore trap
In standard Markdown, **bold** and __bold__ are
the same thing. In Discord they are not: the underscore form is underline.
This is the one rule that catches people moving text between Discord and
anywhere else, and it is silent — the text still formats, just not the way
you meant.
Blocks
Headings arrived in 2023, so guides claiming Discord has none are out of date. There are three levels, each needing a space after the hashes:
# Big
## Medium
### Small
Lists work with a hyphen or asterisk for bullets and 1. for
numbers, and both nest with indentation. Quotes use > and a
space; >>> quotes everything that follows, which is
the one to use for a multi-paragraph quote.
Code blocks take a language after the opening backticks and syntax
highlight accordingly. The ansi language is a Discord
extension that renders colour escape codes, which is the only way to get
coloured text into a message.
What Discord does not support
- Tables — no syntax at all; pipes render as pipes. A code block with hand-aligned columns is the usual workaround.
- Masked links in ordinary messages —
[text](url)renders literally. Bots and webhooks can use them inside embeds, which is why they look like they should work. - Images by Markdown —
does nothing. Paste the URL and Discord embeds a preview itself. - HTML — never rendered, anywhere.
Discord's flavour has grown over the years — headings, lists and subtext were all added after launch — so if something here does not render for you, check whether your client is current before assuming the syntax is wrong.
Escaping
A backslash before a formatting character makes it literal:
\*not italic\*. For anything longer, a code block is easier —
every character inside one is taken at face value.
Common questions
- How do I make text bold in Discord?
- Wrap it in two asterisks: **like this**. Two underscores are not bold in Discord — __like this__ is underline, which is the single biggest difference from standard Markdown.
- How do I hide a spoiler?
- Wrap it in double pipes: ||the butler did it||. The text renders as a grey block that reveals on click. Spoilers are a Discord extension; nothing outside Discord understands them.
- Does Discord support headings?
- Yes, three levels — one, two or three hashes followed by a space. They were added in 2023, so older guides that say Discord has no headings are out of date. A fourth hash is not a heading and renders literally.
- Why does my link show the URL instead of the text?
- Masked links — [text](url) — are not rendered in ordinary messages. They work in embeds posted by bots and webhooks, which is why they appear to work for some accounts and not for you. In a normal message, paste the bare URL.
- Can I make a table in Discord?
- No. There is no table syntax and pipes render literally. The usual workaround is a code block, where a monospace font at least keeps hand-aligned columns lined up.
- How do I stop something formatting?
- Escape the character with a backslash — \*not italic\* — or put the whole thing in a code block, where every Markdown character is literal.