How to strikethrough text in markdown

Updated

To strike through text in markdown, wrap it in double tildes: ~~like this~~ renders as like this.

The meeting is on ~~Tuesday~~ Wednesday.

The meeting is on Tuesday Wednesday.

Is strikethrough part of standard markdown?

No — original markdown and the CommonMark spec have no strikethrough. The ~~tildes~~ form is the GFM strikethrough extension and is now supported almost everywhere developers write markdown: GitHub, GitLab, Discord, Reddit, Obsidian, Discourse, Pandoc, and this site.

If your renderer is strict CommonMark and tildes stay visible, fall back to HTML, which any markdown processor that allows inline HTML will render:

<del>deleted text</del> or <s>no longer accurate</s>

Use <del> for "this was removed/changed" (screen readers announce it as deleted) and <s> for "no longer accurate".

Does a single tilde work?

Sometimes — and that's the problem. The GFM spec allows one or two tildes, so GitHub renders single-tilde ~text~ as strikethrough too, but Discord, Obsidian and most other processors don't, and Pandoc uses single tildes for subscript (see the subscript guide). Always use double tildes; they work everywhere the feature exists. The only places single tildes are required are the apps with their own syntax: Slack, WhatsApp, Telegram and Notion.

How do you strikethrough in Slack?

Slack's message box isn't real markdown — it uses its own formatting where a single tilde does strikethrough: ~like this~. Double tildes in Slack render as literal characters. (Same trap in WhatsApp: single tilde.)

Which strikethrough syntax does each app use?

The ~~double tilde~~ form covers almost every markdown renderer; chat apps and a few work tools use their own markers:

AppStrikethrough syntaxNotesSource
GitHub, GitLab, Bitbucket~~text~~GFM; GitHub also accepts ~text~GitHub styling text
Discord~~text~~Single tilde does nothingDiscord Markdown Text 101
Slack~text~Double tildes show literallySlack formatting
WhatsApp~text~Same as SlackWhatsApp formatting sheet
Telegram~text~ (MarkdownV2, bots)Apps use the format menuTelegram markdown sheet
Reddit~~text~~Both the markdown and fancy editorsReddit markdown sheet
Obsidian~~text~~Shown struck in Reading view; <s> and <del> also renderObsidian syntax
Notion~text~ while typing, single tildeAlso ⌘/Ctrl+Shift+S; ~~text~~ in an imported .md file converts correctlyNotion shortcuts
Jira Cloud~~text~~ converts as you typeLegacy wiki markup (Jira Server, Confluence) is -text-Jira shortcuts
Trello, Typora, Bear~~text~~Card descriptions, checklists and comments in Trello—
MDX (Docusaurus, Astro)~~text~~ with remark-gfm; <del> alwaysPlain MDX has no strikethroughMDX docs
Pandoc~~text~~The strikeout extension, on by default; converts to real strikethrough in docx, LaTeX and ODTPandoc manual
Google Docs, Wordno markdownUse ⌘/Ctrl+Shift+X (Docs) or the toolbar—

The Slack, Discord and Notion sheets cover the rest of each app's syntax.

How do you strikethrough in Trello?

Trello's card descriptions, checklists and comments accept markdown, so wrap the text in double tildes: ~~done~~. There is no toolbar button for it — type the tildes. Checklist items that you tick off are struck through automatically, so you rarely need it there.

Why isn't my strikethrough working?

Four causes account for nearly every case:

  1. A space inside the tildes — ~~ text ~~ doesn't render. The tildes must touch the text: ~~text~~.
  2. Single tildes in an app that needs two (Discord, Obsidian), or double tildes in one that needs a single (Slack, WhatsApp).
  3. Strict CommonMark renderer (some static-site generators, Pandoc by default) — strikethrough is a GFM extension. Enable the extension or use <del>text</del>.
  4. Inside a code span or code block — markdown is never parsed there, so `~~text~~` shows the tildes on purpose.

What is the difference between <del> and <s>?

Both render as a line through the text, and both are on GitHub's HTML allowlist, but they mean different things. <del> marks text that was removed in an edit (its pair is <ins> for additions), and it can carry cite and datetime attributes recording why and when. <s> marks text that is no longer accurate or relevant but was never "edited out": an old price, a sold-out item. Markdown's ~~tildes~~ compile to <del> on GitHub and in most GFM renderers, and to <s> in some (Obsidian, Pandoc's HTML writer), which is a detail only stylesheets and assistive tech notice.

TagMeaningGitHubPairs with
<del>Deleted in a revisionRendered<ins>
<s>No longer accurateRenderednothing
<strike>Obsolete HTML; same look as <s>Renderedavoid
~~text~~GFM; renders as <del> on GitHubRendered**, *, links

Is strikethrough accessible?

Not by default. Most screen readers do not announce <del>, <s> or a struck-through span unless the user turns on verbose formatting, so a reader who cannot see the line hears "The meeting is on Tuesday Wednesday" and has to guess. Three habits fix that: keep the replacement next to the struck text and make the sentence read correctly without the strike ("Tuesday Wednesday" is fine; a struck paragraph with no replacement is not); say what changed in words when it matters ("Update: moved to Wednesday"); and in task lists, rely on the checkbox rather than striking the text, since the [x] state is announced. The WAI guidance on text-level semantics covers why visual-only formatting needs a textual backup.

Yes — it's inline formatting, so it works anywhere inline text does: table cells (| ~~old price~~ $9 |), headings (## ~~Draft~~ Final), link text ([~~old page~~](/new)) and list items. It doesn't span across paragraphs; open and close the tildes inside each one.

Can you combine strikethrough with bold or italic?

Yes — nest the markers, keeping them symmetrical:

~~**bold and struck**~~ and ~~*italic and struck*~~

bold and struck and italic and struck

A common real-world pattern is striking through completed items in a task list: - [x] ~~Ship v1~~. The bold and italic guide covers the marker-nesting rules, and the highlight guide is the counterpart when you want to draw attention to text rather than cross it out. For the rest of the syntax see the markdown cheat sheet.

Keep going