Discord Markdown: The Complete Guide (Every Format, With Examples)
The complete Discord markdown guide: bold, italics, underline, strikethrough, spoilers, headers, subtext, lists, quotes, code blocks, links, escaping, and what Discord won't format.
Discord is one of the few places where markdown is the native formatting language: the symbols you type render live in the message you send, with no separate preview step. That makes it fast, but it also means a single stray character is the difference between clean bold text and a row of visible asterisks in front of your whole server. This is the complete Discord markdown reference—every format Discord supports, with copy-paste examples—plus the escaping trick for when you want the symbols shown literally, and an honest list of what Discord will not format at all.
How Discord markdown works
Discord splits its 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 anywhere in a line, even 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 exactly why code spans double as the escape hatch later on. There is no draft mode: what you type is what your server 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.
The one trap: a double underscore is underline, not bold—unlike standard Markdown, where __text__ means bold. And because a single underscore can misfire inside words like snake_case, prefer asterisks when you want italics. Wrappers nest cleanly, so __**bold underline**__ and ~~*struck italic*~~ both work.
Spoiler tags
Wrap text in double pipes—||plot twist||—and Discord renders a black bar that readers click or tap to reveal, like the butler did it right here. This is Discord's own syntax, not the >!spoiler!< style Reddit uses, so don't mix them up when cross-posting. Spoilers work inline, so you can hide a single word inside a normal sentence.
Headers and subtext
- 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.
Headers and subtext are line-anchored, so the marker has to be the first thing on the line. They are the backbone of a readable announcement: one # headline, a short line of context, then bullets.
Lists, quotes, and structure
- 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 four are line-anchored and none fire mid-line or inside a code block. Leave the marker flush to the start of the line, and remember > needs its space or it renders as a literal greater-than sign.
Inline code and code blocks
Code spans show text as-is in monospace and disable every other markdown character inside them.
- 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.
Because code spans disable other markdown, they are also the cleanest way to show formatting characters literally—handy when you want readers to see **asterisks** on screen instead of bold text.
Colored text and masked links
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. For the full color reference, worked examples, and troubleshooting, see the companion guide on Discord colored text. Links have a cleaner option—masked links: [read the docs](https://example.com) shows tidy link text like read the docs instead of a raw URL, with no space allowed between the ] and the (. Clicking one shows a one-time safety prompt per domain.
How to escape markdown (show the symbols literally)
When you want an asterisk or underscore to appear as itself instead of triggering formatting, 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 are the fix for the classic problem of asterisks turning into accidental italics, or underscores in a filename mangling your text.
What Discord will not format
A lot of formatting questions are really about limits, so here is what Discord does not do:
- No tables—the pipe-and-dash syntax from Reddit or GitHub renders as plain text; lay data out with a code block instead.
- No inline images or embedded media from markdown;
is not supported, so upload the file or paste the URL as a link. - No font, font size, or text-color changes beyond the
ansicode-block trick—there are no color codes for normal message text. - No H4 or deeper headings, and no arbitrary indentation; only the markers above are recognized.
- Formatting is for messages, not channel names, usernames, or most UI fields, which stay plain.
Mind the 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, it helps to draft where you can check the result first. Markdown2Social shows you the exact Discord rendering, counts characters against the 2,000-character limit, and hands you a clean version to paste—especially useful for server-wide announcements and anything cross-posted from another platform. For a quick copy-paste syntax lookup, see the Discord text formatting cheat sheet; for using these styles in a real announcement, see How to Format Discord Messages with Markdown.