CheckOps
Ruff
Ruff is an MIT, Rust-based Python linter and formatter from Astral that is 10-100x faster than Flake8 and Black, with over 900 built-in rules and auto-fix.
Latest public signals
Not refreshed yet. Refresh reads the public site and, when the entry has a GitHub repository, the latest release.
Introduction
Ruff is an extremely fast Python linter and code formatter written in Rust, built by Astral, the company behind the uv package manager. The README claims it is 10 to 100 times faster than existing linters like Flake8 and formatters like Black.
Speed is the headline, but consolidation is the bigger practical win. Ruff ships over 900 built-in rules, including native re-implementations of popular Flake8 plugins such as flake8-bugbear, along with rules from isort, pyupgrade, pydocstyle, pycodestyle and others. The README says it can replace Flake8 plus dozens of plugins, isort, pydocstyle, pyupgrade and autoflake, and that its formatter is a drop-in replacement for Black.
Configuration lives in pyproject.toml or ruff.toml. You select rule families by prefix, such as E, F, B or UP, and set per-file ignores. Fix support automatically corrects many problems, for example removing unused imports or upgrading syntax for newer Python versions. Ruff caches results and respects .gitignore.
Editor integration comes through a language server, and it runs well as a pre-commit hook or a CI step that finishes in seconds even on large monorepos. Ruff has become one of the most widely adopted Python tools, with more than 51,000 GitHub stars.
In the quality loop Ruff is the first gate for Python code. It does not do full type checking, so many teams pair it with mypy or Pyright, and some keep Pylint for deeper checks Ruff does not yet cover.
The source code is at astral-sh/ruff on GitHub under the MIT licence, with about 51,100 stars; the most recent commit was on 11 November 2026.
A practical migration path is to start Ruff alongside existing tools, enabling rule sets that mirror what you already enforce, such as the pycodestyle (E, W), Pyflakes (F) and isort (I) groups. Once results match, remove Flake8, isort and their plugins from the toolchain and from pre-commit, which usually shortens local hooks noticeably.
After that, widen coverage gradually: bugbear-style checks (B), pyupgrade (UP) and simplification rules (SIM) are common next steps. Use ruff check --fix for safe fixes and review unsafe fixes explicitly. Pin the Ruff version in pyproject.toml or pre-commit so that new rules in fast-moving releases do not change results unexpectedly.
Ruff’s formatter can also replace Black in many projects. Run ruff format --check in CI next to ruff check, and resolve any differences on a dedicated commit so that formatting changes do not hide real code changes in review.
Because Ruff is a single binary, it is also simple to run in editors and in containers without a Python environment.
Features
- 900+ rules: Native re-implementations of Flake8 plugins and other tools.
- Formatter: Black-compatible formatting via
ruff format. - Auto-fix: Fixes for many rules, with safe and unsafe fix levels.
- Import sorting: isort-compatible rules.
- pyupgrade rules: Modernise syntax for target Python versions.
- Caching: Fast incremental runs.
- Monorepo support: Hierarchical configuration.
- Language server: Editor diagnostics and fixes.
- Notebook support: Lint and format Jupyter notebooks.
- Single binary: No Python environment needed to run it.
Pros
- Speed: Lints large codebases in seconds.
- Tool consolidation: Replaces many separate linters and formatters.
- Free to use: Open source under the MIT licence, so the core tool costs nothing to use.
- Actively maintained: The repository had commits as recent as 11 November 2026.
- Community: About 51,100 GitHub stars.
Cons
- Not a type checker: Pair it with mypy or Pyright.
- Plugin model: No arbitrary third-party plugins like Flake8.
- Rule parity gaps: Some Pylint checks are not implemented.
- Pre-1.0 versioning: Rule behaviour can change between minor versions.
Usage and Links (Example)
# pyproject.toml
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "B", "I", "UP"]
ignore = ["E501"]
ruff check . --fix
ruff format .
Practical tips:
- Start with
E,FandI, then add rule families gradually. - Pin the Ruff version so rule changes arrive deliberately.
- Run
ruff format --checkin CI to enforce formatting.
Resources:
Pricing
Ruff is free and open source under the MIT licence.
Recommended for?
- Python teams of any size wanting fast lint and format.
- Monorepos where Flake8 or Pylint runs are slow.
- Projects consolidating tooling into one config.
- Keep a type checker alongside it.
Conclusion
Ruff has reset expectations for Python linting: hundreds of rules and a Black-compatible formatter in a tool fast enough to run on every keystroke.
Pair it with a type checker, pin its version, and it becomes a low-friction default gate for Python code.
On CheckOps, Ruff is filed under the Release & CI gates stage. Related tools listed here include Pylint, mypy, Pyright, Bandit, pre-commit and MegaLinter. Before standardising on one, compare recent maintenance activity, the pricing model as your usage grows, and the integrations you rely on today. Information on this page was verified against the official website, documentation and repository on 11 November 2026.
Compare
CheckOps pages that put Ruff next to related tools. There is no paid placement on these lists.
Alternatives
Other tools on CheckOps that cover similar ground. Open a page, or compare one with Ruff side by side.
PPylintPylint is a GPL-2.0 static code analyser for Python that checks errors, coding standards, code smells and refactoring opportunities, with plugins and detailed messages.Compare with Ruff
Mmypymypy is an MIT optional static type checker for Python that checks type hints, supports gradual typing and integrates with editors and CI.Compare with Ruff
PPyrightPyright is an MIT static type checker for Python from Microsoft, built for speed on large codebases, with a CLI and language server used by Pylance.Compare with Ruff
BBanditBandit is the PyCQA's Apache-2.0 tool for finding common security issues in Python code by building an AST for each file and running security plugins against it.Compare with Ruff
Ppre-commitpre-commit is an MIT framework for managing multi-language Git pre-commit hooks, running linters, formatters and checks before code is committed and in CI.Compare with Ruff
MMegaLinterMegaLinter is an AGPL-3.0 open-source linter orchestrator from OX Security that runs a large set of linters, formatters and security scanners across many languages in one Docker-based CI job.Compare with Ruff