Markdown Portability Preflight

Paste Markdown source and see exactly which constructs will render differently — or break outright — depending on where it's viewed: GitHub, a strict CommonMark renderer, or a stripped-down renderer like old Reddit.

\n\n[real-ref]: https://example.com/actual-target"},{"label":"Tab-indented code block copied from an editor","value":"Run this locally:\n\n\tnpm install\n\tnpm run build\n\nThat should be enough to get started."}]

Processed locally in your browser. Your file is never uploaded.

How to use this calculator

  1. Paste your Markdown source, or a whole README/doc file — nothing leaves your browser.
  2. Select "Check portability".
  3. Review each flagged construct: what makes it non-portable, and which renderers disagree.
  4. Use the suggested rewrite where one is offered — most of these issues genuinely can't be auto-fixed without guessing, and those are explained instead.

Assumptions

Methodology

Each construct is found with a targeted pattern match (with fenced code blocks tracked and excluded), then checked against known, documented rendering differences between GitHub-Flavored Markdown, the CommonMark specification, and common stripped-down renderers. A rewrite is offered only when it is mechanically safe and unambiguous — wrapping a bare URL in angle brackets — never for a case where the correct fix requires knowing intent (a missing reference definition's target URL) or where the syntax is valid and intentional (a GFM table, task list or strikethrough is not a mistake to silently rewrite).

Worked example

A bare URL with no angle brackets or link syntax

Inputs: See https://example.com for details.

Result: GFM autolinks this automatically, but strict CommonMark renderers leave it as plain, unclickable text. Flagged as a warning; safely rewritten to "See <https://example.com> for details.", which autolinks everywhere.

A reference-style link with no matching definition

Inputs: Read the [migration guide][missing-ref] before upgrading.

Result: No "[missing-ref]: url" definition exists anywhere in the document, so this link renders as broken or literal text in every renderer — not a portability difference but a genuine bug. Flagged as an error; no rewrite is offered because the intended target URL can't be known.

A GFM pipe table

Inputs: | Name | Age | |------|-----| | Ada | 30 |

Result: Pipe-table syntax is a GitHub-Flavored Markdown extension with no equivalent in CommonMark core. Flagged as info; a plain CommonMark renderer shows the pipes and dashes as literal text instead of a table.

Practical guidance
Common mistakes

FAQs

Why is a bare URL only a warning, but a broken reference link an error?

A bare URL still displays as readable plain text everywhere, even where it doesn't autolink — nothing is lost, just a convenience. A broken reference link renders as literal bracket syntax or a missing link everywhere, which is a functional bug regardless of the renderer.

Why doesn't the tool rewrite GFM tables or task lists into something more portable?

There isn't a strictly-portable equivalent that preserves the same meaning and appearance — a plain CommonMark renderer has no table or checkbox concept at all. The tool flags these so you can decide whether GFM-only rendering is acceptable for where the document will be read, rather than guessing a rewrite that would change the content's structure.

Does this tool check content inside fenced code blocks?

No — text inside ``` fenced code blocks is deliberately skipped, since it's meant to be shown verbatim and isn't Markdown syntax itself. A bare URL or ~~text~~ shown as an example inside a code fence is not a real portability issue.