Discord Text Formatting
Every piece of Discord markup, with copy-ready examples — bold, underline, headers, subtext, block quotes, spoilers, ANSI colored text, masked links, timestamps, and mentions.
Short answer
Discord's markup is 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
Block Quotes
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. Other formatting still works inside a quote. 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.
> This line is quoted.
This line is not.This line is quoted.
This line is not.
>>> 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.Discord swapped this palette out in August 2026 — backgrounds 40-47 changed entirely, and colors now shift with the reader's theme. The Discord color text generator builds the block for you, previews it in all four themes, and puts the real ESC characters on your clipboard.
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 teal text\u001b[0m
\u001b[1;40;33mBold brown on a black background\u001b[0m
```Bold green text
Red text
Underlined teal text
Bold brown on a black background
| 0 | Normal |
| 1 | Bold |
| 4 | Underline |
| 30 | Black | |
| 31 | Red | |
| 32 | Green | |
| 33 | Brown | |
| 34 | Light blue | |
| 35 | Pink | |
| 36 | Teal | |
| 37 | Light gray |
| 40 | Black | |
| 41 | Red | |
| 42 | Green | |
| 43 | Brown | |
| 44 | Light blue | |
| 45 | Pink | |
| 46 | Teal | |
| 47 | Light gray |
Values combine in one prefix, separated by semicolons: ESC[1;40;32m is bold green on a black background, and ESC[1;4;31m is bold underlined red. The one value that cares about order is 0: it resets everything before it, so it goes first or in its own sequence.
New in October 2026: Discord has started rolling out more codes — 3 italic, 9 strikethrough, and any RGB color with 38;2;R;G;B (text) or 48;2;R;G;B (background). It is undocumented and not everyone has it yet, so stick to the codes above for anything that must look right to all.
Mobile is unreliable. Desktop and browser render these blocks in color. Reports from the iOS and Android apps conflict, and many phones still show plain monospace, so treat color as an enhancement.
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. The exact shades follow Discord's code-block theme, which it has restyled more than once, so treat the previews as approximate.
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” (since September 2026 you can also spoiler an image after sending it). Pipes typed inside a code block do nothing, but wrapping the whole block — ||```code```|| — hides it.
||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 | 12:00 AM |
| <t:1735689600:T> | Medium Time | 12:00:00 AM |
| <t:1735689600:d> | Short Date | 01/01/2025 |
| <t:1735689600:D> | Long Date | January 1, 2025 |
| <t:1735689600:f> | Long Date, Short Time (default) | January 1, 2025 at 12:00 AM |
| <t:1735689600:F> | Full Date, Short Time | Wednesday, January 1, 2025 at 12:00 AM |
| <t:1735689600:s> | Short Date, Short Time | 01/01/2025, 12:00 AM |
| <t:1735689600:S> | Short Date, Medium Time | 01/01/2025, 12:00:00 AM |
| <t:1735689600:R> | Relative Time | 2 years ago |
1735689600 is seconds since the Unix epoch — 1 January 2025, 00:00 UTC — and the right-hand column is what a reader set to English, US sees in UTC. Someone in New York sees the same code as 7:00 PM on 31 December. Leave the style off and Discord uses f. Discord desktop can also build one for you (since early 2026): type @time and describe the moment in plain language.
To get the number for a date, use the timestamp generator — it shows all nine styles at once and converts a Unix timestamp back to a date.
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:. |
| <@$123456789012345678> | Game mention | Type @game and pick a game. Desktop since August 2026, mobile since September. |
| <id:browse> | Server navigation link | Also <id:customize> and <id:guide>. Opens that part of the current server. |
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 and web; unreliable on mobile) |
| 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 | Yes | All text formatting works. ANSI colour is unreliable: many phones show 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 field values | Yes | Full Markdown including masked links. |
| Embed title and field names | Partial | Bold, italic and the rest render; masked links do not. |
| Embed author and footer | No | Plain text only. |
| Channel topic and About Me | Partial | Inline formatting and links render. Bios also take -# subtext, and desktop added a formatting toolbar for bios in August 2026. |
| Usernames, nicknames, server and channel names | 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**__.
Is Discord markup the same as Markdown?
Mostly. Discord markup is the Markdown-based syntax Discord reads in messages. Bold, italic, strikethrough, code, lists, block quotes and links work as in standard Markdown. Discord adds underline (__text__), spoilers (||text||), subtext (-#), timestamps and mentions, and leaves out tables, images, HTML, horizontal rules and nested quotes.
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 channel name, 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. Desktop and browser render the colour; the phone apps often show the block as 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.
How do I end a block quote in Discord?
A > quote ends at the first line that does not start with > and a space, so start a new line (Shift+Enter on desktop) without the >. A >>> quote cannot be ended: it runs to the end of the message, so put any unquoted text above it or send it as a separate message.
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. ANSI colour blocks are the exception: reports conflict, and many phones still show them as plain monospace, so do not rely on colour for mobile readers. 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 "in 3 hours" or "2 years ago". Discord converts it to each viewer's own timezone and locale. There are nine styles: t, T, d, D, f, F, s, S and R. On Discord desktop you can also type @time and describe the moment in plain language.
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.