markdownlint
markdownlint is a Node.js static analysis tool and linter for Markdown files that enforces standards and consistency across your documentation. It uses the micromark parser and honors CommonMark specifications while supporting popular GitHub Flavored Markdown extensions.
Key Features:
- Comprehensive Rule Set: Over 50 built-in rules covering heading styles, list formatting, line length, whitespace management, and link validation
- Format Support: Full CommonMark compliance with GitHub Flavored Markdown, tables, autolinks, and extension support for directives, footnotes, and math
- Automatic Fixing: Many rules can automatically repair formatting issues, saving manual effort
- Flexible Configuration: Extensive customization through JSON configuration files with rule-specific settings and style presets
- Inline Control: HTML comment syntax for enabling/disabling rules within documents (
<!-- markdownlint-disable -->
) - Custom Rules: Extensible architecture allowing project-specific linting requirements
- Performance Optimized: Fast analysis suitable for large documentation projects
MarkdownLint is run through markdownlint-cli
markdownlint documentation
- Version in MegaLinter: 0.45.0
- Visit Official Web Site
- See How to configure markdownlint rules
- If custom
.markdownlint.json
config file isn't found, .markdownlint.json will be used
- If custom
- See How to disable markdownlint rules in files
- See How to ignore files and directories with markdownlint
- See Index of problems detected by markdownlint
Configuration in MegaLinter
- Enable markdownlint by adding
MARKDOWN_MARKDOWNLINT
in ENABLE_LINTERS variable - Disable markdownlint by adding
MARKDOWN_MARKDOWNLINT
in DISABLE_LINTERS variable
- Enable autofixes by adding
MARKDOWN_MARKDOWNLINT
in APPLY_FIXES variable
Variable | Description | Default value |
---|---|---|
MARKDOWN_DEFAULT_STYLE | For markdownlint to be active, MARKDOWN_DEFAULT_STYLE must be markdownlint |
markdownlint |
MARKDOWN_MARKDOWNLINT_ARGUMENTS | User custom arguments to add in linter CLI call Ex: -s --foo "bar" |
|
MARKDOWN_MARKDOWNLINT_COMMAND_REMOVE_ARGUMENTS | User custom arguments to remove from command line before calling the linter Ex: -s --foo "bar" |
|
MARKDOWN_MARKDOWNLINT_FILTER_REGEX_INCLUDE | Custom regex including filter Ex: (src\|lib) |
Include every file |
MARKDOWN_MARKDOWNLINT_FILTER_REGEX_EXCLUDE | Custom regex excluding filter Ex: (test\|examples) |
Exclude no file |
MARKDOWN_MARKDOWNLINT_CLI_LINT_MODE | Override default CLI lint mode - file : Calls the linter for each file- list_of_files : Call the linter with the list of files as argument- project : Call the linter from the root of the project |
list_of_files |
MARKDOWN_MARKDOWNLINT_FILE_EXTENSIONS | Allowed file extensions. "*" matches any extension, "" matches empty extension. Empty list excludes all filesEx: [".py", ""] |
[".md"] |
MARKDOWN_MARKDOWNLINT_FILE_NAMES_REGEX | File name regex filters. Regular expression list for filtering files by their base names using regex full match. Empty list includes all files Ex: ["Dockerfile(-.+)?", "Jenkinsfile"] |
Include every file |
MARKDOWN_MARKDOWNLINT_PRE_COMMANDS | List of bash commands to run before the linter | None |
MARKDOWN_MARKDOWNLINT_POST_COMMANDS | List of bash commands to run after the linter | None |
MARKDOWN_MARKDOWNLINT_UNSECURED_ENV_VARIABLES | List of env variables explicitly not filtered before calling MARKDOWN_MARKDOWNLINT and its pre/post commands | None |
MARKDOWN_MARKDOWNLINT_CONFIG_FILE | markdownlint configuration file nameUse LINTER_DEFAULT to let the linter find it |
.markdownlint.json |
MARKDOWN_MARKDOWNLINT_RULES_PATH | Path where to find linter configuration file | Workspace folder, then MegaLinter default rules |
MARKDOWN_MARKDOWNLINT_DISABLE_ERRORS | Run linter but consider errors as warnings | true |
MARKDOWN_MARKDOWNLINT_DISABLE_ERRORS_IF_LESS_THAN | Maximum number of errors allowed | 0 |
MARKDOWN_MARKDOWNLINT_CLI_EXECUTABLE | Override CLI executable | ['markdownlint'] |
IDE Integration
Use markdownlint in your favorite IDE to catch errors before MegaLinter !
IDE | Extension Name | Install | |
---|---|---|---|
Sublime Text | SublimeLinter-contrib-markdownlint | Visit Web Site | |
vim | coc-markdownlint | Visit Web Site | |
Visual Studio Code | vscode-markdownlint | ![]() |
MegaLinter Flavors
This linter is available in the following flavors
Flavor | Description | Embedded linters | Info | |
---|---|---|---|---|
![]() |
all | Default MegaLinter Flavor | 127 | |
c_cpp | Optimized for pure C/C++ projects | 57 | ||
cupcake | MegaLinter for the most commonly used languages | 88 | ||
documentation | MegaLinter for documentation projects | 50 | ||
dotnet | Optimized for C, C++, C# or VB based projects | 65 | ||
dotnetweb | Optimized for C, C++, C# or VB based projects with JS/TS | 74 | ||
formatters | Contains only formatters | 18 | ||
go | Optimized for GO based projects | 52 | ||
java | Optimized for JAVA based projects | 55 | ||
javascript | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 60 | ||
php | Optimized for PHP based projects | 55 | ||
python | Optimized for PYTHON based projects | 66 | ||
ruby | Optimized for RUBY based projects | 51 | ||
rust | Optimized for RUST based projects | 51 | ||
salesforce | Optimized for Salesforce based projects | 55 | ||
swift | Optimized for SWIFT based projects | 51 | ||
terraform | Optimized for TERRAFORM based projects | 55 |
Behind the scenes
How are identified applicable files
- File extensions:
.md
How the linting is performed
- markdownlint is called once with the list of files as arguments (
list_of_files
CLI lint mode)
Example calls
markdownlint myfile.md
markdownlint -c .markdownlint.json myfile.md
markdownlint --fix -c .markdownlint.json myfile.md
Help content
Usage: markdownlint [options] [files|directories|globs...]
MarkdownLint Command Line Interface
Arguments:
files|directories|globs files, directories, and/or globs to lint
Options:
-V, --version output the version number
-c, --config <configFile> configuration file (JSON, JSONC, JS, YAML, or TOML)
--configPointer <pointer> JSON Pointer to object within configuration file (default: "")
-d, --dot include files/folders with a dot (for example `.github`)
-f, --fix fix basic errors (does not work with STDIN)
-i, --ignore <file|directory|glob> file(s) to ignore/exclude (default: [])
-j, --json write issues in json format
-o, --output <outputFile> write issues to file (no console)
-p, --ignore-path <file> path to file with ignore pattern(s)
-q, --quiet do not write issues to STDOUT
-r, --rules <file|directory|glob|package> include custom rule files (default: [])
-s, --stdin read from STDIN (does not work with files)
--enable <rules...> Enable certain rules, e.g. --enable MD013 MD041 --
--disable <rules...> Disable certain rules, e.g. --disable MD013 MD041 --
-h, --help display help for command
Installation on mega-linter Docker image
- Dockerfile commands :
# renovate: datasource=npm depName=markdownlint-cli
ARG NPM_MARKDOWNLINT_CLI_VERSION=0.45.0
- NPM packages (node.js):