Skip to content

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

This line ends cleanly
No extra spaces here
Perfect formatting

❌ Incorrect

This line has trailing spaces  
Extra spaces at the end 
Why are these spaces here?   

🔧 Fixed

This line ends cleanly
Extra spaces removed
Clean and tidy now

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.

Only spaces and tabs are trailing whitespace, and only a line ending in a space is reported (a trailing tab is MD010's). U+00A0, U+2003 and the other Unicode spaces are text in CommonMark, so a line ending in one is left alone, and a line holding only one is a paragraph line rather than an empty line.

Whitespace at the end of a line inside an inline code span that continues onto the next line is part of the code text, so it is neither reported nor removed, in strict mode too.

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

  • MD010 - Use spaces instead of tabs
  • MD047 - End files with a single newline