Why Discord's Markdown is deliberately small
- Discord renders a chat-sized subset: emphasis, spoilers, code, quotes, and on current clients headings, lists and subtext.
__text__means underline here rather than bold, and||text||hides text behind a spoiler bar.- Image syntax, tables, footnotes, horizontal rules and raw HTML never render in a message.
- Backticks are the fastest escape hatch when you want the symbol instead of the style.
A chat app, not a document tool
Discord keeps the parts of Markdown that make a fast-moving message easier to read. It drops everything that would let one person restructure a channel. There is no image syntax, no table, no footnote, no heading below level three and no raw HTML. What is left is a compact set of inline styles, code blocks, quotes and a few Discord-only extras.
Where Discord sits among Markdown apps
Most tools land on one side of a line. Obsidian keeps Markdown as a file you own, while Notion swallows the characters and stores blocks instead. Discord is its own case. Your asterisks are kept as typed, and editing a message brings them straight back, but that message is a row in Discord's database and the dialect is Discord's own. Treat it as a display language for chat, not as a document format.
Two habits you have to unlearn
In standard Markdown and in GitHub Flavored Markdown, __text__ means bold. On Discord it means underline. And ||text||, which means nothing at all in standard Markdown, is Discord's spoiler tag. If you are unsure which dialect a tool speaks, our page on choosing a Markdown flavor lays out the family tree.
Inline formatting you can type in any message
These work in every text channel, in direct messages, in threads and in forum posts. Between them they cover most of what anyone needs.
**bold text**
*italic text* (or _italic text_)
***bold italic***
__underlined text__
__*underlined italic*__
~~strikethrough~~
||hidden spoiler||
`inline code`
The rules that trip people up
Markers must hug the text. ** bold **, with spaces inside the asterisks, does nothing at all. That is the most common formatting failure on Discord, by a distance.
Markers also combine, so **__bold underline__** is legal. The pairs have to nest cleanly rather than overlap. Inline code is the loudest marker of the lot: anything inside single backticks shows literally, so `**not bold**` displays the asterisks. That makes backticks the quickest way to protect a whole phrase, a habit our code blocks guide goes into further.
Careful: Discord applies formatting when the message sends, not while you type. The safest place to test an awkward line is a direct message to yourself.
Spoilers
Double pipes hide text behind a grey block that reveals on click or tap. They work anywhere in a message, including inside a quote. Attachments have their own version, and there are two ways to trigger it:
- Tick the spoiler box in the upload dialog before you send.
- Rename the file so the name starts with
SPOILER_.
Either way the image arrives blurred until someone taps it. Reddit offers the same idea with completely different characters, which the Reddit formatting guide sets out.
Code blocks and syntax highlighting
A fenced code block is three backticks, an optional language name, a newline, your code, and three closing backticks. On Discord the closing fence must sit on its own line. Press Shift+Enter for a newline that does not send the message.
```python
def greet(name):
return f"Hello, {name}"
```
Which language tags work
Discord colours code with a general-purpose highlighting library, so the tag list is long and forgiving. Reliable, frequently used identifiers include js, ts, python (or py), java, cs, cpp, c, go, rust, ruby, php, swift, kotlin, sql, json, yaml, xml, html, css, bash, sh, powershell, lua, r and md. An unknown tag is not an error. The block simply renders without colours.
Two tricks worth knowing
Tag a block diff and you get red and green lines for free, because lines starting with - and + are styled as removals and additions. It is the standard way to post a before-and-after, or a colour-coded list.
```diff
+ this line is green
- this line is red
```
There is also an ansi tag that reads terminal colour codes, so you can tint arbitrary text. It renders on desktop, on web and on recent mobile builds, and falls back to plain text elsewhere. Treat it as decoration, never as meaning.
Tip: A message caps at 2,000 characters, backticks included. Anything longer belongs in an attached file, which keeps the indentation intact and gives readers something they can download.
Quotes, headings, lists and masked links
A single > plus a space quotes one line. Three of them, >>>, quote everything to the end of the message, which is what you want when pasting someone else's paragraph. Quotes do not nest here: a second > inside a quote shows as a character, unlike the nesting our blockquotes guide describes.
> a single quoted line
back to normal text
>>> everything after this
stays inside the quote
including this line
Headings and lists
Headings and lists arrived in the text formatting update that reached clients during 2023, so they are recent. Only three heading levels exist, and the hashes need a space after them.
# Big heading
## Medium heading
### Small heading
- bullet item
- nested item
1. numbered item
-# small subtext line
The -# subtext prefix is newer still and renders as small grey text. On an old or third-party client any of these can show up as the literal characters you typed. A message that has to look right for everybody should stick to bold and italics.
Masked links
A masked link is [readable text](https://example.com). It was an embed-only feature for years, which is why older guides say users cannot use it. Current clients render it in ordinary messages too, with a confirmation dialog before an unfamiliar domain opens. The behaviour has changed more than once, so a bare URL is still safest when the link genuinely matters. Our links guide covers the standard form and its title attribute.
Discord Markdown support matrix
Every element below refers to an ordinary user message in a text channel. "Newer clients" means desktop, web and mobile as shipped since the 2023 formatting update.
| Feature | Syntax | Works? | Notes |
|---|---|---|---|
| Bold | **text** | Yes | Also inside embeds and quotes |
| Italic | *text* or _text_ | Yes | Both markers behave identically |
| Bold italic | ***text*** | Yes | Three asterisks each side |
| Underline | __text__ | Yes | Discord-only meaning; standard Markdown reads this as bold |
| Strikethrough | ~~text~~ | Yes | Same as GFM |
| Spoiler | ||text|| | Yes | Discord extension; click or tap to reveal |
| Inline code | `code` | Yes | Suppresses all other formatting inside |
| Fenced code block | three backticks | Yes | Language tag enables syntax highlighting |
| Single-line quote | > text | Yes | Space after the arrow is required |
| Multi-line quote | >>> text | Yes | Quotes the rest of the message; no nesting |
| Headings | #, ##, ### | Newer clients | Three levels only; space after the hashes |
| Bulleted list | - item | Newer clients | Indent two spaces to nest |
| Numbered list | 1. item | Newer clients | Numbering is re-sequenced for you |
| Subtext | -# text | Newest clients | Small grey line; added after headings and lists |
| Masked link | [text](url) | Mostly | Always worked in bot embeds; now in messages too, with a click-through warning |
| Image by syntax |  | No | Upload the file, or paste a bare image URL and let Discord unfurl it |
| Table | pipes and dashes | No | Renders as literal pipe characters |
| Footnote | [^1] | No | Shown as plain text |
| Horizontal rule | --- | No | Three dashes stay three dashes |
| Raw HTML | <b>text</b> | No | Escaped and displayed as characters |
What breaks, and what to do instead
Images and tables: use the workaround
Neither gap has a syntax fix, so go straight to the substitute. For an image, upload the file or paste the bare URL, because Discord unfurls most direct image links by itself. For a table, use a fenced code block with hand-aligned columns, which keeps a monospace grid, or post a screenshot.
```
Region Q1 Q2
APAC 412 503
EMEA 288 301
```
If the data genuinely has to be a table, build it somewhere that renders one and post the link. Our Markdown tables guide explains the header row and the alignment row for the platforms that do support them.
Escaping: when you want the symbol, not the style
Put a backslash in front of a formatting character and Discord prints it literally. This matters more than it sounds, because file globs, maths and emoticons are full of asterisks and underscores.
\*literal asterisks\* shows *literal asterisks*
2 \* 3 \* 4 shows 2 * 3 * 4
snake\_case\_name keeps both underscores
The characters worth escaping are a short list:
*and_, behind almost every accidental italic.~, which strikes text through in pairs.|, which becomes a spoiler in pairs.>at the start of a line, which becomes a quote.#and-at the start of a line, now that headings and lists exist.
For anything longer than a couple of characters, backticks beat counting backslashes. The same reflex helps in other tools, and the platform hub shows which of them share the habit.
Bots, embeds and the desktop versus mobile difference
What a bot can send that you cannot type
Everything above describes a human typing into the message box. Bots and webhooks can also send embeds: structured cards with a coloured border, a title that can carry a link, a description, up to twenty-five fields, image slots, a footer and a timestamp. That is how bots produce boxed output nobody can reproduce by hand.
Markdown support inside an embed is uneven, so it pays to know the parts:
- Descriptions and field values render the full message syntax, masked links and code blocks included.
- Field names accept basic emphasis but are not a place for links.
- Author names and footer text stay plain text on most clients.
- Limits are 4,096 characters of description and 6,000 across the whole embed.
Desktop, web and mobile
The core syntax renders the same on all three. The differences sit at the edges. Highlighting inside code blocks reached mobile later and still looks plainer, long lines scroll sideways instead of wrapping, and colour tricks such as ansi fail first on older phone builds.
Careful: Mobile keyboards are a hazard of their own. Smart punctuation swaps straight quotes for curly ones, which breaks the code you pasted rather than the Markdown around it.
Where to read next
Discord is not the only chat dialect with house rules. Markdown on Reddit sits much closer to the original spec and is worth comparing side by side, while Obsidian shows what the same syntax looks like when an app stores it as a file.
For the full standard rather than a subset, keep the complete Markdown guide open, and the printable syntax sheet next to it for the symbols you use daily.
Support data verified
Frequently Asked Questions
Does Discord support all Markdown?
No. Discord supports a chat-sized subset: bold, italic, underline, strikethrough, spoilers, inline code, fenced code blocks, quotes, and - On newer clients - Headings, lists and subtext. Images by Markdown syntax, tables, footnotes, horizontal rules and raw HTML render as literal characters.
How do I make a code block in Discord?
Type three backticks, a language name such as python, press Shift+Enter, paste your code, then close with three more backticks on their own line. The language tag is what turns on syntax highlighting. For one word inside a sentence, single backticks are enough.
Why is my bold text not working on Discord?
Almost always a space between the asterisks and the word: ** text ** does nothing, **text** works. The other causes are a leftover escaping backslash, or the phrase sitting inside backticks, which deliberately disables formatting.
How do I stop Discord formatting my text?
Put a backslash before the character, as in \*asterisk\*, or wrap the whole passage in backticks. Backticks are easier for long strings such as file paths and regular expressions.
Can I post a table in Discord?
Not with Markdown table syntax - The pipes render as pipes. Use a fenced code block with columns aligned by hand, which keeps a monospace grid, or a screenshot. Bots can fake a table with embed fields, which display in columns.
Keep learning
Try the Editor
Try the Editor