Slack Markdown converter

Paste Markdown — from ChatGPT, Claude, or your docs — and get text that formats correctly in Slack, plus mrkdwn for bots, webhooks, and Block Kit.

0 charactersRich text pasted from a web page is converted to Markdown
Options
Preview — how it looks in Slack
# team-launch · 4 members
You11:42 AM

Paste Markdown above (or try the ChatGPT-style sample) to see the Slack message.

Copy for Slack puts formatted rich text on your clipboard — paste it into any Slack message box and bold, italics, links, lists, quotes, and code blocks arrive formatted. Slack markup is the typed version (*bold*, _italic_) — after pasting it, press Cmd+Shift+F (Ctrl+Shift+F) in Slack to apply the formatting.

The Slack message, raw mrkdwn, and a ready-to-send JSON payload appear here as you type.

This is Slack's typed markup — the plain-text half of "Copy for Slack". For bots and webhooks use the mrkdwntab: it escapes & < > and writes links as <url|text>, which is what the API expects.

Markdown to Slack converter: paste, preview, copy

Slack Markdown isn't standard Markdown. Paste a ChatGPT answer, a README, or meeting notes into Slack and you get literal **asterisks**, ## signs, and a wall of table pipes. This Markdown to Slack converter rewrites the text the way Slack actually formats it, shows you a Slack-accurate preview in light and dark mode, and gives you the output in the shape you need:

  • Copy for Slack — rich text on your clipboard, for pasting into the message box. Formatting survives the paste; no symbols left over.
  • Slack markup — the typed version (*bold*, _italic_, ~strike~), for people who prefer "Format messages with markup".
  • mrkdwn— Slack's API syntax for bots, incoming webhooks, and Block Kit, with <url|text> links, <!here> mentions, and & < > escaped.
  • JSON payload — a ready-to-send webhook or chat.postMessage body (plain mrkdwn, Block Kit, or a markdown block) plus the curl command.
  • Slack → Markdown — the reverse: turn a Slack message or bot output back into standard Markdown for docs, GitHub, or Notion.

Everything runs in your browser. The options are remembered on this device: how headings and tables are converted, which bullet character to use, and how links are written.

How to paste Markdown into Slack (with formatting)

Slack's message box is a WYSIWYG editor: it keeps formatting from rich text you paste, but it doesn't read Markdown syntax. To paste Markdown into Slack and keep the formatting:

  1. Paste your Markdown into the box at the top of this page.
  2. Check the preview — pick how headings and tables should look.
  3. Click Copy for Slack.
  4. In Slack, click the message box and press Cmd+V (Ctrl+V on Windows and Linux).

Bold, italics, strikethrough, links, inline code, code blocks, bulleted and numbered lists (including nested ones), and quotes all arrive formatted. Headings become bold lines and tables become an aligned code block, because Slack messages have neither.

Already have Slack-style markup as plain text? Slack has a built-in fix: paste it, then press Cmd+Shift+F (Ctrl+Shift+F) — "Apply Markdown formatting" — and Slack converts the *asterisks* and _underscores_ into formatting. It only understands Slack's own markup, not **double asterisks** or # headings, which is why converting first helps. If you turned on Preferences → Advanced → Format messages with markup, pasted text stays plain and the markup is applied when you send — use "Copy as Slack markup" in that case.

Does Slack support Markdown?

Yes and no. Slack has three places where formatting syntax matters, and each understands something different: the message composer people type in, mrkdwn for text that apps post, and the newer markdown block, which apps can use to send standard Markdown and let Slack render it.

Markdown featureSlack composermrkdwn (API)Markdown block (API)
**bold** (double asterisks)No — use *bold*No — use *bold*Yes
# headingsNoNo (header block instead)Yes (all one size)
[text](url) linksMarkup mode + formatterNo — use <url|text>Yes
~~strikethrough~~No — use ~text~No — use ~text~Yes
Bulleted / numbered listsYes (real lists)Plain text onlyYes
Nested listsYesIndented textYes
Task lists - [ ]NoNoYes
TablesNoNo (table block instead)Yes
Code blocksYes, no highlightingYes, no highlightingYes, with highlighting
Horizontal rule ---NoNo (divider block instead)Yes
Images ![alt](url)No (upload instead)No (image block)Become links

So for anything a person pastes, the answer to "does Slack support Markdown" is: only a Slack-flavored subset. For bots, you either convert to mrkdwn or wrap standard Markdown in a markdown block — this page produces both.

Slack formatting cheat sheet: text, links, lists, and code

The complete Slack text formatting reference — what to type in the message box (with the markup preference on, or before pressing Cmd+Shift+F), what to send through the API, and the keyboard shortcut for each (Cmd on Mac, Ctrl on Windows and Linux).

FormatType in Slackmrkdwn (API / webhook)Shortcut
Bold*text**text*Cmd/Ctrl+B
Italic_text__text_Cmd/Ctrl+I
Strikethrough~text~~text~Cmd/Ctrl+Shift+X
Underline— (toolbar only)—Cmd/Ctrl+U
Inline code`code``code`Cmd/Ctrl+Shift+C
Code block```code``````code```Cmd/Ctrl+Alt+Shift+C
Quote> text> textCmd/Ctrl+Shift+9
Link[text](https://…)*<https://…|text>Cmd/Ctrl+Shift+U
Bulleted list* or - then space• text (plain characters)Cmd/Ctrl+Shift+8
Numbered list1. then space1. text (plain characters)Cmd/Ctrl+Shift+7
New lineShift+Enter\n—
Mention a person@name<@U012AB3CD>—
Mention a channel#channel<#C123ABC456>—
Notify the channel@here / @channel<!here> / <!channel>—
Emoji:tada::tada: or 🎉—
Local date/time—<!date^1392734382^{date} at {time}|fallback>—

* [text](url) links work when "Format messages with markup" is on or when you apply formatting with Cmd+Shift+F; otherwise select the text and press Cmd+Shift+U.

One rule trips people up constantly: Slack only formats markers at word boundaries. *bold* works, but un*believ*able doesn't, and neither does a marker with a space just inside it (* bold*). The converter warns you when your Markdown has formatting in the middle of a word.

Does Slack support Markdown tables?

Not in messages people write. The Slack composer has no table formatting, so a pasted Markdown table arrives as rows of | pipes | and ---. There are three good ways to show Slack table formatting anyway:

  • An aligned code block (the default here) — columns padded to the same width inside ```, so they line up in Slack's monospace font. Right- and center-aligned Markdown columns keep their alignment.
  • One bullet per row — • *landing page* — owner: dana · status: done. Reads better on phones and keeps links and formatting inside cells clickable.
  • A table block, for apps — Block Kit's native table (up to 100 rows × 20 columns, 10,000 characters, one table per message), sent with chat.postMessage. The Block Kit payload here turns your first Markdown table into one. A markdown block renders a standard Markdown table too.

Slack Markdown links: [text](url) vs <url|text>

A Slack Markdown link looks different depending on who's sending it. In the message box, links are made by selecting text and pressing Cmd+Shift+U, or — in markup mode — by typing [text](https://example.com). In mrkdwn, the API syntax, a link is <https://example.com|text>, and a bare <https://example.com> shows the URL itself. Email links use <mailto:you@example.com|email me>.

Inside <…>, an & in the URL must be written &amp;, and a | or > would end the link early — the converter escapes these for you. Relative links like /docs can't be clicked in Slack, so only their text is kept.

Slack mrkdwn vs Markdown: the differences that matter

Slack's mrkdwn formatting documentation calls it "inspired by Markdown, but with different rules". The differences, side by side:

MarkdownSlack mrkdwn
Bold**bold** or __bold__*bold*
Italic*italic* or _italic__italic_
Strikethrough~~strike~~~strike~
Link[text](https://…)<https://…|text>
Heading# heading— (use *bold* or a header block)
List- item / 1. item• item as plain text
Code block language```pythonIgnored
Special charactersBackslash escapes \*&amp; &lt; &gt; entities
Mentions—<@U123> <#C123> <!here>
Line breakBlank line or two spaces\n

To disable formatting entirely in an API message, set "mrkdwn": false on the message or use a plain_text text object in blocks.

Slack webhook message formatting

An incoming webhook takes JSON. The simplest message is a text field in mrkdwn — new lines as \n, and & < > escaped:

curl -X POST -H 'Content-type: application/json' \
  --data '{"text":"*deploy finished* :rocket:\n<https://host0.ai|open the app> — 3 files changed"}' \
  "$SLACK_WEBHOOK_URL"

For richer layouts, send blocks: a header block for the title (plain text, 150 characters), section blocks with mrkdwn text (3,000 characters each), divider blocks, and up to 50 blocks per message. Keep text as the fallback shown in notifications. The JSON payload tab builds this from your Markdown, splits long sections, and links straight to Slack's Block Kit Builder so you can tweak it visually.

# python — pip install requests
import json, os, requests

payload = {
    "text": "weekly update",  # notification fallback
    "blocks": [
        {"type": "header", "text": {"type": "plain_text", "text": "weekly update"}},
        {"type": "section", "text": {"type": "mrkdwn", "text": "*signups* up 40% — <https://host0.ai|details>"}},
    ],
}
requests.post(os.environ["SLACK_WEBHOOK_URL"], json=payload, timeout=10)
// node 18+ — built-in fetch
await fetch(process.env.SLACK_WEBHOOK_URL, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ text: "*build passed* :white_check_mark:" }),
});

Sending LLM output from a bot? Slack's markdown block is made for that: put the model's standard Markdown in {"type": "markdown", "text": "…"} and Slack renders headings, tables, and task lists itself (12,000 characters per message). Pick "Markdown block" in the payload menu to get that JSON.

Pasting ChatGPT and Claude answers into Slack

AI answers are the most common Markdown people paste into Slack, and they use everything Slack doesn't: ## headings, **bold**, tables, --- rules, and deeply nested lists. Use the model's copy button (which copies Markdown), paste it here, and copy for Slack. If you selected the answer on the page and copied it as rich text instead, the converter detects that and turns it into Markdown first.

  • Headings → bold lines (or bold caps, for a scannable update).
  • Tables → an aligned code block or one bullet per row.
  • Nested lists stay nested, with • ◦ ▪ by level in text output.
  • Task lists → ☐ / ☑ or Slack's :white_check_mark: emoji.
  • @here and @channel become real mentions in API output — leave them out of drafts you don't want to notify everyone with.

Building a small tool for your team — a standup bot, a release-notes formatter, an internal dashboard? host0 deploys agent-built apps to a shareable URL, with a shared database, in one conversation.

Frequently asked questions

Does Slack support Markdown?

Partly. Slack uses its own Markdown-like syntax: *bold* with single asterisks, _italic_, ~strike~, `code`, ```code blocks```, and > quotes. Standard Markdown headings (#), **double-asterisk bold**, and tables don't render in messages. The composer is also a WYSIWYG editor, so pasting formatted rich text works better than pasting raw Markdown — that's what the converter on this page does.

How do I paste Markdown into Slack?

Paste the Markdown into the converter above, click "Copy for Slack", then paste into the Slack message box with Cmd+V (Ctrl+V on Windows). Headings become bold lines, tables become aligned code blocks or bullets, and bold, italics, links, lists, quotes, and code arrive formatted. If you paste Slack-style markup as plain text instead, press Cmd+Shift+F (Ctrl+Shift+F) in Slack to apply the formatting.

Does Slack support Markdown tables?

Not in regular messages — the composer has no table formatting, and a pasted Markdown table shows up as pipes and dashes. The usual workarounds are an aligned table inside a code block or one bullet per row, which this tool generates. Apps can post real tables: the Block Kit table block (one per message, up to 100 rows and 20 columns) or a markdown block, which renders standard Markdown tables.

How do I make a table in Slack?

For a message you type yourself, put the table in a code block so the columns line up — paste a Markdown table above with "Tables: aligned code block" and copy for Slack. For a bot or workflow, send a Block Kit table block with chat.postMessage, or a markdown block containing a Markdown table. Slack canvases and lists also have native tables.

How do I add a link in Slack with Markdown?

In the message box, select the text and press Cmd+Shift+U (Ctrl+Shift+U) to add a link, or turn on "Format messages with markup" and type [text](https://url). In API messages (mrkdwn), links use angle brackets: <https://example.com|link text>. Markdown [text](url) links pasted through this converter become clickable text automatically.

What is Slack mrkdwn?

mrkdwn is Slack's own formatting syntax for app-published text — bots, incoming webhooks, and Block Kit text objects with "type": "mrkdwn". It's inspired by Markdown but different: *bold*, _italic_, ~strike~, <url|text> links, <@U123> user mentions, <!here>, and &, <, > must be escaped as &amp;, &lt;, &gt;. There are no headings or list syntax.

Why doesn't my Markdown work in Slack?

Usually because it's standard Markdown: Slack shows **bold** and ## headings literally, needs single asterisks for bold, has no headings or tables, and won't format markers in the middle of a word (like **un**usual). Bot messages also break when & < > aren't escaped or links use [text](url) instead of <url|text>. Run the text through this converter to fix all of it at once.

How do I format a Slack webhook message?

Send JSON with a "text" field written in mrkdwn — *bold*, _italic_, <https://url|links>, \n for new lines, and & < > escaped. For layouts, add a "blocks" array (header, section, divider, table) and keep "text" as the notification fallback. The JSON payload tab above builds both, plus a curl command for your webhook URL.

How do I convert Slack messages to Markdown?

Switch the converter to "Slack mrkdwn → Markdown" and paste the message text (for example from the API or a bot). *bold* becomes **bold**, ~strike~ becomes ~~strike~~, <url|text> becomes [text](url), • bullets become a Markdown list, and mentions become readable @names.

Is my text uploaded anywhere?

No. The conversion, the preview, and the clipboard copy all run in your browser — nothing is sent to a server or to Slack. It's safe for internal notes, incident updates, and unreleased plans.

Related free tools

See all free tools →

Built something? Put it online in seconds

host0 is the cloud for small software: bring any coding agent, build the tool only you need — like this one — and say "deploy to host0". Live at a shareable URL, no servers to run.