rumdl - An extremely fast Markdown linter, written in Rust

An extremely fast Markdown linter and formatter, written in Rust
| Docs | Rules | Configuration |
Table of Contents
Overview
rumdl is a lightning-fast Markdown linter and fixer that helps ensure consistency and best practices in your Markdown files. It offers:
- ⚡️ 10-50x faster than other Markdown linters
- 🔍 50+ lint rules covering common Markdown issues
- 🛠️ Automatic fixing with
--fixfor most rules - 📦 Zero dependencies - single binary with no runtime requirements
- 🔧 Highly configurable with TOML-based config files
- 🌐 Multiple installation options - Rust, Python, standalone binaries
- 📏 Modern CLI with detailed error reporting
- 🔄 CI/CD friendly with non-zero exit code on errors
Installation
Choose the installation method that works best for you:
Using Cargo (Rust)
Using pip (Python)
Download binary
# Linux/macOS
|
# Windows PowerShell
Usage
Getting started with rumdl is simple:
# Check a single file
# Check all Markdown files in current directory and subdirectories
# Automatically fix issues
# Create a default configuration file
Common usage examples:
# Check with custom configuration
# Disable specific rules
# Enable only specific rules
# Exclude specific files/directories
# Include only specific files/directories
# Combine include and exclude patterns
Rules
rumdl implements over 50 lint rules for Markdown files. Here are some key rule categories:
| Category | Description | Example Rules |
|---|---|---|
| Headings | Proper heading structure and formatting | MD001, MD002, MD003 |
| Lists | Consistent list formatting and structure | MD004, MD005, MD007 |
| Whitespace | Proper spacing and line length | MD009, MD010, MD012 |
| Code | Code block formatting and language tags | MD040, MD046, MD048 |
| Links | Proper link and reference formatting | MD034, MD039, MD042 |
| Images | Image alt text and references | MD045, MD052 |
| Style | Consistent style across document | MD031, MD032, MD035 |
For a complete list of rules and their descriptions, see our documentation or run:
Command-line Interface
Commands
init: Create a default.rumdl.tomlconfiguration file in the current 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)--exclude <patterns>: Exclude specific files or directories (comma-separated glob patterns)--include <patterns>: Include only specific files or directories (comma-separated glob patterns)--respect-gitignore: Respect .gitignore files when scanning directories-v, --verbose: Show detailed output
Configuration
rumdl can be configured using a TOML configuration file. By default, it looks for rumdl.toml or .rumdl.toml in the current directory.
You can create a default configuration file using the init command:
This will create a .rumdl.toml file in the current directory with default settings that you can customize.
Example configuration file:
# Global configuration options
[]
# List of rules to disable
= ["MD013", "MD033"]
# List of rules to enable exclusively (if provided, only these rules will run)
# enable = ["MD001", "MD003", "MD004"]
# List of file/directory patterns to include for linting (if provided, only these will be linted)
= [
# Documentation files
"docs/**/*.md",
"README.md",
"CONTRIBUTING.md",
]
# List of file/directory patterns to exclude from linting
= [
# Common directories to exclude
".git",
".github",
"node_modules",
"vendor",
"dist",
"build",
# Specific files or patterns
"CHANGELOG.md",
"LICENSE.md",
"generated/*.md",
"**/temp_*.md",
]
# Whether to respect .gitignore files when scanning directories
= false
# Rule-specific configurations
[]
= 1 # Expected level for first heading
[]
= "atx" # Heading style (atx, atx_closed, setext)
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
Development
Prerequisites
- Rust 1.70 or higher
- Make (for development commands)
Building
Testing
License
MIT License