Discord Text Formatting
Every formatting syntax Discord supports, with copy-ready examples — bold, underline, headers, subtext, spoilers, ANSI colored text, masked links, timestamps, and mentions.
Short answer
Discord uses a trimmed-down Markdown. Wrap text to style it — **bold**, *italic*, __underline__, ~~strikethrough~~, ||spoiler||, `code` — or start a line to structure it: # Header, -# subtext, > quote, - list. Every line-start form needs a space after the symbol. There are no tables, no images, and no HTML, and the only way to get color is an ```ansi code block.
Text Formatting
These behave the same as standard Markdown. Wrap your text with the symbols below, flush against the first and last character — a space inside the markers stops it working.
**bold text**bold text
*italic text*italic text
***bold and italic***bold and italic
~~strikethrough~~strikethrough
**bold** and *italic* in the same linebold and italic in the same line
Underline
Underline is Discord's own addition — standard Markdown has none. It uses double underscores, __text__, and stacks with bold and italic. This is the one place Discord disagrees with the rest of Markdown, where __text__ means bold.
__underline text____**underline bold**____*underline italic*____***underline bold italic***__Headers
Discord added headers in 2023. Use #, ##, or ### at the start of a line, with a space before your text. There is no #### — three levels is the limit, and subtext goes the other direction.
# Large HeaderLarge Header
## Medium HeaderMedium Header
### Small HeaderSmall Header
Subtext
Subtext is Discord-exclusive, added in 2024. Start a line with -# and a space for small, greyed text — captions, credits, disclaimers, the line under a screenshot.
Main message text
-# This is subtext below itMain message text
This is subtext below it
Lists
Bullet lists take - or *, numbered lists take 1., and two spaces before the marker nests one level. Checkbox lists are not supported — - [ ] renders the brackets literally.
- First item
- Second item
- Third item- First item
- Second item
- Third item
1. First step
2. Second step
3. Third step- First step
- Second step
- Third step
- Fruits
- Apple
- Banana
- Vegetables
- Carrot- Fruits
- Apple
- Banana
- Vegetables
- Carrot
Blockquotes
Start a line with > and a space to quote it. To quote everything from that point to the end of the message, use >>> once at the start. Discord does not nest quotes, which is where it parts ways with standard Markdown blockquotes.
> This is a single-line blockquote.This is a single-line blockquote.
> Line one of the quote.
> Line two continues here.Line one of the quote.
Line two continues here.
>>> Everything after the triple
angle bracket is quoted.
Even this third line.Everything after the triple
angle bracket is quoted.
Even this third line.
Code Blocks
One backtick for inline code, three for a block. Add a language name straight after the opening backticks for syntax highlighting. Code blocks also switch off every other kind of formatting inside them — which is the easiest way to show raw Markdown symbols, and the most common reason someone's bold text refuses to render.
`inline code`inline code
```
Your multi-line code here
No language specified
```Your multi-line code here
No language specified
```python
def greet(name):
return f"Hello, {name}!"
```def greet(name):
return f"Hello, {name}!"
```javascript
const greet = (name) => `Hello, ${name}!`;
```const greet = (name) => `Hello, ${name}!`;
Colored Text
Discord has no color syntax for ordinary messages. What it does have is the ansi code block, which renders real ANSI escape sequences — the same ones that color a terminal. This is the current, supported method, and it is the one thing Discord's own formatting article never mentions.
The ansi code block
Open the block with ```ansi, then prefix each run of text with ESC[format;color m and end it with ESC[0m to reset.
ESC is the invisible control character U+001B, not the characters \u001b. The block below displays the readable \u001b notation — what you would write in bot code — but the copy button gives you a message with the real character already in it, ready to paste into Discord.Copy this — the clipboard version contains the real ESC characters
```ansi
\u001b[1;32mBold green text\u001b[0m
\u001b[0;31mRed text\u001b[0m
\u001b[4;36mUnderlined cyan text\u001b[0m
\u001b[1;40;33mBold yellow on a dark background\u001b[0m
```Bold green text
Red text
Underlined cyan text
Bold yellow on a dark background
| 0 | Normal |
| 1 | Bold |
| 4 | Underline |
| 30 | Gray | |
| 31 | Red | |
| 32 | Green | |
| 33 | Yellow | |
| 34 | Blue | |
| 35 | Pink | |
| 36 | Cyan | |
| 37 | White |
| 40 | Dark blue | |
| 41 | Orange | |
| 42 | Gray | |
| 43 | Light gray | |
| 44 | Lighter gray | |
| 45 | Indigo | |
| 46 | Light gray | |
| 47 | Cream |
Values combine in one prefix, background first: ESC[1;40;32m is bold green on a dark blue background. Add 4 for underline — ESC[1;4;31m is bold underlined red.
Mobile does not render ANSI. The iOS and Android apps show the block in plain monospace, so anyone reading on a phone sees no color at all. If that matters, use the highlighting trick below instead.
The older trick: syntax highlighting as color
Before ANSI, the way to color text was to pick a language whose highlight.js grammar happened to paint the whole line. It is cruder — one color per line, and only the colors the grammar produces — but it needs no invisible characters and it survives on mobile.
Lines starting with - go red, lines starting with + go green
```diff
- This line appears red
+ This line appears green
```- This line appears red
+ This line appears green
Everything inside a fix block turns yellow
```fix
This whole line appears yellow
```This whole line appears yellow
Wrap the text in square brackets inside an ini block
```ini
[This text appears blue]
```[This text appears blue]
Wrap the text in double quotes inside a bash block
```bash
"This text appears cyan"
```"This text appears cyan"
Spoiler Tags
Double pipes, ||text||, black out the text until someone clicks it. Works mid-sentence, across several lines, and on uploaded files if you tick “Mark as spoiler”. Spoilers are disabled inside code blocks.
||The butler did it!||The answer is ||42||, of course.||Line one spoiler
Line two spoiler||Line one spoiler
Line two spoiler
Links and Embeds
Discord auto-links any bare URL and usually generates a preview embed underneath it. Two pieces of syntax change that: masked links hide the URL behind readable text, and angle brackets suppress the preview.
[Visit Google](https://google.com)<https://example.com/long-article>Clickable, but no preview card underneath.
Timestamps
Not Markdown, but the most useful formatting Discord has: a Unix timestamp wrapped in <t:...> renders in each reader's own timezone and locale. Nobody has to do the math for “9pm my time”.
Updates by itself as time passes
Raid starts <t:1735689600:R> — that's <t:1735689600:F>| Syntax | Style | Renders as |
|---|---|---|
| <t:1735689600:t> | Short time | 4:00 PM |
| <t:1735689600:T> | Long time | 4:00:00 PM |
| <t:1735689600:d> | Short date | 01/01/2025 |
| <t:1735689600:D> | Long date | January 1, 2025 |
| <t:1735689600:f> | Short date and time (default) | January 1, 2025 4:00 PM |
| <t:1735689600:F> | Long date and time | Wednesday, January 1, 2025 4:00 PM |
| <t:1735689600:R> | Relative | 2 months ago |
1735689600 is seconds since the Unix epoch — 1 January 2025, 00:00 UTC. Leave the style off and Discord uses f.
Mentions and Emoji
Typing @ or # in the message box opens an autocomplete, and that is what most people use. The raw forms below matter when you are writing a bot, a webhook payload, or a message you want to build in advance. IDs come from right-clicking and choosing Copy ID, with Developer Mode enabled in Settings.
| Syntax | What it does | Notes |
|---|---|---|
| @everyone | Everyone in the server | Type it directly — no ID needed. |
| @here | Everyone currently online | Type it directly — no ID needed. |
| <@123456789012345678> | User mention | Right-click a user and Copy User ID (Developer Mode on). |
| <@&123456789012345678> | Role mention | Uses the role ID, note the extra &. |
| <#123456789012345678> | Channel link | Renders as a clickable #channel-name. |
| </command:123456789012345678> | Slash command link | Clicking it opens the command in the message box. |
| :smile: | Standard emoji shortcode | Converts to the Unicode emoji as you send. |
| <:name:123456789012345678> | Custom server emoji | Type a \ before the emoji to reveal this form. |
| <a:name:123456789012345678> | Animated custom emoji | Same as above, with a leading a:. |
What Discord Markdown Doesn't Support
Discord implements a subset, not all of Markdown. These are the pieces people reach for and do not find — worth knowing before you spend ten minutes wondering what you typed wrong.
| Not supported | What to do instead |
|---|---|
| Tables | No pipe tables. Line up the columns with spaces inside a code block, or post a screenshot. |
| Images |  does nothing. Paste the bare image URL instead — Discord embeds it automatically — or upload the file. |
| HTML | No tags of any kind. <b>, <br>, <span style> and friends all show up as literal text. |
| Horizontal rules | --- and *** render as plain text. There is no divider syntax. |
| Task lists | - [ ] and - [x] render as a bullet with literal brackets. Nothing is clickable. |
| Nested quotes | Extra > characters do not stack. >>> is not level three — it quotes the rest of the message. |
| Headers past ### | #### and deeper are not headings. Discord stops at three levels, plus -# for subtext. |
| Footnotes, math, Mermaid | None of the extended-Markdown features exist in Discord chat. |
| Font and size control | Headers and subtext are the only size options. There is no colour or font syntax outside ansi blocks. |
Monospace keeps the columns lined up
```
Name Role Level
-------- -------- -----
Ava Healer 42
Bjorn Tank 38
```Name Role Level
-------- -------- -----
Ava Healer 42
Bjorn Tank 38
Escaping Characters
Put a backslash \ in front of a formatting character to send it literally. It also stops emoji shortcodes converting — typing \ before a custom emoji is the usual way to reveal its <:name:id> form.
\*\*not bold\*\***not bold**
\|\|not a spoiler\|\|||not a spoiler||
\`not code\``not code`
\> not a quote> not a quote
Common Mistakes
Almost every “why won't my formatting work” question on Discord is one of these five.
Doesn't work
** bold text **Fixed
**bold text**Doesn't work
#Header without a spaceFixed
# Header with a spaceDoesn't work
__this should be bold__Fixed
**this is bold**Doesn't work
```
**bold** inside a code block
```Fixed
**bold** outside the code blockDoesn't work
```ansi
\u001b[1;32mGreen text\u001b[0m
```Fixed
```ansi
(ESC)[1;32mGreen text(ESC)[0m
```Quick Reference
Every Discord formatting syntax at a glance.
| Format | Syntax | Discord only? |
|---|---|---|
| Bold | **text** | No |
| Italic | *text* or _text_ | No |
| Bold + italic | ***text*** | No |
| Underline | __text__ | Yes |
| Strikethrough | ~~text~~ | No |
| Header 1-3 | # / ## / ### text | Yes (added 2023) |
| Subtext | -# text | Yes (added 2024) |
| Inline code | `code` | No |
| Code block | ```code``` | No |
| Colored text | ```ansi + ESC[1;32m | Yes (desktop only) |
| Blockquote | > text | No |
| Rest-of-message quote | >>> text | Yes |
| Spoiler | ||text|| | Yes |
| Bullet list | - item | No |
| Numbered list | 1. item | No |
| Masked link | [text](url) | No |
| Suppress link preview | <url> | Yes |
| Timestamp | <t:1735689600:R> | Yes |
| User / role / channel mention | <@id> / <@&id> / <#id> | Yes |
| Custom emoji | <:name:id> | Yes |
| Escape character | \* \_ \~ | No |
Where Formatting Works
Discord only renders Markdown in message content. Plenty of fields that accept text do not format it, which is the second-most-common reason syntax comes out literal.
| Surface | Formats? | Notes |
|---|---|---|
| Desktop and browser messages | Yes | Everything on this page, ANSI colour blocks included. |
| Mobile app messages | Partial | All text formatting works. ANSI colour does not — mobile renders the block as plain monospace. |
| Inside a code block | No | Code blocks disable all other formatting by design, spoilers included. |
| Bot and webhook messages | Yes | Same syntax as a user message, plus rich embeds via the API. |
| Embed description and fields | Yes | Full Markdown including masked links. |
| Embed title, author, and footer | Partial | Plain text only — links and most formatting are ignored there. |
| Channel topic and About Me | Partial | Inline formatting and links render. Headers and lists generally do not. |
| Usernames, nicknames, thread and forum titles | No | Plain text fields. The characters show up literally. |
| Direct messages | Yes | Identical to a server channel. |
Frequently Asked Questions
How do I bold text in Discord?
Wrap the text in two asterisks: **bold text**. There must be no space between the asterisks and the text — ** bold text ** will not work. To get bold and italic together use three asterisks: ***bold italic***.
How do I underline text in Discord?
Wrap the text in two underscores: __underline__. This is Discord-specific — standard Markdown has no underline at all, and in most other Markdown renderers __text__ produces bold instead. You can stack it: __**underline bold**__.
Why isn't my Discord formatting working?
In order of how often it happens: (1) you are inside a code block, which disables all formatting; (2) you left a space between the symbols and the text — **bold** works, ** bold ** does not; (3) you left out the space after #, -#, >, or -, all of which require one; (4) you are typing in a field that does not support formatting, such as a username, a thread title, or an embed footer.
How do I make colored text in Discord?
Use an ansi code block. Open the block with ```ansi, then prefix your text with an ANSI escape sequence of the form ESC[format;color m — for example ESC[1;32m for bold green — and close with ESC[0m. The ESC is the invisible U+001B control character, so you have to copy it rather than type it. Colour only renders on desktop and in the browser; the mobile app shows the block in plain monospace.
Does Discord support tables?
No. Discord has no Markdown table syntax, and pipe tables render as literal text. The usual workaround is to line the columns up with spaces inside a plain code block, which keeps them aligned because the font is monospaced. Otherwise, post a screenshot or link out.
Do masked links work in normal Discord messages?
Yes. [text](https://example.com) turns the text into a clickable hyperlink in ordinary chat messages — Discord documents this as Masked Links. If the visible text looks like a different URL from the destination, Discord shows a confirmation warning before opening it, and some servers block masked links via AutoMod.
How do I stop a link from showing a preview?
Wrap the URL in angle brackets: <https://example.com>. The link stays clickable but Discord will not generate the embed preview underneath your message.
What is the difference between > and >>> in Discord?
A single > quotes only that one line. Triple >>> quotes everything after it to the end of the message, so you do not need a > on each line. Note that Discord has no nested quotes — unlike standard Markdown, extra > characters do not add levels.
What does -# do in Discord?
It creates subtext: small, grey text, useful for captions, credits, and fine print. Put -# followed by a space at the very start of the line. It was added in 2024 and works on desktop and mobile.
Can I use Discord markdown on mobile?
Yes — every text formatting syntax on this page works in the iOS and Android apps, with one exception: ANSI colour blocks do not render in colour on mobile. The practical difficulty is typing backticks and pipes on a phone keyboard, so most people copy the syntax and edit it.
How do I add a timestamp that shows each person's local time?
Use <t:UNIX_TIMESTAMP:STYLE>, for example <t:1735689600:R> for a relative time like "2 months ago". Discord converts it to each viewer's own timezone and locale. The styles are t, T, d, D, f, F, and R.
How do I prevent Discord from formatting my text?
Put a backslash before each formatting character: \*\*not bold\*\* displays literally as **not bold**. For a whole message, wrap it in a code block instead — code blocks turn off every other kind of formatting.
Does Discord support images or HTML in messages?
Neither.  is not Discord syntax — paste the bare image URL and Discord embeds the image automatically, or upload the file. HTML tags of any kind render as literal text.