lintrunner
Decision gist · record as of 2026-08-14
Yes, if you manage a polyglot codebase and want unified linter orchestration. Lintrunner is actively maintained with no external runtime dependencies and ships as a compiled binary with broad platform support. The main gotcha is the unclear license—verify it fits your project's constraints before committing. The learning curve is moderate: you must write linter adapters to implement the JSON Lines protocol, but the tool itself is straightforward to configure and use.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python >=3.6 and git for change detection.
- Linters must be configured in .lintrunner.toml and implement lintrunner's protocol (JSON Lines output to stdout).
- Medium install friction due to platform-specific wheels and Rust compilation.
License · maintenance · safety
(unclear) — License status is unclear—no SPDX identifier or raw license text provided. Verify the actual license terms in the repository before adopting in proprietary or restricted-license projects.
last release 2026-05-08 (98 days) · last repo commit 2026-05-10 · 31 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 1,510,471 downloads/mo, #3,826 on PyPI
Alternatives
Verify before relying
pip install lintrunner
Create .lintrunner.toml with linter configurations, then:
lintrunner # lints HEAD and working tree changes
lintrunner --all-files # lints all configured paths
lintrunner foo.py bar.cpp # lint specific files- Whether the unclear license is permissive, copyleft, or proprietary—check the repository for actual license file.
- Whether Rust compilation is required at install time or if pre-built wheels cover all target platforms.
- Performance characteristics when linting very large codebases or with many linters configured.
What it is and what it does
Lintrunner is a polyglot linting orchestrator that runs multiple linters on a codebase with a unified configuration and output format. It determines which files need linting (by default, files changed in HEAD and the working tree), invokes each linter via a common protocol, and collects their results into a single report. The tool is designed for large projects with mixed languages and tooling—you configure linters once in a .lintrunner.toml file, and lintrunner handles parallelization, path selection, and result aggregation.
The package has no runtime dependencies and ships as a compiled binary (Rust implementation) with wheels for macOS, Linux, Windows, and RISC-V. It expects each linter to be wrapped in an adapter that outputs JSON Lines to stdout and respects a {{PATHSFILE}} placeholder for the list of paths to check. Git integration is built in: by default it lints only changed files, but you can override this with --all-files, --revision, --merge-base-with, or by passing paths directly.
Use it for
- Enforce consistent code style across a monorepo with multiple languages using a single lintrunner command.
- Integrate linting into CI/CD pipelines with selective linter runs (--take, --skip) to balance thoroughness and speed.
- Adopt linting incrementally on an existing project by using --output oneline to navigate through lint messages.
- Run linters only on changed files in a pull request using --merge-base-with to avoid re-linting the entire codebase.
- Combine project-wide and local linter configs via multiple .lintrunner.toml files (e.g., lintrunner.toml and lintrunner.private.toml).
Worth the install?
AI-flagged interpretation of the facts on this page. Verify before relying on it.
Yes, if you manage a polyglot codebase and want unified linter orchestration.
Lintrunner is actively maintained with no external runtime dependencies and ships as a compiled binary with broad platform support. The main gotcha is the unclear license—verify it fits your project's constraints before committing. The learning curve is moderate: you must write linter adapters to implement the JSON Lines protocol, but the tool itself is straightforward to configure and use.
Install
lintrunner on PyPI
Before you install
Medium install friction due to platform-specific wheels and Rust compilation. Active maintenance with recent releases; last commit 2026-05-10 and monthly downloads in the millions suggest stable, widely-used tooling.
Requires Python >=3.6 and git for change detection. Linters must be configured in .lintrunner.toml and implement lintrunner's protocol (JSON Lines output to stdout).
License in practice
License status is unclear—no SPDX identifier or raw license text provided. Verify the actual license terms in the repository before adopting in proprietary or restricted-license projects.
Quickstart
pip install lintrunner
Create .lintrunner.toml with linter configurations, then:
lintrunner # lints HEAD and working tree changes
lintrunner --all-files # lints all configured paths
lintrunner foo.py bar.cpp # lint specific files
Verify before relying
- Whether the unclear license is permissive, copyleft, or proprietary—check the repository for actual license file.
- Whether Rust compilation is required at install time or if pre-built wheels cover all target platforms.
- Performance characteristics when linting very large codebases or with many linters configured.
Package facts
| License | Not declared unclear |
| Python support | Supports the current Python release >=3.6 |
| Install friction | Medium. Platform-specific wheel |
| Runtime dependencies | None |
| Maintenance | Actively maintained 98 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 1,510,471 / month, #3,826 on PyPI 30-day window, as of 2026-08-14 |
| Known vulnerabilities | None known OSV.dev, checked 2026-08-14 |
| Classifiers | Programming Language :: Python :: Implementation :: CPythonProgramming Language :: Python :: Implementation :: PyPyProgramming Language :: Rust |
Evidence: lintrunner-0.13.1-py3-none-macosx_10_12_x86_64.whl; lintrunner-0.13.1-py3-none-macosx_11_0_arm64.whl; lintrunner-0.13.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; lintrunner-0.13.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; lintrunner-0.13.1-py3-none-manylinux_2_31_riscv64.whl; lintrunner-0.13.1-py3-none-win32.whl; lintrunner-0.13.1-py3-none-win_amd64.whl
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “multi-linter coordinator”
- lintrunnerLintrunner orchestrates and runs multiple linters across a codebase,…
- pysenOrchestrates multiple Python linters (black, flake8, isort, mypy)…
- bellowsbellows is a Python library that implements the EZSP protocol to…
Give your agent the search over MCP, or paste the wish link into any chat.
More Quality Assurance packages
Coverage.py measures which lines of Python code are executed during test runs, reporting coverage percentages and identifying untested code paths.
Install it if you want to measure test completeness or enforce coverage thresholds in your project.
Ruff is a Python linter and code formatter written in Rust that combines linting, formatting, and code fixing into a single tool, replacing Flake8, Black, isort, and related utilities.
Pexpect spawns and controls interactive console applications by sending input and matching output patterns, automating tasks that would otherwise require manual interaction.
Black reformats Python source code to a consistent style by parsing entire files and rewriting them according to an opinionated, deterministic set of rules, eliminating manual formatting decisions.
pytest-xdist distributes pytest tests across multiple CPU cores or machines to speed up test execution, with the simplest usage being `pytest -n auto` to spawn workers equal to available CPUs.
Install it if your test suite takes long enough that parallelization would save meaningful time.
Validates AWS CloudFormation templates in YAML or JSON format against resource provider schemas and best practices, checking property values and configuration correctness.
Install it if you work with CloudFormation templates.
See also lintrunner-adapters · pysen · gitlint-core · import-linter · tclint · rumdl · sphinx-lint · django-migration-linter · gitlint · dotenv-linter