Slack Markdown Converter

Convert Markdown to Slack mrkdwn, the Slack Markdown syntax with single-asterisk bold and <url|label> links. Preview the message, copy the text or a Block Kit text object, and convert Slack mrkdwn back to Markdown.

Markdown · 159 / 50,000 charactersSlack mrkdwn · 153 / 3,000 characters — one Block Kit text object

What Is the Slack Markdown Converter?

The Slack Markdown converter rewrites standard Markdown into mrkdwn, the Markdown-like syntax Slack reads in message text from apps and in Block Kit text objects. It draws the result as a message, says what Slack Markdown cannot show, and converts mrkdwn back to Markdown — all in your browser.

  • Markdown to Slack and back: Markdown to mrkdwn, or basic mrkdwn back to Markdown, each direction keeping its own draft.
  • Three views of the result: An approximate Slack message preview, the raw mrkdwn, or a Block Kit text object as JSON.
  • Clear about losses: Headings, tables, images, and raw HTML come with a note on what changed in the Slack version.
The Slack Markdown converter with release notes in Markdown on the left and the converted mrkdwn drawn as a Slack-style chat message on the right.
Markdown on the left, the mrkdwn drawn as a message on the right.

What Is Slack mrkdwn?

mrkdwn — Slack's own spelling, with the vowels left out — is Slack's Markdown dialect: a small markup language inspired by Markdown that Slack parses in message text. It is not a typo. It looks familiar but differs where it matters: one asterisk makes *bold*, underscores make _italic_, one tilde strikes through, and links are written <https://example.com|like this>. Standard Markdown links and # headings are not mrkdwn syntax, which is why Markdown needs converting before Slack shows it as intended.

Message text sent by apps

The text of a message posted through chat.postMessage, chat.update, or an incoming webhook is read as mrkdwn unless the app turns formatting off.

Block Kit text objects

A text object with "type": "mrkdwn" — in a section, context, or other block — is formatted as mrkdwn. "type": "plain_text" shows the characters exactly as typed.

Not what people type in Slack

Messages written in the Slack app are formatted by its composer — the toolbar, or markup when that preference is on — separately from mrkdwn sent through the API.

Not Slack's markdown block

Slack's newer markdown block accepts standard Markdown instead of mrkdwn. Use this converter when the field you fill in expects mrkdwn.

How Markdown to Slack Markdown Conversion Works

The Slack Markdown converter parses Markdown into structure first, so each element is rewritten deliberately instead of by search and replace.

  1. 1Markdown is parsed as GFMLists, fences, tables, and strikethrough are recognized as structure before anything is rewritten, so asterisks inside code are never mistaken for bold.
  2. 2Each element is rewrittenEmphasis switches to single marks, links become <url|label>, list items are written with •, and quotes keep their > prefix.
  3. 3Code and control characters are protectedCode keeps its contents and loses only the fence language. &, < and > are escaped as &amp;, &lt; and &gt;, as Slack requires.
  4. 4Losses are reportedHeadings become bold lines, tables become code-block text, images become their URL, and raw HTML is dropped — each with a note under the output.
Markdownin
# Release notes

**Ready for review** with *one small change*.

- Read the [guide](https://example.com/guide)
- ~~Old workflow~~
Slack Markdown (mrkdwn)out
*Release notes*

*Ready for review* with _one small change_.

• Read the <https://example.com/guide|guide>
• ~Old workflow~

Markdown to Slack Markdown, Element by Element

The converter handles the differences that make standard Markdown look broken in a Slack message.

Slack Markdown Emphasis

**bold** becomes *bold*, *italic* becomes _italic_, and ~~strike~~ becomes ~strike~ — the single-character marks mrkdwn expects.

Links in Slack's Shape

[label](https://…) becomes <https://…|label>. Relative links stay readable text with a note, and unsafe schemes such as javascript: are never turned into links.

Code Kept Literal

Inline code and fenced blocks keep their contents untouched by emphasis rules. The fence's language label is dropped, since mrkdwn code blocks have none.

Block Kit Text Object

The JSON view wraps the result as { "type": "mrkdwn", "text": … } and counts it against the 3,000-character limit of one text object.

Slack Markdown Back to Markdown

Paste mrkdwn to get standard Markdown: emphasis, <url|label> links, • bullets, and code are converted, and mentions are kept as readable text.

No Token, No Workspace

Conversion runs in your browser. It never asks for a Slack token, never connects to a workspace, and never posts a message.

Copy Slack Markdown as Text or a Block Kit Object

For an API call, the text usually sits inside a block. The JSON view wraps the converted mrkdwn as a text composition object you can drop into that block.

  • The object is { "type": "mrkdwn", "text": … } — the part a section or context block contains.
  • It is not a complete chat.postMessage request; your code still builds the blocks around it.
  • Text over 3,000 characters is flagged, so you know to split it across blocks.
  • Copy it, or download it as .json — or the plain mrkdwn as .txt.
The Slack Markdown converter's JSON view showing the converted message wrapped as a mrkdwn text object with type and text fields.
The JSON view: the converted message as a Block Kit text object.

Slack Markdown Examples

The exact Slack Markdown this converter writes for four common pieces of Markdown.

Bold uses one asterisk

Markdown bold is two asterisks; mrkdwn bold is one. Italic switches to underscores and strikethrough to a single tilde.

Markdownin
**Ready for review**
*One small change*
~~Old workflow~~
Slack mrkdwnout
*Ready for review*
_One small change_
~Old workflow~

Links put the URL first

mrkdwn links go inside angle brackets with the URL first, then a pipe and the label. Use absolute https:// links: a relative path has nothing to resolve against in Slack.

Markdownin
[Read the guide](https://example.com/guide)
Slack mrkdwnout
<https://example.com/guide|Read the guide>

The angle brackets are Slack link syntax, not HTML.

Code is protected

Fenced code keeps its contents. The language label after the opening fence is dropped, because mrkdwn code blocks do not take one.

Markdownin
```js
const ready = true;
```
Slack mrkdwnout
```
const ready = true;
```

Tables become plain text

Slack Markdown has no tables. The cells are written inside a code block, separated by pipes, so the columns stay readable in a monospace font.

Markdownin
| Task | Owner |
| --- | --- |
| Review | Maya |
Slack mrkdwnout
```
Task | Owner
Review | Maya
```

Alignment and column widths are not kept.

Convert Markdown to Slack Markdown in 3 Steps

Turn Markdown into Slack Markdown — or mrkdwn back into Markdown — and copy the format your workflow needs.

1

Choose the direction

Markdown → Slack turns Markdown into Slack Markdown for an API message or bot reply; Slack → Markdown brings mrkdwn back into docs and notes.

2

Paste and review

Paste the text, then check the Slack-style preview and the notes under it for headings, tables, or links that changed.

3

Copy the right format

Copy the mrkdwn, or switch to JSON and copy a Block Kit text object. Downloads are available as .txt, .json, or .md.

Slack Markdown Cheat Sheet: Markdown vs mrkdwn

What each piece of standard Markdown becomes in Slack Markdown, as this converter writes it.

MarkdownSlack Markdown (mrkdwn)Note
**bold***bold*Single asterisks.
*italic* or _italic__italic_Underscores.
~~strike~~~strike~A single tilde.
[label](https://example.com)<https://example.com|label>Relative links stay as text: label (/path).
`code` and ```js fences`code` and ``` fencesContents kept; the fence language is dropped.
- item / 1. item• itemOrdered lists become bullets; numbering is not kept.
> quote> quoteQuotes keep their prefix.
# Heading*Heading*mrkdwn has no heading levels.
| A | B | table``` A | B ```Plain text in a code block, no alignment.
![Chart](https://…/chart.png)Chart: https://…/chart.pngImages are not embedded.
<div>raw HTML</div>(removed)Convert HTML to Markdown first if it matters.
A & B < CA &amp; B &lt; CControl characters are escaped.

Before You Post Slack Markdown

API text is not the composer

mrkdwn is for API fields and text objects. Slack's message box has its own rich-text editing, so pasted mrkdwn may not format the same way there.

Slack has other formats

Slack also documents rich_text blocks and a markdown block that take different input. This tool writes mrkdwn; check which field your API call expects.

Mentions need IDs

@Maya in Markdown is plain text. Slack mentions use workspace IDs such as <@U123>; the converter does not look them up or notify anyone.

Specifications behind these rules

Slack Markdown Questions

Answers about Slack mrkdwn, the composer, tables, Block Kit text objects, reverse conversion, and privacy.

What is Slack mrkdwn?
mrkdwn is Slack's own Markdown-like markup — the name is Slack's spelling, not a typo. It is what people usually mean by Slack Markdown: the syntax Slack parses in message text sent by apps and in Block Kit text objects whose type is mrkdwn. Bold uses one asterisk, links are written <url|label>, and there are no headings or tables.
Does Slack support Markdown?
Partly, and in more than one way. Slack Markdown in API text fields is mrkdwn, which differs from standard Markdown in bold, links, and escaping. Slack's newer markdown block accepts standard Markdown separately, and the message composer has its own formatting. This converter targets mrkdwn.
How do I convert Markdown to Slack Markdown?
Keep the direction on Markdown → Slack, paste your Markdown, and choose Copy mrkdwn. For a Block Kit layout, switch to JSON and put the text object inside your block. Read the notes under the output and test the message in Slack before relying on it.
Can I paste the output straight into Slack's message box?
It depends on how the composer is set to format messages. The output is meant for mrkdwn API fields; the composer's rich-text editor can treat pasted asterisks and brackets differently. The preview on this page is an approximation, not Slack's renderer.
Why is my Markdown table not a Slack table?
Slack Markdown has no table syntax. The converter writes the table's cells as plain text inside a code block, separated by |, so columns stay readable. For structured layouts, build them from Block Kit blocks instead.
Can I convert Slack messages back to Markdown?
Yes, for the basics: bold, strikethrough, links, • bullets, and code. Mentions such as <@U123> become readable text. It is not a Slack export importer and does not rebuild blocks, attachments, threads, or message metadata.
Does the JSON output post a message?
No. It is a text composition object — the type and text pair a block contains — not a complete chat.postMessage request. The tool never asks for a token or contacts Slack.
What happens to long messages?
Input is capped at 50,000 characters. Output longer than 3,000 characters is flagged, because that is the most one Block Kit text object accepts. Split the message across several blocks.
Is my text sent anywhere?
No. Conversion happens in your browser's memory and nothing is uploaded or saved by this tool. Each direction keeps its draft only while the page is open.

More Platform Formatting Tools

Write Markdown for another chat app, start from rich text, or remove the formatting altogether.

Convert Markdown to Slack Markdown Now

Paste Markdown, check the Slack preview, and copy mrkdwn or a Block Kit text object.