Slack Markdown: Format Messages with mrkdwn (Guide)
September 11, 2026 · 10 min read
Slack Markdown: Formatting Messages in Slack (mrkdwn Guide)
Slack markdown isn't Markdown. The syntax is called mrkdwn, and it differs from the standard in the places you use most: single asterisks for bold, underscores for italic, and angle-bracket links. This guide covers all three places you format text in Slack (the message box, the API, and canvases), with a conversion table for each difference.
Three Formatting Contexts in Slack, Not One
Most confusion about markdown in Slack comes from reading the wrong page. The only standard markdown Slack accepts as written is in canvases and one Block Kit block. There are three separate contexts, and the rules differ in each.
- The message box. By default you format with the toolbar or shortcuts. A preference called "Format messages with markup" turns on typed syntax.
- The API, webhooks, and bots. Text sent through
chat.postMessageor a webhook is parsed as mrkdwn, which Slack's docs say "is inspired by markdown, but uses different rules." - Canvases. Canvas content is standard Markdown:
#headings,**bold**, checklists, and tables all work.
The rest of this post takes each context in turn. If you only came for links, jump to the links section; that's the difference that catches everyone.
Markdown to Slack: The Conversion Table
This table is what to change when you move standard Markdown into a Slack message. It applies whether you're typing with markup enabled or sending through a webhook.
| You want | Standard Markdown | Slack mrkdwn | Note |
|---|---|---|---|
| Bold | **bold** | *bold* | Single asterisks. Double asterisks show literally |
| Italic | *italic* or _italic_ | _italic_ | Underscores only; asterisks mean bold |
| Strikethrough | ~~gone~~ | ~gone~ | Single tilde |
| Inline code | `code` | `code` | Same |
| Code block | ``` fence | ``` fence | Same, but no language identifier or highlighting |
| Quote | > text | > text | Same, one level only |
| Link | [text](url) | <url|text> | API only; see the links section for the message box |
| Bullet list | - item | • item or - item | Message box auto-converts; API needs a literal bullet or dash plus newline |
| Numbered list | 1. item | 1. item | Message box auto-converts; API renders the text as typed |
| Heading | # Title | none | Use bold on its own line |
| Table | | a | b | | none | See the Slack table workarounds |
| Underline | none | none | Toolbar button, or Cmd+U on a Mac |
| Line break | two spaces or blank line | \n in API text | One newline is enough in mrkdwn |
Three rules of thumb cover most of it. Halve the asterisks and tildes. Swap italic asterisks for underscores. Rewrite links.
How Do I Apply Markdown Formatting in Slack Messages?
Out of the box, the message box has no typed syntax at all. Bold is Ctrl+B (Cmd+B on a Mac), italic is Ctrl+I, strikethrough is Ctrl+Shift+X, inline code is Ctrl+Shift+C, and a code block is Ctrl+Alt+Shift+C, per Slack's keyboard shortcut list. Lists do auto-format: type an asterisk or dash followed by a space for a bullet, or 1. and a space for a numbered list.
To type slack markdown formatting instead, open your profile, then Preferences, Advanced, Input options, and tick "Format messages with markup". Slack's markup help page lists what works once it's on: *bold*, _italic_, ~strike~, backtick code, triple-backtick code blocks, > quotes, and, notably, [your text](the link) for links.
The setting has a cost the help page spells out. Formatting is applied after you send, so you don't see it while typing. Copied and pasted messages come through as plain text. And the automatic list formatting stops working. We keep it off and use shortcuts, but writers who live in Markdown all day usually prefer it on.
How Do I Use Markdown for Links in Slack?
Links are where slack markdown links go wrong most often, because the slack link markdown rules change with the context. Put simply, Slack links markdown-style text to a URL in only two of the three contexts.
In the message box with markup off, select the text and press Ctrl+Shift+U (Cmd+Shift+U), then paste the URL. Pasting a URL over selected text does the same thing in one step. Typing [text](url) sends the brackets literally.
In the message box with markup on, [text](url) becomes a link. This is the one place standard Markdown link syntax works in Slack.
Through the API or a webhook, the mrkdwn reference uses angle brackets with a pipe:
<https://example.com/report|Q3 report>
That renders as "Q3 report" linked to the URL. A bare <https://example.com> shows the URL as a clickable link. Because < and > carry meaning in mrkdwn, literal ones in your text must be sent as < and >, and & as &. Those three are the only characters mrkdwn requires you to escape.
Our Markdown links guide covers the standard syntax that Slack rewrites, including reference-style links, which Slack messages don't support.
Can I Paste Markdown into Slack Messages?
Pasting Markdown text into the message box sends it as typed. Slack doesn't parse **bold** or # Heading on paste, and searches for slack paste markdown almost always come from someone who just watched a carefully formatted message land as a wall of asterisks.
You have three workarounds, in the order we'd try them.
- Turn on the markup setting and rewrite to mrkdwn using the table above. Good for short messages you type often.
- Render first, then paste rich text. Paste the Markdown into the editor, copy from the rendered preview, and paste into Slack. The composer usually keeps bold, italic, links, lists, and code from rich text.
- Send it through a bot with the markdown block. Block Kit's markdown block accepts standard Markdown, and Slack built it for LLM output.
The markdown block handles **bold**, # headings (all rendered at one size), [text](url) links, task lists, tables, and fenced code with highlighting. It's capped at 12,000 characters per payload. Everything else you send through the API uses mrkdwn text objects.
The limitation with option 2 is that headings and tables have no Slack equivalent, so they arrive as bold text and plain text respectively.
Try the conversion in the editor
The message below is written in standard Markdown, followed by the same message rewritten in mrkdwn inside a code block so the preview leaves it alone. Compare the two: halved asterisks, underscores for italic, and the link in angle-bracket form.
The Markdown to HTML converter is also how you get the rich-text version for workaround 2: render, copy the preview, paste.
What Slack Can't Format, and the Workarounds
Headings. No heading syntax exists in messages. Put a bold phrase on its own line and follow it with a blank line.
Tables. Messages don't render tables at all. Use a code block with aligned columns, a bulleted list, or a canvas; our Slack Markdown table guide walks through each option.
Coloured text. Slack has no colour formatting in messages. The usual stand-ins are emoji markers (a red circle for blockers, green for done) and the coloured left border on legacy attachments sent through the API. The Markdown text colour post covers what other platforms allow.
Underline. Available only through the toolbar or Cmd+U on a Mac; there's no typed syntax and no mrkdwn equivalent, which matches the situation in standard Markdown described in our underline guide.
If you also post in Discord, note that its formatting is closer to real Markdown (double asterisks for bold, headings with #). The same message needs different edits there; the Discord Markdown cheat sheet has that table.
Does Slack Canvas Support Markdown?
Yes, and it's the one Slack surface where standard Markdown works as written. Slack's canvas API docs list the supported elements. They include headings H1 to H3, bold, italic, strikethrough, bulleted and ordered lists, checklists, code blocks and spans, block quotes, dividers, links, and Markdown tables up to 300 cells. The document_content type is literally markdown, with a 1 MiB limit per canvas.
In the canvas editor itself, the formatting bar handles the same elements. Because canvases speak standard Markdown and messages don't, a canvas is the better destination for anything with headings or tables.
Slack Markdown FAQ
Once you accept that slack markdown is its own dialect, the rules are short. Single asterisks, underscores for italic, angle-bracket links in the API, and standard Markdown only in canvases and the markdown block. Draft longer messages in the editor, convert with the table above, and paste the rendered version when the formatting has to survive.