A fast Markdown linter written in Rust. Compatible with CommonMark and GitHub Flavored Markdown (GFM).
mado check .
mado check path/to/*.mdApprox. 49-60x faster than existing linters (e.g. markdownlint).
---
config:
xyChart:
height: 200
titleFontSize: 14
chartOrientation: horizontal
xAxis:
labelFontSize: 12
titleFontSize: 14
yAxis:
labelFontSize: 12
titleFontSize: 14
---
xychart-beta
title "Linting ~1,500 Markdown files (Lower is faster)"
x-axis ["mado (rust)", "markdownlint-cli (node.js)", "markdownlint (ruby)", "markdownlint-cli2 (node.js)"]
y-axis "Time (seconds)" 0 --> 10
bar [0.129, 6.381, 6.609, 7.817]
This benchmark was conducted on a MacBook Pro (2021, M1 Max) using hyperfine with GitLab documentation as the dataset.
brew tap akiomik/mado https://github.com/akiomik/mado.git
brew install madonix profile install github:akiomik/madopacman -S madoscoop install https://raw.githubusercontent.com/akiomik/mado/refs/heads/main/pkg/scoop/mado.json# For security reasons, installing from local manifest files requires that this feature be enabled by an administrator.
# For more details, see https://learn.microsoft.com/en-us/windows/package-manager/winget/install#local-install
winget settings --enable LocalManifestFiles
curl.exe -o mado.yml https://raw.githubusercontent.com/akiomik/mado/refs/heads/main/pkg/winget/mado.yml
winget install -m mado.ymlPre-built binaries are available for download from the release page.
Mado supports most markdownlint rules.
- β Stable support
- π¨ Unstable support
β οΈ Unsupported option(s)- β Not supported
| Rule | Support | Note |
|---|---|---|
| MD001 | β | |
| MD002 | β | |
| MD003 | π¨ | |
| MD004 | β | |
| MD005 | β | |
| MD006 | β | |
| MD007 | π¨ | |
| MD009 | β | |
| MD010 | β | |
| MD012 | β | |
| MD013 | β | |
| MD014 | β | |
| MD018 | β | |
| MD019 | β | |
| MD020 | π¨ | |
| MD021 | β | |
| MD022 | β | |
| MD023 | β | |
| MD024 | β | |
| MD025 | β | |
| MD026 | β | |
| MD027 | π¨ | |
| MD028 | β | |
| MD029 | β | |
| MD030 | β | |
| MD031 | β | |
| MD032 | π¨ | |
| MD033 | β | |
| MD034 | β | |
| MD035 | β | |
| MD036 | β | |
| MD037 | β | |
| MD038 | β | |
| MD039 | β | |
| MD040 | β | |
| MD041 | β | |
| MD046 | β | |
| MD047 | β |
Mado can be configured via mado.toml or .mado.toml file in the current directory.
You can also use global configuration files located in:
Linux:~/.config/mado/mado.tomlmacOS:~/.config/mado/mado.tomlWindows:~\AppData\Roaming\mado\mado.toml
For more details,
see the example mado.toml
and the JSON Schema for mado.toml.
Mado is compatible with GitHub Actions.
# Basic usage (runs `mado check .`)
- uses: akiomik/[email protected]
# Custom usage (runs `mado` with specified arguments)
- uses: akiomik/[email protected]
with:
args: '--config path/to/mado.toml check path/to/*.md'just is required.
just testjust lint# Download Markdown dataset
./scripts/benchmarks/setup.sh
# Benchmark mado, mdl and markdownlint-cli using hyperfine
./scripts/benchmarks/comparison.shFirst, install flamegraph:
cargo install flamegraphThen run:
just flamegraphFirst, install cargo-fuzz:
cargo install cargo-fuzzThen run:
just fuzz