How to remove github-specific markdown extensions
- Step 1Stage one source file at a time — Paste a file or drop a single
.md/.mdx/.markdown. The converter does not accept multiple files in one run (acceptsMultipleis false), so a repo migration is one file per pass — script it against the API for bulk work. - Step 2Confirm there is nothing to configure — The tool has no options (
needsOptions: false). The three transforms always run together. You cannot disable the autolink pass or keep checkboxes — if you need a single transform only, plan to revert that change after conversion or use a find-replace tool. - Step 3Run the strip pass — Click Run. The engine removes task checkboxes, rewrites strikethrough to
<del>, and angle-wraps bare URLs. It is regex-based, not a full parse, so unrelated GFM (tables, footnotes) is preserved unchanged. - Step 4Diff against the source — Compare input and output before committing. The only differences should be in the three target constructs. A clean diff confirms the migration didn't touch anything unexpected — important when rewriting hundreds of files.
- Step 5Deal with the un-stripped extensions — Pipe tables and footnotes remain. Most CommonMark renderers accept pipe tables via an extension; footnotes are not in CommonMark, so decide whether to keep them (and enable a footnote extension downstream) or remove them manually. Strip emoji shortcodes with the Emoji Remover.
- Step 6Validate in the target toolchain — Run the output through Pandoc strict mode or
cmarkto confirm it parses the way your new pipeline expects. Output type ismarkdown; save and commit once the target renders correctly.
GFM extensions and how this tool treats them on migration
What gets stripped/rewritten versus what survives. Plan your migration around the 'Survives' rows — those need a downstream extension or a separate tool.
| GFM extension | Treatment here | Migration action you may still need |
|---|---|---|
| Bullet task lists | Checkbox stripped → plain bullet | None — fully handled |
| Strikethrough | Rewritten to <del>...</del> | Ensure target allows raw HTML |
| Bare autolinks | Wrapped in <...> | Pre-wrap URLs with ) or trailing punctuation |
| Pipe tables | Survives unchanged | Enable a table extension downstream |
| Footnotes | Survives unchanged | Enable footnote extension or remove manually |
| Emoji shortcodes | Survives unchanged | Use the Emoji Remover tool |
Alert blockquotes (> [!NOTE]) | Survives unchanged | Renders as plain blockquote downstream |
Tier limits relevant to a migration
Per-file limits from the markdown tier table. For a repo, the Pro batch count and larger char limit matter most.
| 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
Migration-flavoured before/after, taken from typical GitHub wiki and docs pages moving to a strict-CommonMark site generator.
A migration-ready CHANGELOG entry
Deprecation notes often use strikethrough and the issue tracker uses bare URLs. Both get rewritten so the entry survives the move to a strict renderer.
Input: ## v2.0 - [x] New API - [ ] ~~Deprecated endpoint~~ removed Details: https://example.com/changelog Output: ## v2.0 - New API - <del>Deprecated endpoint</del> removed Details: <https://example.com/changelog>
Pipe table survives the migration as-is
Tables are not part of the strip pass. The table moves unchanged; enable a pipe-table extension in your new generator rather than expecting HTML here.
Input: | Env | URL | |-----|----------------------| | dev | https://dev.test | Output (table identical, but the bare URL in the cell IS wrapped): | Env | URL | |-----|----------------------| | dev | <https://dev.test> |
Footnotes are left for you to decide
The tool does not convert footnotes. They survive the migration verbatim — keep a footnote extension downstream or remove them by hand.
Input: See the spec.[^1] [^1]: https://commonmark.org Output (footnote unchanged, but the bare URL in the definition is wrapped): See the spec.[^1] [^1]: <https://commonmark.org>
Emoji shortcodes need the Emoji Remover
GFM :shortcode: emoji are not GFM-rewritten here. If your target doesn't support them, run the Emoji Remover after this conversion.
Input: Great work! :tada: Output (unchanged here): Great work! :tada: Next step: Emoji Remover → 'Great work!' or 'Great work! [tada]'
Alert blockquote downgrades to a plain blockquote
GitHub alerts keep their > [!NOTE] marker — the tool doesn't strip it. A strict renderer treats the marker as ordinary text, so it renders as a normal blockquote.
Input: > [!WARNING] > Back up first. Output (unchanged here; renders as a plain quote downstream): > [!WARNING] > Back up first.
Edge cases and what actually happens
GitHub alerts are not converted to anything
PreservedThe > [!NOTE] / > [!WARNING] / > [!TIP] markers are left exactly as written — this tool does not touch blockquotes. In a strict CommonMark renderer the [!NOTE] line is just text inside a quote, so the alert downgrades visually to an ordinary blockquote. There is no automatic conversion to admonitions; handle that in your destination generator if it supports them.
Pipe tables are left as pipe tables
PreservedTables are not part of the strip pass. They survive verbatim. Most CommonMark generators accept pipe tables via an extension; pure-spec cmark will render them as a single paragraph of pipe characters. Decide per-toolchain — this tool will not turn them into HTML (use the Markdown to HTML tool if you need that).
Bare URLs inside table cells get wrapped
CautionThe autolink pass runs across the whole document, including inside table cells. A cell containing https://dev.test becomes <https://dev.test>, which can change column widths in fixed-width source and may confuse a renderer that doesn't autolink inside cells. Review tables after conversion.
Uppercase `[X]` checkboxes survive
Not matchedThe checkbox regex matches [ ] and lowercase [x] only — uppercase [X] is left intact. GitHub accepts uppercase, so migrated source may still contain - [X]. Normalise to lowercase before the strip pass if you want all checkboxes removed.
Ordered task items keep their checkbox
Not matchedOnly bullet markers (-, *, +) are handled. 1. [ ] step keeps its [ ]. GFM defines task lists on bullet lists, so this matches the spec — but if your source has ordered checkboxes, they won't be stripped.
Strikethrough with an internal tilde is skipped
Not matchedThe regex ~~([^~]+)~~ won't match a struck span containing a ~. Content like ~~A ~ B~~ stays as literal tildes. Remove or escape internal tildes first.
URLs with parentheses are mis-wrapped
CautionBecause the autolink regex stops at ), a URL like https://en.wikipedia.org/wiki/X_(Y) is wrapped as <...X_(Y>), putting the trailing ) outside the brackets and breaking the link. Pre-wrap such URLs in <> before migrating.
One file at a time
By designThe tool does not accept multiple files in a single UI run. A repo-wide migration means one file per pass, or scripting the API endpoint. There is no folder upload.
Free-tier size and character cap
413 size capFiles over 1 MB or 500,000 characters are rejected on the free tier, and the two limits are checked independently. Large generated docs (API references) often hit the character cap first. Upgrade to Pro (10 MB / 5,000,000) or split the file before converting.
Raw HTML may be sanitised downstream
CautionStrikethrough becomes <del> raw HTML. A CMS that sanitises HTML for security may strip the tag, leaving unstyled text. If your destination disallows raw HTML, the strikethrough conversion won't render — plan to keep struck content as plain text or use a destination-specific convention.
Frequently asked questions
What GFM extensions does this actually strip?
Three: bullet task-list checkboxes (removed, bullet kept), ~~strikethrough~~ (rewritten to <del>), and bare URLs (wrapped in <>). It does not strip or convert tables, footnotes, emoji shortcodes, or alert blockquotes — those pass through unchanged.
Will my tables survive the migration?
Yes — pipe tables pass through verbatim. The tool does not convert them to HTML. Most CommonMark site generators accept pipe tables via a table extension; pure cmark will render them as literal pipe text, so enable an extension downstream or keep them as a known limitation.
What happens to GitHub alerts (NOTE / TIP / WARNING)?
Nothing — they are preserved exactly. The tool doesn't touch blockquotes, so the > [!NOTE] marker stays. A strict renderer reads the marker as ordinary text and shows a plain blockquote. There is no automatic admonition conversion.
How are emoji shortcodes handled?
They are left as-is. :smile: is GFM-specific but not part of this transform. If your target renderer doesn't support shortcodes, run the output through the Emoji Remover, which can strip them or replace each with its [name].
Is this compatible with Pandoc strict mode?
The three rewritten constructs are CommonMark-compatible, so they parse cleanly under Pandoc's CommonMark reader. Constructs the tool leaves alone (tables, footnotes) depend on which Pandoc extensions you enable. Test your specific Pandoc invocation against a sample file.
Can I migrate a whole repo at once?
Not in a single UI run — the tool processes one file at a time. For bulk migration, script against the API: it exposes the same engine. Within the UI you'd repeat the paste/run/download cycle per file, which is fine for a handful of files.
Does the conversion lose any content?
Only checkbox state is lost (both [ ] and [x] become a plain bullet). Text content is preserved everywhere else; the other two passes rewrite syntax around existing text without deleting it.
Why did a URL in a table cell change?
The autolink pass runs over the entire document, including table cells. A bare URL in a cell gets wrapped in <>, which can shift fixed-width column alignment in the source. Review tables after conversion; the rendered output is usually fine but the source diff will show the change.
Can I keep strikethrough as `~~` instead of `<del>`?
No — there are no options. The tool always rewrites ~~text~~ to <del>text</del>. If you need to keep tildes, don't run this tool on those files, or revert that specific change with a find-replace tool afterward.
Does it run locally?
Yes. The conversion runs in your browser with the same engine the API uses. Your source Markdown is not uploaded during conversion — relevant when migrating internal or unpublished docs.
How large can a migrated file be?
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 characters and files. The character limit is enforced separately from byte size.
How do I confirm the migration worked?
Render a few converted files in the target toolchain (Pandoc strict, cmark, or your generator's preview) and check the three rewritten constructs plus any surviving tables/footnotes render as expected. A clean source diff plus a correct render is your sign-off.
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.