Teams Markdown: Syntax That Works in Microsoft Teams
September 11, 2026 · 9 min read
Teams Markdown: Formatting That Actually Works in Microsoft Teams
Teams markdown works only while you type. The compose box converts *bold*, _italic_, # headings, lists, links, and triple-backtick code blocks as you enter them, but pasted Markdown arrives as plain text with the symbols still showing. This guide gives you the exact Teams syntax, explains why it breaks, and shows the paste workflow that keeps formatting, tables included.
Why Teams Markdown Stops Working When You Paste
Microsoft Teams doesn't store Markdown. The compose box is a rich-text editor that watches your keystrokes and swaps recognised patterns for formatting the moment you type them. Type *done* and the word turns bold as you close the second asterisk. That conversion is a typing shortcut, not a parser.
Paste a block of Markdown from a .md file and nothing triggers. Teams receives plain text, so you get literal asterisks and hashes in the sent message. That single detail explains nearly every "Teams markdown not working" thread.
The fix follows from the cause. Teams accepts rich text from the clipboard, so if you paste formatted HTML instead of raw Markdown, the bold, lists, links, and tables survive. The workflow section below walks through it with our editor.
This makes Teams the odd one out among chat apps. Discord parses the whole message on send, so pasted Markdown works there, and it uses standard double-asterisk bold. Our Discord Markdown cheat sheet shows how far that flavour goes. Slack sits closer to Teams: single asterisks for bold, conversion while typing, and its own name for the system (mrkdwn).
The Exact Teams Markdown Syntax (Compose Box)
Microsoft's Teams Markdown support page lists the supported actions. This is the syntax the page documents for the desktop and web clients, and it converts as you type.
| Formatting | Type this in Teams | Standard Markdown equivalent |
|---|---|---|
| Bold | *bold text* | **bold text** |
| Italic | _italic text_ | *italic text* or _italic text_ |
| Strikethrough | ~struck text~ | ~~struck text~~ |
| Heading 1 to 3 | # Text, ## Text, ### Text | Same |
| Bulleted list | * Item or - Item | Same |
| Numbered list | 1. Item | Same |
| Link | [Text](https://example.com) | Same |
| Inline code | `code` | Same |
| Code block | ``` then Enter | Same |
| Blockquote | > at the start of a line | Same |
Notice the first row. Teams uses a single asterisk for bold, where every other Markdown flavour uses two. Type the standard **bold** in Teams and the usual report is bold text wrapped in stray asterisks: Teams consumes the inner pair and leaves the outer pair as characters. This is the number one cause of messy Teams messages from people who write Markdown elsewhere. Our bold and italic guide covers the standard convention Teams departs from.
Microsoft's own page admits the mismatch: it says the feature doesn't fully match standard Markdown and some formatting may behave differently. Headings 4 through 6, tables, task lists, images, and horizontal rules do nothing in the compose box.
How Do You Send Code in Microsoft Teams?
Code blocks are the most reliable Teams Markdown feature and the one that survives pasting, because Teams treats a code block as a distinct message element. Microsoft's code block help page documents three ways to open one:
- Type
/codein the compose box. - Press Ctrl + Shift + Alt + B on Windows and web, or Cmd + Shift + Option + B on Mac.
- Type three backticks and press Enter.
Any of these opens a monospace block with a language picker. Paste your snippet inside it and the indentation stays intact. For inline code, wrap a term in single backticks the way you would anywhere else.
Here is a message that uses everything the compose box understands.
# Deploy checklist
*Status:* _in progress_
1. Run `npm test`
2. Tag the release
3. ~Notify QA~ done
> Rollback plan is in the wiki
[Release notes](https://example.com/notes)
Typed line by line, Teams renders a heading, bold and italic words, a numbered list with inline code, strikethrough, a quote, and a link. Pasted in one go, the same text shows the raw symbols.
The Paste Workflow That Keeps Formatting and Tables
Since Teams keeps rich text from the clipboard, the answer to pasted Markdown is to convert it first. Write in a Markdown editor, copy from the rendered preview, and paste that into Teams. The compose box receives HTML and keeps headings, bold, lists, links, and tables.
Here's the process with our editor:
- Draft the message in the editor below using standard Markdown, double asterisks and all.
- Select the rendered preview on the right and copy it.
- Click into the Teams compose box and paste.
- Check the result, then send.
We prefer this route for anything longer than a sentence, because it means writing standard Markdown everywhere and letting the preview do the translation. Community scripts that convert Markdown to HTML and put it on the clipboard work on the same principle; the editor route needs no scripting.
Try it with the table below, since a Markdown table is the single most requested thing Teams won't render from the compose box. Copy the preview, not the source.
If the pasted table loses its borders, use the table button in the Teams formatting toolbar to insert an empty table and paste cell by cell. Our Slack table guide covers the same problem in Slack, where the workaround is different.
One limitation of the paste approach: Teams drops HTML it doesn't understand, so custom colours, nested tables, and images embedded as data URLs won't survive. Keep the pasted content to headings, emphasis, lists, links, and simple tables.
Does Microsoft Support Markdown on Mobile and in Bots?
The support page is blunt about phones: you can view but not generate Markdown-formatted messages on your mobile device. The compose box on iOS and Android has the formatting toolbar instead, so use the bold button there.
Bots are a separate surface with their own rules. Messages sent through Adaptive Cards support a smaller CommonMark subset, documented on Microsoft Learn: **bold** with two asterisks, _italic_, bulleted and numbered lists, and [links](url). Headers, tables, and images are listed as not supported. So a bot developer writes double-asterisk bold while a chat user writes single-asterisk bold, on the same platform.
A minimal card body from the same docs looks like this, with the Markdown inside the text property.
{
"type": "TextBlock",
"text": "Build **passed** on _main_. See [the log](https://example.com/log)",
"wrap": true
}
If your bot posts plain messages rather than cards, test the exact strings in a private chat first. In our experience the safest bot formatting is bold, links, and lists, with everything else left as plain text.
The third surface is new. In April 2026 Microsoft announced native Markdown support in SharePoint and OneDrive. The browser editor offers View, Edit, and Split modes, and it renders tables, checkboxes, links, and code blocks.
A .md file shared into a Teams channel therefore opens in a proper renderer, even though the chat box still can't parse the same syntax. If you searched for "microsoft markdown" hoping for a full editor, that SharePoint viewer is the closest thing Microsoft ships.
Common Teams Markdown Mistakes
Double asterisks for bold. **important** sends as bold text with a stray asterisk on each side. Use one asterisk in the compose box, or paste rendered text.
Pasting a Markdown table. Pipes and dashes arrive as literal characters. Convert the table to HTML first (copy the preview from the editor) or use the toolbar's table button. If you need to build the table quickly, our Markdown table guide has the syntax and a generator.
Expecting Markdown after sending. Editing a sent message re-opens the rich-text box, not a Markdown source view. There's no way to see or fix the underlying syntax once the message is converted, so check the preview before you hit Enter.
Teams Markdown FAQ
Teams markdown is a typing aid with its own single-asterisk dialect, not a parser, and once you know that the failures make sense. Type the Teams syntax for quick messages and use /code for snippets. For anything longer, or anything with a table, draft it in the editor, copy the rendered preview, and paste rich text. Your formatting arrives intact and you never have to fight the compose box again.