markdownlint rules · MD009 · MD018 · MD022 · MD034 · MD045 · MD047

Lint Markdown against markdownlint rules

Run a fast in-browser markdownlint pass — catches trailing whitespace, missing heading spaces, bare URLs, missing alt text, multiple blank lines, and more. Line-by-line errors.

Markdown linter
Input
149 B
13 lines
Output
473 B
8 lines
Status
error
see panel
Ratio
3.17×
out/in
input · markdown
output · lint report
Line 1MD018 heading-space
missing space after #
Line 3MD010 no-hard-tabs
hard tab character
Line 3MD018 heading-space
missing space after #
Line 5MD034 no-bare-urls
bare URL — wrap in angle brackets or [text](url)
Line 7MD045 alt-text
image missing alt text
Line 9MD009 no-trailing-spaces
trailing whitespace
Line 12MD012 no-multiple-blanks
more than 2 consecutive blank lines
Line 13MD047 final-newline
file should end with a single newline
Quick Start

How to lint Markdown

Each rule scans every non-code-fence line. Fenced code blocks are skipped so language tokens aren't flagged. Results are reported line by line with the rule id.

  1. 01

    Paste Markdown

    From your README, blog post, or docs site.

    Parsing runs through marked with GFM extensions enabled — tables, task lists, strikethrough, and fenced code blocks all match GitHub’s rendering.

    inputGFMmarkedCommonMarklive
    input · markdownmd · GFM
    # Title
    loaded · GFMGFM · ready
  2. 02

    Live lint

    Every keystroke re-runs the rule set.

    Soft-break behaviour is configurable: by default a single newline becomes a space (CommonMark), toggle on for chat-style <br> insertion.

    lintsoft-breaksoptionsconfiglive
    scan · optionsrules · live
    9 rules
    options applied · livelive
  3. 03

    Read the report

    Each issue lists line, rule id, and short reason.

    The preview is scoped under a .mde class so its CSS doesn’t bleed into the rest of the page. Output HTML is whitespace-controlled for clean diffs.

    reportpreviewscoped CSSrenderstable
    out · renderedlog · ready
    L7 MD034
    rendered · liverendered
  4. 04

    Fix and re-run

    Edit the source and the report updates immediately.

    Export covers both raw Markdown and rendered HTML; downloads stream as text/markdown or text/html via Blob + object URL.

    fixclipboard.md.htmlblob
    OK · exportedclean · done
    0 issues
    clean · ready to shipsuccess
Pro tips

Author Markdown that renders everywhere

GFM is the safe default

GitHub-Flavored Markdown is the de-facto baseline (tables, task lists, strikethrough). CommonMark is stricter but ubiquitous as a fallback.

Soft-break behaviour varies

A single newline is a space in CommonMark, a <br> in GFM. Toggle soft breaks when source matters.

Escape inside code fences

Backticks inside fenced blocks need a longer fence — three becomes four. Use ~~~ if your content has many backticks.

Anchors are slugified

GitHub lowercases, strips punctuation, and joins with hyphens. Duplicate headings get -1, -2 suffixes.

Tables need a header row

The dash row sets alignment (:---, :-:, ---:). Use Table Aligner for diff-friendly columns.

Front matter is YAML

Triple-dash blocks at the top of files are parsed by static-site generators. Use the Front-Matter Validator to catch syntax errors.

Use Cases

When to lint Markdown

PR checks, doc quality, blog posts, README hygiene.

PR review

Catch trailing spaces and bare URLs before review. Render path uses marked with GFM extensions enabled (tables, task lists, strikethrough, autolinks), so what you preview matches what GitHub publishes bit-for-bit. Soft-break behaviour is configurable for chat-style vs prose Markdown.

GFM-compliant

Docs site

Keep a static-site docs source tidy. Pairs cleanly with the Markdown Cheatsheet for syntax you can't quite remember — callout blocks, footnotes, definition lists. Output stays diff-friendly so style-only changes don't drown out real edits in PRs.

GitHub-perfect

Blog drafts

Lint blog posts before publishing. Cross-platform safe: anchors, code fences, and tables behave identically on GitHub, GitLab, Bitbucket, and Gitea. Heading-anchor slugs follow GitHub's lowercase-and-hyphenate rules so deep links survive a docs migration.

diff-friendly

README hygiene

Catch missing alt text and broken headings. No server roundtrip — perfect for proprietary content you can't paste into a public tool. The full marked + GFM bundle ships with the page, so it works offline once loaded.

render-stable

Migration

Audit imported MD content for consistency. Front matter (YAML / TOML / JSON) passes through unchanged so static-site pipelines (Jekyll, Hugo, Astro, Eleventy) read it correctly. Pair with the Front-Matter Validator to catch syntax errors before deploy.

cross-platform

Author training

Show writers what to fix without running CLIs. Output is reproducible: identical input always produces identical Markdown, so doc-generation scripts can rely on it for snapshot tests and embedded into release workflows.

SEO-friendly
FAQ

Frequently asked questions

MD009, MD010, MD012, MD018, MD019, MD022, MD034, MD045, MD047 — covering whitespace, headings, bare URLs, missing alt text, and final newline.
No — the linter toggles off inside ``` fences so code content isn't flagged as bad Markdown.
It's a fast in-browser subset. For the full ruleset and config, run the markdownlint CLI in CI.
Not yet — every rule runs. Roadmap item.
No. The linter runs locally in your browser.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!