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*
          Use single asterisks, not double like standard Markdown
Italic Text
_italic text_
          Underscores work reliably for italics
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>
          Use user ID to mention and notify
Channel Links
<#C123ABC456>
          Creates clickable channel links
User Group Mentions
<!subteam^SAZ94GDB8>
          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>
          Shows in user's timezone
Special Mentions
<!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
BasicThe most basic webhook payload contains just a text field with your message.
{
  "text": "The build has *passed* ✅ for branch `main`"
}
          Rich Message with Mentions
AdvancedCombine 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 KitWebhooks 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
LayoutCreate 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 DisplayDisplay key-value data in a clean, two-column layout.
{
  "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
MetadataAdd secondary information like timestamps or footnotes in a subtle format.
{
  "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 |  | 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
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.
Measure outcomes with Slack analytics.
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.
Learn more: Slack AI
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











