— Social Media

Free Slack Mrkdwn Previewer

Write a Slack message in mrkdwn to see how it will look, get a Block Kit payload, and find Markdown Slack won’t format.

— Samples
Mentions 3Problems 1Valid
Live

What is a Slack Mrkdwn Previewer?

Slack formats messages with mrkdwn, its own markup that looks like Markdown but isn’t: bold is *single asterisks*, links are written in angle brackets, and mentions use IDs. This previewer shows a message as Slack formats it and builds the Block Kit payload a bot or webhook sends.

It reads every mrkdwn element: bold, italic, strikethrough, inline code, code blocks, quotes, links, user and channel mentions, user groups, @here and @channel, dates and emoji names. The Block Kit view escapes &, < and > the way the API expects and splits text over 3,000 characters into sections.

Key Features

Message Preview

Formatting, mention pills, quotes and code blocks, close to Slack’s own look.

Block Kit Payload

A ready-to-send blocks array with mrkdwn text, escaped for the API.

Mentions and Links

Users, channels, groups, broadcasts and dates read from their angle-bracket tokens.

Markdown Check

Double asterisks, [label](url) links, headings and lists that Slack won’t format.

Safe Preview

Text is escaped and the preview is sanitised, so nothing in a message runs.

Perfect for everyone

  • Slack app and bot developers
  • People writing webhook alerts
  • Anyone formatting announcements

How to Use the Slack Mrkdwn Previewer

Write the message you want to send, or paste text from a bot, a webhook or a template. The preview, Block Kit payload and check all read the same text, so you can fix it in one place and copy the result.

1

Write the Message

Use *bold*, _italic_ and <url|label> links as Slack expects.

2

Preview It

See mentions, quotes and code blocks formatted.

3

Check It

Fix Markdown habits and unknown tokens the check lists.

4

Copy Block Kit

Send the payload from your app, webhook or workflow.

Worked Examples

Slack Messages, Previewed and Checked

Each row is a message of the kind teams post every day, from deploy notices to incident updates and Markdown pasted from a doc. Each answer is this tool’s output in the mode on the chip: HTML, a Block Kit payload or the check.

REF_001A deploy announcement, checked

“:rocket: *Deploy finished* for <https://status.example.com/releases/412|release 412> <@U024BE7LH> please check _checkout_ on staging before <!date^1793174400^{date_short} at {time}|Oct 28 at 9:00>. > Rollback plan: ~revert~ redeploy 411 from <#C0123ABCD|deploys> ``` make deploy ENV=prod VERSION=412 ``` <!here> thanks for the patience & quick reviews!”

REF_002The same message as Block Kit

“:rocket: *Deploy finished* for <https://status.example.com/releases/412|release 412> <@U024BE7LH> please check _checkout_ on staging before <!date^1793174400^{date_short} at {time}|Oct 28 at 9:00>. > Rollback plan: ~revert~ redeploy 411 from <#C0123ABCD|deploys> ``` make deploy ENV=prod VERSION=412 ``` <!here> thanks for the patience & quick reviews!”

REF_003Formatting and a quote as HTML

“*Release notes* for _v2.4_: > ~Dark mode~ shipped in v2.3 `npm i app@2.4`”

REF_004Mentions as HTML

“<@U024BE7LH> and <!subteam^SAZ94GDB8|@oncall>, the <#C0123ABCD|incidents> channel has the timeline.”

REF_005Markdown habits Slack shows literally

“## Weekly update **Shipped:** the new [billing page](https://example.com/billing) - faster exports - fewer bugs <b>”

REF_006Characters the API needs escaped

“Q3 revenue: 4 < 5 & growing > 10%”

REF_007A localised date and a link as HTML

“Meet at <!date^1793174400^{date_short_pretty} at {time}|Oct 28 at 9:00 UTC> in <https://meet.example.com/standup|the standup room>”

REF_008A broadcast with emoji, checked

“<!channel> :warning: *Outage* in eu-west-1. Updates in thread :thread:”

REF_009Code, bold and Markdown bold

“Use `snake_case_names` and *not* __this__ or **that**”

REF_010A code block with SQL as Block Kit

“``` SELECT * FROM orders WHERE total > 100; ``` Results in <https://bi.example.com/q/88|the dashboard>”

Syntax Reference

Slack Mrkdwn Syntax

Slack’s formatting looks familiar but differs from Markdown in small, important ways. These are the pieces of mrkdwn that work in message text and in Block Kit text objects, with what to type for each one.

01 / BOLD

Bold

Wrap text in single asterisks: *bold*.

“How do you write bold?”

02 / ITALIC

Italic

Wrap text in underscores: _italic_.

“How do you write italic?”

03 / STRIKETHROUGH

Strikethrough

Wrap text in tildes: ~struck~.

“How do you strike text?”

04 / CODE

Code

Backticks for inline code, three backticks for a block.

“What starts a code block?”

05 / QUOTE

Quote

Start a line with > to quote it.

“How do you quote a line?”

06 / LINK

Link

<https://example.com|label> shows the label as a link.

“Where does the label go?”

07 / USER

User Mention

<@U024BE7LH> mentions a user by ID, not by name.

“What goes after @?”

08 / CHANNEL

Channel Link

<#C0123ABCD|general> links a channel by ID.

“What does # take?”

09 / BROADCASTS

Broadcasts

<!here>, <!channel> and <!everyone> notify a whole channel.

“Which notifies active members?”

10 / DATES

Dates

<!date^unix^format|fallback> shows a date in each reader’s time zone.

“What is the fallback for?”

Escaping for the Slack API

Slack uses angle brackets for its own tokens, so text sent through the API has to escape three characters to show them literally. The Block Kit output does this for you, but it helps to know why a message comes back looking different.

Ampersand

Send & as &amp; so it isn’t read as the start of an entity.

Less Than

Send < as &lt; so it isn’t read as the start of a token.

Greater Than

Send > as &gt;, except at the start of a line, where it makes a quote.

Leave Tokens Alone

Links, mentions and dates keep their angle brackets.

Don’t Escape Twice

Text that already contains &amp; shouldn’t be escaped again.

Mrkdwn in Block Kit

Block Kit is the layout system for Slack app messages. Its text objects take a type of mrkdwn or plain_text, and the mrkdwn ones support the same syntax as message text, with limits that matter once messages get long or automated.

Tip 01

Section Limit

A section’s text can be up to 3,000 characters. Longer text needs more sections.

Tip 02

Fallback Text

Send top-level text too, for notifications and clients that can’t show blocks.

Tip 03

Mentions Notify

Mentions in blocks notify people just as they do in plain messages.

Tip 04

Verbatim Off

By default Slack also links bare URLs and names; verbatim true turns that off.

Tip 05

Test in Builder

Slack’s Block Kit Builder previews full layouts with buttons and images.

Slack Mrkdwn Versus Markdown

Most people learn Markdown first, from GitHub, Notion or documentation sites, and then find that Slack reads some of it differently. These are the differences that cause the most confusion when text moves from a doc or a README into a Slack message.

Bold and Italic

Markdown uses **bold** and *italic*; Slack uses *bold* and _italic_, so Markdown italic turns bold in Slack.

Links

Markdown writes [label](url); Slack wraps the address and label in angle brackets with a pipe between them.

Headings

Markdown headings start with #; Slack messages have no headings, so use bold on its own line instead.

Lists

Markdown lists render with bullets; in Slack messages, hyphens and numbers show exactly as typed.

Line Breaks

Markdown joins lines into paragraphs; Slack keeps every line break you type.

Mentions

Markdown has no mentions; Slack needs IDs in angle brackets for people, channels and groups.

Who a Mention Notifies

Mentions are the part of a Slack message with real consequences, because each kind reaches a different set of people. Choosing the narrowest one that does the job keeps channels quiet and makes urgent alerts stand out when they matter.

Tip 01

A Person

A user mention notifies that one person, wherever they are in the workspace.

Tip 02

A User Group

A group mention such as @oncall notifies everyone in the group.

Tip 03

Here

The here broadcast notifies channel members who are currently active.

Tip 04

Channel

The channel broadcast notifies every member of the channel, active or not.

Tip 05

Everyone

The everyone broadcast only works in the workspace’s default channel and reaches every member.

When to Use a Mrkdwn Previewer

Whenever a message will be sent by code rather than typed into Slack, or when text written elsewhere needs to look right once it lands in a channel and reaches the people it mentions.

Bot Messages

Check formatting before your app sends it to thousands of people.

Webhook Alerts

Make monitoring and CI alerts readable at a glance.

Announcements

Draft a long post and check quotes, links and mentions.

Templates

Test message templates with real placeholder values.

Moving From Markdown

Convert habits from GitHub or Notion into Slack’s syntax.

Mrkdwn Pitfalls

Mistakes that make a Slack message arrive with stray symbols or broken links, most of which come from writing Markdown out of habit or from building text in code without escaping it first.

Tip 01

Double Asterisks

**text** shows extra asterisks in many clients. Use *text*.

Tip 02

Markdown Links

[label](url) stays as typed. Use <url|label>.

Tip 03

Names Instead of IDs

@jane isn’t a mention from the API. Use <@USERID>.

Tip 04

Underscores in Words

file_name_here can turn italic in some cases. Wrap it in backticks.

Tip 05

Unescaped Brackets

An unescaped < can swallow the text after it.

Tip 06

Overusing @channel

Broadcasts notify everyone. Use @here or a group mention when you can.

Frequently Asked Questions