Markdown to Slack converter
Updated
Paste standard markdown and get Slack mrkdwn: **bold** becomes *bold*, [text](url) becomes <url|text>, headings turn into bold lines, and tables are laid out as a grid inside a code block. Every element Slack cannot express is listed under the output so you know what was approximated. Runs in your browser.
No approximations: every element has a direct equivalent.
430 characters of markdown → 0 characters of Slack mrkdwn. Everything runs in your browser; nothing is uploaded.
How does each markdown element map to Slack mrkdwn?
The table is the exact rule set the converter applies, checked against Slack's Formatting text for app surfaces reference. The full dialect is described on the Slack markdown cheat sheet.
| Element | Markdown | Slack mrkdwn | Note |
|---|---|---|---|
| Bold | **bold** or __bold__ | *bold* | Single asterisks. Double asterisks show literally in Slack. |
| Italic | *italic* or _italic_ | _italic_ | Underscores only. |
| Strikethrough | ~~gone~~ | ~gone~ | Single tildes. |
| Inline code | `code` | `code` | Same. No other formatting applies inside. |
| Code block | ```js
code
``` | ```
code
``` | Language tag dropped; mrkdwn has no highlighting. |
| Link | [text](https://u) | <https://u|text> | API/Block Kit form. In the composer, paste the bare URL. |
| Heading | # Title | *Title* | No headings in mrkdwn; a bold line stands in (use a header block in Block Kit). |
| Bulleted list | - item
- nested | • item
◦ nested | No list syntax in app text; bullet characters and spaces. |
| Numbered list | 1. item | 1. item | Plain numbered lines. |
| Task item | - [x] done | • [x] done | Checkbox kept as text. |
| Blockquote | > quote | > quote | Same; each line prefixed. |
| Table | | a | b |
|---|---| | ```
a b
- -
``` | No tables; aligned grid in a code block. |
| Image |  | alt: https://i.png | No inline images; Slack unfurls the URL. |
| Horizontal rule | --- | ——— | No rule in mrkdwn (use a divider block). |
| Line break | two trailing spaces | \n | A newline character. |
| HTML | <b>x</b> | x | Tags stripped; Slack shows HTML literally. |
| Special characters | & < > | & < > | Required in API text; only these three. |
When should I use the API target and when the composer?
Choose API / Block Kit when the text goes into a text field of a message payload, a webhook, a bot, or a workflow: you get <url|text> links and the required escaping of &, < and >. Choose Message composer when you will paste the result into the chat box yourself: the composer auto-links bare URLs, shows angle brackets literally, and needs no escaping. Bold, italic, strikethrough, code and quotes are identical in both.
Which markdown features have no Slack equivalent?
Headings, tables, images, horizontal rules, footnotes, reference-style links, nested-list syntax, and HTML. The converter never silently drops content: each of these is rewritten in the closest plain form and reported with its line number in the warnings list. If you need the same document in other chat tools, the Discord, Jira and plain-text converters apply the same approach, and markdown flavors explains why the dialects differ in the first place. The standard syntax is on the markdown cheat sheet.
Why does **bold** not work in Slack?
Slack uses its own markup called mrkdwn, not CommonMark. Bold is a single pair of asterisks (*bold*), italic a single pair of underscores (_italic_), and strikethrough a single pair of tildes (~strike~). Double asterisks are shown as literal characters.
How do I write a link with custom text in Slack?
In messages sent through the API or Block Kit, write <https://example.com|shown text>. The markdown form [text](url) is not understood. In the message composer there is no text-link syntax at all: paste the bare URL, or select text and use the link button in the toolbar.
Does Slack support headings or tables?
No. mrkdwn has no heading or table syntax. This converter writes a heading as a bold line and a table as a space-aligned grid inside a code block, which keeps the columns readable in a monospace font. In Block Kit you can use a header block for titles.
Why are & < > converted to & < >?
Slack's formatting reference requires these three characters to be HTML-escaped in text sent through the API, because < and > delimit links and mentions. Only these three are escaped, nothing else. Switch the target to "Message composer" if you are pasting into the chat box, where the raw characters are fine.
Can I get syntax highlighting in a Slack code block?
No. Slack code blocks are plain monospace with no language tag, so the converter drops the language from fenced blocks and reports it as an approximation. Share a snippet instead if you need highlighting.