How to convert gfm strikethrough to commonmark
- Step 1Paste or drop the Markdown — Paste text or drop a single
.md/.mdx/.markdownfile containing~~strikethrough~~. One file per run (acceptsMultipleis false). - Step 2Know that strikethrough isn't isolated — This is the GFM-to-CommonMark converter (
needsOptions: false). Converting strikethrough also strips any task-list checkboxes and wraps bare URLs in the same pass. If your file has only strikethrough, only that changes. - Step 3Run the conversion — Click Run. Each
~~text~~span with no internal tilde becomes<del>text</del>. Adjacent spans are matched separately, so you won't get an accidental over-long strike. - Step 4Confirm your target allows HTML —
<del>is raw HTML. Renderers that allow inline HTML (most) will show the strike. A renderer that sanitises HTML for security strips the tag, leaving unstyled text — see the edge cases for the fallback. - Step 5Check spans with internal tildes — A struck span containing a stray
~(~~A ~ B~~) is not matched and stays as literal tildes. Remove or escape internal tildes first if you need those converted. - Step 6Download the output — Save the result as
.md. Output type ismarkdown; the<del>tags are part of the Markdown body as inline HTML.
Strikethrough conversion rules
Which tilde spans the converter rewrites. The pattern ~~([^~]+)~~ matches double-tilde runs with no internal tilde.
| Input | Converted? | Output |
|---|---|---|
~~text~~ | Yes | <del>text</del> |
~~a~~b~~c~~ | Yes (each span) | <del>a</del>b<del>c</del> |
~~A ~ B~~ (internal tilde) | No | ~~A ~ B~~ (unchanged) |
~~~~ (empty / four tildes) | No | ~~~~ (unchanged — no text) |
~single tilde~ | No | ~single tilde~ (GFM needs double) |
~~multi\nline~~ across a blank line | Depends | Matches only if no ~ between and on the matched span |
Tier limits
Markdown-family per-file limits. The character limit is independent of byte size.
| Tier | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 |
| Pro-media | 50 MB | 20,000,000 | 50 |
| Developer | 500 MB | Unlimited | Unlimited |
Cookbook
Real strikethrough spans run through the converter — single spans, adjacent spans, and the cases that don't match.
A single struck price
The most common use: a struck old price next to the new one. CommonMark would show the tildes; the tool emits <del> so the strike renders.
Input: Was ~~$99~~ now $79. Output: Was <del>$99</del> now $79.
Adjacent struck spans stay separate
The regex is non-greedy enough that two struck words separated by plain text become two <del> spans, not one over-long strike.
Input: ~~old~~kept~~gone~~ Output: <del>old</del>kept<del>gone</del>
A struck task item (other passes apply)
There is no strikethrough-only mode. A struck task item also has its checkbox removed in the same run.
Input: - [x] ~~obsolete step~~ Output: - <del>obsolete step</del>
Internal tilde blocks the match
Because the pattern is ~~([^~]+)~~, an internal ~ breaks the group and the span is left as literal tildes.
Input: Approx ~~5~10 units~~ removed. Output (unchanged): Approx ~~5~10 units~~ removed.
Single tildes are not strikethrough
GFM requires double tildes. A single ~ pair is left alone — it isn't strikethrough syntax.
Input: Path: ~user/file and a ~tilde~ word. Output (unchanged): Path: ~user/file and a ~tilde~ word.
Edge cases and what actually happens
Renderer strips raw HTML
CautionThe conversion produces <del> raw HTML. A renderer or CMS that sanitises HTML for security (common in user-content contexts) will strip the tag, leaving the inner text unstyled — the strike disappears. CommonMark itself allows raw HTML, but the destination decides whether to render it. If your target disallows HTML, keep the text as ~~ and accept the literal tildes, or use a destination-specific convention.
Span containing an internal tilde is skipped
Not matchedThe pattern ~~([^~]+)~~ only matches runs with no internal ~. A span like ~~5~10~~ (a tilde used as a range separator) won't convert and stays as literal tildes. Remove or escape the internal tilde, or split the span, if you need it struck.
Single tildes are not strikethrough
Not matchedGFM strikethrough requires double tildes. A single ~ pair (~word~) or a stray ~ in a file path (~/docs) is not touched. Only ~~...~~ is converted. This avoids corrupting home-directory paths and tilde-as-approximation usage.
Strikethrough inside inline code or fences
CautionThe strikethrough pass is a plain regex without code-fence awareness, so ~~text~~ written inside a code span or fenced block would also be rewritten to <del> — which is usually wrong inside code. If you have literal ~~ in code samples, escape them or expect them to be converted.
Conversion is one-directional
By designThere is no <del> → ~~ reverse mode. To go back to GFM strikethrough you'd find-replace <del>/</del> with ~~ manually. Keep your source if you might need to revert.
Other GFM passes run too
ExpectedThis is the full converter, so the same run strips task-list checkboxes and angle-wraps bare URLs. If your file has those, expect them to change alongside strikethrough. There is no way to convert strikethrough in isolation here.
Four tildes / empty strike
Not matched~~~~ has no text between the tilde pairs, so [^~]+ (one-or-more non-tilde) fails to match and it's left unchanged. An empty strikethrough has no meaning anyway.
Whitespace just inside the tildes is preserved
Preserved~~ text ~~ (spaces inside the tildes) still matches and becomes <del> text </del> — the leading/trailing spaces are kept inside the tag. GitHub trims these; the <del> form keeps them, which is usually harmless but visible if you inspect the HTML.
Free-tier size and character cap
413 size capFiles over 1 MB or 500,000 characters are rejected on free; the limits are checked independently. A long changelog of struck entries can hit the character cap first. Upgrade to Pro or split the file.
Frequently asked questions
What does this convert strikethrough to?
~~text~~ becomes <del>text</del> — raw HTML that CommonMark passes through. Any renderer that allows inline HTML displays it as struck text. CommonMark has no native strikethrough, so HTML is the spec-compatible route.
Does it only convert strikethrough?
No. This is the GFM-to-CommonMark converter; the same single pass also strips task-list checkboxes and wraps bare URLs in <>. There is no strikethrough-only mode. If your file has only strikethrough, only that changes.
What if my renderer strips HTML?
Then <del> is removed and the text shows unstyled — the strike is lost. Some renderers sanitise HTML for security. If yours does, keep the source as ~~ (and accept literal tildes in a strict renderer) or use a destination-specific strikethrough convention manually.
Why didn't my strikethrough convert?
Most likely it contains an internal tilde — the pattern ~~([^~]+)~~ only matches spans with no ~ inside. ~~5~10~~ won't match. It could also be single tildes (~word~), which aren't GFM strikethrough. Use double tildes with no internal tilde.
Are adjacent struck words handled correctly?
Yes. ~~old~~kept~~gone~~ becomes <del>old</del>kept<del>gone</del> — two separate spans, not one over-greedy strike. The matching is non-greedy on the inner text.
Will it strike text inside code blocks?
Possibly. The strikethrough pass is a plain regex without code-fence awareness, so ~~text~~ inside a code span or fence would also be rewritten to <del>. If you have literal double tildes in code samples, escape them or expect conversion.
Can I convert `<del>` back to `~~`?
Not with this tool — there's no reverse mode. Find-replace <del> and </del> with ~~ manually if you need to go back. Keep your original file if reversal is likely.
Does it touch single tildes or file paths?
No. Only double-tilde ~~...~~ spans are converted. A single ~ (as in ~/docs or ~approx) is left alone, so home-directory paths and tilde-as-approximation are safe.
Are there any options?
No. The tool has needsOptions set to false — no checkboxes, dropdowns, or presets. The strikethrough rewrite always runs together with the task-list and autolink passes.
Is my Markdown uploaded?
No. The conversion runs in your browser via the shared converter engine; your text is not sent to a server during conversion. Only an anonymous processed-file counter is recorded for signed-in stats.
How big a file can I convert?
Free: 1 MB / 500,000 characters / 1 file. Pro: 10 MB / 5,000,000 / 10. Pro-media: 50 MB / 20,000,000 / 50. Developer: 500 MB, unlimited. Character count is enforced separately from byte size.
What output format do I get?
Markdown (.md) with the <del> tags inline. It's still a Markdown file — the <del> spans are raw HTML embedded in the Markdown body, which is valid CommonMark.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.