Back

Slack · Guide

Slack Formatting:
How Markdown Works in Slack

A cheat sheet for Slack markup vs standard markdown, every formatting shortcut, what does not work (tables, headings), and how to paste ChatGPT or Claude output without the stray asterisks.

Quick Answer

Slack does not use standard markdown

Slack formats messages with a toolbar by default. You can switch to typing symbols instead with Preferences > Advanced > Input Options > Format messages with markup. Slack’s markup is close to markdown but not the same: bold is *text* (one asterisk), strikethrough is ~text~ (one tilde), and there are no headings, tables or images. That is why markdown pasted from ChatGPT, Claude or a README shows up full of ** and #. The fix is to convert it first with the free Markdown to Slack converter.

Slack formatting cheat sheet

The Slack column is what you type with markup turned on. With the toolbar (the default), select text and click the button or use the keyboard shortcuts instead. You can stack styles on the same text.

FormatType in SlackStandard markdown
Bold*text***text**
Italic_text_*text* or _text_
Strikethrough~text~~~text~~
Inline code`text``text`
Code block```text``````text```
Block quote>text> text
Link[text](url)[text](url)
Bulleted list* then space (toolbar mode)- item
Numbered list1. then space (toolbar mode)1. item

Two details catch people. First, Slack has no list markup: in the default toolbar mode you start a bulleted list by typing * and a space, and a numbered list by typing 1. and a space. Slack says list auto-formatting is not applied when markup mode is on. Second, press Shift Enter for a new line. Enter on its own sends the message unless you change your Enter key preference.

What does not work in Slack

  • Headings. Slack messages have no heading syntax, so # Title will not become a heading. Use a bold line instead.
  • Tables. Pipe tables are not rendered in messages you type. See the tables section below for what does work.
  • Images. ![alt](url) is not a Slack format. Upload the image or paste the image URL.
  • Markdown double symbols. **bold** and ~~strike~~ are not Slack markup. Slack uses one symbol on each side.
  • Formatting inside code. Text inside backticks does not take any other formatting, so *bold* inside `code` stays literal.
  • Underline by markup. Underline is on the toolbar, but Slack lists no markup symbol for it.

How to turn on markup (markdown) mode in Slack

If you would rather type symbols than click buttons, switch Slack to markup. On desktop:

  1. Click your profile picture in the sidebar.
  2. Select Preferences, then Advanced.
  3. Under Input Options, check Format messages with markup.

What changes when it is on, according to Slack:

  • The formatting toolbar is hidden from the message box.
  • Formatting is applied after you send, so you see raw symbols while typing instead of a live preview.
  • Automatic formatting for bulleted, numbered and indented lists is not applied.
  • Slack notes that “messages that you copy and paste will appear in plain text.”

To go back to the toolbar, uncheck the same box. Slack documents this setting for the desktop app. If you just want to hide or show the toolbar, click the formatting icon in the message field.

Slack formatting keyboard shortcuts

Select the text, then press the keys. The list shortcuts are the same in canvases.

ActionMacWindows / Linux
Bold⌘ BCtrl B
Italic⌘ ICtrl I
Strikethrough⌘ Shift XCtrl Shift X
Inline code⌘ Shift CCtrl Shift C
Code block⌘ Alt Shift CCtrl Alt Shift C
Block quote⌘ Shift 9Ctrl Shift 9
Link⌘ Shift UCtrl Shift U
Numbered list⌘ Shift 7Ctrl Shift 7
Bulleted list⌘ Shift 8Ctrl Shift 8
New line without sendingShift EnterShift Enter
Undo formatting⌘ ZCtrl Z
Turn typed text into a snippet⌘ Shift EnterCtrl Shift Enter
Show all shortcuts⌘ /Ctrl /

Link tip: if a URL is already on your clipboard, select the words you want to link and paste. Slack turns the selection into a link. Underline is on the toolbar, and Slack lists ⌘ U for it on Mac.

Tables in Slack

Slack messages have no table syntax. A markdown pipe table pasted into the message box arrives as lines of pipes and dashes. You have four real options:

  • Canvas. Canvases have a “Create a table” option on their toolbar. Add one to a channel or DM from the plus sign in the conversation header.
  • Slack list. Lists can show items in a table layout (rows are items, columns are fields). Lists are available on paid plans.
  • Code block. For a quick message, the usual workaround is a plain-text table wrapped in three backticks.
  • Apps and bots. Block Kit has a table block (up to 100 rows, 20 cells per row, 10,000 characters), and the markdown block renders pipe tables. Details in the developer section.

How to paste markdown from ChatGPT or Claude into Slack

ChatGPT, Claude and Gemini answer in standard markdown. Slack reads a different syntax, so a pasted answer comes through with double asterisks around every bold phrase, pound signs in front of headings, and bracketed links. Converting it first takes a few seconds:

  1. Copy the response from ChatGPT or Claude.
  2. Paste it into the Markdown to Slack converter. It turns **bold** into *bold*, ~~strike~~ into ~strike~, and headings into bold lines, and leaves code blocks alone.
  3. Copy the result and paste it into Slack.
  4. Re-add links with ⌘ Shift U (Ctrl Shift U), or turn on markup mode, which accepts [text](url).

Tables will not survive the trip, since Slack messages cannot show them. Put them in a code block or a canvas. And if the AI text is full of em dashes that give it away, run it through the em dash remover before you post.

Convert markdown to Slack formatting

Free, runs in your browser, works in both directions. No sign-up.

Open the converter →

Slack markdown for developers: mrkdwn and Block Kit

Messages sent by apps, bots and webhooks use mrkdwn, Slack’s own syntax. It is the default for chat.postMessage text and for text objects with "type": "mrkdwn". Bold, italic, strikethrough, code and quotes follow the cheat sheet above. The differences are links, mentions and escaping.

Links

Bare URLs are linked automatically. For custom link text, use <https://example.com|link text>. Email links work the same way with <mailto:name@example.com|Email me>. The markdown form [text](url) is not mrkdwn.

Mentions

  • User: <@U012AB3CD>, shows the display name.
  • Channel: <#C123ABC456>, shows the channel name.
  • User group: <!subteam^SAZ94GDB8>, notifies every member.
  • Special mention: <!here> for active channel members. Use these sparingly.

Slack recommends these ID-based forms over typing names, since names change.

Dates in the reader’s timezone

<!date^timestamp^token_string^optional_link|fallback_text> shows a Unix timestamp in each viewer’s own timezone. Tokens include {date_num}, {date}, {date_short}, {date_long}, {date_pretty}, {time}, {time_secs} and {ago}. The fallback text is required.

<!date^1392734382^{date} at {time}|February 18th, 2014 at 6:39 AM PST>

Escaping and turning formatting off

Only three characters need escaping: & as &amp;, < as &lt; and > as &gt;. To send text with no formatting, use a plain_text text object in blocks, or set "mrkdwn": false for top-level text.

The markdown block: standard markdown for apps

Block Kit now has a markdown block that takes standard markdown and lets Slack translate it. It is built for apps that post LLM output. It supports **bold**, *italic*, ~~strike~~, [text](url) links, # headings (all shown at the same size), ordered, unordered and task lists, code with language highlighting, quotes, --- dividers and pipe tables. Images become plain links using the alt text. All markdown blocks in one payload share a 12,000 character limit, and one block may be split into several after translation.

{
  "blocks": [
    {
      "type": "markdown",
      "text": "## Weekly report\n**Shipped:** 3 features\n\n| Team | Status |\n| --- | --- |\n| Web | Done |"
    }
  ]
}

If you can’t use the markdown block (older integrations, attachments, or mrkdwn text fields), convert the text to mrkdwn first. The Markdown to Slack converter outputs <url|text> links, which is the form the API expects.

Frequently Asked Questions

Does Slack support markdown?

Not standard markdown. Slack has its own markup, which Slack calls mrkdwn in its developer docs. It looks like markdown but uses different rules: *bold* with one asterisk, _italic_ with underscores, and ~strike~ with one tilde. By default Slack gives you a formatting toolbar instead. You can switch to typing markup in Preferences > Advanced > Input Options > Format messages with markup. Developers can also send standard markdown through the Block Kit markdown block.

Does Slack support markdown tables?

Not in messages you type. Slack has no table syntax in the message box, so a pipe table arrives as rows of pipes and dashes. For a real table, use a canvas (its toolbar has "Create a table") or a Slack list in table layout. Apps can post tables with the Block Kit table block, or send a pipe table inside a markdown block. For a quick message, a plain-text table inside a code block is the usual workaround.

Why do my asterisks show up in Slack?

The text was written in standard markdown. ChatGPT, Claude and most editors mark bold with two asterisks (**bold**), but Slack bold is one asterisk on each side (*bold*). Run the text through the free Markdown to Slack converter before you paste it, and turn on "Format messages with markup" if you want to type the symbols yourself.

How do I make a code block in Slack?

Wrap the text in three backticks (```like this```), use the code block button on the formatting toolbar, or press ⌘ Alt Shift C on Mac or Ctrl Alt Shift C on Windows. For inline code, use one backtick on each side or ⌘ Shift C (Ctrl Shift C). For long code with syntax highlighting, create a text snippet from the plus icon next to the message field.

How do I strikethrough text in Slack?

Put one tilde on each side (~like this~) with markup turned on, select the text and click strikethrough on the toolbar, or press ⌘ Shift X on Mac or Ctrl Shift X on Windows. The double tilde from markdown (~~text~~) is not Slack syntax.

How do I add a hyperlink in Slack?

Select the words you want to link and press ⌘ Shift U on Mac or Ctrl Shift U on Windows, then paste the URL. If the URL is already on your clipboard, you can select text and paste over it. With markup turned on, Slack also accepts [your text](the link). In the API and Block Kit, links use <url|text> instead.

What is mrkdwn in Slack?

mrkdwn is the name of Slack's own formatting syntax in the developer docs. It is "inspired by markdown, but uses different rules." It is the default for text sent with chat.postMessage and for text objects with "type": "mrkdwn". Links are <url|text>, mentions are <@U012AB3CD>, and the characters &, < and > must be escaped as &amp;, &lt; and &gt;.

Can I make headings in Slack?

Not in a regular message. There is no heading syntax, so the usual fix is a bold line. Canvases have headers on their toolbar, and apps can use a header block or the markdown block, which renders # headings (all levels at the same size).

Related Tools

Sources: Slack Help Center articles on formatting, markup, keyboard shortcuts, snippets, canvases and lists, and the Slack developer docs for formatting message text, the markdown block and the table block. Checked September 2026.