Offline Markdown Link Checker
Check Markdown links, images, references and local heading anchors without fetching destinations or executing embedded HTML.
What the report checks
The parser reads inline and reference links, autolinks, images and raw HTML anchor/image attributes. The report lists each target, resolved URL, link kind and issue codes. It flags empty targets, URL whitespace, malformed percent escapes, template placeholders, unsupported schemes and unresolved explicit reference labels. Fenced and inline code are excluded.
Document anchors and base URLs
Heading anchors use github-slugger 2, including duplicate-heading suffixes and Chinese headings. Explicit HTML id and named anchors are also collected; duplicate IDs are reported. Fragment checks apply only to #links and links resolving to the same document URL. The optional HTTP/HTTPS base URL resolves relative paths; it is never fetched.
Syntax results are not HTTP status checks
syntax-ok means no issue was found by these local checks. ExternalStatus is always not-requested: the checker does not verify 200/404 responses, DNS, redirects, remote fragments or relative files on disk. Heading IDs are a documented local model and may differ from your publishing platform. Markdown is parsed as text in a worker with inert HTML parsing, not inserted into this page.
Limits
Input is limited to 200,000 UTF-16 units, 5,000 extracted links and 100,000 parsed HTML nodes. A five-second deadline and Cancel button bound parser work. An unresolved [label][reference] is reported, while a plain [label] without a definition can be ordinary Markdown text and is not treated as an error.
Questions & answers
Will checking a link notify its website?
No. The tool makes zero requests to input destinations and does not load pasted images, scripts or styles.
Why is a missing reference different from a 404?
A missing reference is a document syntax issue. A 404 is a server response that this offline checker never requests. The report deliberately keeps those meanings separate.
Are inputs uploaded or stored?
No. Processing runs on this device in a Web Worker. Input text is not sent to an API or saved in local storage. Changing an option cancels old work and clears the prior result.
Other Languages
References
How we make sure
We check this tool with the automated test suites linked below. Example checks are shown in their original language.
- Verification method
- Check inline/reference/image links and local anchors, including relative URLs, duplicate headings and missing references.
- Comparison reference
- Explicit Markdown/anchor fixtures; tests assert no network requests.
- Verification scope
- This checks document structure; unrequested external links are not claimed HTTP-reachable.
Test source and cases (select a file to read it)
-
markdown-links-tools.test.js
- Markdown inline, reference, autolink and image targets are resolved without network access
- GitHub-style duplicate headings, CJK slugs and explicit HTML anchors are checked
These checks cover the listed examples and boundaries, not every possible input. Round trips and checks using the same library are not independent verification.