Markdown to Slack Converter
Convert Markdown to Slack mrkdwn and back. Rewrites bold (**text** ↔ *text*), italics, strikethrough, links (<url|text> ↔ [text](url)), headings and bullet lists between the two dialects, leaving inline and fenced code untouched. Runs entirely in your browser.
Input
Output
Guides
Slack messages use a formatting dialect called mrkdwn that looks like Markdown but isn't quite the same. Paste standard Markdown into a Slack message box and your bold text, links and headings come out wrong. This converter translates between CommonMark-style Markdown and Slack mrkdwn in both directions, so you can move formatted content between a README, a docs page and a Slack post without hand-editing every marker.
Why the two dialects differ
Slack's mrkdwn was designed for short chat messages, so it drops most of Markdown's block-level syntax and uses single-character emphasis markers instead of doubled ones:
| Feature | Markdown | Slack mrkdwn |
|---|---|---|
| Bold | **bold** or __bold__ |
*bold* |
| Italic | *italic* or _italic_ |
_italic_ |
| Strikethrough | ~~strike~~ |
~strike~ |
| Link | [text](url) |
<url|text> |
| Heading | # Heading |
(no heading syntax) |
| Bullet | - item / * item |
• item |
| Inline code | `code` |
`code` (same) |
| Code block | ```block``` |
```block``` (same) |
The single biggest gotcha is emphasis: * means bold in Slack but italic in Markdown. Converting naively — replacing every ** with * — collides with that rule and double-converts text. The converter avoids this by masking code first, then rewriting each emphasis form onto a private placeholder the moment it matches, so a later pass can never re-read text it already converted.
Markdown → Slack
Choose how headings should be rendered, since Slack has no native heading syntax:
- Bold — turn
## Headinginto*Heading*(the usual choice). - Plain text — drop the
#markers and keep the text only. - Keep # prefix — leave the
#characters in place.
Pick the bullet character Slack should use (•, - or ·), toggle link conversion, and optionally strip Markdown that Slack can't display at all — images, horizontal rules and pipe tables (tables are flattened to dash-separated text as a best effort).
Slack → Markdown
The reverse direction expands *bold* back to **bold**, _italic_ stays _italic_'s Markdown equivalent *italic*, ~strike~ becomes ~~strike~~, and <url|text> (plus bare <https://…> links) become [text](url). Bullet characters are normalized back to -.
Code is never touched in either direction: inline `code` and triple-backtick fenced blocks are valid in both dialects, so their contents pass through verbatim (Slack ignores a fence's language tag, so it is stripped when going to Slack).
Does it work on whole documents?
Yes — paste an entire release note or README section and every supported element is converted in one pass. Elements with no Slack equivalent are either transformed (headings, links) or optionally removed.
Is my text sent anywhere?
No. The conversion runs entirely in your browser with plain string transforms — nothing is uploaded to a server.