2 releases

new 0.0.7 Mar 8, 2025
0.0.6 Mar 2, 2025
0.0.5 Feb 28, 2025

#971 in Development tools

Download history 99/week @ 2025-02-23 234/week @ 2025-03-02

336 downloads per month

MIT license

400KB
9K SLoC

rumdl - An extremely fast Markdown linter, written in Rust

License: MIT

rumdl is a fast Markdown linter and fixer that helps ensure consistency and best practices in your Markdown files. Built in Rust for exceptional performance.

Features

  • Lightning Fast: Built with Rust for exceptional performance
  • 50+ lint rules: Comprehensive rule set covering common Markdown issues
  • Automatic fixing: Many rules support automatic fixing with --fix
  • Highly configurable: Customize rules to match your project's style
  • Modern CLI: User-friendly interface with detailed error reporting

Installation

With Cargo:

cargo install rumdl

Usage

Check Markdown files for issues:

# Check a single file
rumdl README.md

# Check multiple files
rumdl doc1.md doc2.md

# Check all Markdown files in a directory (recursive)
rumdl .

# Check and automatically fix issues
rumdl --fix README.md

Command-line Interface

rumdl [options] [file or directory...]

Options

  • -c, --config <file>: Use custom configuration file
  • -f, --fix: Automatically fix issues where possible
  • -l, --list-rules: List all available rules
  • -d, --disable <rules>: Disable specific rules (comma-separated)
  • -e, --enable <rules>: Enable only specific rules (comma-separated)
  • -v, --verbose: Show detailed output

Configuration

rumdl can be configured through command-line options. Support for a rumdl.toml configuration file is planned but not currently implemented.

Current configuration options

  • -f, --fix: Automatically fix issues where possible
  • -l, --list-rules: List all available rules
  • -d, --disable <rules>: Disable specific rules (comma-separated)
  • -e, --enable <rules>: Enable only specific rules (comma-separated)
  • -v, --verbose: Show detailed output
  • -c, --config <file>: Reserved for future custom configuration file support

Output Style

rumdl produces clean, colorized output similar to modern linting tools:

README.md:12:1: [MD022] Headings should be surrounded by blank lines [*]
README.md:24:5: [MD037] Spaces inside emphasis markers: "* incorrect *" [*]
README.md:31:76: [MD013] Line length exceeds 80 characters
README.md:42:3: [MD010] Hard tabs found, use spaces instead [*]

When running with --fix, rumdl shows which issues were fixed:

README.md:12:1: [MD022] Headings should be surrounded by blank lines [fixed]
README.md:24:5: [MD037] Spaces inside emphasis markers: "* incorrect *" [fixed]
README.md:42:3: [MD010] Hard tabs found, use spaces instead [fixed]

Fixed 3 issues in 1 file

For a more detailed view, use the --verbose option:

✓ No issues found in CONTRIBUTING.md
README.md:12:1: [MD022] Headings should be surrounded by blank lines [*]
README.md:24:5: [MD037] Spaces inside emphasis markers: "* incorrect *" [*]
README.md:42:3: [MD010] Hard tabs found, use spaces instead [*]

Found 3 issues in 1 file (2 files checked)
Run with `--fix` to automatically fix issues

Output Format

rumdl uses a consistent output format for all issues:

{file}:{line}:{column}: [{rule*id}] {message} [{fix*indicator}]

The output is colorized by default:

  • Filenames appear in blue and underlined
  • Line and column numbers appear in cyan
  • Rule IDs appear in yellow
  • Error messages appear in white
  • Fixable issues are marked with [*] in green
  • Fixed issues are marked with [fixed] in green

Rules

rumdl implements over 50 lint rules for Markdown files. By default, all rules are enabled except those specifically disabled in your configuration.

For a complete list of rules and their descriptions, run rumdl --list-rules or visit our documentation.

Rules Overview

The following table provides an overview of all supported rules and indicates whether rumdl can detect violations and automatically fix them:

Rule ID Description Detects Fixes
MD001 Heading levels should only increment by one level at a time
MD002 First heading should be a top-level heading
MD003 Heading style should be consistent
MD004 Unordered list style should be consistent
MD005 Consistent indentation for list items at the same level
MD006 Start bullets at the beginning of the line
MD007 Unordered list indentation
MD008 Unordered list style
MD009 Trailing spaces
MD010 Hard tabs
MD011 Reversed link syntax
MD012 Multiple consecutive blank lines
MD013 Line length
MD014 Dollar signs used before commands without showing output
MD015 No space after list marker
MD016 Multiple spaces after list marker
MD017 No emphasis as heading
MD018 No space after hash on atx style heading
MD019 Multiple spaces after hash on atx style heading
MD020 No space inside hashes on closed atx style heading
MD021 Multiple spaces inside hashes on closed atx style heading
MD022 Headings should be surrounded by blank lines
MD023 Headings must start at the beginning of the line
MD024 Multiple headings with the same content
MD025 Multiple top-level headings in the same document
MD026 Trailing punctuation in heading
MD027 Multiple spaces after blockquote symbol
MD028 Blank line inside blockquote
MD029 Ordered list item prefix
MD030 Spaces after list markers
MD031 Fenced code blocks should be surrounded by blank lines
MD032 Lists should be surrounded by blank lines
MD033 Inline HTML
MD034 Bare URL used
MD035 Horizontal rule style
MD036 Emphasis used instead of a heading
MD037 Spaces inside emphasis markers
MD038 Spaces inside code span elements
MD039 Spaces inside link text
MD040 Fenced code blocks should have a language specified
MD041 First line in a file should be a top-level heading
MD042 No empty links
MD043 Required heading structure
MD044 Proper names should have the correct capitalization
MD045 Images should have alternate text
MD046 Code block style
MD047 Files should end with a single newline character
MD048 Code fence style
MD049 Emphasis style
MD050 Strong style
MD051 Link fragments should exist
MD052 Reference links and images should use a reference that exists
MD053 Link and image reference definitions should be needed
MD054 Link and image style
MD055 Table pipe style
MD056 Table column count
MD058 Tables should be surrounded by blank lines

Development

Prerequisites

  • Rust 1.70 or higher
  • Make (for development commands)

Building

make build

Testing

make test

License

MIT License

Dependencies

~6–14MB
~171K SLoC