Discord Markdown: Bold, Italic, Code & Spoiler Syntax
Complete formatting guide for Discord messages — what works, what’s different, and what’s missing
Quick Answer
Discord uses a modified subset of Markdown for message formatting. Most inline syntax works the same — **bold**, *italic*, ~~strikethrough~~, and code blocks. Discord adds three features that standard Markdown does not have:
||spoiler text||— hides text behind a click-to-reveal overlay__underline__— renders as underline, not bold (the opposite of standard Markdown)-# small text— subtext that renders smaller than normal
What does not work: images (), tables, horizontal rules, and heading levels beyond ###.
Text Formatting
Bold
This text is bold
**This text is bold**
Italic
This text is italic
*This text is italic*
_This also works_
Bold Italic
Bold and italic combined
***Bold and italic combined***
Underline
In standard Markdown, __text__ is bold. In Discord, it renders as underline. This is one of the biggest differences.
This text is underlined
__This text is underlined__
Strikethrough
This text is crossed out
~~This text is crossed out~~
Spoiler
Unique to Discord. Text is hidden behind a dark overlay until the reader clicks on it.
This is a spoiler
||This is a spoiler||
Combining Formats
Discord lets you stack formatting. The order of markers matters — the outermost pair determines the primary style.
| Syntax | Result |
|---|---|
***bold italic*** | bold italic |
__*underline italic*__ | underline italic |
__**underline bold**__ | underline bold |
__***underline bold italic***__ | underline bold italic |
~~__***everything***__~~ |
Code Formatting
Inline Code
Wrap text in single backticks to display it in a monospace font without formatting.
Use console.log() for debugging
Use `console.log()` for debugging
Multi-Line Code Blocks
Use triple backticks for multi-line code. Add a language name on the same line as the opening backticks to enable syntax highlighting.
function greet(name) { return `Hello, ${name}!`; }
```js
function greet(name) {
return `Hello, ${name}!`;
}
```
Popular language tags: js, python, css, html, json, bash, diff, yaml, sql. Without a language tag, the block renders as plain monospace text with no highlighting.
Block Elements
Headers
Discord supports three header levels. The # must be at the start of a line, followed by a space.
Big Header
Medium Header
Small Header
# Big Header
## Medium Header
### Small Header
Levels #### through ###### do not work in Discord — they render as plain text with the hash symbols visible.
Blockquotes
Use > for a single-line quote or >>> to quote everything that follows in the message.
This is a single-line quote
> This is a single-line quote
>>> This quotes everything
that follows in the message
including this line
Lists
Unordered lists use - or *. Ordered lists use 1. numbering. Indent with spaces for nested items.
- First item
- Second item
- Step one
- Step two
- First item
- Second item
1. Step one
2. Step two
Subtext
A Discord-only feature. Use -# at the start of a line to render smaller, muted text.
This line appears smaller
-# This line appears smaller
Links & Mentions
Masked Links
Discord supports masked links with standard Markdown syntax. The link appears as clickable text instead of a raw URL.
[Visit MDViewer](https://getmd.ma)
Mentions & Timestamps
Discord has its own syntax for dynamic references that are not part of Markdown:
| Syntax | What It Does |
|---|---|
@username | Mentions a user and sends a notification |
@role | Mentions everyone with that role |
#channel | Links to a channel in the server |
<t:1700000000:R> | Dynamic timestamp (relative, e.g. “2 hours ago”) |
<t:1700000000:F> | Full date and time in the reader’s timezone |
Discord vs Standard Markdown
Discord’s implementation differs from standard Markdown (CommonMark) and GitHub Flavored Markdown (GFM) in several ways:
| Feature | Standard Markdown | Discord |
|---|---|---|
| Bold | **text** | **text** ✅ Same |
| Italic | *text* | *text* ✅ Same |
| Underline | No native syntax | __text__ ✅ Unique |
| Strikethrough | ~~text~~ | ~~text~~ ✅ Same |
| Spoiler | None | ||text|| ✅ Unique |
| Headers | # to ###### | # to ### only |
| Code blocks | ``` | ``` ✅ Same |
| Links | [text](url) | [text](url) ✅ |
| Images |  | ❌ Not supported |
| Tables | Pipe syntax | ❌ Not supported |
| Lists | - and 1. | ✅ Same |
| Blockquotes | > | > + >>> (multi-line) |
| Subtext | None | -# ✅ Unique |
If you write Markdown that needs to work both in Discord and on GitHub or in a standard viewer, stick to the features marked “Same” and avoid __underline__ (which is bold elsewhere), spoiler tags, and subtext.
Common Mistakes
Forgetting the space after # for headers
#Header without a space renders as plain text in Discord. Always type # Header with a space between the hash and the text.
Using __ for bold instead of underline
In standard Markdown and GitHub, __text__ is bold. In Discord, it is underline. If you copy Markdown from a README and paste it into Discord, every __bold__ becomes underlined instead. Use **text** for bold in Discord.
Missing one of the || for spoilers
You need pipes on both sides: ||spoiler||. A single pipe (|spoiler|) does nothing — it shows the text and the pipes as literal characters.
Putting the language tag on a separate line in code blocks
The language name must be on the same line as the opening triple backticks. A line break between ``` and js disables syntax highlighting.
| Syntax | Result |
|---|---|
```js (same line) | ✅ Highlighted |
``` then js on next line | ❌ No highlighting |
FAQ
Does Discord use Markdown?
Yes. Discord uses a subset of Markdown for message formatting. It supports bold (**text**), italic (*text*), strikethrough (~~text~~), inline code, and code blocks with syntax highlighting. Discord also adds its own extensions: spoiler tags (||text||), underline (__text__), headers (#, ##, ###), and subtext (-#). Not all standard Markdown features work — images and tables are not supported in messages.
How do I make spoiler text in Discord?
Wrap text in double pipes: ||spoiler text||. The text appears hidden behind a dark overlay and users click to reveal it. Spoiler tags work on text, links, and even images. You can also mark an uploaded image as a spoiler by checking the “Mark as Spoiler” checkbox before sending.
Can I use Markdown tables in Discord?
No. Discord does not render Markdown tables. The pipe characters show as literal text. For tabular data in Discord, use code blocks with monospace alignment, or share a screenshot or a link to the formatted table. For example, format your table in a Markdown table and preview it with MDViewer, then share a screenshot.
Preview Your Markdown with MDViewer
MDViewer is a native macOS app for reading and previewing Markdown files. Double-click any .md file in Finder and see it rendered instantly — tables, code blocks, Mermaid diagrams, and more. Lite is free; Pro adds editing, Git history, and PDF export.
Requires macOS 13.0 or later. Intel and Apple Silicon.