MD009 - Remove trailing spaces¶
Aliases: no-trailing-spaces
What this rule does¶
Removes unnecessary spaces at the end of lines to keep your Markdown clean and consistent.
Why this matters¶
- Clean diffs: Trailing spaces create noisy changes in version control
- Parser compatibility: Some Markdown tools have issues with trailing whitespace
- Professional quality: Clean files without hidden characters look more polished
- File size: Removing unnecessary spaces reduces file size (slightly but it adds up!)
Examples¶
✅ Correct¶
❌ Incorrect¶
🔧 Fixed¶
Configuration¶
[MD009]
br-spaces = 2 # Trailing spaces kept as a hard line break; 0 keeps none (default: 2)
strict = false # Also flag br-spaces runs that render no line break (default: false)
list-item-empty-lines = false # Allow trailing spaces in empty list item lines (default: false)
Fewer than 2 trailing spaces never render a line break, so br-spaces = 0 (or 1) turns the exception off: a run of 2 spaces is then flagged like any other trailing spaces. The other exemptions still apply (code blocks unless strict, the single space of an empty blockquote line, and list-item-empty-lines). This matches markdownlint.
Automatic fixes¶
This rule automatically removes trailing spaces from the end of lines. A run of exactly br-spaces spaces (2 by default) is kept as an intentional hard line break.
With strict = true, that run is kept only where it renders a line break: on a line inside a paragraph that is followed by more of the same paragraph. On a heading, a fence line, the last line of a paragraph or list item, and anywhere else the <br> would be invisible, the spaces are flagged and removed. Strict mode also checks lines inside code blocks, which are otherwise skipped. To remove rendering line breaks as well, set br-spaces = 0.
Learn more¶
- Line breaks in Markdown - When trailing spaces are actually useful
- CommonMark specification - Technical details about line breaks