What’s New

ruff 0.15.14

0.15.14
Added
  • Implement airflow-task-implicit-multiple-outputs (AIR202) rule
  • Implement too-many-try-statements (W0717) rule for pylint
  • Add incorrect-decorator-order (RUF074) rule
  • Add fallible-context-manager (RUF075) rule
Changed
  • Mark PTH101 fix as unsafe when first argument is a class attribute annotated as int
  • Skip C417 for lambdas with positional-only parameters
  • Preserve f-string source verbatim in SIM101 fix
  • Treat generic frozenset annotations as immutable
  • Add full PEP 798 support
  • Add a parser recursion limit
  • Avoid unnecessary parser lookahead for operators
Fixed
  • Fix lambda formatting in interpolated string expressions
  • Avoid strict behavior in flake8-type-checking when future-annotations are enabled (TC001, TC002, TC003)
  • Avoid false positives in else clause for pylint (PLR1733)
Release Notes

Released on 2026-05-21.

Preview features
  • [airflow] Implement airflow-task-implicit-multiple-outputs (AIR202) (#25152)
  • [flake8-use-pathlib] Mark PTH101 fix as unsafe when first argument is a class attribute annotated as int (#25086)
  • [pylint] Implement too-many-try-statements (W0717) (#23970)
  • [ruff] Add incorrect-decorator-order (RUF074) (#23461)
  • [ruff] Add fallible-context-manager (RUF075) (#22844)
Bug fixes
  • Fix lambda formatting in interpolated string expressions (#25144)
  • Treat generic frozenset annotations as immutable (#25251)
  • [flake8-type-checking] Avoid strict behavior when future-annotations are enabled (TC001, TC002, TC003) (#25035)
  • [pylint] Avoid false positives in else clause (PLR1733) (#25177)
Rule changes
  • [flake8-comprehensions] Skip C417 for lambdas with positional-only parameters (#25272)
  • [flake8-simplify] Preserve f-string source verbatim in SIM101 fix (#25061)
Performance
  • Avoid unnecessary parser lookahead for operators (#25290)
Documentation
  • Update code example setting Neovim LSP log level (#25284)
Other changes
  • Add full PEP 798 support (#25104)
  • Add a parser recursion limit (#24810)
  • Update various ruff_python_stdlib APIs (#25273)
Contributors
Install ruff 0.15.14
Install prebuilt binaries via shell script
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
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
FilePlatformChecksum
ruff-aarch64-apple-darwin.tar.gzApple Silicon macOSchecksum
ruff-x86_64-apple-darwin.tar.gzIntel macOSchecksum
ruff-aarch64-pc-windows-msvc.zipARM64 Windowschecksum
ruff-i686-pc-windows-msvc.zipx86 Windowschecksum
ruff-x86_64-pc-windows-msvc.zipx64 Windowschecksum
ruff-aarch64-unknown-linux-gnu.tar.gzARM64 Linuxchecksum
ruff-i686-unknown-linux-gnu.tar.gzx86 Linuxchecksum
ruff-powerpc64-unknown-linux-gnu.tar.gzPPC64 Linuxchecksum
ruff-powerpc64le-unknown-linux-gnu.tar.gzPPC64LE Linuxchecksum
ruff-riscv64gc-unknown-linux-gnu.tar.gzRISCV Linuxchecksum
ruff-s390x-unknown-linux-gnu.tar.gzS390x Linuxchecksum
ruff-x86_64-unknown-linux-gnu.tar.gzx64 Linuxchecksum
ruff-armv7-unknown-linux-gnueabihf.tar.gzARMv7 Linuxchecksum
ruff-aarch64-unknown-linux-musl.tar.gzARM64 MUSL Linuxchecksum
ruff-i686-unknown-linux-musl.tar.gzx86 MUSL Linuxchecksum
ruff-x86_64-unknown-linux-musl.tar.gzx64 MUSL Linuxchecksum
ruff-arm-unknown-linux-musleabihf.tar.gzARMv6 MUSL Linux (Hardfloat)checksum
ruff-armv7-unknown-linux-musleabihf.tar.gzARMv7 MUSL Linuxchecksum
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:

gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ruff

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>
View original