Markdown in Slack: complete formatting guide (2026)
Slack uses its own Markdown-like dialect — `*bold*` is one asterisk, not two. Every Slack formatting trick that works, plus the syntax that doesn't.
Slack supports Markdown - sort of. The dialect is its own thing, called mrkdwn (no joke), and it deliberately breaks compatibility with CommonMark. If you paste real Markdown into Slack, half of it works and half of it renders as literal characters. This is the complete guide to what Slack accepts in 2026.
The Slack-specific catch: single asterisk for bold
The single most-important thing to know about Markdown in Slack:
*bold* → bold (one asterisk, not two)
_italic_ → italic
~strike~ → strikethrough (one tilde, not two)
`code` → inline code
In every other Markdown dialect, **bold** is bold. In Slack, **bold** renders as *bold* with literal asterisks around it. This breaks pasting from ChatGPT, Claude, or anywhere else that produces standard Markdown.
What Slack supports
*bold*
_italic_
~strikethrough~
`inline code`
```code block``` (three backticks like normal)
> quote
- bullet (or 1. for ordered)
That's the entire Slack mrkdwn surface for chat messages. Compared to Markdown in Discord, Slack supports less.
What Slack doesn't support
Slack mrkdwn lacks:
- Headings -
# Headingrenders as literal#plus the text. No way to make a heading inline. - Tables - pipes render as literal characters.
- Hyperlinks via
[text](url)- Slack uses its own format:<https://url|text>. - Images via Markdown - drag-drop instead.
- Nested formatting - limited; e.g.
*_bold italic_*is unreliable.
If you write headings or tables in a chat-bound message, neither will render. Common workaround for tables: paste into Markdown Tidy → Export → PNG → drop the image into Slack.
Slack hyperlinks - the angle-bracket syntax
<https://example.com|click here>
renders as a clickable "click here" linked to example.com. This is unique to Slack and Slack Bots - the standard [text](url) Markdown syntax doesn't work in chat messages.
For bot messages (via the Web API), you can also send:
<#C12345|channel-name>- channel link<@U12345>- user mention<!here>- @here notification<!channel>- @channel notification
Slack vs Block Kit
Slack's chat messages support the limited mrkdwn above. Slack's Block Kit (used by apps, bot messages, and the /edit field for some surfaces) supports a richer subset - including the standard CommonMark **bold** if you set the block type to mrkdwn vs plain_text correctly.
If you're building a Slack app, the Block Kit documentation is the actual reference. If you're typing a message in the Slack client, you're working with chat-only mrkdwn - the limited dialect above.
Pasting AI output into Slack
The 2026 problem: you ask ChatGPT for something, copy the markdown, paste into Slack. What breaks:
**bold**shows as literal**characters# Headingsshow as literal#characters- Tables paste as raw pipes - unreadable
[link text](https://url)shows as the literal Markdown syntax- Smart quotes, em dashes, zero-width spaces from the chat UI come along
The cleanest workflow when you need to share AI output in Slack:
- Paste into Markdown Tidy
- Click Tidy (strips AI fluff, repairs tables, normalizes unicode)
- For chat: copy the cleaned Markdown and convert
**bold**→*bold*mentally (or accept Slack's literal rendering) - For something nicer: Export → PDF or DOCX, attach to Slack
Most teams have moved to "paste the link to a real doc" instead of fighting Slack's mrkdwn limits for anything longer than a few sentences. See paste vs convert.
Code blocks: the one thing Slack does well
```python
def hello():
print("syntax highlighted in Slack")
Slack renders fenced code blocks with monospace font and a slight gray background. No language-specific syntax highlighting (unlike Discord or GitHub), but the formatting is preserved exactly, including indentation. For sharing code snippets, Slack code blocks are reliable.
## Slack vs Discord cheat sheet
| | **Slack mrkdwn** | **Discord Markdown** |
| --- | --- | --- |
| Bold | `*bold*` | `**bold**` |
| Italic | `_italic_` | `*italic*` or `_italic_` |
| Strikethrough | `~strike~` | `~~strike~~` |
| Underline | none | `__underline__` |
| Headings | not supported | `#`, `##`, `###` |
| Spoilers | not supported | `\|\|spoiler\|\|` |
| Hyperlinks | `<url\|text>` | not in regular messages |
| Tables | not supported | not supported |
| Code blocks | yes, no highlighting | yes, with language highlighting |
If you're posting the same content in both, the cleanest play is to write CommonMark, convert to images / PDF for the rich-content parts, and use platform-native syntax only for short formatting.
## Related
- [Markdown in Discord](/blog/markdown-in-discord) — the Discord variant of this guide
- [Confluence and Markdown](/blog/confluence-and-markdown) — for team wikis
- [Paste vs convert](/blog/paste-vs-convert-markdown) — when to format inline vs export to a real document
- [The complete Markdown syntax cheat sheet](/blog/markdown-syntax-cheat-sheet) — for everywhere that isn't Slack
Related articles
What is Markdown? A complete guide with examples
Markdown is a lightweight markup language for plain-text formatting. This guide covers the syntax, the dialects, and how to convert Markdown to PDF, Word, and HTML.
Markdown to PDF: 4 ways to convert (and which one to pick)
Converting Markdown to PDF is harder than it should be. A practical comparison of Pandoc, Markdown Tidy, browser print-to-PDF, and editor exports — with the trade-offs.
Stop copy-pasting into ChatGPT: edit your Markdown in place with AI Assist
A practical walkthrough of using AI Assist in the Markdown Tidy editor — explain dense passages, beautify clunky prose, and transform selections with a custom instruction, all without leaving your document.
How to repair broken Markdown tables in 30 seconds
AI-generated Markdown tables almost always look fine in chat and break when you export them. Here's exactly what goes wrong, and the fastest way to repair them.