Ruff is an extremely fast Python linter and code formatter, written in Rust, used to check code style and run automated fixes. It can lint and format Python code from the command line, and it supports configuration via pyproject.toml and editor integrations (for example, VS Code).
Project status
- Actively maintained, with an upstream push today and frequent updates through October 2026.
- Updates have been roughly weekly, sometimes more frequent, with a mix of rule changes, fixes, and performance work.
AI summary generated
Recent updates
0.17.4
Ruff 0.17.4 includes parser and diagnostic fixes, changes to preview rules, and several formatter and linter performance improvements. The diff also contains substantial CI and release-workflow updates that are not described in the release notes, but no confirmed user-facing breaking change is evident in the supplied diff.
Features0.17.3
Ruff 0.17.3 adds the preview `suspicious` rule `shared-clock-mock`, fixes an incorrect `pyupgrade` conversion, and includes three lexer and formatter performance improvements. The diff also contains substantial GitHub Actions and internal diagnostic-rendering changes that are not described in the release notes.
BreakingFeatures0.17.2
Ruff 0.17.2 adds a preview complexity rule and a configurable allowlist for `PLR2004`, alongside fixes for several rules and performance improvements. The visible diff also includes substantial repository automation and CI changes that are not covered by the release notes.
Features0.17.1
Ruff 0.17.1 ships a small set of preview and bug fix changes, plus a rule tweak to treat additional `collections` and `weakref` container types as mutable. The release notes focus narrowly on lint rule behavior and a few specific fixes, but the actual diff includes additional non-noted internal and dependency changes.
Features0.17.0
Ruff 0.17.0 introduces several user-facing breaking changes, including updated default Python version inference and a modified default rule set, plus changes to CLI output and JUnit reporting. It also adds code signing and notarization for macOS and code signing for Windows binaries, and removes support for the legacy ruff-lsp server.
BreakingSecurity0.16.10
Ruff 0.16.10 includes preview-feature work, including a migration guide for categories and a new pyupgrade rule (UP052). It also reduces memory usage in diagnostics and changes server behavior to avoid running the uv formatter backend in untrusted workspaces.
BreakingFeatures0.16.9
Ruff 0.16.9 includes preview and bug-fix focused changes across several lint rulesets, primarily reducing false positives and improving diagnostic clarity. The release notes also contain documentation updates and rule metadata wording tweaks. However, the code diff shows additional CLI-level changes that are not mentioned in the release notes.
Breaking0.16.8
Ruff 0.16.8 focuses on rule fixes and incremental support for newer Python typing features, including better handling of PEP-728 TypedDict class keywords and __lazy_modules__. It also updates a CLI warning to include the rule name and code for formatter incompatibilities.
Features0.16.7
ruff 0.16.7 is primarily a set of rule updates and bug fixes across multiple linters (ruff preview rules plus fixes for flake8-implicit-str-concat, flake8-tidy-imports, and pylint). The release notes also call out some parsing performance improvements and a shell-installer hardening change (archive checksum embedding).
Features0.16.6
Ruff 0.16.6 is a relatively focused release with multiple preview-category rule adjustments, plus several parser and rule-specific bug fixes. It also includes documentation updates and a small behavior tweak related to unary plus in match patterns on Python 3.15. The provided code diff suggests several internal and CI-related changes that are not mentioned in the release notes.
Features0.16.5
Ruff 0.16.5 expands preview support for lint rule selection via categories, and allows rules that do not have a rule code. The CLI and diagnostic formatting logic was updated to tolerate missing rule codes and to expose category information for rule help/output.
Features0.16.4
Ruff 0.16.4 focuses on preview feature enhancements (autofixes and rule behavior tweaks), plus a few targeted bug fixes around platform support and diagnostic emission. The release notes also include some rule alignment changes and two server-related improvements. However, the code diff reveals additional internal behavior changes (new diagnostic ID, configuration parsing path change, and a status mapping change for rule explanations) that are not mentioned in the release notes.
Features0.16.3
Ruff 0.16.3 includes a set of targeted rule fixes, new preview-rule behavior (including a pyupgrade UP048 rule), and improved CLI output by hyperlinking rule codes in `ruff check --statistics`. It also includes performance-oriented release build changes (PGO, smaller `Expr`, and using mimalloc v3) as documented in the release notes.
Features0.16.2
Release 0.16.2 includes a bug fix to reduce false positives in `flake8-pyi` (PYI041), and a server-side change to dynamically register formatting capabilities to exclude TOML files. The release notes do not mention any API changes, but the code diff shows multiple Rust API visibility/signature changes across internal crates (mdtest, ruff_db) and a refactor to module resolution in the CLI.
0.16.1
Ruff 0.16.1 primarily ships preview improvements to output and several targeted bug fixes across multiple rule sets, plus small server and documentation updates. The code diff shows a new configuration value that affects how fix summaries display rule information, along with internal test and harness adjustments.
Features0.16.0
Ruff 0.16.0 makes large user-visible changes: it enables a much larger default rule set, adds Markdown formatting for Python code blocks by default, and updates suppression comments to use `ruff: ignore` syntax. The release also improves formatter and linter output for `--check`, including showing fix diffs and supporting additional output formats like `github` and `gitlab`, plus minor JSON output schema flexibility.
BreakingFeatures0.15.22
Ruff 0.15.22 includes a handful of preview-rule additions (notably around `noqa` to `ruff:ignore` and human-readable ignores/selectors), plus small bug fixes and some performance-related lexer/parser improvements. The release notes focus on linting rule changes and documentation, but the code diff shows additional, potentially user-visible behavior changes around TOML handling and mdtest internals that are not described.
Features0.15.21
Ruff 0.15.21 adds two user-facing CLI capabilities, including a new `--add-ignore` option to automatically insert `ruff:ignore` comments and `ruff format --extend-exclude` to extend file selection exclusions. The release also includes multiple bug fixes and performance/formatter improvements, largely focused on preview behavior and rendering efficiency.
Features0.15.20
Ruff 0.15.20 ships multiple preview CLI improvements around rule selector parsing, including support for human-readable selector names and updated handling for removed selectors. It also updates `noqa` shebang matching behavior, along with several internal memory reporting and database durability changes.
BreakingFeatures0.15.19
Ruff 0.15.19 ships a preview UX improvement for hover text on suppression comments, along with a couple of bug fixes related to configuration fallback and notebook-cell edit boundaries. The release also includes several formatter and lint-performance optimizations and (per the notes) publishes Ruff crates to crates.io.
Features