How to markdown style compliance checker
- Step 1Paste the draft — Choose Paste text and drop the Markdown draft in, or Upload file for a single
.md/.mdx/.markdown/.txt. The live counter shows characters against your plan limit. - Step 2Run the check — Click Run MD Lint. There is nothing to configure — the 12-rule house set is fixed, which is what keeps results comparable between writers.
- Step 3Scan the count — The header reports
Found N issues:or the clean-bill✓ No issues found. Your Markdown is clean.Use the count as a quick pass/fail signal in review. - Step 4Triage by impact — Functional first: MD025 (duplicate H1), MD011 (reversed link), MD031/MD022 (block spacing). Cosmetic next: MD009 (trailing space), MD012 (extra blank lines).
- Step 5Return the report to the writer — Copy the report into the review thread. The MDxxx codes give writers a stable reference to look up and the
→ Suggested fix:lines let them self-correct whitespace and heading hits. - Step 6Re-check before sign-off — After edits, paste the revised draft and run again. Aim for
✓ No issues foundas the mechanical gate before the copy goes to layout.
Every rule the linter checks (12 total)
The browser linter scans your Markdown line by line and applies these 12 markdownlint-style rules. Only four rules carry an auto-generated suggested-fix string in the report; the rest are reported for you to fix by hand. There are no rule toggles — the set is fixed.
| Rule | Triggers when | Suggested fix in report? |
|---|---|---|
MD001 | A line is an H2–H6 heading (heuristic for heading-increment problems) | No — manual |
MD009 | A line ends with one or more trailing spaces or tabs | Yes — line trimmed |
MD010 | A line contains a hard tab character | Yes — each tab → two spaces |
MD011 | A reversed link (text)[url] appears instead of [text](url) | No — manual |
MD012 | A blank line follows another blank line (consecutive blanks) | No — manual |
MD018 | An ATX heading has no space after the # markers, e.g. ##Heading | Yes — space inserted |
MD019 | An ATX heading has more than one space after the #, e.g. ## Heading | Yes — collapsed to one |
MD022 | A heading is not preceded by a blank line | No — manual |
MD025 | A second (or later) # top-level H1 appears in the document | No — manual |
MD031 | A fenced code block opener is not preceded by a blank line | No — manual |
MD033 | Inline HTML outside the allowlist (img, br, hr, a, span, div, code, pre, sup, sub) | No — manual |
MD047 | The file's last line is not empty (no final newline) | No — manual |
What the report contains vs. what it does not
The result is a plain-text report, not an edited copy of your document. It is shown in a scrollable panel with Copy and Download buttons; downloads save as <name>-lint.txt. The tool never rewrites your source.
| You get | You do not get |
|---|---|
A # Lint Report header and a total issue count | A corrected/auto-fixed copy of your Markdown |
One **Line N** · MDxxx — message entry per violation | An "Apply all fixes" button (no such control exists) |
A → Suggested fix: line for MD009/MD010/MD018/MD019 only | Rule selection, severity levels, or config files |
| A clean-bill message when zero issues are found | Multi-file / folder batch linting in one run |
Input limits by plan (markdown family)
md-lint runs entirely in your browser and processes one file per run. The character limit is enforced live in the paste box; the byte limit applies to uploaded files. Both are distinct numbers — a small file with lots of characters can still hit the char limit first.
| Plan | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 1 (this tool takes a single file) |
| Pro + Media | 50 MB | 20,000,000 | 1 |
| Developer | 500 MB | Unlimited | 1 |
Cookbook
Editorial-style before/after pairs. The input is the draft as written; the output is the exact compliance report the checker prints, line numbers included.
Heading not surrounded by a blank line (MD022)
A common house-style rule: headings get a blank line above. MD022 checks the line before the heading and flags when it is non-blank.
Input: Intro paragraph ends here. ## Section Two Report: **Line 2** · `MD022` — Headings should be surrounded by blank lines
Extra blank lines from copy-paste (MD012)
Pasting between paragraphs often leaves two or three blank lines. MD012 flags the second consecutive blank so spacing stays uniform.
Input: First paragraph. Second paragraph. Report: **Line 3** · `MD012` — Multiple consecutive blank lines
Hard tab smuggled in from a snippet (MD010)
Tabs render inconsistently and break alignment in some viewers. MD010 finds them anywhere on the line and suggests two-space replacement.
Input (a tab before 'Note'): →Note: see the appendix. Report: **Line 1** · `MD010` — Hard tabs detected (use spaces) → Suggested fix: ` Note: see the appendix.`
Raw HTML table in prose (MD033)
House style may forbid raw HTML. MD033 flags non-allowlisted tags; <table> is caught, while <br> and <sup> are allowed through.
Input: <table><tr><td>A</td></tr></table> Report: **Line 1** · `MD033` — Inline HTML detected (use Markdown equivalents when possible)
A draft that fully complies
Once mechanics are clean, the report is one line — the green light to move the copy forward.
Input: # Feature Brief Clean, well-spaced body copy. Report: # Lint Report ✓ No issues found. Your Markdown is clean.
Edge cases and what actually happens
It checks mechanics, not prose quality
By designThe checker has no grammar, spelling, readability, or word-choice rules. It enforces the 12 mechanical Markdown rules only. Pair it with a human editorial pass or a separate prose tool for content quality.
MD001 reports every sub-heading
HeuristicMD001 matches any H2–H6 line rather than detecting a true level skip. In a long article it will list every section heading, so use it as a prompt to scan the outline, not as a precise compliance signal.
Two-space hard line breaks get flagged
ExpectedIf your style guide uses two trailing spaces for a soft line break, MD009 will report those lines and the suggested fix would strip them. Decide per line — keep the break where it is intentional.
Allowlisted HTML is not flagged
SupportedMD033 permits img, br, hr, a, span, div, code, pre, sup, sub. If your house style bans all raw HTML, note that these specific tags pass the checker and need a manual review.
No house-style configuration
By designYou cannot add custom rules, severities, or a config file. The 12-rule set is fixed. Treat it as the shared mechanical baseline and layer your prose conventions on top in review.
One file per check
ExpectedThe tool processes a single document per run. For a whole content folder, lint each piece in turn, or call the same linter via the public API in a script that walks the directory.
Setext (underline) headings slip past MD025
Not detectedDuplicate-H1 detection only looks at ATX # headings. A setext H1 (text underlined with ===) is not counted, so mixing styles can hide a second top-level heading. Standardize on ATX # headings.
Over the plan's character limit
400 rejectedA very long manuscript can exceed Free's 500,000-character cap; the counter turns red and Run is disabled. Split the piece or upgrade to Pro (5,000,000 characters) to check it whole.
Report is text, not a marked-up draft
ExpectedYou receive a list of violations, not your draft with inline annotations. Copy the report alongside the draft in your review tool; the line numbers map back to the source.
Confidential drafts stay local
PreservedBecause the scan runs in the browser, embargoed or client copy is never transmitted. This is the safe path for pre-publish material that cannot touch a third-party server.
Frequently asked questions
How is this different from markdownlint?
It uses the same rule-ID vocabulary but checks a curated subset of 12 high-impact rules with a fixed configuration. markdownlint has more rules and is configurable; this checker trades configurability for a zero-setup, browser-only check editors can run instantly.
Does it check grammar or spelling?
No. It only checks the 12 mechanical Markdown rules (heading spacing, whitespace, tabs, links, blank lines, inline HTML, final newline). Grammar, spelling, and readability are out of scope.
Can I encode our house style as custom rules?
No. The rule set is fixed and there is no configuration. Use it as the shared mechanical baseline; enforce prose-level conventions through your normal editorial review.
Should writers fix every flagged line?
Prioritize. Functional issues first — duplicate H1 (MD025), reversed links (MD011), missing block spacing (MD031, MD022). Stylistic ones like extra blank lines (MD012) can wait if you are short on time.
Will it edit the draft for me?
No. It returns a report. Four rules (MD009, MD010, MD018, MD019) include a paste-ready suggested fix; everything else the writer corrects in their editor.
Is the draft uploaded?
No — the browser does the work locally. Embargoed, client-confidential, and unpublished drafts never leave the machine.
What can I paste or upload?
Paste text directly, or upload one .md, .mdx, .markdown, or .txt file per run.
How long a draft can it handle?
Free covers 500,000 characters / 1 MB. Pro raises it to 5,000,000 / 10 MB, Pro + Media to 20,000,000 / 50 MB, and Developer to unlimited characters / 500 MB.
Why does the inline-HTML rule miss some tags?
MD033 has a fixed allowlist (img, br, hr, a, span, div, code, pre, sup, sub) that it ignores. Tags outside that list are flagged; the allowlist cannot be changed.
Can I check a whole content directory at once?
Not in one browser run — it is single-file. For batch QA, call the same linter through the public API or MCP from a script that iterates your files.
How do I turn the report into a cleaner draft?
After triaging, run the document through md-prettifier for whitespace and blank-line normalization, or md-table-repair and md-list-fixer for specific structures, then re-check.
Does it support setext (underlined) headings?
Partially — the heading-spacing rules target ATX # headings, and MD025 only counts ATX H1s. For full coverage, standardize the team on ATX-style headings.
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.