Why markdown looks broken in Slack, and how to fix it
Markdown looks broken in Slack because Slack does not use standard markdown. Its formatting follows its own rules, so **bold**, # headings, [text](url) links and pipe tables often arrive as literal symbols. The fix is to share a rendered link or to paste rich text instead.
This guide explains what Slack does with markdown, according to its own documentation, and two ways to get a readable result.
What Slack actually supports
Slack documents two different things, and it helps to keep them apart. All of the following is as of 2026-10-09.
Messages you type. Slack’s help article Format your messages describes a formatting toolbar with bold, italics, underline, strikethrough, code, block quote, code block, ordered list and bulleted list. Headings and tables are not on that list. The toolbar is the default; a separate article, Set your message formatting preference, explains that you can turn on “Format messages with markup” under Preferences, Advanced, Input options to type markup instead. With that preference on, Slack states that “Messages that you copy and paste will appear in plain text.”
Messages that apps post. Slack’s developer documentation, Formatting message text, describes a syntax called mrkdwn and says it is “inspired by markdown, but uses different rules”. In mrkdwn, bold is *bold* with single asterisks, strikethrough is ~strike~ with single tildes, and links are written <https://example.com|label> rather than [label](https://example.com). The same page says there is no specific list syntax in app-published text.
Slack also documents a markdown block for apps, which renders standard markdown including headings and tables, with a limit of 12,000 characters across the markdown blocks of one message. That block is something an app’s developer uses when posting. It does not change what happens when a person pastes markdown into the message box.
Why pasted markdown breaks
Most markdown you want to share today was not written for Slack. It comes from a README, a notes app or an AI assistant, and it uses standard syntax: double asterisks for bold, # for headings, pipes for tables, square brackets for links.
When that text goes into the Slack composer, the parts that have no equivalent in Slack’s formatting have nothing to turn into. A heading stays a line starting with #. A table stays rows of pipes and dashes, and in a proportional font the columns no longer line up. Double asterisks do not match the single-asterisk rule. The longer and more structured the document, the more of it arrives as raw syntax.
Rewriting the text into Slack’s syntax works for a three-line message. For a long document, an AI answer with a table, or a spec with sections, it is not worth the time, and some of the structure (headings, tables) has no target to rewrite into.
Fix 1: share a rendered link
Put the markdown somewhere that renders it, and post a link.
- Open sharemd.net and paste the markdown into the editor.
- Check the Preview: headings, tables, task lists, footnotes and highlighted code render as intended. Mermaid diagrams and KaTeX math render too.
- Select Share and copy the read-only link.
- Paste the link into Slack.
The link unfurls in Slack with the document’s title, a short description and a sharemd.net card, so the channel sees what the document is before anyone clicks. To control the title, start the document with a # heading or a frontmatter block with title:.
This keeps the channel short and the document intact. No account is needed to create the link or to read it. The document expires 15 days after creation, which suits a discussion that is settled within days. Shared documents are not indexed by search engines, but anyone with the link can read them, so leave out credentials and sensitive data.
Fix 2: paste rich text with Copy Formatted
When the content should live inside the Slack message itself, paste rendered text rather than markdown source.
Paste the markdown into sharemd.net and use Copy Formatted. It copies the rendered document as rich text. Pasted into the Slack composer, rich text carries formatting rather than symbols.
Two limits apply, both from Slack’s side. Only formatting Slack’s composer supports can come through, so expect bold, italics, lists, quotes and code to survive better than tables or heading sizes. And if you have turned on “Format messages with markup”, Slack says pasted messages appear as plain text, so this method works with the default toolbar setting.
Which fix to use
- Use a link for anything long, anything with tables or diagrams, and anything people need to read carefully or come back to during the week.
- Use Copy Formatted for short content that belongs in the message: a summary, a short list of steps, a quick answer.
To check how a piece of markdown renders before choosing, paste it into the markdown preview. For the general case of sharing markdown with a link, see share markdown online.