Markdown linter
Find broken links, skipped heading levels and unclosed code blocks in Markdown.
Markdown linter
Paste a Markdown document and this tool reports what's wrong with it, one finding per line, with the exact line number. It always checks for unmatched **bold**, __bold__, ~~strikethrough~~ and `code` markers, unbalanced [ ] link brackets and empty link or image targets, heading levels that skip a level (an H1 directly followed by an H3), and fenced code blocks that open but never close — the kind of syntax slip that renders fine in one Markdown engine and breaks in another.
The options add checks about consistency rather than syntax. Turn on link reference checking to catch a [text][ref] link with no matching [ref]: url definition, and definitions that are defined but never referenced. Duplicate-heading checking flags repeated heading text and more than one top-level heading, which confuses readers and table-of-contents generators alike. List-consistency checking catches a bullet list that switches from - to * partway through, or numbered items that fall out of sequence. You can also require a language on every fenced code block, flag trailing whitespace (a run of exactly two spaces is left alone, since that's a deliberate line break), and cap line length. Paste a list of existing file paths into the second field and local link and image targets get checked against it, so a renamed or deleted file shows up as a broken link before you publish.
The linter handles Windows (CRLF) and Unix (LF) line endings the same way, and checks that would misfire on code content — markers, links, headings, lists, trailing whitespace — are skipped inside fenced code blocks; line-length checking still applies everywhere. The output panel highlights every finding line in red, and the tally above shows lines scanned, issues found and headings counted.
Everything runs locally in your browser: the document you paste and any file paths you add for the link check are never uploaded anywhere. Copy the report, download it as a .txt file, or send it to another tool's input to keep working.