← Blog

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, calledmrkdwn (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 toMarkdown in Discord, Slack supports less.

What Slack doesn't support

Slack mrkdwn lacks:

  • Headings# Heading renders 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 intoMarkdown Tidy → Export → PNG → drop the image into Slack.

<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'sBlock 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 tomrkdwn vsplain_text correctly.

If you're building a Slack app, theBlock 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
  • # Headings show 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 youneed to share AI output in Slack:

  1. Paste intoMarkdown Tidy
  2. Click Tidy (strips AI fluff, repairs tables, normalizes unicode)
  3. For chat: copy the cleaned Markdown and convert**bold***bold* mentally (or accept Slack's literal rendering)
  4. 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. Seepaste 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

Try Markdown Tidy free

Paste markdown, get a polished document — no signup required.