Back to Blog
Guide

Slack Markdown Not Working? What Formats When You Type, Paste or Post

Pasted standard markdown now formats in Slack on paste, tables included. Typed ~~strike~~ and [text](url) do not, markup mode keeps stray asterisks, and bots need mrkdwn. From our 27 October tests.

Slack Green Team
September 27, 2026
October 27, 2026
5 min read
Share:
slack
formatting
markdown

Slack markdown "not working" now depends on how the text gets into the message. In our test on 27 October, standard markdown pasted into the Slack web app formatted on paste with no shortcut: **bold**, [text](url) links, # headings, lists, code fences and even a pipe table, which Slack stored as a real table. Typed markdown mostly formats as you type, with two exceptions: ~~strike~~ stays literal (use one tilde), and a typed [text](url) becomes a link only after you press Cmd+Shift+F (Ctrl+Shift+F on Windows). If nothing formats at all, Format messages with markup is on in Preferences > Advanced. If a bot's message shows asterisks, the API is reading Slack's own mrkdwn, where bold is *one asterisk*.

We typed, pasted and posted the same markdown in a test channel of our own Free workspace on 27 October 2026 (Slack web app in Chrome on macOS), and read back what Slack stored with conversations.history. On 28 September the same paste stayed literal and Slack showed a "Looks like your content contains markdown" toast, so Slack changed paste behaviour between those two tests. We did not repeat the test in the desktop app.

Standard markdown pasted into Slack on 27 October: bold, italic, strikethrough, a link, a heading, lists, a quote, a code block and a two-column table all formatted after sending

What formats in Slack: typed, pasted, markup mode and API

MarkdownTypedPastedMarkup mode onAPI text
**bold**BoldBoldBold, a * left on each sideLiteral
*text*BoldItalicBoldBold
_italic_ItalicItalicItalicItalic
~~strike~~LiteralStrikethroughLiteralLiteral
[text](url)Link after Cmd+Shift+FLinkLinkLiteral
# HeadingHeadingHeadingLiteralLiteral
- item, 1. itemListListListLiteral
> quoteQuoteQuoteQuoteQuote
Code fenceCode blockCode blockCode blockCode block
Pipe tableLiteralTableLiteralLiteral

Typed means keys pressed in the message box, pasted means plain text pasted with Cmd+V, and API means the text field of chat.postMessage. One tilde (~strike~) gave strikethrough both typed and through the API.

Pasted markdown formats on paste now

The Slack message box right after pasting standard markdown: formatted text, a heading, lists, a quote, a code block and a table chip labelled Plan, Price, Table

The paste is converted inside the message box, before you send. A pipe table turns into a chip named after its header row ("Plan, Price, Table"), and the sent message holds a table block with one cell per value. A typed pipe table stays as pipes and dashes, so paste a table instead of typing it. Text from ChatGPT, Claude, Notion or a GitHub README is standard markdown, so it now pastes formatted. The one surprise is *text* with single asterisks: Slack reads it as standard markdown italic on paste, while the same text typed turns bold.

There is no toast or button to press any more. The keyboard shortcuts panel (Cmd+/) no longer lists "Apply markdown formatting", and a search there for "markdown" finds nothing. Cmd+Z right after the paste removed the whole paste in our test, not only the formatting.

To paste the characters themselves, start a code block first: type three backticks so the box switches to a code block, then paste. Inside the code block the asterisks, # and pipes stayed as typed. The markdown to Slack converter still helps when you need Slack's own mrkdwn for a bot or a workflow. Copying the other way, out of Slack, is covered in how to copy a Slack thread, which shows what survives a paste into a doc.

Typed markdown: what works and the two exceptions

In the default message box, typed markers format as you type:

  • • *text* and **text** both turn bold, and _text_ turns italic.
  • • ~text~ with one tilde gives strikethrough, but ~~text~~ stays as typed.
  • • One backtick on each side gives inline code, and three backticks start a code block.
  • • > at the start of a line starts a quote.
  • • - or 1. at the start of a line starts a bulleted or numbered list.
  • • # , ## and ### at the start of a line turn that line into a heading. Slack stores it as a header block.
  • • [text](url) stays literal until you press Cmd+Shift+F (Ctrl+Shift+F), which turned it into a link named "text" in our test.
  • A pipe table and --- stay as typed. Each style has its own guide: bold and italics, bullet points, quotes and tables. Superscript has no syntax in Slack at all: ^2^ and <sup>2</sup> stay as typed, and only Unicode characters such as ² and ™ show raised.

Never appear "away" on Slack again

Cloud-based. No downloads. Works 24/7 even when your laptop is off.

Formatting toolbar missing: the Format messages with markup setting

Slack Preferences, Advanced, Input options: the Format messages with markup checkbox and its note that the formatting toolbar will not show in the composer

If the bold and italic buttons above the message box are gone and nothing formats while you type, Format messages with markup is on. Slack's own note under the setting says the text formatting toolbar will not show in the composer. To change it, click your profile picture, choose Preferences, select Advanced, and under Input options tick or untick Format messages with markup.

With it on, pasted markdown stays as characters in the box, and Slack formats the message when you send it. The result is not standard markdown:

The same pasted markdown sent with markup mode on: bold keeps a stray asterisk on each side, double tildes, the # heading and the pipe table stay literal, while lists, the quote and the code block format

**bold** came out bold with a stray * on each side, ~~strike~~, # Heading and the table stayed literal, and lists, the quote, the code block and the [text](url) link formatted. If you want standard markdown to work, turn the setting off.

Slack markdown not rendering in bot or API messages

Slack's developer docs list three switches that decide whether a bot's text is formatted:

  • • The top-level text of chat.postMessage uses mrkdwn by default, and "mrkdwn": false turns formatting off. We posted **double** *single* ~~two~~ ~one~ [x](https://slack.green) and # Heading through the API on 27 October. Only *single* (bold) and ~one~ (strikethrough) formatted, the URL inside [x](...) became a bare link, and - item lines stayed plain text. Write *bold* and <https://slack.green|text>.
  • • Block Kit text objects format only with "type": "mrkdwn". With "type": "plain_text", asterisks stay asterisks.
  • • The markdown block ("type": "markdown") reads standard markdown: **bold**, [text](url) links, # headings, lists and pipe tables. Use it for LLM output.
  • Slack also treats &, < and > as control characters. Text in angle brackets that looks like Slack syntax is parsed: we posted the log line user typed <!here> and <https://example.com|click> unescaped, and Slack stored an @here broadcast and a link named "click". Escape text you pass through:

    def slack_escape(text: str) -> str:
        """Escape the three characters Slack treats as control characters."""
        return text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
    
    
    line = "user typed <!here> and <https://example.com|click>"
    print("Log line: " + slack_escape(line))

    Output, and what Slack showed after we posted it:

    Log line: user typed &lt;!here&gt; and &lt;https://example.com|click&gt;

    The escaped version arrived as plain text with no broadcast and no link. Before a bot sends a message, paste its text into the Slack to Markdown side of the Markdown to Slack converter to preview how Slack renders it. The full syntax, with JSON for section blocks, the markdown block and rich text lists, is in Slack Block Kit markdown.

    FAQ

    Is there still an Apply markdown formatting shortcut in Slack?

    Cmd+Shift+F (Ctrl+Shift+F) still formatted a typed [text](url) link on 27 October, but the shortcuts panel no longer lists it. Pasted markdown no longer needs it, because Slack formats the paste by itself.

    Why does pasted *text* show in italics instead of bold?

    Slack reads pasted text as standard markdown, where single asterisks mean italic. Use **text** in the source, or type the line in Slack, where *text* turns bold.

    Always Active

    Stop Jiggling Your Mouse.

    Join hundreds of remote workers who never worry about their Slack status. Set it up once, stay green forever.

    Related Articles

    Guide

    How to Paste ChatGPT Into Slack With Formatting (Tested)

    Pasted as markdown text, a ChatGPT answer formats in Slack on its own, tables and code blocks included. Copied as formatted text, headings, tables and strikethrough break. Our 31 October paste test, with what Slack stored.

    Slack Green Team
    Guide

    Slack Markdown File Preview: What a .md File Shows in Slack

    Slack now renders an uploaded .md file: our 28 October 2026 test showed headings, bold text, checkboxes and a table in the file viewer. Mermaid blocks and HTML tags still show as text. Screenshots, the API output, and when a canvas is still the better choice.

    Slack Green Team
    Troubleshooting

    Slack Formatting Toolbar Missing? How to Get It Back

    The Slack formatting toolbar hides when you click Aa, and Slack remembers it. With Format messages with markup on, the toolbar and the Aa button both vanish. Tested fixes, the 10 buttons and their shortcuts.

    Slack Green Team