{"id":9286,"library":"rumdl","title":"rumdl","description":"rumdl is a high-performance Markdown linter and formatter written in Rust. It offers 71 lint rules, automatic formatting, and zero dependencies, providing a fast and consistent way to enforce best practices in Markdown files. The Python package primarily serves as a distribution mechanism for the `rumdl` CLI binary, and the project is actively maintained with frequent releases.","status":"active","version":"0.1.72","language":"en","source_language":"en","source_url":"https://github.com/rvben/rumdl.git","tags":["markdown","linter","formatter","rust","cli"],"install":[{"cmd":"pip install rumdl","lang":"bash","label":"Install via pip"}],"dependencies":[],"imports":[{"note":"The `rumdl` Python package primarily installs the `rumdl` Rust binary. Direct programmatic access to linting or formatting functions via `import rumdl` is not available or documented. Users should interact with `rumdl` through its command-line interface, typically via `subprocess` in Python.","symbol":"rumdl","correct":"import subprocess\n# rumdl is primarily a CLI tool; there is no direct Python API for linting functions.\n# Interact via subprocess calls."}],"quickstart":{"code":"import subprocess\nimport os\n\n# Create a dummy markdown file\nmarkdown_content = \"\"\"\n# Hello World\n\nThis is a test.\n\n- List item 1\n- List item 2 \n  - Nested list item\n\nSome **bold** text.\n\"\"\"\n\nfile_path = \"test.md\"\nwith open(file_path, \"w\") as f:\n    f.write(markdown_content)\n\nprint(f\"Linting {file_path}...\")\n\n# Run rumdl check\n# capture_output=True and text=True are important for programmatic interaction\nresult = subprocess.run(['rumdl', 'check', file_path], capture_output=True, text=True)\n\nif result.returncode != 0:\n    print(\"Linting found issues:\")\n    print(result.stdout)\n    print(result.stderr)\nelse:\n    print(\"No linting issues found.\")\n\n# Optionally, try formatting:\n# result_fmt = subprocess.run(['rumdl', 'fmt', file_path], capture_output=True, text=True)\n# if result_fmt.returncode != 0:\n#     print(\"Formatting failed:\")\n#     print(result_fmt.stdout)\n#     print(result_fmt.stderr)\n# else:\n#     print(\"File formatted successfully (or no changes needed).\")\n#     with open(file_path, \"r\") as f:\n#         print(\"Formatted content:\")\n#         print(f.read())\n\n# Clean up the dummy file\nos.remove(file_path)\n","lang":"python","description":"Demonstrates how to invoke the `rumdl` CLI tool from Python using the `subprocess` module to lint a Markdown file. The primary interaction with `rumdl` is through its command-line interface, which the `pip` package installs."},"warnings":[{"fix":"Always check your CLI flags against your configuration files. Use `rumdl --config <path>` to explicitly specify a configuration file, or `rumdl --no-config` to disable all configuration discovery and use only built-in defaults.","message":"rumdl's configuration is highly flexible, but understanding precedence is crucial. CLI flags take highest priority, overriding discovered `.rumdl.toml`, `rumdl.toml`, `.config/rumdl.toml`, or `pyproject.toml` configurations. Local per-directory configurations also override root configurations.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Review the 'Markdownlint Comparison' documentation for known behavioral differences if migrating from `markdownlint` or if unexpected linting results occur.","message":"rumdl, while largely compatible with `markdownlint`, has intentional behavioral differences for certain rules (e.g., MD004 for unordered list style, MD005/MD007 for list indentation). These are design decisions for CommonMark compliance or improved logic.","severity":"gotcha","affected_versions":"All versions"},{"fix":"For performance issues, consider adding exclusions for generated files, disabling unused rules in your `.rumdl.toml` configuration, or splitting very large files.","message":"Linting very large Markdown files (e.g., >1MB) or enabling an excessive number of rules, especially with complex regex patterns, can lead to slower performance, despite `rumdl`'s Rust-based speed.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-16T00:00:00.000Z","next_check":"2026-07-15T00:00:00.000Z","problems":[{"fix":"Ensure `rumdl` is installed (e.g., `pip install rumdl`). Check your system's PATH variable to ensure the directory containing the `rumdl` executable (often in `~/.local/bin` for user installs or a virtual environment's `bin` folder) is included. On some systems, you might need to manually add it to PATH or use the full path to the executable.","cause":"The `rumdl` binary is either not installed, or its installation path is not included in your system's PATH environment variable. This can happen even after `pip install rumdl` if the pip binary directory isn't in PATH.","error":"rumdl executable not found"},{"fix":"Ensure you are using a recent version of `rumdl` (at least 0.1.5 or newer, preferably the latest). If the problem persists, it may be an unfixable violation or a new edge case; report it to the `rumdl` GitHub issues with a reproducible example.","cause":"This was a known bug in earlier versions (e.g., pre-0.1.5) where the fixable issue count in the report was inaccurate or the fixer didn't apply expected changes for certain rules (like MD033).","error":"rumdl check reports X fixable issues, but rumdl fmt or rumdl check --fix makes no changes"},{"fix":"This specific issue was fixed in a later version of `rumdl`. Update your `rumdl` installation to the latest version to resolve this bug.","cause":"In older versions (e.g., 0.1.51), `rumdl`'s list detection could be broken by indented tables within a list, incorrectly flagging MD032 violations.","error":"MD032: List should be followed by blank line reports false positives with indented tables"}]}