Discord Markdown and text formatting
Discord text formatting is mostly 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
Visual
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.
Every format at a glance
| 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 |
| Heading | # ## ### | Three levels; a space after the hashes |
| Quote | > or >>> | Three angle brackets quote everything after |
Bold, italic and underline
Bold is **two asterisks**. Italic is one asterisk or one
underscore. Combine them with three: ***bold italic***.
Underline is __two underscores__, and this is the rule that
catches everyone. In standard Markdown, on GitHub, in Slack, and in every
static site generator, __text__ is bold. In Discord it is
underline. Text moved in either direction changes meaning silently: it
still formats, just not the way you wrote it.
Discord has no way to write underline other than the underscores. There is
no HTML here at all: <u> renders as literal characters.
Spoilers
||the butler did it|| Double pipes on each side. The text renders as a gray block that reveals when clicked, and the whole thing collapses again on some clients when you scroll past. Spoilers are Discord's own invention: copy one anywhere else and you get four pipe characters.
An image can be marked as a spoiler too, by ticking the box when uploading
or by naming the file with a SPOILER_ prefix.
Code blocks
Single backticks for inline code, three for a block. A language after the opening backticks turns on syntax highlighting:
```js
console.log('hello');
``` Everything inside a code block is literal: asterisks, underscores, pipes, all of it. That makes a code block the simplest way to post text that must not format, and the usual workaround for the missing table syntax, since a monospace font keeps hand-aligned columns lined up.
Colored text
Discord has no color syntax. The only route is a code block with
ansi as its language, containing ANSI escape codes:
```ansi
[2;32mGreen text[0m
```
The character before each bracket is an actual escape character
(U+001B), which most keyboards cannot type: people copy it
from a generator. It renders on desktop and in the browser client, and not
on every mobile build, so treat it as decoration rather than as anything
the reader needs.
In ordinary message text there is no color at all. If the goal is to make one line stand out, a heading or subtext does it in one character.
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 underline text in Discord?
- Two underscores on each side: __underlined__. Discord is the one place where that means underline rather than bold, and it is why text copied from Discord into anywhere else comes out bold.
- How do I hide a spoiler?
- Wrap it in double pipes: ||the butler did it||. The text renders as a gray block that reveals on click. Spoilers are a Discord extension; nothing outside Discord understands them.
- Can I write colored text in Discord?
- Only inside a code block with ansi as its language, using ANSI escape codes. It is fiddly, it does not render on every client, and it cannot be used in ordinary message text. There is no color syntax outside that.
- 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.
Sources
- Discord Support: Markdown Text 101the official list