86d7dc64d41255ff33af9924f914d44604ab7346
mdlink
mdlink is a CLI tool to recursively scan Markdown files and validate HTTP/HTTPS links.
Features
- Scans
.mdfiles recursively in a directory (or a single.mdfile). - Extracts Markdown links (
[text](url)) and naked URLs (https://...). - Ignores image links (
). - Checks links with
httpxand follows redirects automatically. - Ignores
200 OKin the report; shows non-200 and request errors. - Shows final resolved URL in output.
- Asks interactively before rewriting redirected Markdown links.
- Re-checks target URL before writing (must still return
200). - Rewrites links via Markdown AST editing (
markdown-it-py), not string replacement.
Installation
python3 -m venv .venv
source .venv/bin/activate
pip install .
Usage
mdlink /path/to/docs
Scan current directory recursively:
mdlink .
Options
--timeout FLOAT
Per-request timeout in seconds (default:10.0).--rescan
Reset onlyscan_indexin.mdlink-state.jsonand run a full scan on all matching files.--reset-url-policy
Clear all stored URL ignore policies before scanning.--check CODE
Report only selected HTTP status codes. Repeat option for multiple codes (for example--check 404or--check 301 --check 404).
By default, mdlink stores:
scan_index: already scanned files for incremental directory scans.url_policy: ignored URL decisions per file.
Single-file scans do not use state.
Interactive Redirect Rewrite
Step 1: When a Markdown link redirects, mdlink prompts:
Replace old URL? [y/N]
Step 2: For http:// Markdown links without redirect, mdlink can test an https:// variant and prompt:
Replace old URL? [y/N]
Only confirmed links are updated.
Test File And Script
This repository includes:
test.sh: Generates three sample Markdown files intestdata/and runs state-related checks.testdata/*.markdown: Sample files with mixed link cases (200, redirect, 404/500, naked URLs, ignored image/non-http links).
Generate test data and run checks:
./test.sh
Generate test data only:
./test.sh --generate-only
Run the tool against generated test data:
mdlink testdata
Help
mdlink --help
Description
Languages
Python
90%
Shell
10%