Change8

Ruff

Dev Tools

An extremely fast Python linter and code formatter, written in Rust.

Latest: 0.16.525 releases1 breaking changes5 common errorsView on GitHub

Release History

View all versions →
0.16.54 fixes3 features
Aug 27, 2026

This release introduces preview features like rules without codes and category selectors, alongside several bug fixes for linters like flake8-async and flake8-datetimez. It also includes documentation updates and improved installation methods.

0.16.47 fixes9 features
Aug 20, 2026

This release introduces new features like autofix for flake8-use-pathlib and improved server diagnostics for notebooks. It also includes several bug fixes, including addressing `InvalidInstruction` on specific Windows CPUs and handling semantic syntax errors in string type definitions.

0.16.36 fixes2 features
Aug 13, 2026

This release includes several bug fixes for pylint, flake8-bandit, and pyupgrade rules. It also introduces performance improvements through PGO and a reduction in Expr size, along with a new rule for replacing `while 1` with `while True`.

0.16.21 fix1 feature
Aug 7, 2026

This release fixes a bug related to `flake8-pyi` and `singledispatch` functions. It also introduces a feature to dynamically register formatting capabilities, excluding TOML files.

0.16.18 fixes5 features
Jul 30, 2026

This release introduces new preview features, bug fixes, and rule changes across various linters. It also includes improvements to the LSP server and documentation.

0.16.0Breaking1 fix3 features
Jul 23, 2026

Ruff v0.16.0 significantly expands default rules, introduces Markdown code formatting, and enhances the `format --check` output. It also stabilizes several rules and behaviors.

0.15.221 fix5 features
Jul 16, 2026

This release introduces several new preview features, including autofixes for pycodestyle E402 and new ruff rules for managing ignore comments and configuration selectors. It also includes performance improvements and bug fixes.

0.15.213 fixes2 features
Jul 9, 2026

This release introduces new features like `--add-ignore` for `ruff:ignore` comments and `--extend-exclude` for `ruff format`. It also includes several bug fixes, performance improvements, and rule changes across various integrations.

0.15.201 fix3 features
Jun 25, 2026

This release introduces preview features like human-readable rule selectors and updates documentation, while removing the `RUF076` check for unused pytest fixtures.

0.15.192 fixes1 feature
Jun 24, 2026

This release (0.15.19) introduces a preview feature for human-readable names in suppression comments and includes several performance optimizations across parsing and formatting. It also fixes bugs related to invalid editor settings and notebook cell boundary insertions.

0.15.183 fixes7 features
Jun 18, 2026

This release introduces several preview features focused on improving output readability and handling nested ignore comments. It also includes numerous parser validation improvements and bug fixes related to dictionary key detection.

0.15.174 fixes8 features
Jun 11, 2026

This release enhances suppression comment handling with support for human-readable names and improved range respect. It also introduces new rules, including banning `pytest` autouse fixtures, and fixes several diagnostic and formatting bugs.

0.15.165 fixes3 features
Jun 4, 2026

This release introduces several new preview linting rules across flake8-async, pylint, and ruff, alongside numerous bug fixes addressing conflicts and incorrect code transformations in eradication, pyflakes, pylint, and pyupgrade checks. Performance was also improved by shrinking statement suites during parsing.

0.15.154 fixes2 features
May 28, 2026

This release focuses on performance improvements, bug fixes across several linters (including pyflakes and formatter), and documentation updates. Key changes include better handling of Markdown fences and PEP 526 annotations.

0.15.144 fixes7 features
May 21, 2026

This release introduces several new preview linting rules, including support for Airflow implicit multiple outputs and Pylint's too many try statements. It also includes various bug fixes related to string formatting, type checking, and f-string preservation.

0.15.134 fixes4 features
May 14, 2026

Ruff version 0.15.13 introduces new preview linting rules, standardizes Pylint diagnostics, and includes several bug fixes across various rule sets. Configuration options like `line-length` have also been adjusted.

0.15.123 fixes4 features
Apr 24, 2026

This release introduces new preview features for file-level and logical-line suppressions, alongside several bug fixes across the `airflow`, `flake8-bugbear`, and `pylint` checkers. Cache file permissions on Unix systems have also been updated to respect default permissions.

0.15.111 fix3 features
Apr 16, 2026

This release introduces several preview features, including new linter rules for Ruff and Airflow, and fixes a bug related to ASYNC109 in flake8-async. Documentation and Neovim examples have also been updated.

0.15.105 fixes4 features
Apr 9, 2026

This release focuses on bug fixes related to f-string parsing across Python versions and introduces several preview features for linter rule improvements. It also adds support for custom file extensions in the LSP server.

0.15.99 fixes1 feature
Apr 2, 2026

This release introduces a new formatter option for nested string quotes and includes numerous bug fixes across various linters, alongside rule adjustments for better accuracy and safety.

0.15.86 fixes5 features
Mar 26, 2026

This release introduces several new preview linting rules, including checks for unnecessary ifs and useless finally blocks. Bug fixes address issues across various linters like flake8-async, flake8-bandit, and pyflakes, alongside performance improvements in diagnostic rendering.

0.15.72 fixes2 features
Mar 19, 2026

This release introduces preview features like displaying output severity and improves handling of non-Python documents by suppressing irrelevant hovers and code actions. It also updates rule E501 to recognize `pyrefly:` as a pragma comment.

0.15.610 fixes16 features
Mar 12, 2026

This release introduces significant preview features focused on lazy imports, PEP 798 support, and new linter rules across several integrated tools. Numerous bug fixes address issues in the formatter and `--add-noqa` functionality.

0.15.56 fixes3 features
Mar 5, 2026

This release introduces default discovery of Markdown files in preview mode and adds fixes across several linters including `refurb`, `pyflakes`, and `pyupgrade`. It also includes improvements for FastAPI dependency handling.

0.15.42 fixes
Feb 26, 2026

This patch release (0.15.4) resolves a critical panic that occurred when enabling the new rule PLR1712 alongside definition-analyzing rules. It also includes a fix for a pyflakes false positive in stub files.

Common Errors

SyntaxError2 reports

This error typically occurs in ruff. Check the example issues for common solutions.

ZeroDivisionError2 reports

ZeroDivisionError arises when the denominator in a division or modulo operation is zero. To fix this, add a conditional check to ensure the denominator is not zero before performing the division or modulo, and handle the zero case appropriately (e.g., return a default value, raise a different exception, or log a warning). For example: `if denominator != 0: result = numerator / denominator else: result = 0`

ThreadPoolBuildError1 report

The "ThreadPoolBuildError" in ruff often arises from resource limitations when creating worker threads, especially with a high number of CPUs. To resolve this, reduce the `concurrency` setting in your ruff configuration file (e.g., pyproject.toml) to a lower value, or explicitly set it to `1` to disable threading and use a single process. If you encounter this error locally, consider if the number of logical cores is being correctly detected.

BaseException1 report

The "BaseException" error in ruff often arises when code implicitly relies on `BaseException` being in the built-in namespace without explicitly importing it. To fix this, add `from builtins import BaseException` at the top of the file where the error occurs, ensuring `BaseException` is properly defined in the local scope. This makes the code explicit about its dependency and resolves the ruff error.

NotAllowedError1 report

The "NotAllowedError" often arises when attempting to interact with the clipboard (copy/paste) outside of a user-initiated event handler (like a button click). To fix, ensure clipboard operations are directly triggered by user actions within the appropriate event listener. If using asynchronous functions, carefully manage promises and ensure the clipboard interaction happens before the event flow is interrupted.

Related Dev Tools Packages

Subscribe to Updates

Get notified when new versions are released

RSS Feed