Discord Markdown Guide: Commands, Examples & Live Preview
Published · Updated
Learn every Discord markdown command — bold, spoilers, headers, code, timestamps — with copy-paste examples. Preview your message free before you post.
Discord markdown is the plain-text formatting Discord uses in chat: wrap text for styles (**bold**, *italic*, __underline__, ~~strikethrough~~, ||spoiler||, backticks for code) or start a line for structure (# headers, -# subtext, lists, > quotes). It is a subset of Markdown plus Discord-only extras (underline, spoilers, subtext). There is no native draft preview—formatting appears when you send—so many people draft in a Discord markdown preview tool first.
Discord markdown cheat sheet
Scan the styles below, copy an example, and paste it into Discord. Markers must sit flush against the text (no spaces inside). Line-anchored styles need the marker at the very start of the line, then a space.
- Bold —
**text**— standard markdown - Italic —
*text*or_text_— prefer*inside snake_case - Underline —
__text__— Discord-only (not bold) - Strikethrough —
~~text~~— standard markdown - Spoiler —
||text||— Discord-only (not Reddit>! !<) - Header —
#/##/###— line start + space; no H4+ - Subtext —
-#— Discord-only small gray caption - Bullets / numbers —
-/*/1.— line start + space - Quote —
>(one line) or>>>(rest of message) - Inline code — `
code` — disables other markdown inside - Code block — triple backticks, optional language tag (
js,python,ansi…) - Masked link —
[label](https://example.com)— no space before( - Suppress embed —
<https://example.com>— shows the URL without a preview card - Timestamp —
<t:1700000000:R>— Unix seconds + style letter - Escape —
\*or wrap in backticks — show the symbol literally
Want to check the result before your whole server sees it? Open the free Discord message formatter—live Discord-style preview, copy when ready. Guest drafts stay in your browser. Not a scheduler.
How Discord markdown works
Discord splits formatting into two kinds. Inline styles—bold, italics, underline, strikethrough, spoilers, inline code—wrap your text with a symbol on each side and can appear mid-sentence. Line-anchored styles—headers, subtext, list markers, and block quotes—only fire at the very start of a line and need the space after their marker (# , -# , - , > ). Nothing renders inside a code span, which is why backticks double as an escape hatch. The Discord client has no draft mode: what you type is what the channel sees the instant you press Enter.
Bold, italics, underline, and strikethrough
- Bold: two asterisks each side —
**bold**renders as bold. - Italic: one asterisk or one underscore each side —
*italic*or_italic_renders as italic. - Bold italic: three asterisks each side —
***text***renders as bold italic. - Underline: two underscores each side —
__text__renders as underlined. - Strikethrough: two tildes each side —
~~strikethrough~~renders asstruck out.
# Server update
**Raid night** moves to *Friday* at 20:00.
__Bring potions__ and ~~Tuesday~~ is cancelled.
- Tanks: sign up in #roles
- Healers: check `/loadout`
> Late joiners wait in the lobby.The __underline__ trap: on Discord, double underscores mean underline, not bold. That is the opposite of GitHub-flavored Markdown, where __text__ is bold. Prefer a single asterisk for italics inside words like snake_case, because a lone underscore can misfire mid-word. Wrappers nest cleanly, so __**bold underline**__ and ~~*struck italic*~~ both work.
Spoilers
Wrap text in double pipes—||plot twist||—and Discord renders a blackout bar that readers click or tap to reveal. This is Discord's own syntax, not Reddit's >!spoiler!<, so do not mix them when cross-posting. Spoilers work inline (hide a single word inside a sentence) and around links (the embed stays hidden until revealed). They do nothing inside code spans or code blocks.
Headers, subtext, lists, and quotes
- Headers:
#for a large title,##for a section,###for a subsection—three sizes only, each at the start of a line with a space after the hashes. There is no H4; a fourth#just shows the extra character. - Subtext:
-#renders small, muted gray text—ideal for captions, disclaimers, and footnotes. - Bulleted list: begin a line with
-or*, and indent two spaces to nest a sub-item. - Numbered list: begin each line with
1.; Discord auto-corrects the sequence, so1.on every line still renders 1, 2, 3. - Block quote: start a line with
>(the trailing space matters) to quote a single line or paragraph. - Multi-line quote: start with
>>>to quote everything from there to the end of the message.
All of these are line-anchored: the marker has to be the first thing on the line, and none of them fire mid-line or inside a code block. Leave > with its space or it renders as a literal greater-than sign. A clean announcement pattern is one # headline, a short context line, then bullets.
Code blocks and syntax highlighting
Code spans show text as-is in monospace and disable every other markdown character inside them—the cleanest way to display **asterisks** literally.
- Inline code: single backticks around a short snippet — `
npm install` — for commands, filenames, and variables. - Code block: triple backticks on their own lines, above and below your text, for a multi-line monospace block that preserves whitespace.
- Syntax highlighting: add a language identifier right after the opening triple backticks —
js,python,json,bash,sql,diff— to color-code the block on desktop clients.
Highlighting depends on the client: desktop Discord usually colors tagged languages, while some mobile views stay monospace without color. Treat the language tag as a nice-to-have, not a guarantee.
Links: masked links and suppressing previews
Masked links keep announcements tidy: [read the docs](https://example.com) shows link text instead of a raw URL. Leave no space between the ] and the (, or Discord shows the brackets literally. Clicking a masked link shows a one-time safety prompt per domain so readers can confirm where they are going.
To share a URL without the big embed card, wrap it in angle brackets: <https://example.com>. Discord still makes it clickable, but suppresses the preview. That is useful for long changelogs, invite spam channels, and any link you do not want to dominate the message.
Colored text (short)
Discord can render colored text, but only through one trick: an ansi code block combined with ANSI escape codes, and the escape character is one you cannot type on a normal keyboard. Do not expand a full color encyclopedia here—use the Discord colored text generator to type a message, click the words you want colored, and copy an ansi block with the real ESC bytes already in place. Theme and mobile clients can mute or flatten ANSI colors, so preview on the clients your audience actually uses.
Timestamps and mentions
Dynamic timestamps let every reader see the same instant in their own timezone. The form is <t:UNIX_SECONDS:STYLE>, where the middle value is Unix time in seconds (not milliseconds). Omit the style and Discord defaults to f (short date and time).
t— short time (e.g. 4:20 PM)T— long time with secondsd— short numeric dateD— long date (month name + year)f— short date and time (default)F— long date and time, including weekdayR— relative time that updates live ("in 2 hours", "3 days ago")
A solid event line pairs absolute and relative styles: Raid starts <t:1700000000:F> (<t:1700000000:R>). Styles are case-sensitive—d and D are different. Keep the whole token intact; wrapping it in backticks shows the raw code instead of a live clock, and splitting bold markers across the brackets breaks parsing.
When you draft offline (bots, templates, or a formatter), mention and emoji forms use snowflake IDs rather than display names:
- User mention:
<@USER_ID>(or<@!USER_ID>for the nickname form) - Role mention:
<@&ROLE_ID> - Channel mention:
<#CHANNEL_ID> - Custom emoji:
<:name:EMOJI_ID>· animated:<a:name:EMOJI_ID>
Developer Mode in Discord → right-click → Copy ID is the usual way to grab those IDs. Mentions still respect role permissions and notification settings once posted.
How to escape markdown
When you want an asterisk or underscore to appear as itself, put a backslash in front of it: \*not italic\* renders as literal asterisks, and \_stays_flat\_ keeps the underscores. To show a whole snippet untouched, wrap it in inline code with single backticks—everything inside is shown verbatim. Both fix the classic accidents: product names with asterisks turning italic, or filenames with underscores mangling a sentence.
Common mistakes
- Spaces inside markers — wrong:
** bold **· right:**bold**. Discord needs the markers flush against the text. - Header without a space — wrong:
#Title· right:# Title. Same rule for-#,-, and>. - Assuming
__text__is bold — on Discord it underlines. Use**text**for bold. - Reddit spoilers in Discord — wrong:
>!secret!<· right:||secret||. - Timestamp in milliseconds or inside backticks — use Unix seconds, and leave the
<t:…>token outside code spans so it stays live.
What Discord will not format
A lot of formatting questions are really about limits. Discord will not do the following:
- No tables—the pipe-and-dash syntax from Reddit or GitHub renders as plain text; lay data out in a monospace code block instead.
- No inline images from markdown;
is not supported—upload the file or paste a URL. - No HTML, task-list checkboxes, or arbitrary fonts/sizes for normal message text.
- No H4 or deeper headings; only
#through###are recognized. - Colored text is not normal markdown—only an
ansicode block with real escape characters works. - Formatting is for messages, not usernames, most titles, or many profile/UI fields, which stay plain.
Character limit
Discord caps a single message at 2,000 characters (4,000 with Nitro), and every markdown symbol, backslash, and invisible ANSI escape counts toward it. Heavy formatting eats the budget faster than it looks, so favor a clean structure—headline, short context, a few bullets—over a wall of bold.
Preview before you post
Because Discord renders every mistake instantly and publicly, draft somewhere you can check the result first. The free Discord message formatter shows Discord-style rendering as you type, counts characters against the limit, and lets you copy when it looks right. Guest drafts stay local in your browser. It is a preview and copy tool—not a scheduler. For ANSI color blocks only, use the Discord colored text generator.
FAQ
What is Discord markdown? Discord markdown is the plain-text formatting Discord uses in chat: wrap text for styles (**bold**, *italic*, __underline__, ~~strikethrough~~, ||spoiler||, backticks for code) or start a line for structure (# headers, -# subtext, lists, > quotes). It is a subset of Markdown plus Discord-only extras.
How do you format text in Discord? Keep markers flush against the text. Use **bold**, *italic*, __underline__, ~~strike~~, ||spoiler||, ` inline code , and fenced code blocks with an optional language tag. Put # , ## , or ### at the start of a line for headers, -# for subtext, - or 1. for lists, and > or >>> ` for quotes. Escape a character with a backslash when you want it shown literally.
What can't Discord markdown do? No tables, no  images, no HTML, no task-list checkboxes, and no headings deeper than ###. Colored text only works inside an ansi code block. Usernames and many UI fields stay plain. Messages are limited to 2,000 characters (4,000 with Nitro), and markdown symbols count.
Why isn't my formatting working? Check for spaces inside markers, missing spaces after # / - / >, and the __ underline trap. If you need the symbols shown literally, escape with \ or wrap the snippet in backticks.
How do I preview a Discord message before posting? Discord has no native draft preview. Draft with live Discord-style preview in the free Discord message formatter, then copy and paste. Guest drafts stay in your browser; it is not a scheduler.