Slack

Slack Markdown - Complete Guide - Webhook, Link, Formatting

William Westerlund
September 14, 2025
Read time

What is Slack Markdown?

Slack Markdown (called "mrkdwn") is Slack’s lightweight markup for formatting messages.

It supports bold, italics, strikethrough, inline `code`, multi-line code blocks, lists, block quotes, and links written as <url|label>, plus Slack-specific @mentions, #channels, and :emoji:.

It’s a subset of standard Markdown (for example, tables and footnotes aren’t supported).

Difference Between Slack Markdown and Markdown

Slack Markdown and standard Markdown serve a similar purpose: they both allow you to format text. However, there are key differences in how each one works.

Slack Markdown is a simplified version designed specifically for Slack messages. It supports only a limited set of formatting options, such as bold, italics, inline code, block quotes, and lists. Slack’s formatting is intentionally minimal to keep conversations clean and easy to read.

Standard Markdown is more versatile and widely used across blogs, documentation, and web content. It supports headings, links, images, tables, nested lists, and more advanced formatting. Markdown can be rendered consistently across many platforms, while Slack Markdown is restricted to Slack.

Understanding Slack's mrkdwn

Slack uses its own markup language called mrkdwn (not markdown!). It's designed specifically for chat interfaces and differs from standard Markdown in important ways.

Further reading: Slack formatting (full guide)

Bold Text

*bold text*
bold text

Use single asterisks, not double like standard Markdown

📐

Italic Text

_italic text_
italic text

Underscores work reliably for italics

✂️

Strikethrough

~strikethrough~
strikethrough

Single tildes, not double like GitHub

💻

Inline Code

`code`
code

Backticks work the same as Markdown

📋

Code Block

```
function hello() {
  console.log("Hello!");
}
```
function hello() {
  console.log("Hello!");
}

Need tables? See: How to format tables in Slack

💬

Blockquote

> This is a quote
This is a quote

Keyboard tips: Essential Slack shortcuts

Advanced API-Specific mrkdwn

When using the API or webhooks, you have access to powerful features not available when typing in Slack.

🔗

Links with Custom Text

<https://example.com|Click here>

API-only syntax for custom link text

@

User Mentions

<@U012AB3CD>
@username

Use user ID to mention and notify

#

Channel Links

<#C123ABC456>
#channel-name

Creates clickable channel links

👥

User Group Mentions

<!subteam^SAZ94GDB8>
@engineering

Notify entire user groups

Learn to set up & manage groups: Efficient management with Slack user groups

📅

Dynamic Dates

<!date^1672531199^{date_pretty} at {time}|Dec 31 at 5:59 PM>
Today at 5:59 PM

Shows in user's timezone

📢

Special Mentions

<!here> <!channel> <!everyone>
@here @channel @everyone

Use sparingly to avoid noise!

Want to automate these patterns? Try: Slack chatbot integration (guide)

Advanced structuring: Slack Lists — benefits, features & limitations

Incoming Webhooks

First steps: Get your Slack webhook URL

Webhooks are the simplest way to post messages to Slack from external applications. They provide a unique URL that accepts JSON payloads.

Simple Text Message

Basic

The most basic webhook payload contains just a text field with your message.

{
  "text": "The build has *passed* ✅ for branch `main`"
}

Rich Message with Mentions

Advanced

Combine mentions, links, and formatting for informative notifications.

{
  "text": "🚨 *High Priority Alert*\n\nNew support ticket assigned to <@U012AB3CD>\n\n*Ticket:* \n*Customer:* Acme Corp\n*Due:* "
}

Using Blocks

Block Kit

Webhooks support the full Block Kit framework for rich layouts.

{
  "text": "Deployment notification",
  "blocks": [
    {
      "type": "header",
      "text": {
        "type": "plain_text",
        "text": "🚀 Deployment Successful"
      }
    },
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": "*Environment:* Production\n*Version:* v2.1.0\n*Deployed by:* <@U012AB3CD>"
      }
    }
  ]
}

Next step: Automate approvals in Slack

Block Kit Framework

Block Kit is Slack's UI framework for building rich, interactive messages. It provides structured components that go beyond simple text formatting.

Header Block

Layout

Create proper headings that mrkdwn doesn't support. Headers only accept plain_text.

📊 Weekly Report

{
  "type": "header",
  "text": {
    "type": "plain_text",
    "text": "📊 Weekly Report",
    "emoji": true
  }
}

Section with Fields

Data Display

Display key-value data in a clean, two-column layout.

Status: ✅ Active
Priority: 🔴 High
Assignee: @sarah
Due Date: Tomorrow
{
  "type": "section",
  "fields": [
    {
      "type": "mrkdwn",
      "text": "*Status:*\n✅ Active"
    },
    {
      "type": "mrkdwn",
      "text": "*Priority:*\n🔴 High"
    },
    {
      "type": "mrkdwn",
      "text": "*Assignee:*\n<@U123456>"
    },
    {
      "type": "mrkdwn",
      "text": "*Due Date:*\nTomorrow"
    }
  ]
}

Context Block

Metadata

Add secondary information like timestamps or footnotes in a subtle format.

👀 3 people viewedLast updated 2 hours ago
{
  "type": "context",
  "elements": [
    {
      "type": "mrkdwn",
      "text": "👀 3 people viewed"
    },
    {
      "type": "mrkdwn",
      "text": "Last updated 2 hours ago"
    }
  ]
}

Related: Slack Canvas for structured content

mrkdwn vs Standard Markdown

Critical differences you need to know when using the API

Feature Standard Markdown Slack mrkdwn (API) Notes
Bold **text** or __text__ *text* Single asterisks only
Italic *text* or _text_ _text_ Underscores only
Links [text](url) <url|text> Completely different syntax
Strikethrough ~~text~~ ~text~ Single tildes
Headings # H1, ## H2, etc. Not supported Use header blocks instead
Tables Pipe syntax Not supported Use table blocks
Images ![alt](url) Not supported Use image blocks
Line Breaks Two spaces + enter \n Explicit newline character

Further reading on formatting nuance: Slack formatting guide

Live mrkdwn Formatter

Type or paste your text to see how it will appear in Slack

Tip: For new lines in Slack messages, see how to add a new line in Slack.

Interactive Webhook Builder

Build and test webhook payloads visually

💬 Simple Text
🎨 Rich Message
🚨 Alert
📊 Report

Example pipeline: GitHub Actions → Slack notifications

Try Interactive Examples

Click any example to see it in action

🔔

Build Notification

CI/CD status update

🎫

Support Ticket

Customer support alert

📈

Daily Report

Analytics summary

Team Reminder

Meeting notification

Pro Tips & Best Practices

Master these techniques for better Slack integrations

🔒

Keep Webhooks Secret

Never expose webhook URLs in public code or client-side JavaScript. Treat them like passwords - anyone with the URL can post to your channel.

🎯

Use Mentions Wisely

Avoid using or in automated messages. Use specific user mentions or create dedicated channels for different alert types.

📏

Message Length Limits

Text fields have a 3000 character limit. For longer content, consider using multiple blocks or uploading a file snippet.

🎨

Prefer Block Kit

For anything beyond simple notifications, use Block Kit. It provides better structure, accessibility, and future-proofs your integration.

🔄

Test Formatting

What works in the Slack client may not work via API. Always test your formatting with actual API calls, not just in the message box.

Combine Styles Carefully

When combining bold, italic, and other styles, add spaces between different formatting. For complex formatting, use rich_text blocks.

🤖

Use Slack AI for Summaries

Surface summaries and search alongside formatted updates to keep teams focused.

Ready to Build Amazing Slack Integrations?

You now have all the tools and knowledge to create rich, interactive Slack messages. Whether you're building notifications, reports, or full applications, remember that great formatting enhances communication.

New to Slack? Start here: What is a Slack workspace?

Start Formatting Now
William Westerlund

Get started with Suptask

14 Days Free Trial
No Credit Card Required
Get Started Easily
A Add to Slack
Try a Slack Ticketing System Today
No credit card required