Skip to main content

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 — two asterisks
**bold text**
Preview

bold text

Italic — one asterisk (or one underscore)
*italic text*
Preview

italic text

Bold + italic — three asterisks
***bold and italic***
Preview

bold and italic

Strikethrough — two tildes
~~strikethrough~~
Preview

strikethrough

Mixed emphasis in one message
**bold** and *italic* in the same line
Preview

bold 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
Discord only
__underline text__
How it looks in Discord
underline text
Underline + Bold
Discord only
__**underline bold**__
How it looks in Discord
underline bold
Underline + Italic
Discord only
__*underline italic*__
How it looks in Discord
underline italic
Underline + Bold + Italic
Discord only
__***underline bold italic***__
How it looks in Discord
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.

H1 — largest heading
# Large Header
Preview

Large Header

H2 — section heading
## Medium Header
Preview

Medium Header

H3 — smallest heading
### Small Header
Preview

Small 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.

Subtext — small greyed text
Discord only
Main message text
-# This is subtext below it
How it looks in Discord

Main 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.

Bullet list — use - or *
- First item
- Second item
- Third item
Preview
  • First item
  • Second item
  • Third item
Numbered list
1. First step
2. Second step
3. Third step
Preview
  1. First step
  2. Second step
  3. Third step
Nested list — indent 2 spaces before the marker
- Fruits
  - Apple
  - Banana
- Vegetables
  - Carrot
Preview
  • 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.

Single-line quote
> This is a single-line blockquote.
Preview

This is a single-line blockquote.

Multi-line quote — repeat > on each line
> Line one of the quote.
> Line two continues here.
Preview

Line one of the quote.
Line two continues here.

Rest-of-message quote (>>>)
Discord only
>>> Everything after the triple
angle bracket is quoted.
Even this third line.
How it looks in Discord

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 — one backtick each side
`inline code`
Preview

inline code

Code block — three backticks
```
Your multi-line code here
No language specified
```
Preview
Your multi-line code here
No language specified
Code block with a language — adds syntax highlighting
```python
def greet(name):
    return f"Hello, {name}!"
```
Preview
def greet(name):
    return f"Hello, {name}!"
JavaScript code block
```javascript
const greet = (name) => `Hello, ${name}!`;
```
Preview
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.

The part that trips everyone up: 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.
ANSI colored text

Copy this — the clipboard version contains the real ESC characters

Desktop only
```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
```
How it looks in Discord

Bold green text

Red text

Underlined cyan text

Bold yellow on a dark background

Format values
0Normal
1Bold
4Underline
Text colors (30-37)
30Gray
31Red
32Green
33Yellow
34Blue
35Pink
36Cyan
37White
Background colors (40-47)
40Dark blue
41Orange
42Gray
43Light gray
44Lighter gray
45Indigo
46Light gray
47Cream

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.

Red and green — diff

Lines starting with - go red, lines starting with + go green

Discord only
```diff
- This line appears red
+ This line appears green
```
How it looks in Discord

- This line appears red

+ This line appears green

Yellow — fix

Everything inside a fix block turns yellow

Discord only
```fix
This whole line appears yellow
```
How it looks in Discord

This whole line appears yellow

Blue — ini

Wrap the text in square brackets inside an ini block

Discord only
```ini
[This text appears blue]
```
How it looks in Discord

[This text appears blue]

Cyan — bash

Wrap the text in double quotes inside a bash block

Discord only
```bash
"This text appears cyan"
```
How it looks in Discord

"This text appears cyan"

Either way, the color lives inside a code block. There is no way to color a word in the middle of a normal sentence, and none of this travels — paste it anywhere other than Discord and you get a plain code block. For color in Markdown generally, see Markdown text color.

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.

Basic spoiler
Discord only
||The butler did it!||
How it looks in Discord (hidden)
The butler did it!
Inline spoiler
Discord only
The answer is ||42||, of course.
How it looks in Discord (hidden)
The answer is 42, of course.
Multi-line spoiler
Discord only
||Line one spoiler
Line two spoiler||
How it looks in Discord (revealed)

Line one spoiler

Line two spoiler

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”.

Relative timestamp

Updates by itself as time passes

Discord only
Raid starts <t:1735689600:R> — that's <t:1735689600:F>
How it looks in Discord
Raid starts in 3 hours — that's Wednesday, January 1, 2025 4:00 PM
SyntaxStyleRenders as
<t:1735689600:t>Short time4:00 PM
<t:1735689600:T>Long time4:00:00 PM
<t:1735689600:d>Short date01/01/2025
<t:1735689600:D>Long dateJanuary 1, 2025
<t:1735689600:f>Short date and time (default)January 1, 2025 4:00 PM
<t:1735689600:F>Long date and timeWednesday, January 1, 2025 4:00 PM
<t:1735689600:R>Relative2 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.

SyntaxWhat it doesNotes
@everyoneEveryone in the serverType it directly — no ID needed.
@hereEveryone currently onlineType it directly — no ID needed.
<@123456789012345678>User mentionRight-click a user and Copy User ID (Developer Mode on).
<@&123456789012345678>Role mentionUses the role ID, note the extra &.
<#123456789012345678>Channel linkRenders as a clickable #channel-name.
</command:123456789012345678>Slash command linkClicking it opens the command in the message box.
:smile:Standard emoji shortcodeConverts to the Unicode emoji as you send.
<:name:123456789012345678>Custom server emojiType a \ before the emoji to reveal this form.
<a:name:123456789012345678>Animated custom emojiSame 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 supportedWhat to do instead
TablesNo pipe tables. Line up the columns with spaces inside a code block, or post a screenshot.
Images![alt](url) does nothing. Paste the bare image URL instead — Discord embeds it automatically — or upload the file.
HTMLNo 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 quotesExtra > 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, MermaidNone of the extended-Markdown features exist in Discord chat.
Font and size controlHeaders and subtext are the only size options. There is no colour or font syntax outside ansi blocks.
Faking a table with a code block

Monospace keeps the columns lined up

```
Name      Role      Level
--------  --------  -----
Ava       Healer    42
Bjorn     Tank      38
```
Preview
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.

Escaped bold asterisks
\*\*not bold\*\*
Preview

**not bold**

Escaped spoiler pipes
\|\|not a spoiler\|\|
Preview

||not a spoiler||

Escaped backtick
\`not code\`
Preview

`not code`

Escaped blockquote
\> not a quote
Preview

> 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**
Spaces between the asterisks and the text break the match. The markers have to sit flush against the first and last character.

Doesn't work

#Header without a space

Fixed

# Header with a space
Discord requires a space after #, ##, ###, and -#. Without it the line is just text that starts with a hash. This is the same rule for > quotes and - lists.

Doesn't work

__this should be bold__

Fixed

**this is bold**
On Discord __text__ is underline, not bold — this is the one place Discord disagrees with standard Markdown, where double underscores mean bold. Use ** for bold everywhere.

Doesn't work

```
**bold** inside a code block
```

Fixed

**bold** outside the code block
Code blocks switch off every other kind of formatting, spoilers included. That is useful when you want to show raw syntax, and surprising when you did not.

Doesn't work

```ansi
\u001b[1;32mGreen text\u001b[0m
```

Fixed

```ansi
(ESC)[1;32mGreen text(ESC)[0m
```
Typing the eight characters \u001b does nothing — Discord needs the actual invisible ESC control character (U+001B) in the message. Use the copy button on the ANSI example above to get a message with the real character already in it.

Quick Reference

Every Discord formatting syntax at a glance.

FormatSyntaxDiscord only?
Bold**text**No
Italic*text* or _text_No
Bold + italic***text***No
Underline__text__Yes
Strikethrough~~text~~No
Header 1-3# / ## / ### textYes (added 2023)
Subtext-# textYes (added 2024)
Inline code`code`No
Code block```code```No
Colored text```ansi + ESC[1;32mYes (desktop only)
Blockquote> textNo
Rest-of-message quote>>> textYes
Spoiler||text||Yes
Bullet list- itemNo
Numbered list1. itemNo
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.

SurfaceFormats?Notes
Desktop and browser messagesYesEverything on this page, ANSI colour blocks included.
Mobile app messagesPartialAll text formatting works. ANSI colour does not — mobile renders the block as plain monospace.
Inside a code blockNoCode blocks disable all other formatting by design, spoilers included.
Bot and webhook messagesYesSame syntax as a user message, plus rich embeds via the API.
Embed description and fieldsYesFull Markdown including masked links.
Embed title, author, and footerPartialPlain text only — links and most formatting are ignored there.
Channel topic and About MePartialInline formatting and links render. Headers and lists generally do not.
Usernames, nicknames, thread and forum titlesNoPlain text fields. The characters show up literally.
Direct messagesYesIdentical 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. ![alt](url) 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.