GitPedia
astral-sh

astral-sh/ruff

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

30 Releases
Latest: yesterday
0.15.17Latest
github-actions[bot]github-actions[bot]ยทyesterdayยทJune 11, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-06-11.

โœจ Preview features

  • Allow human-readable names in suppression comments ([#25614](https://github.com/astral-sh/ruff/pull/25614))
  • Fix handling of `ignore` comments within a `disable`/`enable` pair ([#25845](https://github.com/astral-sh/ruff/pull/25845))
  • Prioritize human-readable names in CLI output ([#25869](https://github.com/astral-sh/ruff/pull/25869))
  • Respect diagnostic start and parent ranges and trailing comments in `ruff:ignore` suppressions ([#25673](https://github.com/astral-sh/ruff/pull/25673))
  • \[`flake8-async`\] Add `trio.as_safe_channel` to safe decorators (`ASYNC119`) ([#25775](https://github.com/astral-sh/ruff/pull/25775))
  • \[`flake8-pytest-style`\] Also check `pytest_asyncio` fixtures ([#25375](https://github.com/astral-sh/ruff/pull/25375))
  • \[`ruff`\] Ban `pytest` autouse fixtures (`RUF076`) ([#25477](https://github.com/astral-sh/ruff/pull/25477))
  • \[`pyupgrade`\] Add `from __future__ import annotations` automatically (`UP007`, `UP045`) ([#23259](https://github.com/astral-sh/ruff/pull/23259))

๐Ÿ› Bug fixes

  • Fix diagnostic when `ruff:enable` or `ruff:disable` appears where `ruff:ignore` is expected ([#25700](https://github.com/astral-sh/ruff/pull/25700))
  • \[`pyupgrade`\] Preserve leading empty literals to avoid syntax errors (`UP032`) ([#25491](https://github.com/astral-sh/ruff/pull/25491))

๐Ÿ“‹ Rule changes

  • \[`flake8-pytest-style`\] Clarify diagnostic message for single parameters (`PT007`) ([#25592](https://github.com/astral-sh/ruff/pull/25592))
  • \[`numpy`\] Drop autofix for `np.in1d` (`NPY201`) ([#25612](https://github.com/astral-sh/ruff/pull/25612))
  • \[`pylint`\] Exempt Python version comparisons (`PLR2004`) ([#25743](https://github.com/astral-sh/ruff/pull/25743))

โšก Performance

  • Reserve AST `Vec`s with correct capacity for common cases ([#25451](https://github.com/astral-sh/ruff/pull/25451))

๐Ÿ“ฆ Formatter

  • Preserve whitespace for Quarto cell option comments ([#25641](https://github.com/astral-sh/ruff/pull/25641))

๐Ÿ“ฆ CLI

  • Allow rule names in `ruff rule` ([#25640](https://github.com/astral-sh/ruff/pull/25640))

๐Ÿ“‹ Other changes

  • Fix playground diagnostics scrollbars ([#25642](https://github.com/astral-sh/ruff/pull/25642))

๐Ÿ“ฆ Contributors

  • [@SuryanshSS1011](https://github.com/SuryanshSS1011)
  • [@anishgirianish](https://github.com/anishgirianish)
  • [@romero-deshaw](https://github.com/romero-deshaw)
  • [@karlhillx](https://github.com/karlhillx)
  • [@carljm](https://github.com/carljm)
  • [@ntBre](https://github.com/ntBre)
  • [@11happy](https://github.com/11happy)
  • [@Kilo59](https://github.com/Kilo59)
  • + 7 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.17

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.16
github-actions[bot]github-actions[bot]ยท1w agoยทJune 4, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-06-04.

โœจ Preview features

  • \[`flake8-async`\] Implement `yield-in-context-manager-in-async-generator` (`ASYNC119`) ([#24644](https://github.com/astral-sh/ruff/pull/24644))
  • \[`pylint`\] Narrow diagnostic range and exclude cases without exception handlers (`PLW0717`) ([#25440](https://github.com/astral-sh/ruff/pull/25440))
  • \[`ruff`\] Treat `yield` before `break` from a terminal loop as terminal (`RUF075`) ([#25447](https://github.com/astral-sh/ruff/pull/25447))

๐Ÿ› Bug fixes

  • \[`eradicate`\] Avoid flagging `ruff:ignore` comments as code (`ERA001`) ([#25537](https://github.com/astral-sh/ruff/pull/25537))
  • \[`eradicate`\] Fix `ERA001`/`RUF100` conflict when `noqa` is on commented-out code ([#25414](https://github.com/astral-sh/ruff/pull/25414))
  • \[`pyflakes`\] Avoid removing the `format` call when it would change behavior (`F523`) ([#25320](https://github.com/astral-sh/ruff/pull/25320))
  • \[`pylint`\] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (`PLE2510`, `PLE2512`, `PLE2513`, `PLE2514`, `PLE2515`) ([#25544](https://github.com/astral-sh/ruff/pull/25544))
  • \[`pyupgrade`\] Avoid converting `format` calls with more kinds of side effects (`UP032`) ([#25484](https://github.com/astral-sh/ruff/pull/25484))

๐Ÿ“‹ Rule changes

  • \[`flake8-pytest-style`\] Avoid fixes for ambiguous `argnames` and `argvalues` combinations (`PT006`) ([#24776](https://github.com/astral-sh/ruff/pull/24776))

โšก Performance

  • Drop excess capacity from statement suites during parsing ([#25368](https://github.com/astral-sh/ruff/pull/25368))

๐Ÿ“ Documentation

  • \[`pydocstyle`\] Improve discoverability of rules enabled for each convention ([#24973](https://github.com/astral-sh/ruff/pull/24973))
  • \[`ruff`\] Restore example code for Python versions before 3.15 (`RUF017`) ([#25439](https://github.com/astral-sh/ruff/pull/25439))
  • Fix typo `bin/active` โ†’ `bin/activate` in tutorial ([#25473](https://github.com/astral-sh/ruff/pull/25473))

๐Ÿ“‹ Other changes

  • Shrink additional parser AST collections ([#25465](https://github.com/astral-sh/ruff/pull/25465))

๐Ÿ“ฆ Contributors

  • [@Redslayer112](https://github.com/Redslayer112)
  • [@koriyoshi2041](https://github.com/koriyoshi2041)
  • [@George-Ogden](https://github.com/George-Ogden)
  • [@TejasAmle](https://github.com/TejasAmle)
  • [@anishgirianish](https://github.com/anishgirianish)
  • [@ntBre](https://github.com/ntBre)
  • [@MichaReiser](https://github.com/MichaReiser)
  • [@loganrosen](https://github.com/loganrosen)
  • + 2 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.16

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.15
github-actions[bot]github-actions[bot]ยท2w agoยทMay 28, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-05-28.

โœจ Preview features

  • Fix Markdown closing fence handling ([#25310](https://github.com/astral-sh/ruff/pull/25310))
  • \[`pyflakes`\] Report duplicate imports in `typing.TYPE_CHECKING` block (`F811`) ([#22560](https://github.com/astral-sh/ruff/pull/22560))

๐Ÿ› Bug fixes

  • \[`pyflakes`\] Treat function-scope bare annotations as locals per PEP 526 (`F821`) ([#21540](https://github.com/astral-sh/ruff/pull/21540))

โšก Performance

  • Avoid redundant `TokenValue` drops in the lexer ([#25300](https://github.com/astral-sh/ruff/pull/25300))
  • Reduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens `Vec` size ([#25354](https://github.com/astral-sh/ruff/pull/25354))
  • Use `ThinVec` in AST to shrink `Stmt` ([#25361](https://github.com/astral-sh/ruff/pull/25361))

๐Ÿ“ Documentation

  • Fix `line-length` example for `--config` option ([#25389](https://github.com/astral-sh/ruff/pull/25389))
  • \[`flake8-comprehensions`\] Document `RecursionError` edge case in `__len__` (`C416`) ([#25286](https://github.com/astral-sh/ruff/pull/25286))
  • \[`mccabe`\] Improve example (`C901`) ([#25287](https://github.com/astral-sh/ruff/pull/25287))
  • \[`pyupgrade`\] Clarify fix safety docs (`UP007`, `UP045`) ([#25288](https://github.com/astral-sh/ruff/pull/25288))
  • \[`refurb`\] Document `FURB192` exception change for empty sequences ([#25317](https://github.com/astral-sh/ruff/pull/25317))
  • \[`ruff`\] Document false negative for user-defined types (`RUF013`) ([#25289](https://github.com/astral-sh/ruff/pull/25289))

๐Ÿ“ฆ Formatter

  • Fix formatting of lambdas nested within f-strings ([#25398](https://github.com/astral-sh/ruff/pull/25398))

๐Ÿ“ฆ Server

  • Return code action for `codeAction/resolve` requests that contain no or no valid URL ([#25365](https://github.com/astral-sh/ruff/pull/25365))

๐Ÿ“‹ Other changes

  • Expand semantic syntax errors for invalid walruses ([#25415](https://github.com/astral-sh/ruff/pull/25415))

๐Ÿ“ฆ Contributors

  • [@chirizxc](https://github.com/chirizxc)
  • [@ntBre](https://github.com/ntBre)
  • [@adityasingh2400](https://github.com/adityasingh2400)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@fallintoplace](https://github.com/fallintoplace)
  • [@martin-schlossarek](https://github.com/martin-schlossarek)
  • [@MichaReiser](https://github.com/MichaReiser)
  • [@Ruchir28](https://github.com/Ruchir28)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.15

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.14
github-actions[bot]github-actions[bot]ยท3w agoยทMay 21, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-05-21.

โœจ Preview features

  • \[`airflow`\] Implement `airflow-task-implicit-multiple-outputs` (`AIR202`) ([#25152](https://github.com/astral-sh/ruff/pull/25152))
  • \[`flake8-use-pathlib`\] Mark `PTH101` fix as unsafe when first argument is a class attribute annotated as `int` ([#25086](https://github.com/astral-sh/ruff/pull/25086))
  • \[`pylint`\] Implement `too-many-try-statements` (`W0717`) ([#23970](https://github.com/astral-sh/ruff/pull/23970))
  • \[`ruff`\] Add `incorrect-decorator-order` (`RUF074`) ([#23461](https://github.com/astral-sh/ruff/pull/23461))
  • \[`ruff`\] Add `fallible-context-manager` (`RUF075`) ([#22844](https://github.com/astral-sh/ruff/pull/22844))

๐Ÿ› Bug fixes

  • Fix lambda formatting in interpolated string expressions ([#25144](https://github.com/astral-sh/ruff/pull/25144))
  • Treat generic `frozenset` annotations as immutable ([#25251](https://github.com/astral-sh/ruff/pull/25251))
  • \[`flake8-type-checking`\] Avoid `strict` behavior when `future-annotations` are enabled (`TC001`, `TC002`, `TC003`) ([#25035](https://github.com/astral-sh/ruff/pull/25035))
  • \[`pylint`\] Avoid false positives in `else` clause (`PLR1733`) ([#25177](https://github.com/astral-sh/ruff/pull/25177))

๐Ÿ“‹ Rule changes

  • \[`flake8-comprehensions`\] Skip `C417` for lambdas with positional-only parameters ([#25272](https://github.com/astral-sh/ruff/pull/25272))
  • \[`flake8-simplify`\] Preserve f-string source verbatim in `SIM101` fix ([#25061](https://github.com/astral-sh/ruff/pull/25061))

โšก Performance

  • Avoid unnecessary parser lookahead for operators ([#25290](https://github.com/astral-sh/ruff/pull/25290))

๐Ÿ“ Documentation

  • Update code example setting Neovim LSP log level ([#25284](https://github.com/astral-sh/ruff/pull/25284))

๐Ÿ“‹ Other changes

  • Add full PEP 798 support ([#25104](https://github.com/astral-sh/ruff/pull/25104))
  • Add a parser recursion limit ([#24810](https://github.com/astral-sh/ruff/pull/24810))
  • Update various `ruff_python_stdlib` APIs ([#25273](https://github.com/astral-sh/ruff/pull/25273))

๐Ÿ“ฆ Contributors

  • [@ocaballeror](https://github.com/ocaballeror)
  • [@lerebear](https://github.com/lerebear)
  • [@samuelcolvin](https://github.com/samuelcolvin)
  • [@baltasarblanco](https://github.com/baltasarblanco)
  • [@aconal-com](https://github.com/aconal-com)
  • [@anishgirianish](https://github.com/anishgirianish)
  • [@JelleZijlstra](https://github.com/JelleZijlstra)
  • [@AlexWaygood](https://github.com/AlexWaygood)
  • + 7 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.14

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.13
github-actions[bot]github-actions[bot]ยท1mo agoยทMay 14, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-05-14.

โœจ Preview features

  • Add a rule to flag lazy imports that are eagerly evaluated ([#25016](https://github.com/astral-sh/ruff/pull/25016))
  • \[`pylint`\] Standardize diagnostic message (`PLR0914`, `PLR0917`) ([#24996](https://github.com/astral-sh/ruff/pull/24996))

๐Ÿ› Bug fixes

  • Fix `F811` false positive for class methods ([#24933](https://github.com/astral-sh/ruff/pull/24933))
  • Fix setting selection for multi-folder workspace ([#24819](https://github.com/astral-sh/ruff/pull/24819))
  • \[`eradicate`\] Fix false positive for lines with leading whitespace (`ERA001`) ([#25122](https://github.com/astral-sh/ruff/pull/25122))
  • \[`flake8-pyi`\] Fix false positive for f-string debug specifier (`PYI016`) ([#24098](https://github.com/astral-sh/ruff/pull/24098))

๐Ÿ“‹ Rule changes

  • Always include panic payload in panic diagnostic message ([#24873](https://github.com/astral-sh/ruff/pull/24873))
  • Restrict `PYI034` for in-place operations to enclosing class ([#24511](https://github.com/astral-sh/ruff/pull/24511))
  • Improve error message for parameters that are declared `global` ([#24902](https://github.com/astral-sh/ruff/pull/24902))
  • Update known stdlib ([#25103](https://github.com/astral-sh/ruff/pull/25103))

โšก Performance

  • \[`isort`\] Avoid constructing `glob::Pattern`s for literal known modules ([#25123](https://github.com/astral-sh/ruff/pull/25123))

๐Ÿ“ฆ CLI

  • Add TOML examples to `--config` help text ([#25013](https://github.com/astral-sh/ruff/pull/25013))
  • Colorize ruff check 'All checks passed' ([#25085](https://github.com/astral-sh/ruff/pull/25085))

๐Ÿ“ฆ Configuration

  • Increase max allowed value of `line-length` setting ([#24962](https://github.com/astral-sh/ruff/pull/24962))

๐Ÿ“ Documentation

  • Add `D203` to rules that conflict with the formatter ([#25044](https://github.com/astral-sh/ruff/pull/25044))
  • Clarify `COM819` and formatter interaction ([#25045](https://github.com/astral-sh/ruff/pull/25045))
  • Clarify that `NotImplemented` is a value, not an exception (`F901`) ([#25054](https://github.com/astral-sh/ruff/pull/25054))
  • Update number of lint rules supported ([#24942](https://github.com/astral-sh/ruff/pull/24942))

๐Ÿ“‹ Other changes

  • Simplify the playground's markdown template ([#24924](https://github.com/astral-sh/ruff/pull/24924))

๐Ÿ“ฆ Contributors

  • [@MichaReiser](https://github.com/MichaReiser)
  • [@brian-c11](https://github.com/brian-c11)
  • [@Andrej730](https://github.com/Andrej730)
  • [@denyszhak](https://github.com/denyszhak)
  • [@darestack](https://github.com/darestack)
  • [@sharkdp](https://github.com/sharkdp)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@EkriirkE](https://github.com/EkriirkE)
  • + 4 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.13

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.12
github-actions[bot]github-actions[bot]ยท1mo agoยทApril 24, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-04-24.

โœจ Preview features

  • Implement `#ruff:file-ignore` file-level suppressions ([#23599](https://github.com/astral-sh/ruff/pull/23599))
  • Implement `#ruff:ignore` logical-line suppressions ([#23404](https://github.com/astral-sh/ruff/pull/23404))
  • Revert preview changes to displayed diagnostic severity in LSP ([#24789](https://github.com/astral-sh/ruff/pull/24789))
  • \[`airflow`\] Implement `task-branch-as-short-circuit` (`AIR004`) ([#23579](https://github.com/astral-sh/ruff/pull/23579))
  • \[`flake8-bugbear`\] Fix `break`/`continue` handling in `loop-iterator-mutation` (`B909`) ([#24440](https://github.com/astral-sh/ruff/pull/24440))
  • \[`pylint`\] Fix `PLC2701` for type parameter scopes ([#24576](https://github.com/astral-sh/ruff/pull/24576))

๐Ÿ“‹ Rule changes

  • \[`pandas-vet`\] Suggest `.array` as well in `PD011` ([#24805](https://github.com/astral-sh/ruff/pull/24805))

๐Ÿ“ฆ CLI

  • Respect default Unix permissions for cache files ([#24794](https://github.com/astral-sh/ruff/pull/24794))

๐Ÿ“ Documentation

  • \[`pylint`\] Fix `PLR0124` description not to claim self-comparison always returns the same value ([#24749](https://github.com/astral-sh/ruff/pull/24749))
  • \[`pyupgrade`\] Expand docs on reusable `TypeVar`s and scoping (`UP046`) ([#24153](https://github.com/astral-sh/ruff/pull/24153))
  • Improve rules table accessibility ([#24711](https://github.com/astral-sh/ruff/pull/24711))

๐Ÿ“ฆ Contributors

  • [@dylwil3](https://github.com/dylwil3)
  • [@AlexWaygood](https://github.com/AlexWaygood)
  • [@woodruffw](https://github.com/woodruffw)
  • [@avasis-ai](https://github.com/avasis-ai)
  • [@Dev-iL](https://github.com/Dev-iL)
  • [@denyszhak](https://github.com/denyszhak)
  • [@ShipItAndPray](https://github.com/ShipItAndPray)
  • [@anishgirianish](https://github.com/anishgirianish)
  • + 3 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.12

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.11
github-actions[bot]github-actions[bot]ยท1mo agoยทApril 16, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-04-16.

โœจ Preview features

  • \[`ruff`\] Ignore `RUF029` when function is decorated with `asynccontextmanager` ([#24642](https://github.com/astral-sh/ruff/pull/24642))
  • \[`airflow`\] Implement `airflow-xcom-pull-in-template-string` (`AIR201`) ([#23583](https://github.com/astral-sh/ruff/pull/23583))
  • \[`flake8-bandit`\] Fix `S103` false positives and negatives in mask analysis ([#24424](https://github.com/astral-sh/ruff/pull/24424))

๐Ÿ› Bug fixes

  • \[`flake8-async`\] Omit overridden methods for `ASYNC109` ([#24648](https://github.com/astral-sh/ruff/pull/24648))

๐Ÿ“ Documentation

  • \[`flake8-async`\] Add override mention to `ASYNC109` docs ([#24666](https://github.com/astral-sh/ruff/pull/24666))
  • Update Neovim config examples to use `vim.lsp.config` ([#24577](https://github.com/astral-sh/ruff/pull/24577))

๐Ÿ“ฆ Contributors

  • [@augustelalande](https://github.com/augustelalande)
  • [@anishgirianish](https://github.com/anishgirianish)
  • [@benberryallwood](https://github.com/benberryallwood)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@Dev-iL](https://github.com/Dev-iL)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.11

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.10
github-actions[bot]github-actions[bot]ยท2mo agoยทApril 9, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-04-09.

โœจ Preview features

  • \[`flake8-logging`\] Allow closures in except handlers (`LOG004`) ([#24464](https://github.com/astral-sh/ruff/pull/24464))
  • \[`flake8-self`\] Make `SLF` diagnostics robust to non-self-named variables ([#24281](https://github.com/astral-sh/ruff/pull/24281))
  • \[`flake8-simplify`\] Make the fix for `collapsible-if` safe in `preview` (`SIM102`) ([#24371](https://github.com/astral-sh/ruff/pull/24371))

๐Ÿ› Bug fixes

  • Avoid emitting multi-line f-string elements before Python 3.12 ([#24377](https://github.com/astral-sh/ruff/pull/24377))
  • Avoid syntax error from `E502` fixes in f-strings and t-strings ([#24410](https://github.com/astral-sh/ruff/pull/24410))
  • Strip form feeds from indent passed to `dedent_to` ([#24381](https://github.com/astral-sh/ruff/pull/24381))
  • \[`pyupgrade`\] Fix panic caused by handling of octals (`UP012`) ([#24390](https://github.com/astral-sh/ruff/pull/24390))
  • Reject multi-line f-string elements before Python 3.12 ([#24355](https://github.com/astral-sh/ruff/pull/24355))

๐Ÿ“‹ Rule changes

  • \[`ruff`\] Treat f-string interpolation as potential side effect (`RUF019`) ([#24426](https://github.com/astral-sh/ruff/pull/24426))

๐Ÿ“ฆ Server

  • Add support for custom file extensions ([#24463](https://github.com/astral-sh/ruff/pull/24463))

๐Ÿ“ Documentation

  • Document adding fixes in CONTRIBUTING.md ([#24393](https://github.com/astral-sh/ruff/pull/24393))
  • Fix JSON typo in settings example ([#24517](https://github.com/astral-sh/ruff/pull/24517))

๐Ÿ“ฆ Contributors

  • [@charliermarsh](https://github.com/charliermarsh)
  • [@dylwil3](https://github.com/dylwil3)
  • [@silverstein](https://github.com/silverstein)
  • [@anishgirianish](https://github.com/anishgirianish)
  • [@shizukushq](https://github.com/shizukushq)
  • [@zanieb](https://github.com/zanieb)
  • [@AlexWaygood](https://github.com/AlexWaygood)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.10

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.9
github-actions[bot]github-actions[bot]ยท2mo agoยทApril 2, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-04-02.

โœจ Preview features

  • \[`pyflakes`\] Flag annotated variable redeclarations as `F811` in preview mode ([#24244](https://github.com/astral-sh/ruff/pull/24244))
  • \[`ruff`\] Allow dunder-named assignments in non-strict mode for `RUF067` ([#24089](https://github.com/astral-sh/ruff/pull/24089))

๐Ÿ› Bug fixes

  • \[`flake8-errmsg`\] Avoid shadowing existing `msg` in fix for `EM101` ([#24363](https://github.com/astral-sh/ruff/pull/24363))
  • \[`flake8-simplify`\] Ignore pre-initialization references in `SIM113` ([#24235](https://github.com/astral-sh/ruff/pull/24235))
  • \[`pycodestyle`\] Fix `W391` fixes for consecutive empty notebook cells ([#24236](https://github.com/astral-sh/ruff/pull/24236))
  • \[`pyupgrade`\] Fix `UP008` nested class matching ([#24273](https://github.com/astral-sh/ruff/pull/24273))
  • \[`pyupgrade`\] Ignore strings with string-only escapes (`UP012`) ([#16058](https://github.com/astral-sh/ruff/pull/16058))
  • \[`ruff`\] `RUF072`: skip formfeeds on dedent ([#24308](https://github.com/astral-sh/ruff/pull/24308))
  • \[`ruff`\] Avoid re-using symbol in `RUF024` fix ([#24316](https://github.com/astral-sh/ruff/pull/24316))
  • \[`ruff`\] Parenthesize expression in `RUF050` fix ([#24234](https://github.com/astral-sh/ruff/pull/24234))
  • + 1 more

๐Ÿ“‹ Rule changes

  • \[`flake8-simplify`\] Suppress `SIM105` for `except*` before Python 3.12 ([#23869](https://github.com/astral-sh/ruff/pull/23869))
  • \[`pyflakes`\] Extend `F507` to flag `%`-format strings with zero placeholders ([#24215](https://github.com/astral-sh/ruff/pull/24215))
  • \[`pyupgrade`\] `UP018` should detect more unnecessarily wrapped literals (UP018) ([#24093](https://github.com/astral-sh/ruff/pull/24093))
  • \[`pyupgrade`\] Fix `UP008` callable scope handling to support lambdas ([#24274](https://github.com/astral-sh/ruff/pull/24274))
  • \[`ruff`\] `RUF010`: Mark fix as unsafe when it deletes a comment ([#24270](https://github.com/astral-sh/ruff/pull/24270))

๐Ÿ“ฆ Formatter

  • Add `nested-string-quote-style` formatting option ([#24312](https://github.com/astral-sh/ruff/pull/24312))

๐Ÿ“ Documentation

  • \[`flake8-bugbear`\] Clarify RUF071 fix safety for non-path string comparisons ([#24149](https://github.com/astral-sh/ruff/pull/24149))
  • \[`flake8-type-checking`\] Clarify import cycle wording for `TC001`/`TC002`/`TC003` ([#24322](https://github.com/astral-sh/ruff/pull/24322))

๐Ÿ“‹ Other changes

  • Avoid rendering fix lines with trailing whitespace after `|` ([#24343](https://github.com/astral-sh/ruff/pull/24343))

๐Ÿ“ฆ Contributors

  • [@charliermarsh](https://github.com/charliermarsh)
  • [@MichaReiser](https://github.com/MichaReiser)
  • [@tranhoangtu-it](https://github.com/tranhoangtu-it)
  • [@dylwil3](https://github.com/dylwil3)
  • [@zsol](https://github.com/zsol)
  • [@renovate](https://github.com/renovate)
  • [@bitloi](https://github.com/bitloi)
  • [@danparizher](https://github.com/danparizher)
  • + 8 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.9

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.8
github-actions[bot]github-actions[bot]ยท2mo agoยทMarch 26, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-03-26.

โœจ Preview features

  • \[`ruff`\] New rule `unnecessary-if` (`RUF050`) ([#24114](https://github.com/astral-sh/ruff/pull/24114))
  • \[`ruff`\] New rule `useless-finally` (`RUF072`) ([#24165](https://github.com/astral-sh/ruff/pull/24165))
  • \[`ruff`\] New rule `f-string-percent-format` (`RUF073`): warn when using `%` operator on an f-string ([#24162](https://github.com/astral-sh/ruff/pull/24162))
  • \[`pyflakes`\] Recognize `frozendict` as a builtin for Python 3.15+ ([#24100](https://github.com/astral-sh/ruff/pull/24100))

๐Ÿ› Bug fixes

  • \[`flake8-async`\] Use fully-qualified `anyio.lowlevel` import in autofix (`ASYNC115`) ([#24166](https://github.com/astral-sh/ruff/pull/24166))
  • \[`flake8-bandit`\] Check tuple arguments for partial paths in `S607` ([#24080](https://github.com/astral-sh/ruff/pull/24080))
  • \[`pyflakes`\] Skip `undefined-name` (`F821`) for conditionally deleted variables ([#24088](https://github.com/astral-sh/ruff/pull/24088))
  • `E501`/`W505`/formatter: Exclude nested pragma comments from line width calculation ([#24071](https://github.com/astral-sh/ruff/pull/24071))
  • Fix `%foo?` parsing in IPython assignment expressions ([#24152](https://github.com/astral-sh/ruff/pull/24152))
  • `analyze graph`: resolve string imports that reference attributes, not just modules ([#24058](https://github.com/astral-sh/ruff/pull/24058))

๐Ÿ“‹ Rule changes

  • \[`eradicate`\] ignore `ty: ignore` comments in `ERA001` ([#24192](https://github.com/astral-sh/ruff/pull/24192))
  • \[`flake8-bandit`\] Treat `sys.executable` as trusted input in `S603` ([#24106](https://github.com/astral-sh/ruff/pull/24106))
  • \[`flake8-self`\] Recognize `Self` annotation and `self` assignment in `SLF001` ([#24144](https://github.com/astral-sh/ruff/pull/24144))
  • \[`pyflakes`\] `F507`: Fix false negative for non-tuple RHS in `%`-formatting ([#24142](https://github.com/astral-sh/ruff/pull/24142))
  • \[`refurb`\] Parenthesize generator arguments in `FURB142` fixer ([#24200](https://github.com/astral-sh/ruff/pull/24200))

โšก Performance

  • Speed up diagnostic rendering ([#24146](https://github.com/astral-sh/ruff/pull/24146))

๐Ÿ“ฆ Server

  • Warn when Markdown files are skipped due to preview being disabled ([#24150](https://github.com/astral-sh/ruff/pull/24150))

๐Ÿ“ Documentation

  • Clarify `extend-ignore` and `extend-select` settings documentation ([#24064](https://github.com/astral-sh/ruff/pull/24064))
  • Mention AI policy in PR template ([#24198](https://github.com/astral-sh/ruff/pull/24198))

๐Ÿ“‹ Other changes

  • Use trusted publishing for NPM packages ([#24171](https://github.com/astral-sh/ruff/pull/24171))

๐Ÿ“ฆ Contributors

  • [@bitloi](https://github.com/bitloi)
  • [@Sim-hu](https://github.com/Sim-hu)
  • [@mvanhorn](https://github.com/mvanhorn)
  • [@chinar-amrutkar](https://github.com/chinar-amrutkar)
  • [@markjm](https://github.com/markjm)
  • [@RenzoMXD](https://github.com/RenzoMXD)
  • [@vivekkhimani](https://github.com/vivekkhimani)
  • [@seroperson](https://github.com/seroperson)
  • + 6 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.8

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.7
github-actions[bot]github-actions[bot]ยท2mo agoยทMarch 19, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-03-19.

โœจ Preview features

  • Display output severity in preview ([#23845](https://github.com/astral-sh/ruff/pull/23845))
  • Don't show `noqa` hover for non-Python documents ([#24040](https://github.com/astral-sh/ruff/pull/24040))

๐Ÿ“‹ Rule changes

  • \[`pycodestyle`\] Recognize `pyrefly:` as a pragma comment (`E501`) ([#24019](https://github.com/astral-sh/ruff/pull/24019))

๐Ÿ“ฆ Server

  • Don't return code actions for non-Python documents ([#23905](https://github.com/astral-sh/ruff/pull/23905))

๐Ÿ“ Documentation

  • Add company AI policy to contributing guide ([#24021](https://github.com/astral-sh/ruff/pull/24021))
  • Document editor features for Markdown code formatting ([#23924](https://github.com/astral-sh/ruff/pull/23924))
  • \[`pylint`\] Improve phrasing (`PLC0208`) ([#24033](https://github.com/astral-sh/ruff/pull/24033))

๐Ÿ“‹ Other changes

  • Use PEP 639 license information ([#19661](https://github.com/astral-sh/ruff/pull/19661))

๐Ÿ“ฆ Contributors

  • [@tmimmanuel](https://github.com/tmimmanuel)
  • [@DimitriPapadopoulos](https://github.com/DimitriPapadopoulos)
  • [@amyreese](https://github.com/amyreese)
  • [@statxc](https://github.com/statxc)
  • [@dylwil3](https://github.com/dylwil3)
  • [@hunterhogan](https://github.com/hunterhogan)
  • [@renovate](https://github.com/renovate)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.7

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.6
github-actions[bot]github-actions[bot]ยท3mo agoยทMarch 12, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-03-12.

โœจ Preview features

  • Add support for `lazy` import parsing ([#23755](https://github.com/astral-sh/ruff/pull/23755))
  • Add support for star-unpacking of comprehensions (PEP 798) ([#23788](https://github.com/astral-sh/ruff/pull/23788))
  • Reject semantic syntax errors for lazy imports ([#23757](https://github.com/astral-sh/ruff/pull/23757))
  • Drop a few rules from the preview default set ([#23879](https://github.com/astral-sh/ruff/pull/23879))
  • \[`airflow`\] Flag `Variable.get()` calls outside of task execution context (`AIR003`) ([#23584](https://github.com/astral-sh/ruff/pull/23584))
  • \[`airflow`\] Flag runtime-varying values in DAG/task constructor arguments (`AIR304`) ([#23631](https://github.com/astral-sh/ruff/pull/23631))
  • \[`flake8-bugbear`\] Implement `delattr-with-constant` (`B043`) ([#23737](https://github.com/astral-sh/ruff/pull/23737))
  • \[`flake8-tidy-imports`\] Add `TID254` to enforce lazy imports ([#23777](https://github.com/astral-sh/ruff/pull/23777))
  • + 8 more

๐Ÿ› Bug fixes

  • Fix `--add-noqa` creating unwanted leading whitespace ([#23773](https://github.com/astral-sh/ruff/pull/23773))
  • Fix `--add-noqa` breaking shebangs ([#23577](https://github.com/astral-sh/ruff/pull/23577))
  • [formatter] Fix lambda body formatting for multiline calls and subscripts ([#23866](https://github.com/astral-sh/ruff/pull/23866))
  • [formatter] Preserve required annotation parentheses in annotated assignments ([#23865](https://github.com/astral-sh/ruff/pull/23865))
  • [formatter] Preserve type-expression parentheses in the formatter ([#23867](https://github.com/astral-sh/ruff/pull/23867))
  • \[`flake8-annotations`\] Fix stack overflow in `ANN401` on quoted annotations with escape sequences ([#23912](https://github.com/astral-sh/ruff/pull/23912))
  • \[`pep8-naming`\] Check naming conventions in `match` pattern bindings (`N806`, `N815`, `N816`) ([#23899](https://github.com/astral-sh/ruff/pull/23899))
  • \[`perflint`\] Fix comment duplication in fixes (`PERF401`, `PERF403`) ([#23729](https://github.com/astral-sh/ruff/pull/23729))
  • + 2 more

๐Ÿ“‹ Rule changes

  • \[`flake8-bandit`\] Flag `S501` with `requests.request` ([#23873](https://github.com/astral-sh/ruff/pull/23873))
  • \[`flake8-executable`\] Fix WSL detection in non-Docker containers ([#22879](https://github.com/astral-sh/ruff/pull/22879))
  • \[`flake8-print`\] Ignore `pprint` calls with `stream=` ([#23787](https://github.com/astral-sh/ruff/pull/23787))

๐Ÿ“ Documentation

  • Update docs for Markdown code block formatting ([#23871](https://github.com/astral-sh/ruff/pull/23871))
  • \[`flake8-bugbear`\] Fix misleading description for `B904` ([#23731](https://github.com/astral-sh/ruff/pull/23731))

๐Ÿ“ฆ Contributors

  • [@zsol](https://github.com/zsol)
  • [@carljm](https://github.com/carljm)
  • [@ntBre](https://github.com/ntBre)
  • [@Bortlesboat](https://github.com/Bortlesboat)
  • [@sososonia-cyber](https://github.com/sososonia-cyber)
  • [@chirizxc](https://github.com/chirizxc)
  • [@leandrobbraga](https://github.com/leandrobbraga)
  • [@11happy](https://github.com/11happy)
  • + 7 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.6

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.5
github-actions[bot]github-actions[bot]ยท3mo agoยทMarch 5, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-03-05.

โœจ Preview features

  • Discover Markdown files by default in preview mode ([#23434](https://github.com/astral-sh/ruff/pull/23434))
  • \[`perflint`\] Extend `PERF102` to comprehensions and generators ([#23473](https://github.com/astral-sh/ruff/pull/23473))
  • \[`refurb`\] Fix `FURB101` and `FURB103` false positives when I/O variable is used later ([#23542](https://github.com/astral-sh/ruff/pull/23542))
  • \[`ruff`\] Add fix for `none-not-at-end-of-union` (`RUF036`) ([#22829](https://github.com/astral-sh/ruff/pull/22829))
  • \[`ruff`\] Fix false positive for `re.split` with empty string pattern (`RUF055`) ([#23634](https://github.com/astral-sh/ruff/pull/23634))

๐Ÿ› Bug fixes

  • \[`fastapi`\] Handle callable class dependencies with `__call__` method (`FAST003`) ([#23553](https://github.com/astral-sh/ruff/pull/23553))
  • \[`pydocstyle`\] Fix numpy section ordering (`D420`) ([#23685](https://github.com/astral-sh/ruff/pull/23685))
  • \[`pyflakes`\] Fix false positive for names shadowing re-exports (`F811`) ([#23356](https://github.com/astral-sh/ruff/pull/23356))
  • \[`pyupgrade`\] Avoid inserting redundant `None` elements in `UP045` ([#23459](https://github.com/astral-sh/ruff/pull/23459))

๐Ÿ“ Documentation

  • Document extension mapping for Markdown code formatting ([#23574](https://github.com/astral-sh/ruff/pull/23574))
  • Update default Python version examples ([#23605](https://github.com/astral-sh/ruff/pull/23605))

๐Ÿ“‹ Other changes

  • Publish releases to Astral mirror ([#23616](https://github.com/astral-sh/ruff/pull/23616))

๐Ÿ“ฆ Contributors

  • [@amyreese](https://github.com/amyreese)
  • [@stakeswky](https://github.com/stakeswky)
  • [@chirizxc](https://github.com/chirizxc)
  • [@anishgirianish](https://github.com/anishgirianish)
  • [@bxff](https://github.com/bxff)
  • [@zsol](https://github.com/zsol)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@ntBre](https://github.com/ntBre)
  • + 1 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.5

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.4
github-actions[bot]github-actions[bot]ยท3mo agoยทFebruary 26, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-02-26.
  • This is a follow-up release to 0.15.3 that resolves a panic when the new rule `PLR1712` was enabled with any rule that analyzes definitions, such as many of the `ANN` or `D` rules.

๐Ÿ› Bug fixes

  • Fix panic on access to definitions after analyzing definitions ([#23588](https://github.com/astral-sh/ruff/pull/23588))
  • \[`pyflakes`\] Suppress false positive in `F821` for names used before `del` in stub files ([#23550](https://github.com/astral-sh/ruff/pull/23550))

๐Ÿ“ Documentation

  • Clarify first-party import detection in Ruff ([#23591](https://github.com/astral-sh/ruff/pull/23591))
  • Fix incorrect `import-heading` example ([#23568](https://github.com/astral-sh/ruff/pull/23568))

๐Ÿ“ฆ Contributors

  • [@stakeswky](https://github.com/stakeswky)
  • [@ntBre](https://github.com/ntBre)
  • [@thejcannon](https://github.com/thejcannon)
  • [@GeObts](https://github.com/GeObts)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.4/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.15.4/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.4

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.3
github-actions[bot]github-actions[bot]ยท3mo agoยทFebruary 26, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-02-26.

โœจ Preview features

  • Drop explicit support for `.qmd` file extension ([#23572](https://github.com/astral-sh/ruff/pull/23572))
  • This can now be enabled instead by setting the [`extension`](https://docs.astral.sh/ruff/settings/#extension) option:
  • ```toml
  • extension = { qmd = "markdown" }
  • [tool.ruff]
  • extension = { qmd = "markdown" }
  • ```
  • Include configured extensions in file discovery ([#23400](https://github.com/astral-sh/ruff/pull/23400))
  • + 9 more

๐Ÿ› Bug fixes

  • Avoid infinite loop between `I002` and `PYI025` ([#23352](https://github.com/astral-sh/ruff/pull/23352))
  • \[`pyflakes`\] Fix false positive for `@overload` from `lint.typing-modules` (`F811`) ([#23357](https://github.com/astral-sh/ruff/pull/23357))
  • \[`pyupgrade`\] Fix false positive for `TypeVar` default before Python 3.12 (`UP046`) ([#23540](https://github.com/astral-sh/ruff/pull/23540))
  • \[`pyupgrade`\] Fix handling of `\N` in raw strings (`UP032`) ([#22149](https://github.com/astral-sh/ruff/pull/22149))

๐Ÿ“‹ Rule changes

  • Render sub-diagnostics in the GitHub output format ([#23455](https://github.com/astral-sh/ruff/pull/23455))
  • \[`flake8-bugbear`\] Tag certain `B007` diagnostics as unnecessary ([#23453](https://github.com/astral-sh/ruff/pull/23453))
  • \[`ruff`\] Ignore unknown rule codes in `RUF100` ([#23531](https://github.com/astral-sh/ruff/pull/23531))
  • These are now flagged by [`RUF102`](https://docs.astral.sh/ruff/rules/invalid-rule-code/) instead.

๐Ÿ“ Documentation

  • Fix missing settings links for several linters ([#23519](https://github.com/astral-sh/ruff/pull/23519))
  • Update isort action comments heading ([#23515](https://github.com/astral-sh/ruff/pull/23515))
  • \[`pydocstyle`\] Fix double comma in description of `D404` ([#23440](https://github.com/astral-sh/ruff/pull/23440))

๐Ÿ“‹ Other changes

  • Update the Python module (notably `find_ruff_bin`) for parity with uv ([#23406](https://github.com/astral-sh/ruff/pull/23406))

๐Ÿ“ฆ Contributors

  • [@zanieb](https://github.com/zanieb)
  • [@o1x3](https://github.com/o1x3)
  • [@assadyousuf](https://github.com/assadyousuf)
  • [@kar-ganap](https://github.com/kar-ganap)
  • [@denyszhak](https://github.com/denyszhak)
  • [@amyreese](https://github.com/amyreese)
  • [@carljm](https://github.com/carljm)
  • [@anishgirianish](https://github.com/anishgirianish)
  • + 6 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.3/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.15.3/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.3

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.2
github-actions[bot]github-actions[bot]ยท3mo agoยทFebruary 19, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-02-19.

โœจ Preview features

  • Expand the default rule set ([#23385](https://github.com/astral-sh/ruff/pull/23385))
  • [`multiple-imports-on-one-line`](https://docs.astral.sh/ruff/rules/multiple-imports-on-one-line) (`E401`)
  • [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file) (`E402`)
  • [`module-import-not-at-top-of-file`](https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file) (`E701`)
  • [`multiple-statements-on-one-line-semicolon`](https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon) (`E702`)
  • [`useless-semicolon`](https://docs.astral.sh/ruff/rules/useless-semicolon) (`E703`)
  • [`none-comparison`](https://docs.astral.sh/ruff/rules/none-comparison) (`E711`)
  • [`true-false-comparison`](https://docs.astral.sh/ruff/rules/true-false-comparison) (`E712`)
  • + 20 more

๐Ÿ› Bug fixes

  • \[`flake8-async`\] Fix `in_async_context` logic ([#23426](https://github.com/astral-sh/ruff/pull/23426))
  • \[`ruff`\] Fix for `RUF102` should delete entire comment ([#23380](https://github.com/astral-sh/ruff/pull/23380))
  • \[`ruff`\] Suppress diagnostic for strings with backslashes in interpolations before Python 3.12 (`RUF027`) ([#21069](https://github.com/astral-sh/ruff/pull/21069))
  • \[`flake8-bugbear`\] Fix `B023` false positive for immediately-invoked lambdas ([#23294](https://github.com/astral-sh/ruff/pull/23294))
  • [parser] Fix false syntax error for match-like annotated assignments ([#23297](https://github.com/astral-sh/ruff/pull/23297))
  • [parser] Fix indentation tracking after line continuations ([#23417](https://github.com/astral-sh/ruff/pull/23417))

๐Ÿ“‹ Rule changes

  • \[`flake8-executable`\] Allow global flags in uv shebangs (`EXE003`) ([#22582](https://github.com/astral-sh/ruff/pull/22582))
  • \[`pyupgrade`\] Fix handling of `typing.{io,re}` (`UP035`) ([#23131](https://github.com/astral-sh/ruff/pull/23131))
  • \[`ruff`\] Detect `PLC0207` on chained `str.split()` calls ([#23275](https://github.com/astral-sh/ruff/pull/23275))

๐Ÿ“ฆ CLI

  • Remove invalid inline `noqa` warning ([#23270](https://github.com/astral-sh/ruff/pull/23270))

๐Ÿ“ฆ Configuration

  • Add extension mapping to configuration file options ([#23384](https://github.com/astral-sh/ruff/pull/23384))

๐Ÿ“ Documentation

  • Add `Q004` to the list of conflicting rules ([#23340](https://github.com/astral-sh/ruff/pull/23340))
  • \[`ruff`\] Expand `lint.external` docs and add sub-diagnostic (`RUF100`, `RUF102`) ([#23268](https://github.com/astral-sh/ruff/pull/23268))

๐Ÿ“ฆ Contributors

  • [@dylwil3](https://github.com/dylwil3)
  • [@Jkhall81](https://github.com/Jkhall81)
  • [@danparizher](https://github.com/danparizher)
  • [@dhruvmanila](https://github.com/dhruvmanila)
  • [@harupy](https://github.com/harupy)
  • [@ngnpope](https://github.com/ngnpope)
  • [@amyreese](https://github.com/amyreese)
  • [@kar-ganap](https://github.com/kar-ganap)
  • + 4 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.2/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.15.2/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.2

  • | File | Platform | Checksum |
  • |--------|----------|----------|

๐Ÿงช Verifying GitHub Artifact Attestations

  • The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the [GitHub CLI](https://cli.github.com/manual/gh_attestation_verify):
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff
  • ```
  • You can also download the attestation from [GitHub](https://github.com/astral-sh/ruff/attestations) and verify against that directly:
  • ```sh
  • gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
  • ```
0.15.1
github-actions[bot]github-actions[bot]ยท4mo agoยทFebruary 13, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-02-12.

โœจ Preview features

  • \[`airflow`\] Add ruff rules to catch deprecated Airflow imports for Airflow 3.1 (`AIR321`) ([#22376](https://github.com/astral-sh/ruff/pull/22376))
  • \[`airflow`\] Third positional parameter not named `ti_key` should be flagged for `BaseOperatorLink.get_link` (`AIR303`) ([#22828](https://github.com/astral-sh/ruff/pull/22828))
  • \[`flake8-gettext`\] Fix false negatives for plural argument of `ngettext` (`INT001`, `INT002`, `INT003`) ([#21078](https://github.com/astral-sh/ruff/pull/21078))
  • \[`pyflakes`\] Fix infinite loop in preview fix for `unused-import` (`F401`) ([#23038](https://github.com/astral-sh/ruff/pull/23038))
  • \[`pygrep-hooks`\] Detect non-existent mock methods in standalone expressions (`PGH005`) ([#22830](https://github.com/astral-sh/ruff/pull/22830))
  • \[`pylint`\] Allow dunder submodules and improve diagnostic range (`PLC2701`) ([#22804](https://github.com/astral-sh/ruff/pull/22804))
  • \[`pyupgrade`\] Improve diagnostic range for tuples (`UP024`) ([#23013](https://github.com/astral-sh/ruff/pull/23013))
  • \[`refurb`\] Check subscripts in tuple do not use lambda parameters in `reimplemented-operator` (`FURB118`) ([#23079](https://github.com/astral-sh/ruff/pull/23079))
  • + 8 more

๐Ÿ› Bug fixes

  • Avoid false positive for undefined variables in `FAST001` ([#23224](https://github.com/astral-sh/ruff/pull/23224))
  • Avoid introducing syntax errors for `FAST003` autofix ([#23227](https://github.com/astral-sh/ruff/pull/23227))
  • Avoid suggesting `InitVar` for `__post_init__` that references PEP 695 type parameters ([#23226](https://github.com/astral-sh/ruff/pull/23226))
  • Deduplicate type variables in generic functions ([#23225](https://github.com/astral-sh/ruff/pull/23225))
  • Fix exception handler parenthesis removal for Python 3.14+ ([#23126](https://github.com/astral-sh/ruff/pull/23126))
  • Fix f-string middle panic when parsing t-strings ([#23232](https://github.com/astral-sh/ruff/pull/23232))
  • Wrap `RUF020` target for multiline fixes ([#23210](https://github.com/astral-sh/ruff/pull/23210))
  • Wrap `UP007` target for multiline fixes ([#23208](https://github.com/astral-sh/ruff/pull/23208))
  • + 2 more

๐Ÿ“‹ Rule changes

  • Use `ruff` instead of `Ruff` as the program name in GitHub output format ([#23240](https://github.com/astral-sh/ruff/pull/23240))
  • \[`PT006`\] Fix syntax error when unpacking nested tuples in `parametrize` fixes (#22441) ([#22464](https://github.com/astral-sh/ruff/pull/22464))
  • \[`airflow`\] Catch deprecated attribute access from context key for Airflow 3.0 (`AIR301`) ([#22850](https://github.com/astral-sh/ruff/pull/22850))
  • \[`airflow`\] Capture deprecated arguments and a decorator (`AIR301`) ([#23170](https://github.com/astral-sh/ruff/pull/23170))
  • \[`flake8-boolean-trap`\] Add `multiprocessing.Value` to excluded functions for `FBT003` ([#23010](https://github.com/astral-sh/ruff/pull/23010))
  • \[`flake8-bugbear`\] Add a secondary annotation showing the previous occurrence (`B033`) ([#22634](https://github.com/astral-sh/ruff/pull/22634))
  • \[`flake8-type-checking`\] Add sub-diagnostic showing the runtime use of an annotation (`TC004`) ([#23091](https://github.com/astral-sh/ruff/pull/23091))
  • \[`isort`\] Support configurable import section heading comments ([#23151](https://github.com/astral-sh/ruff/pull/23151))
  • + 1 more

๐Ÿ“ฆ Formatter

  • Suppress diagnostic output for `format --check --silent` ([#17736](https://github.com/astral-sh/ruff/pull/17736))

๐Ÿ“ Documentation

  • Add tabbed shell completion documentation ([#23169](https://github.com/astral-sh/ruff/pull/23169))
  • Explain how to enable Markdown formatting for pre-commit hook ([#23077](https://github.com/astral-sh/ruff/pull/23077))
  • Fixed import in `runtime-evaluated-decorators` example ([#23187](https://github.com/astral-sh/ruff/pull/23187))
  • Update ruff server contributing guide ([#23060](https://github.com/astral-sh/ruff/pull/23060))

๐Ÿ“‹ Other changes

  • Exclude WASM artifacts from GitHub releases ([#23221](https://github.com/astral-sh/ruff/pull/23221))

๐Ÿ“ฆ Contributors

  • [@mkniewallner](https://github.com/mkniewallner)
  • [@bxff](https://github.com/bxff)
  • [@dylwil3](https://github.com/dylwil3)
  • [@Avasam](https://github.com/Avasam)
  • [@amyreese](https://github.com/amyreese)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@Alex-ley-scrub](https://github.com/Alex-ley-scrub)
  • [@Kalmaegi](https://github.com/Kalmaegi)
  • + 12 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.1/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.15.1/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.1

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.15.0
github-actions[bot]github-actions[bot]ยท4mo agoยทFebruary 3, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-02-03.
  • Check out the [blog post](https://astral.sh/blog/ruff-v0.15.0) for a migration guide and overview of the changes!

๐Ÿ’ฅ Breaking changes

  • Ruff now formats your code according to the 2026 style guide. See the formatter section below or in the blog post for a detailed list of changes.
  • The linter now supports block suppression comments. For example, to suppress `N803` for all parameters in this function:
  • ```python
  • def foo(
  • legacyArg1,
  • legacyArg2,
  • legacyArg3,
  • legacyArg4,
  • + 7 more

๐Ÿ“ฆ Stabilization

  • The following rules have been stabilized and are no longer in preview:
  • [`blocking-http-call-httpx-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-http-call-httpx-in-async-function) (`ASYNC212`)
  • [`blocking-path-method-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-path-method-in-async-function) (`ASYNC240`)
  • [`blocking-input-in-async-function`](https://docs.astral.sh/ruff/rules/blocking-input-in-async-function) (`ASYNC250`)
  • [`map-without-explicit-strict`](https://docs.astral.sh/ruff/rules/map-without-explicit-strict) (`B912`)
  • [`if-exp-instead-of-or-operator`](https://docs.astral.sh/ruff/rules/if-exp-instead-of-or-operator) (`FURB110`)
  • [`single-item-membership-test`](https://docs.astral.sh/ruff/rules/single-item-membership-test) (`FURB171`)
  • [`missing-maxsplit-arg`](https://docs.astral.sh/ruff/rules/missing-maxsplit-arg) (`PLC0207`)
  • + 17 more

๐Ÿ“ฆ Formatter

  • This release introduces the new 2026 style guide, with the following changes:
  • Lambda parameters are now kept on the same line and lambda bodies will be parenthesized to let them break across multiple lines ([#21385](https://github.com/astral-sh/ruff/pull/21385))
  • Parentheses around tuples of exceptions in `except` clauses will now be removed on Python 3.14 and later ([#20768](https://github.com/astral-sh/ruff/pull/20768))
  • A single empty line is now permitted at the beginning of function bodies ([#21110](https://github.com/astral-sh/ruff/pull/21110))
  • Parentheses are avoided for long `as` captures in `match` statements ([#21176](https://github.com/astral-sh/ruff/pull/21176))
  • Extra spaces between escaped quotes and ending triple quotes can now be omitted ([#17216](https://github.com/astral-sh/ruff/pull/17216))
  • Blank lines are now enforced before classes with decorators in stub files ([#18888](https://github.com/astral-sh/ruff/pull/18888))

โœจ Preview features

  • Apply formatting to Markdown code blocks ([#22470](https://github.com/astral-sh/ruff/pull/22470), [#22990](https://github.com/astral-sh/ruff/pull/22990), [#22996](https://github.com/astral-sh/ruff/pull/22996))
  • See the [documentation](https://docs.astral.sh/ruff/formatter/#markdown-code-formatting) for more details.

๐Ÿ› Bug fixes

  • Fix suppression indentation matching ([#22903](https://github.com/astral-sh/ruff/pull/22903))

๐Ÿ“‹ Rule changes

  • Customize where the `fix_title` sub-diagnostic appears ([#23044](https://github.com/astral-sh/ruff/pull/23044))
  • \[`FastAPI`\] Add sub-diagnostic explaining why a fix was unavailable (`FAST002`) ([#22565](https://github.com/astral-sh/ruff/pull/22565))
  • \[`flake8-annotations`\] Don't suggest `NoReturn` for functions raising `NotImplementedError` (`ANN201`, `ANN202`, `ANN205`, `ANN206`) ([#21311](https://github.com/astral-sh/ruff/pull/21311))
  • \[`pyupgrade`\] Make fix unsafe if it deletes comments (`UP017`) ([#22873](https://github.com/astral-sh/ruff/pull/22873))
  • \[`pyupgrade`\] Make fix unsafe if it deletes comments (`UP020`) ([#22872](https://github.com/astral-sh/ruff/pull/22872))
  • \[`pyupgrade`\] Make fix unsafe if it deletes comments (`UP033`) ([#22871](https://github.com/astral-sh/ruff/pull/22871))
  • \[`refurb`\] Do not add `abc.ABC` if already present (`FURB180`) ([#22234](https://github.com/astral-sh/ruff/pull/22234))
  • \[`refurb`\] Make fix unsafe if it deletes comments (`FURB110`) ([#22768](https://github.com/astral-sh/ruff/pull/22768))
  • + 1 more

๐Ÿ“ฆ Server

  • Identify notebooks by LSP `didOpen` instead of `.ipynb` file extension ([#22810](https://github.com/astral-sh/ruff/pull/22810))

๐Ÿ“ฆ CLI

  • Add `--color` CLI option to force colored output ([#22806](https://github.com/astral-sh/ruff/pull/22806))

๐Ÿ“ Documentation

  • Document `-` stdin convention in CLI help text ([#22817](https://github.com/astral-sh/ruff/pull/22817))
  • \[`refurb`\] Change example to `re.search` with `^` anchor (`FURB167`) ([#22984](https://github.com/astral-sh/ruff/pull/22984))
  • Fix link to Sphinx code block directives ([#23041](https://github.com/astral-sh/ruff/pull/23041))
  • \[`pydocstyle`\] Clarify which quote styles are allowed (`D300`) ([#22825](https://github.com/astral-sh/ruff/pull/22825))
  • \[`flake8-bugbear`\] Improve docs for `no-explicit-stacklevel` (`B028`) ([#22538](https://github.com/astral-sh/ruff/pull/22538))

๐Ÿ“‹ Other changes

  • Update MSRV to 1.91 ([#22874](https://github.com/astral-sh/ruff/pull/22874))

๐Ÿ“ฆ Contributors

  • [@danparizher](https://github.com/danparizher)
  • [@chirizxc](https://github.com/chirizxc)
  • [@amyreese](https://github.com/amyreese)
  • [@Jkhall81](https://github.com/Jkhall81)
  • [@cwkang1998](https://github.com/cwkang1998)
  • [@manzt](https://github.com/manzt)
  • [@11happy](https://github.com/11happy)
  • [@hugovk](https://github.com/hugovk)
  • + 4 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.15.0/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.15.0/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.15.0

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.14
github-actions[bot]github-actions[bot]ยท4mo agoยทJanuary 22, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-01-22.

โœจ Preview features

  • Preserve required parentheses in lambda bodies ([#22747](https://github.com/astral-sh/ruff/pull/22747))
  • Combine range suppression code diagnostics ([#22613](https://github.com/astral-sh/ruff/pull/22613))
  • \[`airflow`\] Second positional argument to `Asset`/`Dataset` should not be a dictionary (`AIR303`) ([#22453](https://github.com/astral-sh/ruff/pull/22453))
  • \[`ruff`\] Detect duplicate entries in `__all__` (`RUF068`) ([#22114](https://github.com/astral-sh/ruff/pull/22114))

๐Ÿ› Bug fixes

  • \[`pyupgrade`\] Allow shadowing non-builtin bindings (`UP029`) ([#22749](https://github.com/astral-sh/ruff/pull/22749))
  • \[`pyupgrade`\] Apply `UP045` to string arguments of `typing.cast` ([#22320](https://github.com/astral-sh/ruff/pull/22320))
  • \[`flake8-pie`\] Detect duplicated declared class fields in `PIE794` ([#22717](https://github.com/astral-sh/ruff/pull/22717))

๐Ÿ“‹ Rule changes

  • \[`flake8-pyi`\] Fix inconsistent handling of forward references for `__new__`, `__enter__`, `__aenter__` in `PYI034` ([#22798](https://github.com/astral-sh/ruff/pull/22798))
  • \[`flake8-pytest-style`\] Support `check` parameter in `PT011` ([#22725](https://github.com/astral-sh/ruff/pull/22725))
  • \[`ruff`\] Add exception for `ctypes.Structure._fields_` (`RUF012`) ([#22559](https://github.com/astral-sh/ruff/pull/22559))
  • Many fixes are now marked unsafe if they would remove comments:
  • \[`flake8-bugbear`\] [`B009`](https://github.com/astral-sh/ruff/pull/22656), [`B010`](https://github.com/astral-sh/ruff/pull/22657), [`B013`](https://github.com/astral-sh/ruff/pull/22658), [`B014`](https://github.com/astral-sh/ruff/pull/22659), [`B033`](https://github.com/astral-sh/ruff/pull/22632)
  • \[`flake8-simplify`\] [`SIM910`](https://github.com/astral-sh/ruff/pull/22662), [`SIM911`](https://github.com/astral-sh/ruff/pull/22661)
  • \[`pyupgrade`\] [`UP007`](https://github.com/astral-sh/ruff/pull/22772), [`UP039`](https://github.com/astral-sh/ruff/pull/22774), [`UP041`](https://github.com/astral-sh/ruff/pull/22773), [`UP045`](https://github.com/astral-sh/ruff/pull/22772)
  • \[`refurb`\] [`FURB105`](https://github.com/astral-sh/ruff/pull/22767), [`FURB116`](https://github.com/astral-sh/ruff/pull/22681), [`FURB136`](https://github.com/astral-sh/ruff/pull/22680), [`FURB140`](https://github.com/astral-sh/ruff/pull/22679), [`FURB145`](https://github.com/astral-sh/ruff/pull/22670), [`FURB154`](https://github.com/astral-sh/ruff/pull/22669), [`FURB157`](https://github.com/astral-sh/ruff/pull/22668), [`FURB164`](https://github.com/astral-sh/ruff/pull/22667),[`FURB181`](https://github.com/astral-sh/ruff/pull/22666), [`FURB188`](https://github.com/astral-sh/ruff/pull/22665)
  • + 1 more

๐Ÿ“ Documentation

  • Add `--exit-non-zero-on-format` to formatter exit codes section ([#22761](https://github.com/astral-sh/ruff/pull/22761))
  • Update contributing guide for adding a new rule ([#22779](https://github.com/astral-sh/ruff/pull/22779))
  • \[`FastAPI`\] Document fix safety for `FAST001` ([#22655](https://github.com/astral-sh/ruff/pull/22655))
  • \[`flake8-async`\] Tweak explanation to focus on latency/efficiency tradeoff (`ASYNC110`) ([#22715](https://github.com/astral-sh/ruff/pull/22715))
  • \[`pandas-vet`\] Make example error out-of-the-box (`PD002`) ([#22561](https://github.com/astral-sh/ruff/pull/22561))
  • \[`refurb`\] Make the example work out of box (`FURB101`) ([#22770](https://github.com/astral-sh/ruff/pull/22770))
  • \[`refurb`\] Make the example work out of box (`FURB103`) ([#22769](https://github.com/astral-sh/ruff/pull/22769))

๐Ÿ“ฆ Contributors

  • [@alejsdev](https://github.com/alejsdev)
  • [@ntBre](https://github.com/ntBre)
  • [@caiquejjx](https://github.com/caiquejjx)
  • [@chirizxc](https://github.com/chirizxc)
  • [@denyszhak](https://github.com/denyszhak)
  • [@sjyangkevin](https://github.com/sjyangkevin)
  • [@MeGaGiGaGon](https://github.com/MeGaGiGaGon)
  • [@leandrobbraga](https://github.com/leandrobbraga)
  • + 5 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.14/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.14

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.13
github-actions[bot]github-actions[bot]ยท4mo agoยทJanuary 15, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-01-15.

โœจ Preview features

  • \[`flake8-blind-except`\] Allow more logging methods (`BLE001`) ([#22057](https://github.com/astral-sh/ruff/pull/22057))
  • \[`ruff`\] Respect `lint.pydocstyle.property-decorators` in `RUF066` ([#22515](https://github.com/astral-sh/ruff/pull/22515))

๐Ÿ› Bug fixes

  • Fix configuration path in `--show-settings` ([#22478](https://github.com/astral-sh/ruff/pull/22478))
  • Respect `fmt: skip` for multiple statements on the same logical line ([#22119](https://github.com/astral-sh/ruff/pull/22119))

๐Ÿ“‹ Rule changes

  • \[`pydocstyle`\] Update Rust crate imperative to v1.0.7 (`D401`) ([#22519](https://github.com/astral-sh/ruff/pull/22519))
  • \[`isort`\] Insert imports in alphabetical order (`I002`) ([#22493](https://github.com/astral-sh/ruff/pull/22493))

๐Ÿ“ Documentation

  • Add llms.txt support for documentation ([#22463](https://github.com/astral-sh/ruff/pull/22463))
  • Use prek in documentation and CI ([#22505](https://github.com/astral-sh/ruff/pull/22505))
  • \[`flake8-pytest-style`\] Add `check` parameter example to `PT017` docs ([#22546](https://github.com/astral-sh/ruff/pull/22546))
  • \[`ruff`\] Make example error out-of-the-box (`RUF103`) ([#22558](https://github.com/astral-sh/ruff/pull/22558))
  • \[`ruff`\] document `RUF100` trailing comment fix behavior ([#22479](https://github.com/astral-sh/ruff/pull/22479))

๐Ÿ“‹ Other changes

  • wasm: Require explicit logging initialization ([#22587](https://github.com/astral-sh/ruff/pull/22587))

๐Ÿ“ฆ Contributors

  • [@terror](https://github.com/terror)
  • [@harupy](https://github.com/harupy)
  • [@Jkhall81](https://github.com/Jkhall81)
  • [@dhruvmanila](https://github.com/dhruvmanila)
  • [@lubaskinc0de](https://github.com/lubaskinc0de)
  • [@zanieb](https://github.com/zanieb)
  • [@MeGaGiGaGon](https://github.com/MeGaGiGaGon)
  • [@charliermarsh](https://github.com/charliermarsh)
  • + 4 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.13/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.13

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.11
github-actions[bot]github-actions[bot]ยท5mo agoยทJanuary 8, 2026
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2026-01-08.

โœจ Preview features

  • Consolidate diagnostics for matched disable/enable suppression comments ([#22099](https://github.com/astral-sh/ruff/pull/22099))
  • Report diagnostics for invalid/unmatched range suppression comments ([#21908](https://github.com/astral-sh/ruff/pull/21908))
  • \[`airflow`\] Passing positional argument into `airflow.lineage.hook.HookLineageCollector.create_asset` is not allowed (`AIR303`) ([#22046](https://github.com/astral-sh/ruff/pull/22046))
  • \[`refurb`\] Mark `FURB192` fix as always unsafe ([#22210](https://github.com/astral-sh/ruff/pull/22210))
  • \[`ruff`\] Add `non-empty-init-module` (`RUF067`) ([#22143](https://github.com/astral-sh/ruff/pull/22143))

๐Ÿ› Bug fixes

  • Fix GitHub format for multi-line diagnostics ([#22108](https://github.com/astral-sh/ruff/pull/22108))
  • \[`flake8-unused-arguments`\] Mark `**kwargs` in `TypeVar` as used (`ARG001`) ([#22214](https://github.com/astral-sh/ruff/pull/22214))

๐Ÿ“‹ Rule changes

  • Add `help:` subdiagnostics for several Ruff rules that can sometimes appear to disagree with `ty` ([#22331](https://github.com/astral-sh/ruff/pull/22331))
  • \[`pylint`\] Demote `PLW1510` fix to display-only ([#22318](https://github.com/astral-sh/ruff/pull/22318))
  • \[`pylint`\] Ignore identical members (`PLR1714`) ([#22220](https://github.com/astral-sh/ruff/pull/22220))
  • \[`pylint`\] Improve diagnostic range for `PLC0206` ([#22312](https://github.com/astral-sh/ruff/pull/22312))
  • \[`ruff`\] Improve fix title for `RUF102` invalid rule code ([#22100](https://github.com/astral-sh/ruff/pull/22100))
  • \[`flake8-simplify`\]: Avoid unnecessary builtins import for `SIM105` ([#22358](https://github.com/astral-sh/ruff/pull/22358))

๐Ÿ“ฆ Configuration

  • Allow Python 3.15 as valid `target-version` value in preview ([#22419](https://github.com/astral-sh/ruff/pull/22419))
  • Check `required-version` before parsing rules ([#22410](https://github.com/astral-sh/ruff/pull/22410))
  • Include configured `src` directories when resolving graphs ([#22451](https://github.com/astral-sh/ruff/pull/22451))

๐Ÿ“ Documentation

  • Update `T201` suggestion to not use root logger to satisfy `LOG015` ([#22059](https://github.com/astral-sh/ruff/pull/22059))
  • Fix `iter` example in unsafe fixes doc ([#22118](https://github.com/astral-sh/ruff/pull/22118))
  • \[`flake8_print`\] better suggestion for `basicConfig` in `T201` docs ([#22101](https://github.com/astral-sh/ruff/pull/22101))
  • \[`pylint`\] Restore the fix safety docs for `PLW0133` ([#22211](https://github.com/astral-sh/ruff/pull/22211))
  • Fix Jupyter notebook discovery info for editors ([#22447](https://github.com/astral-sh/ruff/pull/22447))

๐Ÿ“ฆ Contributors

  • [@charliermarsh](https://github.com/charliermarsh)
  • [@ntBre](https://github.com/ntBre)
  • [@cenviity](https://github.com/cenviity)
  • [@njhearp](https://github.com/njhearp)
  • [@cbachhuber](https://github.com/cbachhuber)
  • [@jelle-openai](https://github.com/jelle-openai)
  • [@AlexWaygood](https://github.com/AlexWaygood)
  • [@ValdonVitija](https://github.com/ValdonVitija)
  • + 7 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.11/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.11

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.10
github-actions[bot]github-actions[bot]ยท5mo agoยทDecember 18, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-12-18.

โœจ Preview features

  • [formatter] Fluent formatting of method chains ([#21369](https://github.com/astral-sh/ruff/pull/21369))
  • [formatter] Keep lambda parameters on one line and parenthesize the body if it expands ([#21385](https://github.com/astral-sh/ruff/pull/21385))
  • \[`flake8-implicit-str-concat`\] New rule to prevent implicit string concatenation in collections (`ISC004`) ([#21972](https://github.com/astral-sh/ruff/pull/21972))
  • \[`flake8-use-pathlib`\] Make fixes unsafe when types change in compound statements (`PTH104`, `PTH105`, `PTH109`, `PTH115`) ([#22009](https://github.com/astral-sh/ruff/pull/22009))
  • \[`refurb`\] Extend support for `Path.open` (`FURB101`, `FURB103`) ([#21080](https://github.com/astral-sh/ruff/pull/21080))

๐Ÿ› Bug fixes

  • \[`pyupgrade`\] Fix parsing named Unicode escape sequences (`UP032`) ([#21901](https://github.com/astral-sh/ruff/pull/21901))

๐Ÿ“‹ Rule changes

  • \[`eradicate`\] Ignore `ruff:disable` and `ruff:enable` comments in `ERA001` ([#22038](https://github.com/astral-sh/ruff/pull/22038))
  • \[`flake8-pytest-style`\] Allow `match` and `check` keyword arguments without an expected exception type (`PT010`) ([#21964](https://github.com/astral-sh/ruff/pull/21964))
  • [syntax-errors] Annotated name cannot be global ([#20868](https://github.com/astral-sh/ruff/pull/20868))

๐Ÿ“ Documentation

  • Add `uv` and `ty` to the Ruff README ([#21996](https://github.com/astral-sh/ruff/pull/21996))
  • Document known lambda formatting deviations from Black ([#21954](https://github.com/astral-sh/ruff/pull/21954))
  • Update `setup.md` ([#22024](https://github.com/astral-sh/ruff/pull/22024))
  • \[`flake8-bandit`\] Fix broken link (`S704`) ([#22039](https://github.com/astral-sh/ruff/pull/22039))

๐Ÿ“‹ Other changes

  • Fix playground Share button showing "Copied!" before clipboard copy completes ([#21942](https://github.com/astral-sh/ruff/pull/21942))

๐Ÿ“ฆ Contributors

  • [@dylwil3](https://github.com/dylwil3)
  • [@charliecloudberry](https://github.com/charliecloudberry)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@chirizxc](https://github.com/chirizxc)
  • [@ntBre](https://github.com/ntBre)
  • [@zanieb](https://github.com/zanieb)
  • [@amyreese](https://github.com/amyreese)
  • [@hauntsaninja](https://github.com/hauntsaninja)
  • + 5 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.10/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.10

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.9
github-actions[bot]github-actions[bot]ยท6mo agoยทDecember 11, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-12-11.

โœจ Preview features

  • \[`ruff`\] New `RUF100` diagnostics for unused range suppressions ([#21783](https://github.com/astral-sh/ruff/pull/21783))
  • \[`pylint`\] Detect subclasses of builtin exceptions (`PLW0133`) ([#21382](https://github.com/astral-sh/ruff/pull/21382))

๐Ÿ› Bug fixes

  • Fix comment placement in lambda parameters ([#21868](https://github.com/astral-sh/ruff/pull/21868))
  • Skip over trivia tokens after re-lexing ([#21895](https://github.com/astral-sh/ruff/pull/21895))
  • \[`flake8-bandit`\] Fix false positive when using non-standard `CSafeLoader` path (S506). ([#21830](https://github.com/astral-sh/ruff/pull/21830))
  • \[`flake8-bugbear`\] Accept immutable slice default arguments (`B008`) ([#21823](https://github.com/astral-sh/ruff/pull/21823))

๐Ÿ“‹ Rule changes

  • \[`pydocstyle`\] Suppress `D417` for parameters with `Unpack` annotations ([#21816](https://github.com/astral-sh/ruff/pull/21816))

โšก Performance

  • Use `memchr` for computing line indexes ([#21838](https://github.com/astral-sh/ruff/pull/21838))

๐Ÿ“ Documentation

  • Document `*.pyw` is included by default in preview ([#21885](https://github.com/astral-sh/ruff/pull/21885))
  • Document range suppressions, reorganize suppression docs ([#21884](https://github.com/astral-sh/ruff/pull/21884))
  • Update mkdocs-material to 9.7.0 (Insiders now free) ([#21797](https://github.com/astral-sh/ruff/pull/21797))

๐Ÿ“ฆ Contributors

  • [@Avasam](https://github.com/Avasam)
  • [@MichaReiser](https://github.com/MichaReiser)
  • [@charliermarsh](https://github.com/charliermarsh)
  • [@amyreese](https://github.com/amyreese)
  • [@phongddo](https://github.com/phongddo)
  • [@prakhar1144](https://github.com/prakhar1144)
  • [@mahiro72](https://github.com/mahiro72)
  • [@ntBre](https://github.com/ntBre)
  • + 1 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.9/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.9

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.8
github-actions[bot]github-actions[bot]ยท6mo agoยทDecember 4, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-12-04.

โœจ Preview features

  • \[`flake8-bugbear`\] Catch `yield` expressions within other statements (`B901`) ([#21200](https://github.com/astral-sh/ruff/pull/21200))
  • \[`flake8-use-pathlib`\] Mark fixes unsafe for return type changes (`PTH104`, `PTH105`, `PTH109`, `PTH115`) ([#21440](https://github.com/astral-sh/ruff/pull/21440))

๐Ÿ› Bug fixes

  • Fix syntax error false positives for `await` outside functions ([#21763](https://github.com/astral-sh/ruff/pull/21763))
  • \[`flake8-simplify`\] Fix truthiness assumption for non-iterable arguments in tuple/list/set calls (`SIM222`, `SIM223`) ([#21479](https://github.com/astral-sh/ruff/pull/21479))

๐Ÿ“ Documentation

  • Suggest using `--output-file` option in GitLab integration ([#21706](https://github.com/astral-sh/ruff/pull/21706))

๐Ÿ“‹ Other changes

  • [syntax-error] Default type parameter followed by non-default type parameter ([#21657](https://github.com/astral-sh/ruff/pull/21657))

๐Ÿ“ฆ Contributors

  • [@kieran-ryan](https://github.com/kieran-ryan)
  • [@11happy](https://github.com/11happy)
  • [@danparizher](https://github.com/danparizher)
  • [@ntBre](https://github.com/ntBre)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.8/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.8

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.7
github-actions[bot]github-actions[bot]ยท6mo agoยทNovember 28, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-11-28.

โœจ Preview features

  • \[`flake8-bandit`\] Handle string literal bindings in suspicious-url-open-usage (`S310`) ([#21469](https://github.com/astral-sh/ruff/pull/21469))
  • \[`pylint`\] Fix `PLR1708` false positives on nested functions ([#21177](https://github.com/astral-sh/ruff/pull/21177))
  • \[`pylint`\] Fix suppression for empty dict without tuple key annotation (`PLE1141`) ([#21290](https://github.com/astral-sh/ruff/pull/21290))
  • \[`ruff`\] Add rule `RUF066` to detect unnecessary class properties ([#21535](https://github.com/astral-sh/ruff/pull/21535))
  • \[`ruff`\] Catch more dummy variable uses (`RUF052`) ([#19799](https://github.com/astral-sh/ruff/pull/19799))

๐Ÿ› Bug fixes

  • [server] Set severity for non-rule diagnostics ([#21559](https://github.com/astral-sh/ruff/pull/21559))
  • \[`flake8-implicit-str-concat`\] Avoid invalid fix in (`ISC003`) ([#21517](https://github.com/astral-sh/ruff/pull/21517))
  • \[`parser`\] Fix panic when parsing IPython escape command expressions ([#21480](https://github.com/astral-sh/ruff/pull/21480))

๐Ÿ“ฆ CLI

  • Show partial fixability indicator in statistics output ([#21513](https://github.com/astral-sh/ruff/pull/21513))

๐Ÿ“ฆ Contributors

  • [@mikeleppane](https://github.com/mikeleppane)
  • [@senekor](https://github.com/senekor)
  • [@ShaharNaveh](https://github.com/ShaharNaveh)
  • [@JumboBear](https://github.com/JumboBear)
  • [@prakhar1144](https://github.com/prakhar1144)
  • [@tsvikas](https://github.com/tsvikas)
  • [@danparizher](https://github.com/danparizher)
  • [@chirizxc](https://github.com/chirizxc)
  • + 2 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.7/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.7

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.6
github-actions[bot]github-actions[bot]ยท6mo agoยทNovember 21, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-11-21.

โœจ Preview features

  • \[`flake8-bandit`\] Support new PySNMP API paths (`S508`, `S509`) ([#21374](https://github.com/astral-sh/ruff/pull/21374))

๐Ÿ› Bug fixes

  • Adjust own-line comment placement between branches ([#21185](https://github.com/astral-sh/ruff/pull/21185))
  • Avoid syntax error when formatting attribute expressions with outer parentheses, parenthesized value, and trailing comment on value ([#20418](https://github.com/astral-sh/ruff/pull/20418))
  • Fix panic when formatting comments in unary expressions ([#21501](https://github.com/astral-sh/ruff/pull/21501))
  • Respect `fmt: skip` for compound statements on a single line ([#20633](https://github.com/astral-sh/ruff/pull/20633))
  • \[`refurb`\] Fix `FURB103` autofix ([#21454](https://github.com/astral-sh/ruff/pull/21454))
  • \[`ruff`\] Fix false positive for complex conversion specifiers in `logging-eager-conversion` (`RUF065`) ([#21464](https://github.com/astral-sh/ruff/pull/21464))

๐Ÿ“‹ Rule changes

  • \[`ruff`\] Avoid false positive on `ClassVar` reassignment (`RUF012`) ([#21478](https://github.com/astral-sh/ruff/pull/21478))

๐Ÿ“ฆ CLI

  • Render hyperlinks for lint errors ([#21514](https://github.com/astral-sh/ruff/pull/21514))
  • Add a `ruff analyze` option to skip over imports in `TYPE_CHECKING` blocks ([#21472](https://github.com/astral-sh/ruff/pull/21472))

๐Ÿ“ Documentation

  • Limit `eglot-format` hook to eglot-managed Python buffers ([#21459](https://github.com/astral-sh/ruff/pull/21459))
  • Mention `force-exclude` in "Configuration > Python file discovery" ([#21500](https://github.com/astral-sh/ruff/pull/21500))

๐Ÿ“ฆ Contributors

  • [@ntBre](https://github.com/ntBre)
  • [@dylwil3](https://github.com/dylwil3)
  • [@gauthsvenkat](https://github.com/gauthsvenkat)
  • [@MichaReiser](https://github.com/MichaReiser)
  • [@thamer](https://github.com/thamer)
  • [@Ruchir28](https://github.com/Ruchir28)
  • [@thejcannon](https://github.com/thejcannon)
  • [@danparizher](https://github.com/danparizher)
  • + 1 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.6/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.6

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.5
github-actions[bot]github-actions[bot]ยท7mo agoยทNovember 13, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-11-13.

โœจ Preview features

  • \[`flake8-simplify`\] Apply `SIM113` when index variable is of type `int` ([#21395](https://github.com/astral-sh/ruff/pull/21395))
  • \[`pydoclint`\] Fix false positive when Sphinx directives follow a "Raises" section (`DOC502`) ([#20535](https://github.com/astral-sh/ruff/pull/20535))
  • \[`pydoclint`\] Support NumPy-style comma-separated parameters (`DOC102`) ([#20972](https://github.com/astral-sh/ruff/pull/20972))
  • \[`refurb`\] Auto-fix annotated assignments (`FURB101`) ([#21278](https://github.com/astral-sh/ruff/pull/21278))
  • \[`ruff`\] Ignore `str()` when not used for simple conversion (`RUF065`) ([#21330](https://github.com/astral-sh/ruff/pull/21330))

๐Ÿ› Bug fixes

  • Fix syntax error false positive on alternative `match` patterns ([#21362](https://github.com/astral-sh/ruff/pull/21362))
  • \[`flake8-simplify`\] Fix false positive for iterable initializers with generator arguments (`SIM222`) ([#21187](https://github.com/astral-sh/ruff/pull/21187))
  • \[`pyupgrade`\] Fix false positive on relative imports from local `.builtins` module (`UP029`) ([#21309](https://github.com/astral-sh/ruff/pull/21309))
  • \[`pyupgrade`\] Consistently set the deprecated tag (`UP035`) ([#21396](https://github.com/astral-sh/ruff/pull/21396))

๐Ÿ“‹ Rule changes

  • \[`refurb`\] Detect empty f-strings (`FURB105`) ([#21348](https://github.com/astral-sh/ruff/pull/21348))

๐Ÿ“ฆ CLI

  • Add option to provide a reason to `--add-noqa` ([#21294](https://github.com/astral-sh/ruff/pull/21294))
  • Add upstream linter URL to `ruff linter --output-format=json` ([#21316](https://github.com/astral-sh/ruff/pull/21316))
  • Add color to `--help` ([#21337](https://github.com/astral-sh/ruff/pull/21337))

๐Ÿ“ Documentation

  • Add a new "Opening a PR" section to the contribution guide ([#21298](https://github.com/astral-sh/ruff/pull/21298))
  • Added the PyScripter IDE to the list of "Who is using Ruff?" ([#21402](https://github.com/astral-sh/ruff/pull/21402))
  • Update PyCharm setup instructions ([#21409](https://github.com/astral-sh/ruff/pull/21409))
  • \[`flake8-annotations`\] Add link to `allow-star-arg-any` option (`ANN401`) ([#21326](https://github.com/astral-sh/ruff/pull/21326))

๐Ÿ“‹ Other changes

  • \[`configuration`\] Improve error message when `line-length` exceeds `u16::MAX` ([#21329](https://github.com/astral-sh/ruff/pull/21329))

๐Ÿ“ฆ Contributors

  • [@njhearp](https://github.com/njhearp)
  • [@11happy](https://github.com/11happy)
  • [@hugovk](https://github.com/hugovk)
  • [@Gankra](https://github.com/Gankra)
  • [@ntBre](https://github.com/ntBre)
  • [@pyscripter](https://github.com/pyscripter)
  • [@danparizher](https://github.com/danparizher)
  • [@MichaReiser](https://github.com/MichaReiser)
  • + 2 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.5/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.5

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.4
github-actions[bot]github-actions[bot]ยท7mo agoยทNovember 6, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-11-06.

โœจ Preview features

  • [formatter] Allow newlines after function headers without docstrings ([#21110](https://github.com/astral-sh/ruff/pull/21110))
  • [formatter] Avoid extra parentheses for long `match` patterns with `as` captures ([#21176](https://github.com/astral-sh/ruff/pull/21176))
  • \[`refurb`\] Expand fix safety for keyword arguments and `Decimal`s (`FURB164`) ([#21259](https://github.com/astral-sh/ruff/pull/21259))
  • \[`refurb`\] Preserve argument ordering in autofix (`FURB103`) ([#20790](https://github.com/astral-sh/ruff/pull/20790))

๐Ÿ› Bug fixes

  • [server] Fix missing diagnostics for notebooks ([#21156](https://github.com/astral-sh/ruff/pull/21156))
  • \[`flake8-bugbear`\] Ignore non-NFKC attribute names in `B009` and `B010` ([#21131](https://github.com/astral-sh/ruff/pull/21131))
  • \[`refurb`\] Fix false negative for underscores before sign in `Decimal` constructor (`FURB157`) ([#21190](https://github.com/astral-sh/ruff/pull/21190))
  • \[`ruff`\] Fix false positives on starred arguments (`RUF057`) ([#21256](https://github.com/astral-sh/ruff/pull/21256))

๐Ÿ“‹ Rule changes

  • \[`airflow`\] extend deprecated argument `concurrency` in `airflow..DAG` (`AIR301`) ([#21220](https://github.com/astral-sh/ruff/pull/21220))

๐Ÿ“ Documentation

  • Improve `extend` docs ([#21135](https://github.com/astral-sh/ruff/pull/21135))
  • \[`flake8-comprehensions`\] Fix typo in `C416` documentation ([#21184](https://github.com/astral-sh/ruff/pull/21184))
  • Revise Ruff setup instructions for Zed editor ([#20935](https://github.com/astral-sh/ruff/pull/20935))

๐Ÿ“‹ Other changes

  • Make `ruff analyze graph` work with jupyter notebooks ([#21161](https://github.com/astral-sh/ruff/pull/21161))

๐Ÿ“ฆ Contributors

  • [@chirizxc](https://github.com/chirizxc)
  • [@Lee-W](https://github.com/Lee-W)
  • [@musicinmybrain](https://github.com/musicinmybrain)
  • [@MichaReiser](https://github.com/MichaReiser)
  • [@tjkuson](https://github.com/tjkuson)
  • [@danparizher](https://github.com/danparizher)
  • [@renovate](https://github.com/renovate)
  • [@ntBre](https://github.com/ntBre)
  • + 2 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.4/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.4

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.3
github-actions[bot]github-actions[bot]ยท7mo agoยทOctober 31, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-10-30.

โœจ Preview features

  • Respect `--output-format` with `--watch` ([#21097](https://github.com/astral-sh/ruff/pull/21097))
  • \[`pydoclint`\] Fix false positive on explicit exception re-raising (`DOC501`, `DOC502`) ([#21011](https://github.com/astral-sh/ruff/pull/21011))
  • \[`pyflakes`\] Revert to stable behavior if imports for module lie in alternate branches for `F401` ([#20878](https://github.com/astral-sh/ruff/pull/20878))
  • \[`pylint`\] Implement `stop-iteration-return` (`PLR1708`) ([#20733](https://github.com/astral-sh/ruff/pull/20733))
  • \[`ruff`\] Add support for additional eager conversion patterns (`RUF065`) ([#20657](https://github.com/astral-sh/ruff/pull/20657))

๐Ÿ› Bug fixes

  • Fix finding keyword range for clause header after statement ending with semicolon ([#21067](https://github.com/astral-sh/ruff/pull/21067))
  • Fix syntax error false positive on nested alternative patterns ([#21104](https://github.com/astral-sh/ruff/pull/21104))
  • \[`ISC001`\] Fix panic when string literals are unclosed ([#21034](https://github.com/astral-sh/ruff/pull/21034))
  • \[`flake8-django`\] Apply `DJ001` to annotated fields ([#20907](https://github.com/astral-sh/ruff/pull/20907))
  • \[`flake8-pyi`\] Fix `PYI034` to not trigger on metaclasses (`PYI034`) ([#20881](https://github.com/astral-sh/ruff/pull/20881))
  • \[`flake8-type-checking`\] Fix `TC003` false positive with `future-annotations` ([#21125](https://github.com/astral-sh/ruff/pull/21125))
  • \[`pyflakes`\] Fix false positive for `__class__` in lambda expressions within class definitions (`F821`) ([#20564](https://github.com/astral-sh/ruff/pull/20564))
  • \[`pyupgrade`\] Fix false positive for `TypeVar` with default on Python \<3.13 (`UP046`,`UP047`) ([#21045](https://github.com/astral-sh/ruff/pull/21045))

๐Ÿ“‹ Rule changes

  • Add missing docstring sections to the numpy list ([#20931](https://github.com/astral-sh/ruff/pull/20931))
  • \[`airflow`\] Extend `airflow.models..Param` check (`AIR311`) ([#21043](https://github.com/astral-sh/ruff/pull/21043))
  • \[`airflow`\] Warn that `airflow....DAG.create_dagrun` has been removed (`AIR301`) ([#21093](https://github.com/astral-sh/ruff/pull/21093))
  • \[`refurb`\] Preserve digit separators in `Decimal` constructor (`FURB157`) ([#20588](https://github.com/astral-sh/ruff/pull/20588))

๐Ÿ“ฆ Server

  • Avoid sending an unnecessary "clear diagnostics" message for clients supporting pull diagnostics ([#21105](https://github.com/astral-sh/ruff/pull/21105))

๐Ÿ“ Documentation

  • \[`flake8-bandit`\] Fix correct example for `S308` ([#21128](https://github.com/astral-sh/ruff/pull/21128))

๐Ÿ“‹ Other changes

  • Clearer error message when `line-length` goes beyond threshold ([#21072](https://github.com/astral-sh/ruff/pull/21072))

๐Ÿ“ฆ Contributors

  • [@danparizher](https://github.com/danparizher)
  • [@jvacek](https://github.com/jvacek)
  • [@ntBre](https://github.com/ntBre)
  • [@augustelalande](https://github.com/augustelalande)
  • [@prakhar1144](https://github.com/prakhar1144)
  • [@TaKO8Ki](https://github.com/TaKO8Ki)
  • [@dylwil3](https://github.com/dylwil3)
  • [@fatelei](https://github.com/fatelei)
  • + 2 more

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.3/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.3

  • | File | Platform | Checksum |
  • |--------|----------|----------|
0.14.2
github-actions[bot]github-actions[bot]ยท7mo agoยทOctober 23, 2025
GitHub

๐Ÿ“ฆ Release Notes

  • Released on 2025-10-23.

โœจ Preview features

  • \[`flake8-gettext`\] Resolve qualified names and built-in bindings (`INT001`, `INT002`, `INT003`) ([#19045](https://github.com/astral-sh/ruff/pull/19045))

๐Ÿ› Bug fixes

  • Avoid reusing nested, interpolated quotes before Python 3.12 ([#20930](https://github.com/astral-sh/ruff/pull/20930))
  • Catch syntax errors in nested interpolations before Python 3.12 ([#20949](https://github.com/astral-sh/ruff/pull/20949))
  • \[`fastapi`\] Handle ellipsis defaults in `FAST002` autofix ([#20810](https://github.com/astral-sh/ruff/pull/20810))
  • \[`flake8-simplify`\] Skip `SIM911` when unknown arguments are present ([#20697](https://github.com/astral-sh/ruff/pull/20697))
  • \[`pyupgrade`\] Always parenthesize assignment expressions in fix for `f-string` (`UP032`) ([#21003](https://github.com/astral-sh/ruff/pull/21003))
  • \[`pyupgrade`\] Fix `UP032` conversion for decimal ints with underscores ([#21022](https://github.com/astral-sh/ruff/pull/21022))
  • \[`fastapi`\] Skip autofix for keyword and `__debug__` path params (`FAST003`) ([#20960](https://github.com/astral-sh/ruff/pull/20960))

๐Ÿ“‹ Rule changes

  • \[`flake8-bugbear`\] Skip `B905` and `B912` for fewer than two iterables and no starred arguments ([#20998](https://github.com/astral-sh/ruff/pull/20998))
  • \[`ruff`\] Use `DiagnosticTag` for more `pyflakes` and `pandas` rules ([#20801](https://github.com/astral-sh/ruff/pull/20801))

๐Ÿ“ฆ CLI

  • Improve JSON output from `ruff rule` ([#20168](https://github.com/astral-sh/ruff/pull/20168))

๐Ÿ“ Documentation

  • Add source to testimonial ([#20971](https://github.com/astral-sh/ruff/pull/20971))
  • Document when a rule was added ([#21035](https://github.com/astral-sh/ruff/pull/21035))

๐Ÿ“‹ Other changes

  • [syntax-errors] Name is parameter and global ([#20426](https://github.com/astral-sh/ruff/pull/20426))
  • [syntax-errors] Alternative `match` patterns bind different names ([#20682](https://github.com/astral-sh/ruff/pull/20682))

๐Ÿ“ฆ Contributors

  • [@hengky-kurniawan-1](https://github.com/hengky-kurniawan-1)
  • [@ShalokShalom](https://github.com/ShalokShalom)
  • [@robsdedude](https://github.com/robsdedude)
  • [@LoicRiegel](https://github.com/LoicRiegel)
  • [@TaKO8Ki](https://github.com/TaKO8Ki)
  • [@dylwil3](https://github.com/dylwil3)
  • [@11happy](https://github.com/11happy)
  • [@ntBre](https://github.com/ntBre)

๐Ÿ“ฆ Install prebuilt binaries via shell script

  • ```sh
  • curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-installer.sh | sh
  • ```

๐Ÿ“ฆ Install prebuilt binaries via powershell script

  • ```sh
  • powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/ruff/releases/download/0.14.2/ruff-installer.ps1 | iex"
  • ```

๐Ÿ“ฆ Download ruff 0.14.2

  • | File | Platform | Checksum |
  • |--------|----------|----------|