Markdown to Slack / Teams Converter

Rewrites CommonMark Markdown into Slack's and Microsoft Teams' "mrkdwn"-style chat formatting: single-asterisk bold, underscore italics, single-tilde strikethrough, and platform-specific link syntax, with a mode toggle since the two platforms' formatting quirks differ slightly. A free online tool from Staaarter, right in your browser.

Runs locallyUpdated 2026-07-26

Overview

Introduction

Markdown written for a README or docs site doesn't paste cleanly into Slack or Teams: both apps parse a formatting dialect that looks like Markdown but differs in exactly the ways that matter, bold, italics, strikethrough, and links.

This rewrites standard Markdown into each platform's actual syntax, so copy-pasting a changelog entry, release note, or doc excerpt into a chat message renders the way it was meant to instead of showing literal asterisks and brackets.

What Is Markdown to Slack / Teams Converter?

A line-by-line converter from CommonMark inline syntax to Slack/Teams "mrkdwn": `**bold**`/`__bold__` becomes `*bold*`, `*italic*` becomes `_italic_` (underscore italics are already correct and left alone), `~~strike~~` becomes `~strike~`, and, in Slack mode, `[text](url)` links become `<url|text>`.

Headings have no chat-message equivalent, so `#`/`##`/etc. lines are converted to bold text instead of being dropped, a reasonable fallback that at least preserves emphasis.

How Markdown to Slack / Teams Converter Works

Input is processed one line at a time. Fenced code block lines (between ``` markers) pass through completely untouched, since code formatting is identical across CommonMark, Slack, and Teams.

Inline code spans on non-code-block lines are protected from the emphasis rewriting rules first, so `` `**not bold**` `` inside backticks is never rewritten, then bold, strikethrough, and italic markers are converted, and finally (Slack mode only) links are rewritten to `<url|text>` syntax.

Lines starting with `#` through `######` are treated as headings: their text (after also converting any inline formatting inside them) is wrapped in single-asterisk bold instead.

When To Use Markdown to Slack / Teams Converter

Use it when pasting a Markdown changelog, release note, or doc excerpt into a Slack or Teams channel and you want it to actually render formatted instead of showing raw asterisks.

It's also useful for bots or scripts that generate Markdown-formatted messages and need to post them to a Slack or Teams webhook, which expects each platform's own formatting dialect.

Features

Advantages

  • Handles the exact points where Slack/Teams formatting diverges from CommonMark, bold markers, italic markers, and link syntax, rather than a generic strip-all-formatting approach.
  • A Slack/Teams mode toggle accounts for the one meaningful difference between the two platforms: how links are written.
  • Leaves code spans and fenced code blocks untouched, since both platforms already render those identically to CommonMark.

Limitations

  • Markdown tables have no chat-message equivalent in either platform and are passed through as raw, unrendered Markdown text.
  • Image syntax (`![alt](url)`) also has no chat equivalent and passes through unchanged rather than being converted into an unfurled link.
  • Ordered (numbered) lists aren't auto-numbered by Slack the way Teams renders them; the list text is left as-is, so Slack messages may show the literal "1. ", "2. " text rather than a rendered numbered list.
  • Nested or overlapping emphasis on the same line (e.g. `*italic **and bold** together*`) is a CommonMark edge case this line-based converter doesn't fully guarantee handling; simple, non-overlapping emphasis is the reliable case.

Examples

Bold, italic, a link, and a heading (Slack mode)

Input

## Release Notes

This update adds **dark mode** and fixes an *annoying* bug. See the [full changelog](https://example.com/changelog).

Output

*Release Notes*

This update adds *dark mode* and fixes an _annoying_ bug. See the <https://example.com/changelog|full changelog>.

The heading becomes bold text, **bold** becomes single-asterisk bold, *italic* becomes underscore italic, and the link becomes Slack's <url|text> syntax.

Best Practices & Notes

Best Practices

  • Pick Teams mode when pasting into Microsoft Teams specifically, standard [text](url) links render there without conversion, unlike Slack.
  • Avoid relying on Markdown tables in content headed for chat; reformat the data as a short bulleted list instead, since tables won't render.
  • Preview the converted text before sending to a busy channel, especially for content with nested emphasis, which is the one case this converter doesn't guarantee handling perfectly.

Developer Notes

Implemented as a per-line regex pipeline rather than a full parser: inline code spans are extracted to placeholders first (protecting them from later substitutions), then `**bold**`/`__bold__` is extracted to a second placeholder (so the italic pass's single-`*` regex can't re-match the bold markers), then `~~strike~~` and single-`*` italic are rewritten, the bold placeholder is restored as `*bold*`, and (Slack mode only) `[text](url)` links are rewritten to `<url|text>`, before code spans are restored last. Fenced code block detection is tracked across lines with a simple ``` toggle so code content is never touched by any of the above.

Markdown to Slack / Teams Converter Use Cases

  • Pasting a Markdown release note or changelog entry into a Slack or Teams announcement
  • Formatting a bot-generated or webhook-posted message so it renders correctly in the destination chat app
  • Converting doc excerpts for a support or on-call channel without manually rewriting emphasis syntax by hand

Common Mistakes

  • Using Slack mode for a Teams message (or vice versa); Teams renders standard [text](url) links as-is, so converting them to Slack's <url|text> syntax there just shows the raw angle-bracket syntax.
  • Expecting Markdown tables or images to render after conversion; both pass through as literal text since neither platform supports them in chat messages.

Tips

  • If a converted message looks wrong in Slack, double check it wasn't accidentally run in Teams mode, the link syntax is the one place the two modes differ.
  • For messages with a table, convert the surrounding text here and rebuild the table's data as a short bulleted list by hand, that's the most reliable way to keep it readable in chat.

References

Frequently Asked Questions