Markdown to Slack converter
Paste markdown from ChatGPT, a README, or your notes and get a message Slack formats correctly. Or write Slack mrkdwn with toolbar buttons and convert it back to markdown. A live Slack preview shows the result. Nothing leaves your browser.
pnpm test before you mergePlan | Seats | Price -----+-------+------ Free | 10 | $0 Pro | 50 | $8
git pull && pnpm install
Copy for Slack puts formatted text on the clipboard. Paste it into the Slack message box and the bold, links, lists, and code come with it.
What changes when markdown goes to Slack
Slack uses its own format, mrkdwn. These are the rules the converter applies.
| Markdown | Slack mrkdwn | Note |
|---|---|---|
| **bold** or __bold__ | *bold* | One asterisk on each side. |
| *italic* or _italic_ | _italic_ | Underscores only. |
| ~~strike~~ | ~strike~ | One tilde on each side. |
| [text](https://url) | <https://url|text> | Relative links keep only the text. |
|  | <image.png|alt> | Slack cannot show images inline. |
| # Heading | *Heading* | Slack has no headings, so it becomes a bold line. |
| - item | • item | Nested items get ◦ and ▪, indented 4 spaces. |
| 1. item | 1. item | Renumbered in order, like markdown does. |
| - [ ] task | ☐ task | Done tasks get ☑. |
| > quote | > quote | Nested quotes flatten to one level. |
| ```js ... ``` | ``` ... ``` | The language tag is dropped. |
| | a | b | | code block | Columns are padded so they line up. |
| --- | ────── | Slack has no divider line. |
| \*literal\* | *literal* | A hidden soft hyphen keeps it from turning bold. |
How to paste markdown into Slack
- Paste your markdown in the left box. ChatGPT, Claude, GitHub READMEs, Notion exports, and Obsidian notes all work.
- Check the preview. It follows Slack rules: headings turn into bold lines, tables into a code block, and nested lists into indented bullets.
- Press Copy for Slack, click the Slack message box, and paste. The bold, italics, links, lists, quotes, and code come with it.
- Writing a bot or webhook message instead? Tick the escape option and copy the mrkdwn text into your chat.postMessage payload.
Frequently asked questions
How do I paste markdown into Slack with formatting?
Convert it first, then paste it as formatted text. When we pasted **bold**, [text](url), and # Heading into Slack's message box as plain text, it kept the characters as typed. Slack then offers Apply formatting (Cmd+Shift+F), but in our test that left an asterisk on each side of **bold** and kept the link and heading as typed. Press Copy for Slack in this tool instead. The clipboard then holds formatted text, and Slack keeps the bold, links, lists, quotes, and code.
Does Slack support markdown?
Partly, and it depends on where the text goes. Apps and bots send mrkdwn, which Slack's developer docs say "uses different rules": *bold*, _italic_, ~strike~, and <https://url|text> links. In mrkdwn, **double asterisks**, [text](url), and # headings show up as literal characters. The message box formats *bold* and **bold** as you type, and Cmd+Shift+F turns a typed [text](url) into a link. Pasted markdown stays as typed. Neither the message box nor mrkdwn has headings or tables.
How do I post ChatGPT answers in Slack without the asterisks?
Copy the answer with the copy button under the ChatGPT reply, which gives you markdown. Paste it into this converter, press Copy for Slack, and paste into your Slack message. Headings become bold lines, and tables become a lined-up code block, so the reply reads the way it did in ChatGPT.
How do I send a table in Slack?
Slack messages have no table format. The converter turns a markdown table into a code block with padded columns, which lines up because code blocks use a fixed-width font. It also keeps column alignment from the :---: row. For a wide table, a list or a Slack canvas reads better on phones.
What is the difference between markdown and Slack mrkdwn?
Markdown uses **text** for bold, *text* for italic, ~~text~~ for strikethrough, [text](url) for links, and # for headings. Slack mrkdwn uses *text*, _text_, ~text~, and <url|text>, and has no headings, tables, or real lists. Slack also only formats when the marker sits at a word edge, so *bold*text stays literal. The converter adds an invisible zero-width space in that case.
How do I format text for a Slack bot or webhook?
Use the Slack mrkdwn output. It works as the text field of chat.postMessage and incoming webhooks, and in Block Kit text objects of type mrkdwn. Tick "Escape &, < and >" first: Slack treats those three characters as control characters and asks apps to send them as &, <, and >. Block Kit also has a markdown block that accepts standard markdown, if you would rather send the original.
Can I write Slack mrkdwn and convert it back to markdown?
Yes. Switch to Slack to Markdown and paste the mrkdwn, for example the text field of a message from the API, or write it there. The toolbar wraps the selected text in *bold*, _italic_, ~strike~, code, a quote, a list, or a <url|text> link, and the preview shows it the way Slack does. On the markdown side, *bold* becomes **bold**, <url|text> becomes [text](url), bullet lines become a markdown list, and mentions like <@U123> and <!here> become @U123 and @here.
Can I underline text in Slack?
In the message box, yes. Select the text and click Underline in the formatting toolbar, or press Cmd+U on a Mac. Underline has no typed marker, and mrkdwn has none either, so bots and webhooks cannot send underlined text: __text__ stays as typed.
Is my text uploaded anywhere?
No. The conversion runs in your browser, and there is no account or limit. The text never leaves your computer, which matters when you paste internal docs or code.
Related reading
Slack Green does one thing: it keeps your Slack presence dot green while you are actually working, so a quiet keyboard does not mark you away. Try it free.