GuideDiscordCheat sheet

Discord Text Formatting: Every Markdown Code in One Cheat Sheet

By Dan Whitfield··10 min read

Discord formats text with Markdown: wrap words in symbols and the app renders them. ~~two tildes~~ strike text through, **two asterisks** make it bold, ||two bars|| hide a spoiler, and -# at the start of a line makes small text. Every code below was checked on September 27, 2026 against Discord's Markdown Text 101 help article and its developer documentation; the one thing Discord does not document, colored text, is flagged where it comes up.

The cheat sheet

EffectWhat you typeResult
Strikethrough~~text~~text
Bold**text**text
Italic*text* or _text_text
Underline__text__text
Bold italic***text***text
Spoiler||text||text
Big header# TitleTitle
Medium header## TitleTitle
Small header### TitleTitle
Small text (subtext)-# texttext
Masked link[Schedule](https://streamer.guide)Schedule
Bulleted list- item• item
Numbered list1. item1. item
Block quote> texttext
Quote the rest of the message>>> texttext…
Inline code`text`text
Code block```text```text
Colored text```ansi + escape codestext
Timestamp<t:1790884800:F>each reader's local time
Show symbols literally\*text\**text*

Headers, subtext, lists and quotes only work at the start of a line and need a space after the symbol. To start a new line without sending on desktop, press Shift + Enter.

Strikethrough: ~~text~~

Two tildes before and two after. There is no keyboard shortcut for it in Discord's own hotkey list (that list covers bold, italic, underline and inline code), so either type the tildes or, on desktop, select the text and use the small formatting toolbar that pops up.

~~Friday~~ Saturday, 8 PM
Merch drop: ~~$30~~ $25 this weekend
~~**Sold out**~~ back in stock

The first line is the one streamers use most: a schedule change where the struck-out day stays visible, so nobody thinks they misremembered. Swap the written time for a timestamp and every viewer also sees it in their own time zone.

Why strikethrough fails

  • One tilde. ~text~ shows exactly that. It has to be two on each side.
  • A look-alike character. Text copied from documents or other apps can carry a full-width ~ or a small ˜, which Discord does not treat as a tilde. Retype them.
  • Inside backticks. Code formatting shows everything literally, tildes included.
  • Crossed symbols when combined. Close in reverse order: ~~**text**~~ works, ~~**text~~** does not.

Bold: **text**

Two asterisks on each side, or select the text and press Ctrl + B (⌘ + B on Mac). Discord's help center lists that shortcut for the desktop app and the browser only; on a phone you type the asterisks.

**Stream starts in 10 minutes**
Rule 1: **no spoilers** outside #spoilers

Bold works mid-sentence, so use it on the two or three words a skimming reader must not miss. A whole paragraph in bold reads as shouting and hides the part that mattered. For a proper title, a header is the better tool.

Italic: *text* or _text_

One asterisk or one underscore on each side; Ctrl/⌘ + I on desktop. The trap is maths: type 5*3*2 and Discord eats the asterisks and italicises the 3. Write 5\*3\*2 or 5 × 3 × 2 instead.

Underline: __text__

Two underscores on each side; Ctrl/⌘ + U on desktop. This one is Discord's own addition — in standard Markdown (Reddit, GitHub, most note apps) __text__ means bold, so formatting copied out of Discord changes meaning.

It also catches programmers: Python's __init__ arrives as an underlined “init”. Put names like that in backticks.

Spoiler Tags: ||text||

Two vertical bars on each side hide text behind a dark block until a reader clicks or taps it. Discord gives you three ways to add one, according to its Spoiler Tags help article: type the bars, type /spoiler before the message, or select the text and click the eye icon (on iOS, select the text and tap Mark as Spoiler).

The winner is ||the underdog||
||https://clips.twitch.tv/…||
  • Images and videos: attach the file, then click the eye icon on it before sending (on mobile, tap or long-press the thumbnail and choose Mark as spoiler).
  • Links: wrap the URL in bars and the preview card is hidden too. Server invite embeds are the exception — Discord says they cannot be hidden.
  • Code blocks cancel spoilers. Bars inside backticks stay visible as bars.
  • Readers can switch spoilers off. The “Show spoiler content” setting (On click, Always, or On servers I moderate) exists in the desktop and browser app only, so do not assume everyone is protected.

Headers: #, ## and ###

One, two or three hash signs, then a space, at the very start of a line. Discord supports those three sizes. Without the space you get a plain #hashtag, which is the most common reason a header “does not work”.

# Stream Schedule
## This week
- Mon: Valorant ranked
- Thu: community games
### Rules
Be kind. No spoilers.

Headers turn an announcement or rules post into something people can scan, which matters once your server is where the community lives between streams — part of growing a Twitch channel past the live hours.

Small Text: -# (Subtext)

Start a line with -# — hyphen, hash, space — and the line renders small and grey. Discord calls it subtext. Like headers it must be the first thing on the line and covers only that line, so each small line needs its own -#.

Giveaway ends Sunday!
-# Not sponsored. One entry per person.
-# Winners are drawn live on stream.

It is the native answer to “small text” searches. The “tiny text” generators you find online do something different: they swap letters for look-alike Unicode symbols, which are not real letters — Discord search and screen readers do not treat them as the words they resemble.

Lists: -, * and 1.

Start each line with - or * and a space for bullets, or 1. for a numbered list. Add two spaces before the bullet to indent a sub-item, per Discord's help center.

1. Join the voice channel
2. Pick a role in #roles
  - Viewer
  - Clipper

Block Quotes: > and >>>

> at the start of a line quotes that line. >>> quotes everything after it to the end of the message — there is no closing marker, so put >>> last if you want your own comment above the quote. Both need the space.

> Can we get a Minecraft stream?
Yes — Thursday.

>>> Patch notes
Everything down here is quoted,
however many lines it runs.

Code Blocks and Syntax Highlighting

One backtick on each side makes inline code; three backticks on their own lines make a block. Name a language right after the opening three backticks — no space — and Discord colours the syntax.

```py
print("going live")
```

```json
{ "bitrate": 6000 }
```
  • Everything inside is literal: no bold, no spoilers, no headers. That makes code the easiest way to show Markdown symbols without them firing.
  • To show a backtick inside inline code, wrap it in double backticks: `` a ` b ``.
  • Syntax colours render on desktop and web; on phones they have been inconsistent for years, so never let colour carry the meaning.

Colored Text: ANSI Code Blocks

Discord has no colour option for normal text. The workaround is a code block tagged ansi, where terminal colour codes switch colours on and off. Each code is the escape character (written \u001b in a bot's source), then [, the numbers separated by semicolons, and m. \u001b[0m resets.

```ansi
␛[1;31mRed and bold␛[0m back to normal
␛[4;36mUnderlined cyan␛[0m
```

␛ stands in for the invisible escape character, which you cannot type on a normal keyboard. Bots write \u001b in code; by hand, copy the character from an existing ANSI message and edit the text.

TextColor
30Gray (near black)
31Red
32Green
33Yellow
34Blue
35Pink
36Cyan
37White
BackgroundColor
40Black
41Red
42Green
43Yellow
44Blue
45Pink
46Cyan
47White

Formats go in the same slot: 0 normal, 1 bold, 4 underline, so \u001b[1;4;32m is bold underlined green. The code list comes from the community ANSI guide for Discord — Discord's help center does not document ANSI — and the swatches approximate how the dark theme draws them.

The catch is phones: the same guide states ANSI is not supported on mobile, where readers may get plain text. For one line of red or green that works nearly everywhere colour does, a diff block is simpler — lines starting with + turn green, lines starting with - turn red:

```diff
+ Stream is live
- Tonight's stream is cancelled
```

Combining Formats

Stack the symbols and close them in the reverse order you opened them, like nested brackets.

TypeYou get
***text***Bold italic
__*text*__Underline italic
__**text**__Underline bold
__***text***__Underline bold italic
~~**text**~~Bold, struck through
||**text**||Bold, hidden as a spoiler
> **text**Bold inside a quote
- **Label:** textList item with a bold label

Escaping: Show the Symbols Instead

A backslash in front of a symbol tells Discord to print it rather than format with it:

\*not italic\*
\|\|not a spoiler\|\|
\# not a header
\> not a quote

For anything longer, backticks are faster — everything inside code is literal. One desktop trick worth knowing: \:emoji_name: sends a custom emoji's raw code, <:emoji_name:ID>, which is how people find an emoji ID for a bot.

Mentions, Channels and Emoji by ID

Typing @name and picking from the list is the normal way. Under the hood — and in bot messages — Discord uses these formats, listed in its developer docs:

User<@USER_ID>
Channel<#CHANNEL_ID>
Role<@&ROLE_ID>
Slash command</name:COMMAND_ID>
Custom emoji<:name:EMOJI_ID>
Animated emoji<a:name:EMOJI_ID>

To copy IDs, turn on User Settings → Advanced → Developer Mode (on mobile: your avatar → the cog → Advanced). On desktop, right-click a user, channel or server and pick its Copy ID option; on mobile it sits in the user's ⋯ menu, a long-press on a channel, or the server name's menu. Discord's help center points out that <#channel id> sends a clickable channel link. User and role mentions notify people depending on the sender's permissions.

Timestamps: <t:UNIX:STYLE>

A timestamp shows a date and time converted to each reader's own time zone and locale — the fix for “is that 8 PM my time or yours?”. The number is Unix time in seconds, and the letter picks one of nine styles from Discord's developer docs:

StyleShowsDiscord's example
<t:…:t>Short time16:20
<t:…:T>Medium time16:20:30
<t:…:d>Short date20/04/2021
<t:…:D>Long dateApril 20, 2021
<t:…:f>Long date, short time (default)April 20, 2021 at 16:20
<t:…:F>Full date, short timeTuesday, April 20, 2021 at 16:20
<t:…:s>Short date, short time20/04/2021, 16:20
<t:…:S>Short date, medium time20/04/2021, 16:20:30
<t:…:R>Relative4 years ago

Working out the Unix number by hand is the annoying part, so we built a free Discord timestamp generator: pick the date, time and time zone, copy any style with a live preview. The line that works for streamers is Live <t:1790884800:F> (<t:1790884800:R>) — the exact date plus a countdown that updates by itself. Use it for scheduled streams and for community nights you host with Discord's Go Live.

The two classic mistakes: pasting milliseconds (a 13-digit number from JavaScript's Date.now()) instead of seconds, and posting the code inside backticks, which shows it raw.

Desktop vs Mobile vs Bots

Formatting behaves the same in DMs, group chats and servers. What changes is the device and who is sending:

FeatureDesktop & browserMobile appsBots & webhooks
Markdown you type (bold to quotes, spoilers)YesYesYes, in message content
Ctrl/⌘ + B, I, U shortcutsYesNo—
Mark text as spoiler from a menuSelect text → eye iconiOS: select text → Mark as Spoiler—
ANSI colors and syntax highlightingYesUnreliable — may show plain textDepends on the reader's app
“Show spoiler content” settingYesNo—
Message length2,000 characters (4,000 with Nitro)Same2,000 in content

Formatting symbols count toward the message limit — 2,000 characters, or 4,000 with Nitro, per Discord's account caps article. Bots get 2,000 characters of message content; Discord's newer Text Display components for bots also take regular Markdown, headers and lists included. And none of this carries over to stream chat: Twitch chat renders no Markdown at all, and the shared vocabulary there is emotes — see our Twitch emotes guide for that side of chat culture, or the stream bots roundup for automating it.

Frequently Asked Questions

How do you strikethrough text on Discord?

Put two tildes on each side of the text: ~~like this~~. One tilde does nothing, and the tildes show literally inside backticks or a code block. On a US keyboard the tilde is Shift plus the key left of 1; on phone keyboards it sits on a symbols page.

How do you make text bold in Discord?

Wrap it in two asterisks: **bold**. On desktop and in the browser you can also select the text and press Ctrl+B (Cmd+B on Mac). Three asterisks, ***like this***, make it bold italic.

How do you make text small in Discord?

Start the line with a hyphen, a hash and a space: -# your text. Discord calls this subtext. It only works at the very beginning of a line and applies to that one line, so put -# in front of every line you want small.

How do you spoiler text on Discord mobile?

Type two vertical bars on each side: ||hidden text||. It works the same way on iOS and Android. On iOS you can also select the text in the message box and tap Mark as Spoiler, and on any device you can type /spoiler before your message.

How do you spoiler an image on Discord?

Attach the image, then mark it before you send: on desktop click the eye icon on the attachment; on mobile tap or long-press the attachment thumbnail and choose Mark as spoiler. For a link, wrap the URL in ||bars||. Discord's help center notes that server invite embeds cannot be hidden this way.

How do you underline in Discord?

Two underscores on each side: __underlined__. Ctrl+U (Cmd+U) does it on desktop. Underline is Discord-specific: paste the same text into Reddit or GitHub and __text__ turns bold instead.

How do you make a hyperlink in Discord?

Use a masked link: [the words people see](https://the-full-address). No space between the closing bracket and the opening parenthesis, and use the full URL with https://. To post a bare link without a preview card, wrap it in angle brackets: <https://example.com>.

Can you change the text color in Discord?

Not in normal text. The only color trick is a code block tagged ansi with ANSI escape codes, such as ESC[31m for red, which renders on desktop and web but not reliably on phones. A diff code block is the simpler fallback: lines starting with + turn green and lines starting with - turn red.

Why is my Discord formatting not working?

The common causes: the text is inside backticks or a code block (which show everything literally), a missing space after #, -#, > or a list bullet, a header or subtext that is not at the start of a line, or unbalanced symbols such as **bold* with one asterisk short. Markdown also does not render in display names or channel names.