Strikethrough in Markdown crosses out text with a horizontal line, written by wrapping the text in double tildes, like ~~this~~. It is an inline element, so it works inside sentences, lists, and table cells. Strikethrough is a GitHub Flavored Markdown extension, not part of core CommonMark, and some flavors use or require a single tilde.
Markdown strikethrough syntax reference
| Goal | Syntax |
|---|---|
| Strikethrough | ~~text~~ |
| Single tilde (some flavors) | ~text~ |
| Inside a sentence | A ~~wrong~~ right answer |
| Combine with bold | ~~**text**~~ |
Markdown strikethrough key facts
- Wrap text in double tildes,
~~like this~~, to cross it out, with no spaces just inside the tildes. - Strikethrough is a GitHub Flavored Markdown extension, not part of core CommonMark, so a strict CommonMark renderer shows the tildes as literal text.
- Double tildes are the portable form: every renderer that supports strikethrough at all supports
~~. - The double tilde compiles to a
<del>element in most GFM renderers, though Pandoc may emit<s>instead. - Slack is the outlier: it uses a single tilde,
~text~, so double tildes may show as literal characters there. - A single tilde can also mean subscript in Pandoc and MultiMarkdown, which is why the double tilde is the safer choice.
Treat strikethrough as an extension
Double-tilde strikethrough is defined by GFM and supported by many editors, but it is not part of core CommonMark. Unsupported renderers leave the tildes visible.
Use strikethrough for revisions, removed options, or completed items only when the surrounding text still explains the current state. Do not use it for information that should be deleted for legal, security, or accessibility reasons. If the document must remain portable, rewrite the sentence or use trusted inline HTML with <del>. For completion state, a task list is usually clearer.
Basic syntax
Wrap the text you want to cross out in a pair of double tildes, with no spaces between the tildes and the text.
Markdown
This project is ~~delayed~~ on track.
Rendered output
This project is ~~delayed~~ on track.
HTML output
<p>This project is <del>delayed</del> on track.</p>
Strikethrough is inline, so it flows within a paragraph. The double tilde is the safe, portable form: every renderer that supports strikethrough at all supports ~~. Do not put spaces just inside the tildes, since ~~ text ~~ usually does not render.
Single tilde variants
Some flavors and renderers also accept a single tilde, ~text~, as strikethrough. This is not universal. In flavors that use the single tilde for subscript, a lone ~ means something different, so it is safer to stick with the double tilde.
Markdown
~~double tilde, widely supported~~
~single tilde, renderer dependent~
Rendered output
~~double tilde, widely supported~~
~single tilde, renderer dependent~
If the single tilde example above does not render as strikethrough, your renderer either does not support it or maps a single tilde to something else, such as subscript. Prefer the double tilde to avoid the ambiguity.
Strikethrough with other inline formatting
Strikethrough combines with bold, italic, and inline code. Nest the markers so each pair opens and closes cleanly.
Markdown
~~**Struck and bold**~~
~~*Struck and italic*~~
You can strike a ~~`code snippet`~~ too.
Rendered output
~~Struck and bold~~
~~Struck and italic~~
You can strike a ~~code snippet~~ too.
Inline code inside strikethrough shows the code with a line through it in most renderers. The content of the code is still literal, so no Markdown inside the backticks is parsed.
Strikethrough in lists and tables
Because it is inline, strikethrough works inside list items and table cells wherever inline formatting is allowed.
Markdown
- [x] ~~Old task, no longer needed~~
- [ ] Current task
| Plan | Status |
| ----- | ------------- |
| Alpha | ~~Cancelled~~ |
| Beta | Active |
Rendered output
- [x] ~~Old task, no longer needed~~
- [ ] Current task
| Plan | Status |
|---|---|
| Alpha | ~~Cancelled~~ |
| Beta | Active |
Escaping tildes
To show a literal tilde without triggering strikethrough, escape it with a backslash, or use a single tilde where a pair would be needed.
Markdown
The file is at \~\~backups\~\~ on the server.
Approximate value: about \~100 users.
Rendered output
The file is at \~\~backups\~\~ on the server.
Approximate value: about \~100 users.
Flavor differences
Strikethrough is an extension. Core CommonMark does not include it, so a strict CommonMark renderer shows the tildes as literal characters. Support in the other flavors ranges from native to extension gated to not built in.
| Flavor | Strikethrough support | Notes |
|---|---|---|
| CommonMark | No | Not in the core spec. Tildes render as literal text unless a strikethrough extension is enabled. |
| GitHub Flavored Markdown (GFM) | Yes | Defined as a GFM extension. Uses double tildes and outputs a del element. |
| MultiMarkdown | Yes | Supports double tilde strikethrough. |
| Markdown Extra | Verify | Not part of the original Markdown Extra syntax. Some PHP Markdown builds add it, so verify in your renderer. |
| Pandoc | Yes | Supported through the strikeout extension using double tildes. Pandoc may output an s element rather than del. |
Strikethrough originated in GitHub Flavored Markdown, which added it as an extension to CommonMark. CommonMark itself does not include it. MultiMarkdown supports the double tilde form. Pandoc supports it through the strikeout extension and can also read a single tilde when configured, though it may emit an s element instead of del, which looks the same but carries a slightly different meaning. Markdown Extra did not include strikethrough in its original syntax, so its cell is marked Verify: some PHP Markdown parsers add it, but you should confirm in the specific tool.
Other platforms (Slack, Discord, Reddit, Obsidian, Notion)
- Slack: uses a single tilde,
~text~, for strikethrough, not double tildes. - Discord: uses double tildes,
~~text~~, matching GFM. - Reddit: uses double tildes,
~~text~~, in the Markdown editor. - Obsidian: uses double tildes,
~~text~~, following GFM. - Notion: supports strikethrough, typically applied through its formatting menu or shortcut rather than pasted tildes.
Slack is the notable outlier with its single tilde. If you paste GFM ~~text~~ into Slack, it may show the extra tildes as text. For the full comparison of how flavors differ across all elements, see Markdown flavors.
How Markdific renders it
Markdific renders double tilde strikethrough as struck-through text, crossing the wrapped content with a horizontal line. For the most reliable result across renderers, use the double tilde form.
Try it in the Markdific online editor.
Common mistakes and gotchas
- Spaces inside the tildes.
~~ text ~~usually does not render. Keep the tildes tight against the text:~~text~~. - Relying on the single tilde. A single tilde is renderer dependent and may mean subscript elsewhere. Use double tildes for portability.
- Expecting strikethrough in CommonMark. Core CommonMark shows the tildes as text. You need GFM or another flavor that supports the extension.
- Pasting double tildes into Slack. Slack uses a single tilde. Double tildes may show literal characters there.
- Unbalanced tildes. Every opening
~~needs a matching closing~~. A stray pair can strike more text than intended or nothing at all. - Mixing markers incorrectly. When combining with bold or italic, keep each pair of markers fully nested so they open and close in order.
Best practices
- Use double tildes,
~~text~~, as your default. They are the most widely supported form. - Keep the tildes directly against the text with no inner spaces.
- Remember strikethrough is an extension. In portable documents it may show as literal tildes in strict CommonMark.
- Adjust for the target platform. Slack expects a single tilde, while most others expect double.
- Use strikethrough to mark removed or superseded content, then add the replacement nearby for clarity.
- Escape tildes with a backslash when you need a literal tilde.
HTML equivalent
Strikethrough compiles to a <del> element in most GFM renderers, which browsers display with a line through the text. Some renderers, including Pandoc, emit an <s> element instead. Both look the same, but <del> conveys deleted content while <s> conveys content that is no longer accurate.
Markdown
~~Removed line~~
HTML output
<p><del>Removed line</del></p>
FAQ
How do you strikethrough text in Markdown? Wrap the text in double tildes, like two tildes, your text, then two tildes. This produces text with a line through it in renderers that support the strikethrough extension.
Is strikethrough part of standard Markdown? No. Strikethrough is a GitHub Flavored Markdown extension. It is not in core CommonMark, and support in Markdown Extra should be verified per renderer.
Can you use a single tilde for strikethrough? Sometimes. Some renderers accept a single tilde, but it is not universal and may mean subscript in other flavors. Double tildes are the safe, portable choice.
Why is my strikethrough not working? Common causes are spaces just inside the tildes, unbalanced tildes, or a renderer that does not support the extension, such as core CommonMark. Also check that you are using double tildes on platforms that expect them.
Does strikethrough work on GitHub? Yes. GitHub Flavored Markdown supports strikethrough with double tildes and renders it as a del element.
What is the difference between the del and s elements? Both draw a line through text. The del element marks content that was removed, while the s element marks content that is no longer accurate or relevant. Renderers differ on which one they emit.
How do you strikethrough in Slack? Slack uses a single tilde around the text, not double tildes. Pasting GFM double tildes into Slack may show the extra characters as literal text.
Can you combine strikethrough with bold or italic?
Yes. Nest the markers so each pair opens and closes cleanly, for example ~~**struck and bold**~~. Keep the pairs fully nested so they do not overlap.
How do you show a literal double tilde without strikethrough?
Escape each tilde with a backslash, writing \~\~text\~\~, or wrap the text in inline code with backticks, where Markdown parsing is turned off.
Does strikethrough work inside a table cell or list item? Yes. Strikethrough is inline, so it works anywhere inline formatting is allowed, including table cells and list items.
How do you cross out text in Obsidian?
Obsidian follows GitHub Flavored Markdown, so wrap the text in double tildes, ~~like this~~. The single tilde is not the strikethrough marker in Obsidian.
Sources and compatibility references
Use these primary references for syntax rules. Renderer behaviour can still vary by version and configuration, so preview important documents in their final destination.
Related pages
- Markdown documentation hub
- Emphasis: bold and italic
- Task lists in Markdown
- Escaping characters in Markdown
- Markdown flavors compared
