Update dependency ruff to ~=0.16.1 #48

Open
Renovate wants to merge 1 commit from renovate/ruff-0.x into main
Collaborator

This PR contains the following updates:

Package Change Age Confidence
ruff (source, changelog) ~=0.15.4~=0.16.1 age confidence

Release Notes

astral-sh/ruff (ruff)

v0.16.1

Compare Source

Released on 2026-07-30.

Preview features
  • Add an option to opt out of human-readable names (#​27160)
  • [flake8-pytest-style] Make fixes safe by default and unsafe only when comments are present (PT018) (#​27201)
  • [pyupgrade] Skip fix when a defaulted TypeVar precedes a non-defaulted one (UP040, UP046, UP047) (#​27133)
  • [ruff] Fix false positive with unpacked arguments (RUF065) (#​26959)
Bug fixes
  • Bump gen-lsp-types to gracefully handle unknown enumeration values in LSP messages (#​27230)
  • [flake8-bugbear] Mark range as immutable (B008) (#​27247)
  • [flake8-comprehensions] NFKC-normalize keyword names in C408 fix (#​26813)
  • [flake8-return] Fix false positive when variable is read in finally clause (RET504) (#​25441)
  • [pydocstyle] Skip section detection inside RST directive bodies (D214, D405, D413) (#​23635)
  • [refurb] Parenthesize yield arguments in the FURB192 fix (#​27192)
Rule changes
  • [flake8-pytest-style] Mark PT022 fixes as unsafe (#​26440)
  • [refurb] Mark fixes that remove unknown separators as unsafe (FURB105) (#​27200)
Server
  • Fix indexing of excluded nested Ruff workspaces (#​27303)
  • Lint TOML files in the LSP (#​26862)
Documentation
  • Cover pycon Markdown formatting (#​27153)
  • [flake8-bandit] Document TYPE_CHECKING exception (S101) (#​27004)
  • [flake8-import-conventions] Document that extend-aliases can override default aliases (#​27191)
  • [pylint] Add missing fix safety gotchas for non-augmented-assignment (PLR6104) (#​27250)
Other changes
  • Reduce syntax error noise by swallowing dedents like indents (#​27170)
  • Vendor latest annotate-snippets (#​27033)
Contributors

v0.16.0

Compare Source

Released on 2026-07-23.

Check out the blog post for a migration
guide and overview of the changes!

Breaking changes
  • Ruff now enables a much larger set of rules by default (413, up from 59). See the blog post for
    more details and the new Default Rules page for a
    full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more
    opinionated pycodestyle (E) and pyflakes (F) rules have been removed from the default set:
    E401, E402, E701, E702, E703, E711, E712, E713, E714, E721, E731, E741,
    E742, E743, F403, F405, F406, and F722.

  • Ruff can now format Python code blocks in Markdown files and will do this by default. See the
    documentation for more details.

  • Ruff now supports ruff: ignore comments at the ends of lines, like noqa comments, or on the line preceding a diagnostic. For example, these both suppress an unused-import (F401) diagnostic:

    import math  # ruff: ignore[F401]
    
    # ruff: ignore[F401]
    import os
    
  • Fixes are now shown in check and format --check output:

    ❯ ruff format --check .
    unformatted: File would be reformatted
     --> try.md:1:1
      |
    1 | ```python
      - import   math
    2 + import math
    3 | ```
      |
    
    1 file would be reformatted
    

    This example also shows off the Markdown formatting.

  • format --check now supports the same output formats as the linter, including the github and
    gitlab outputs for rendering annotations in CI:

    ❯ ruff format --check --output-format github .
    ::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted
    

    See the CLI help or documentation for the
    full list of supported formats.

  • The filename, location, end_location, fix.edits[].location, and fix.edits[].end_location
    fields in the JSON output format may now be null rather than defaulting to the empty string and
    row 1, column 1, respectively.

Stabilization

The following rules have been stabilized and are no longer in preview:

The following behaviors have been stabilized:

Preview features
  • [pyupgrade] Fix false positive with TypeVar default before Python 3.13 (UP040) (#​26888)
Bug fixes
  • [ruff] Fix missing check on unrecognized early bound (RUF016) (#​26986)
Rule changes
  • Insert a space after the colon in Ruff suppression comments (#​27123)
Performance
  • [pyupgrade] Speed up unnecessary-future-import (UP010) (#​27047)
Documentation
  • [ruff] Add missing period in "Why is this bad?" section (RUF200) (#​26930)
  • [flake8-simplify] Clarify os.environ behavior on Windows (SIM112) (#​26972)
  • [pydocstyle] Document fix safety (D400) (#​26971)
Contributors

v0.15.22

Compare Source

Release Notes

Released on 2026-07-16.

Preview features
  • [pycodestyle] Add an autofix for E402 (#​22212)
  • [refurb] Allow subclassing builtins in stub files (FURB189) (#​26812)
  • [ruff] Add rule to replace noqa comments with ruff:ignore (RUF105) (#​26423)
  • [ruff] Add rule to use human-readable names in ruff:ignore comments (RUF106) (#​26682)
  • [ruff] Add rule to use human-readable names in configuration selectors (RUF201) (#​26772)
Bug fixes
  • [flake8-pyi] Fix false positive in __all__ (PYI053) (#​26872)
Rule changes
  • [pylint] Ignore mutable type updates in redefined-loop-name (PLW2901) (#​25733)
Performance
  • Avoid redundant lexer token bookkeeping (#​26765)
  • Avoid redundant pending-indentation writes (#​26774)
  • Avoid unnecessary identifier lookahead (#​26525)
  • Reuse parser scratch buffers (#​26798)
Documentation
  • Document argfile support (#​26803)
  • [flake8-datetimez] Clarify naming guidance for datetime.today (DTZ002) (#​26658)
  • [pycodestyle] Document E731 fix safety (#​26847)
  • [ruff] Clarify intentional async contexts for unused-async (RUF029) (#​26641)
Contributors

Install ruff 0.15.22

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.22/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.22/ruff-installer.ps1 | iex"

Download ruff 0.15.22

File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.21

Compare Source

Release Notes

Released on 2026-07-09.

Preview features
  • Add --add-ignore for adding ruff:ignore comments (#​26346)
  • [flake8-comprehensions] Drop C409 tuple comprehension preview behavior (#​25707)
  • Avoid whitespace normalization when formatting comments (#​26455)
  • [pyupgrade] Lint and fix use of deprecated abc decorators (UP051) (#​26417)
Bug fixes
  • Refine non-empty f-string detection (#​26526)
  • Detect syntax errors in individual notebook cells (#​26419)
  • [flake8-implicit-str-concat] Fix ISC003 autofix incorrectly stripping + from comments (#​26554)
Rule changes
  • [flake8-executable] Mark EXE004 fix as unsafe (#​26033)
  • [flake8-pyi] Mark PYI061 fixes as unsafe in Python files (#​26533)
  • [pydocstyle] Skip overload-with-docstring in stub files (D418) (#​26318)
Performance
  • Avoid per-token source index visitor calls (#​26506)
  • Cache parenthesized expression boundaries in the formatter (#​26344)
  • Improve performance of rendering edits in preview mode (#​26565)
  • Inline fits_element in formatter (#​26429)
  • Inline formatter printing hot paths (#​26504)
  • Lazily create builtin bindings (#​26510)
  • Skip empty trivia scans in the source indexer (#​26507)
  • Use ICF for macOS release builds (#​25780)
Formatter
  • Add --extend-exclude to ruff format (#​26372)
Documentation
  • Add "How does Ruff's import sorting compare to isort?" link to README (#​26530)
  • Fix Mozilla Firefox repository link in README (#​26537)
  • [flake8-bandit] Fix misleading docstring for mako-templates (S702) (#​26432)
  • [ruff] Fix non-triggering example for if-key-in-dict-del (RUF051) (#​26433)
Contributors

Install ruff 0.15.21

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.21/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.21/ruff-installer.ps1 | iex"

Download ruff 0.15.21

File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.20

Compare Source

Release Notes

Released on 2026-06-25.

Preview features
  • Allow human-readable names in rule selectors (#​25887)
  • Emit a warning instead of an error for unknown rule selectors (#​26113)
  • Match noqa shebang handling in ruff:ignore comments (#​26286)
  • [ruff] Remove pytest-fixture-autouse (RUF076) (#​26240, #​26371)
Documentation
  • Add versioning sections to custom crate READMEs (#​26317)
  • Update ruff_python_parser README for crates.io (#​26315)
  • [perflint] Clarify that PERF402 applies to any iterable (#​26242)
Contributors

Install ruff 0.15.20

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.20/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.20/ruff-installer.ps1 | iex"

Download ruff 0.15.20

File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.19

Compare Source

Release Notes

Released on 2026-06-23.

Preview features
  • Support human-readable names when hovering suppression comments and in code actions (#​26114)
Bug fixes
  • Fall back to default settings when editor-only settings are invalid (#​26244)
  • Fix panic when inserting text at a notebook cell boundary (#​26111)
Rule changes
  • [pylint] Update fix suggestions for __floor__, __trunc__, __length_hint__, and __matmul__ variants (PLC2801) (#​26239)
Performance
  • Avoid allocating when parsing single string literals (#​26200)
  • Avoid reallocating singleton call arguments (#​26223)
  • Lazily create source files for lint diagnostics (#​26226)
  • Optimize formatter text width and indentation (#​26236)
  • Reserve capacity for builtin bindings (#​26229)
  • Skip repeated-key checks for singleton dictionaries (#​26228)
  • Use ArrayVec for qualified name segments (#​26224)
Documentation
  • [flake8-pyi] Note that PYI051 is an opinionated stylistic rule (#​26179)
  • [pyupgrade] Clarify UP029 as a Python 2 compatibility rule (#​26243)
Other changes
  • Publish Ruff crates to crates.io (#​26271)
Contributors

Install ruff 0.15.19

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.19/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.19/ruff-installer.ps1 | iex"

Download ruff 0.15.19

File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.18

Compare Source

Release Notes

Released on 2026-06-18.

Preview features
  • Handle nested ruff:ignore comments (#​25791)
  • Stop displaying severity in output (#​26050)
  • Use human-readable names in CLI output (#​25937)
  • Use human-readable names in LSP and playground diagnostics (#​26058)
  • [pydocstyle] Prevent property docstrings starting with verbs (D421) (#​23775)
  • [flake8-pyi] Extend PYI033 to Python files (#​26129)
Bug fixes
  • Detect equivalent numeric mapping keys (#​26009)
  • Detect mapping keys equivalent to booleans (#​25982)
  • Detect repeated signed and complex dictionary keys (#​26007)
Rule changes
  • [flake8-pyi] Rename PYI033 to legacy-type-comment (#​26131)
Performance
  • Use ThinVec for call keywords (#​25999)
  • Inline parser recovery context checks (#​26038)
  • Match parser keywords as bytes (#​26037)
  • Move value parsing out of lexing (#​25360)
Server
  • Render subdiagnostics and secondary annotations as related information (#​26011)
Documentation
  • Update fix availability for always-fixable rules (#​26091)
  • [flake8-tidy-imports] Add fix safety section (TID252) (#​17491)
Parser
  • Reject __debug__ lambda parameters (#​26022)
  • Reject _ as a match-pattern target (#​25977)
  • Reject multiple starred names in sequence patterns (#​25976)
  • Reject parenthesized star imports (#​26021)
  • Reject starred comprehension targets (#​26023)
  • Reject unparenthesized generator expressions in class bases (#​25978)
  • Reject yield expressions after commas (#​26024)
  • Validate function type parameter default order (#​25981)
Playground
Contributors

Install ruff 0.15.18

Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.18/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.18/ruff-installer.ps1 | iex"

Download ruff 0.15.18

File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.17

Compare Source

Release Notes

Released on 2026-06-11.

Preview features
  • Allow human-readable names in suppression comments (#​25614)
  • Fix handling of ignore comments within a disable/enable pair (#​25845)
  • Prioritize human-readable names in CLI output (#​25869)
  • Respect diagnostic start and parent ranges and trailing comments in ruff:ignore suppressions (#​25673)
  • [flake8-async] Add trio.as_safe_channel to safe decorators (ASYNC119) (#​25775)
  • [flake8-pytest-style] Also check pytest_asyncio fixtures (#​25375)
  • [ruff] Ban pytest autouse fixtures (RUF076) (#​25477)
  • [pyupgrade] Add from __future__ import annotations automatically (UP007, UP045) (#​23259)
Bug fixes
  • Fix diagnostic when ruff:enable or ruff:disable appears where ruff:ignore is expected (#​25700)
  • [pyupgrade] Preserve leading empty literals to avoid syntax errors (UP032) (#​25491)
Rule changes
  • [flake8-pytest-style] Clarify diagnostic message for single parameters (PT007) (#​25592)
  • [numpy] Drop autofix for np.in1d (NPY201) (#​25612)
  • [pylint] Exempt Python version comparisons (PLR2004) (#​25743)
Performance
  • Reserve AST Vecs with correct capacity for common cases (#​25451)
Formatter
  • Preserve whitespace for Quarto cell option comments (#​25641)
CLI
Other changes
  • Fix playground diagnostics scrollbars (#​25642)
Contributors

Install ruff 0.15.17

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.16

Compare Source

Release Notes

Released on 2026-06-04.

Preview features
  • [flake8-async] Implement yield-in-context-manager-in-async-generator (ASYNC119) (#​24644)
  • [pylint] Narrow diagnostic range and exclude cases without exception handlers (PLW0717) (#​25440)
  • [ruff] Treat yield before break from a terminal loop as terminal (RUF075) (#​25447)
Bug fixes
  • [eradicate] Avoid flagging ruff:ignore comments as code (ERA001) (#​25537)
  • [eradicate] Fix ERA001/RUF100 conflict when noqa is on commented-out code (#​25414)
  • [pyflakes] Avoid removing the format call when it would change behavior (F523) (#​25320)
  • [pylint] Avoid syntax errors in invalid character replacements in f-strings before Python 3.12 (PLE2510, PLE2512, PLE2513, PLE2514, PLE2515) (#​25544)
  • [pyupgrade] Avoid converting format calls with more kinds of side effects (UP032) (#​25484)
Rule changes
  • [flake8-pytest-style] Avoid fixes for ambiguous argnames and argvalues combinations (PT006) (#​24776)
Performance
  • Drop excess capacity from statement suites during parsing (#​25368)
Documentation
  • [pydocstyle] Improve discoverability of rules enabled for each convention (#​24973)
  • [ruff] Restore example code for Python versions before 3.15 (RUF017) (#​25439)
  • Fix typo bin/activebin/activate in tutorial (#​25473)
Other changes
  • Shrink additional parser AST collections (#​25465)
Contributors

Install ruff 0.15.16

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.15

Compare Source

Release Notes

Released on 2026-05-28.

Preview features
  • Fix Markdown closing fence handling (#​25310)
  • [pyflakes] Report duplicate imports in typing.TYPE_CHECKING block (F811) (#​22560)
Bug fixes
  • [pyflakes] Treat function-scope bare annotations as locals per PEP 526 (F821) (#​21540)
Performance
  • Avoid redundant TokenValue drops in the lexer (#​25300)
  • Reduce memory usage by dropping token-excess capacity and improve performance by approximating the initial tokens Vec size (#​25354)
  • Use ThinVec in AST to shrink Stmt (#​25361)
Documentation
  • Fix line-length example for --config option (#​25389)
  • [flake8-comprehensions] Document RecursionError edge case in __len__ (C416) (#​25286)
  • [mccabe] Improve example (C901) (#​25287)
  • [pyupgrade] Clarify fix safety docs (UP007, UP045) (#​25288)
  • [refurb] Document FURB192 exception change for empty sequences (#​25317)
  • [ruff] Document false negative for user-defined types (RUF013) (#​25289)
Formatter
  • Fix formatting of lambdas nested within f-strings (#​25398)
Server
  • Return code action for codeAction/resolve requests that contain no or no valid URL (#​25365)
Other changes
  • Expand semantic syntax errors for invalid walruses (#​25415)
Contributors

Install ruff 0.15.15

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.14

Compare Source

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
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

File Platform Checksum
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.13

Compare Source

Release Notes

Released on 2026-05-14.

Preview features
  • Add a rule to flag lazy imports that are eagerly evaluated (#​25016)
  • [pylint] Standardize diagnostic message (PLR0914, PLR0917) (#​24996)
Bug fixes
  • Fix F811 false positive for class methods (#​24933)
  • Fix setting selection for multi-folder workspace (#​24819)
  • [eradicate] Fix false positive for lines with leading whitespace (ERA001) (#​25122)
  • [flake8-pyi] Fix false positive for f-string debug specifier (PYI016) (#​24098)
Rule changes
  • Always include panic payload in panic diagnostic message (#​24873)
  • Restrict PYI034 for in-place operations to enclosing class (#​24511)
  • Improve error message for parameters that are declared global (#​24902)
  • Update known stdlib (#​25103)
Performance
  • [isort] Avoid constructing glob::Patterns for literal known modules (#​25123)
CLI
  • Add TOML examples to --config help text (#​25013)
  • Colorize ruff check 'All checks passed' (#​25085)
Configuration
  • Increase max allowed value of line-length setting (#​24962)
Documentation
  • Add D203 to rules that conflict with the formatter (#​25044)
  • Clarify COM819 and formatter interaction (#​25045)
  • Clarify that NotImplemented is a value, not an exception (F901) (#​25054)
  • Update number of lint rules supported (#​24942)
Other changes
  • Simplify the playground's markdown template (#​24924)
Contributors

Install ruff 0.15.13

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.12

Compare Source

Release Notes

Released on 2026-04-24.

Preview features
  • Implement #ruff:file-ignore file-level suppressions (#​23599)
  • Implement #ruff:ignore logical-line suppressions (#​23404)
  • Revert preview changes to displayed diagnostic severity in LSP (#​24789)
  • [airflow] Implement task-branch-as-short-circuit (AIR004) (#​23579)
  • [flake8-bugbear] Fix break/continue handling in loop-iterator-mutation (B909) (#​24440)
  • [pylint] Fix PLC2701 for type parameter scopes (#​24576)
Rule changes
  • [pandas-vet] Suggest .array as well in PD011 (#​24805)
CLI
  • Respect default Unix permissions for cache files (#​24794)
Documentation
  • [pylint] Fix PLR0124 description not to claim self-comparison always returns the same value (#​24749)
  • [pyupgrade] Expand docs on reusable TypeVars and scoping (UP046) (#​24153)
  • Improve rules table accessibility (#​24711)
Contributors

Install ruff 0.15.12

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.11

Compare Source

Release Notes

Released on 2026-04-16.

Preview features
  • [ruff] Ignore RUF029 when function is decorated with asynccontextmanager (#​24642)
  • [airflow] Implement airflow-xcom-pull-in-template-string (AIR201) (#​23583)
  • [flake8-bandit] Fix S103 false positives and negatives in mask analysis (#​24424)
Bug fixes
  • [flake8-async] Omit overridden methods for ASYNC109 (#​24648)
Documentation
  • [flake8-async] Add override mention to ASYNC109 docs (#​24666)
  • Update Neovim config examples to use vim.lsp.config (#​24577)
Contributors

Install ruff 0.15.11

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.10

Compare Source

Release Notes

Released on 2026-04-09.

Preview features
  • [flake8-logging] Allow closures in except handlers (LOG004) (#​24464)
  • [flake8-self] Make SLF diagnostics robust to non-self-named variables (#​24281)
  • [flake8-simplify] Make the fix for collapsible-if safe in preview (SIM102) (#​24371)
Bug fixes
  • Avoid emitting multi-line f-string elements before Python 3.12 (#​24377)
  • Avoid syntax error from E502 fixes in f-strings and t-strings (#​24410)
  • Strip form feeds from indent passed to dedent_to (#​24381)
  • [pyupgrade] Fix panic caused by handling of octals (UP012) (#​24390)
  • Reject multi-line f-string elements before Python 3.12 (#​24355)
Rule changes
  • [ruff] Treat f-string interpolation as potential side effect (RUF019) (#​24426)
Server
  • Add support for custom file extensions (#​24463)
Documentation
  • Document adding fixes in CONTRIBUTING.md (#​24393)
  • Fix JSON typo in settings example (#​24517)
Contributors

Install ruff 0.15.10

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.9

Compare Source

Release Notes

Released on 2026-04-02.

Preview features
  • [pyflakes] Flag annotated variable redeclarations as F811 in preview mode (#​24244)
  • [ruff] Allow dunder-named assignments in non-strict mode for RUF067 (#​24089)
Bug fixes
  • [flake8-errmsg] Avoid shadowing existing msg in fix for EM101 (#​24363)
  • [flake8-simplify] Ignore pre-initialization references in SIM113 (#​24235)
  • [pycodestyle] Fix W391 fixes for consecutive empty notebook cells (#​24236)
  • [pyupgrade] Fix UP008 nested class matching (#​24273)
  • [pyupgrade] Ignore strings with string-only escapes (UP012) (#​16058)
  • [ruff] RUF072: skip formfeeds on dedent (#​24308)
  • [ruff] Avoid re-using symbol in RUF024 fix (#​24316)
  • [ruff] Parenthesize expression in RUF050 fix (#​24234)
  • Disallow starred expressions as values of starred expressions (#​24280)
Rule changes
  • [flake8-simplify] Suppress SIM105 for except* before Python 3.12 (#​23869)
  • [pyflakes] Extend F507 to flag %-format strings with zero placeholders (#​24215)
  • [pyupgrade] UP018 should detect more unnecessarily wrapped literals (UP018) (#​24093)
  • [pyupgrade] Fix UP008 callable scope handling to support lambdas (#​24274)
  • [ruff] RUF010: Mark fix as unsafe when it deletes a comment (#​24270)
Formatter
  • Add nested-string-quote-style formatting option (#​24312)
Documentation
  • [flake8-bugbear] Clarify RUF071 fix safety for non-path string comparisons (#​24149)
  • [flake8-type-checking] Clarify import cycle wording for TC001/TC002/TC003 (#​24322)
Other changes
  • Avoid rendering fix lines with trailing whitespace after | (#​24343)
Contributors

Install ruff 0.15.9

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.8

Compare Source

Release Notes

Released on 2026-03-26.

Preview features
  • [ruff] New rule unnecessary-if (RUF050) (#​24114)
  • [ruff] New rule useless-finally (RUF072) (#​24165)
  • [ruff] New rule f-string-percent-format (RUF073): warn when using % operator on an f-string (#​24162)
  • [pyflakes] Recognize frozendict as a builtin for Python 3.15+ (#​24100)
Bug fixes
  • [flake8-async] Use fully-qualified anyio.lowlevel import in autofix (ASYNC115) (#​24166)
  • [flake8-bandit] Check tuple arguments for partial paths in S607 (#​24080)
  • [pyflakes] Skip undefined-name (F821) for conditionally deleted variables (#​24088)
  • E501/W505/formatter: Exclude nested pragma comments from line width calculation (#​24071)
  • Fix %foo? parsing in IPython assignment expressions (#​24152)
  • analyze graph: resolve string imports that reference attributes, not just modules (#​24058)
Rule changes
  • [eradicate] ignore ty: ignore comments in ERA001 (#​24192)
  • [flake8-bandit] Treat sys.executable as trusted input in S603 (#​24106)
  • [flake8-self] Recognize Self annotation and self assignment in SLF001 (#​24144)
  • [pyflakes] F507: Fix false negative for non-tuple RHS in %-formatting (#​24142)
  • [refurb] Parenthesize generator arguments in FURB142 fixer (#​24200)
Performance
Server
  • Warn when Markdown files are skipped due to preview being disabled (#​24150)
Documentation
  • Clarify extend-ignore and extend-select settings documentation (#​24064)
  • Mention AI policy in PR template (#​24198)
Other changes
  • Use trusted publishing for NPM packages (#​24171)
Contributors

Install ruff 0.15.8

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.7

Compare Source

Release Notes

Released on 2026-03-19.

Preview features
  • Display output severity in preview (#​23845)
  • Don't show noqa hover for non-Python documents (#​24040)
Rule changes
  • [pycodestyle] Recognize pyrefly: as a pragma comment (E501) (#​24019)
Server
  • Don't return code actions for non-Python documents (#​23905)
Documentation
  • Add company AI policy to contributing guide (#​24021)
  • Document editor features for Markdown code formatting (#​23924)
  • [pylint] Improve phrasing (PLC0208) (#​24033)
Other changes
  • Use PEP 639 license information (#​19661)
Contributors

Install ruff 0.15.7

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.6

Compare Source

Release Notes

Released on 2026-03-12.

Preview features
  • Add support for lazy import parsing (#​23755)
  • Add support for star-unpacking of comprehensions (PEP 798) (#​23788)
  • Reject semantic syntax errors for lazy imports (#​23757)
  • Drop a few rules from the preview default set (#​23879)
  • [airflow] Flag Variable.get() calls outside of task execution context (AIR003) (#​23584)
  • [airflow] Flag runtime-varying values in DAG/task constructor arguments (AIR304) (#​23631)
  • [flake8-bugbear] Implement delattr-with-constant (B043) (#​23737)
  • [flake8-tidy-imports] Add TID254 to enforce lazy imports (#​23777)
  • [flake8-tidy-imports] Allow users to ban lazy imports with TID254 (#​23847)
  • [isort] Retain lazy keyword when sorting imports (#​23762)
  • [pyupgrade] Add from __future__ import annotations automatically (UP006) (#​23260)
  • [refurb] Support newline parameter in FURB101 for Python 3.13+ (#​23754)
  • [ruff] Add os-path-commonprefix (RUF071) (#​23814)
  • [ruff] Add unsafe fix for os-path-commonprefix (RUF071) (#​23852)
  • [ruff] Limit RUF036 to typing contexts; make it unsafe for non-typing-only (#​23765)
  • [ruff] Use starred unpacking for RUF017 in Python 3.15+ (#​23789)
Bug fixes
  • Fix --add-noqa creating unwanted leading whitespace (#​23773)
  • Fix --add-noqa breaking shebangs (#​23577)
  • [formatter] Fix lambda body formatting for multiline calls and subscripts (#​23866)
  • [formatter] Preserve required annotation parentheses in annotated assignments (#​23865)
  • [formatter] Preserve type-expression parentheses in the formatter (#​23867)
  • [flake8-annotations] Fix stack overflow in ANN401 on quoted annotations with escape sequences (#​23912)
  • [pep8-naming] Check naming conventions in match pattern bindings (N806, N815, N816) (#​23899)
  • [perflint] Fix comment duplication in fixes (PERF401, PERF403) (#​23729)
  • [pyupgrade] Properly trigger super change in nested class (UP008) (#​22677)
  • [ruff] Avoid syntax errors in RUF036 fixes (#​23764)
Rule changes
  • [flake8-bandit] Flag S501 with requests.request (#​23873)
  • [flake8-executable] Fix WSL detection in non-Docker containers (#​22879)
  • [flake8-print] Ignore pprint calls with stream= (#​23787)
Documentation
  • Update docs for Markdown code block formatting (#​23871)
  • [flake8-bugbear] Fix misleading description for B904 (#​23731)
Contributors

Install ruff 0.15.6

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

v0.15.5

Compare Source

Release Notes

Released on 2026-03-05.

Preview features
  • Discover Markdown files by default in preview mode (#​23434)
  • [perflint] Extend PERF102 to comprehensions and generators (#​23473)
  • [refurb] Fix FURB101 and FURB103 false positives when I/O variable is used later (#​23542)
  • [ruff] Add fix for none-not-at-end-of-union (RUF036) (#​22829)
  • [ruff] Fix false positive for re.split with empty string pattern (RUF055) (#​23634)
Bug fixes
  • [fastapi] Handle callable class dependencies with __call__ method (FAST003) (#​23553)
  • [pydocstyle] Fix numpy section ordering (D420) (#​23685)
  • [pyflakes] Fix false positive for names shadowing re-exports (F811) (#​23356)
  • [pyupgrade] Avoid inserting redundant None elements in UP045 (#​23459)
Documentation
  • Document extension mapping for Markdown code formatting (#​23574)
  • Update default Python version examples (#​23605)
Other changes
  • Publish releases to Astral mirror (#​23616)
Contributors

Install ruff 0.15.5

Install prebuilt binaries via shell script
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
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
ruff-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ruff-x86_64-apple-darwin.tar.gz Intel macOS checksum
ruff-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ruff-i686-pc-windows-msvc.zip x86 Windows checksum
ruff-x86_64-pc-windows-msvc.zip x64 Windows checksum
ruff-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ruff-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ruff-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ruff-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ruff-riscv64gc-unknown-linux-gnu.tar.gz RISCV Linux checksum
ruff-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ruff-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ruff-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ruff-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ruff-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ruff-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ruff-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ruff-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux 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:

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>

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [ruff](https://docs.astral.sh/ruff) ([source](https://github.com/astral-sh/ruff), [changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)) | `~=0.15.4` → `~=0.16.1` | ![age](https://developer.mend.io/api/mc/badges/age/pypi/ruff/0.16.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/ruff/0.15.4/0.16.1?slim=true) | --- ### Release Notes <details> <summary>astral-sh/ruff (ruff)</summary> ### [`v0.16.1`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0161) [Compare Source](https://github.com/astral-sh/ruff/compare/0.16.0...0.16.1) Released on 2026-07-30. ##### Preview features - Add an option to opt out of human-readable names ([#&#8203;27160](https://github.com/astral-sh/ruff/pull/27160)) - \[`flake8-pytest-style`] Make fixes safe by default and unsafe only when comments are present (`PT018`) ([#&#8203;27201](https://github.com/astral-sh/ruff/pull/27201)) - \[`pyupgrade`] Skip fix when a defaulted `TypeVar` precedes a non-defaulted one (`UP040`, `UP046`, `UP047`) ([#&#8203;27133](https://github.com/astral-sh/ruff/pull/27133)) - \[`ruff`] Fix false positive with unpacked arguments (`RUF065`) ([#&#8203;26959](https://github.com/astral-sh/ruff/pull/26959)) ##### Bug fixes - Bump `gen-lsp-types` to gracefully handle unknown enumeration values in LSP messages ([#&#8203;27230](https://github.com/astral-sh/ruff/pull/27230)) - \[`flake8-bugbear`] Mark `range` as immutable (`B008`) ([#&#8203;27247](https://github.com/astral-sh/ruff/pull/27247)) - \[`flake8-comprehensions`] NFKC-normalize keyword names in `C408` fix ([#&#8203;26813](https://github.com/astral-sh/ruff/pull/26813)) - \[`flake8-return`] Fix false positive when variable is read in `finally` clause (`RET504`) ([#&#8203;25441](https://github.com/astral-sh/ruff/pull/25441)) - \[`pydocstyle`] Skip section detection inside RST directive bodies (`D214`, `D405`, `D413`) ([#&#8203;23635](https://github.com/astral-sh/ruff/pull/23635)) - \[`refurb`] Parenthesize `yield` arguments in the `FURB192` fix ([#&#8203;27192](https://github.com/astral-sh/ruff/pull/27192)) ##### Rule changes - \[`flake8-pytest-style`] Mark `PT022` fixes as unsafe ([#&#8203;26440](https://github.com/astral-sh/ruff/pull/26440)) - \[`refurb`] Mark fixes that remove unknown separators as unsafe (`FURB105`) ([#&#8203;27200](https://github.com/astral-sh/ruff/pull/27200)) ##### Server - Fix indexing of excluded nested Ruff workspaces ([#&#8203;27303](https://github.com/astral-sh/ruff/pull/27303)) - Lint TOML files in the LSP ([#&#8203;26862](https://github.com/astral-sh/ruff/pull/26862)) ##### Documentation - Cover `pycon` Markdown formatting ([#&#8203;27153](https://github.com/astral-sh/ruff/pull/27153)) - \[`flake8-bandit`] Document `TYPE_CHECKING` exception (`S101`) ([#&#8203;27004](https://github.com/astral-sh/ruff/pull/27004)) - \[`flake8-import-conventions`] Document that `extend-aliases` can override default aliases ([#&#8203;27191](https://github.com/astral-sh/ruff/pull/27191)) - \[`pylint`] Add missing fix safety gotchas for `non-augmented-assignment` (`PLR6104`) ([#&#8203;27250](https://github.com/astral-sh/ruff/pull/27250)) ##### Other changes - Reduce syntax error noise by swallowing dedents like indents ([#&#8203;27170](https://github.com/astral-sh/ruff/pull/27170)) - Vendor latest annotate-snippets ([#&#8203;27033](https://github.com/astral-sh/ruff/pull/27033)) ##### Contributors - [@&#8203;bxff](https://github.com/bxff) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;epage](https://github.com/epage) - [@&#8203;LHMQ878](https://github.com/LHMQ878) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;HarshalPatel1972](https://github.com/HarshalPatel1972) - [@&#8203;mjpieters](https://github.com/mjpieters) - [@&#8203;joshuavetos](https://github.com/joshuavetos) - [@&#8203;jesco-absolute](https://github.com/jesco-absolut) - [@&#8203;vidigoat](https://github.com/vidigoat) - [@&#8203;baltasarblanco](https://github.com/baltasarblanco) - [@&#8203;ribru17](https://github.com/ribru17) - [@&#8203;oh-summy](https://github.com/oh-summy) - [@&#8203;Jayashanker-Padishala](https://github.com/Jayashanker-Padishala) ### [`v0.16.0`](https://github.com/astral-sh/ruff/blob/HEAD/CHANGELOG.md#0160) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.22...0.16.0) Released on 2026-07-23. Check out the [blog post](https://astral.sh/blog/ruff-v0.16.0) for a migration guide and overview of the changes! ##### Breaking changes - Ruff now enables a much larger set of rules by default (413, up from 59). See the blog post for more details and the new [Default Rules](https://docs.astral.sh/ruff/default-rules/) page for a full listing of the enabled rules. Note that this is primarily an expansion, but 18 of the more opinionated pycodestyle (`E`) and pyflakes (`F`) rules have been removed from the default set: `E401`, `E402`, `E701`, `E702`, `E703`, `E711`, `E712`, `E713`, `E714`, `E721`, `E731`, `E741`, `E742`, `E743`, `F403`, `F405`, `F406`, and `F722`. - Ruff can now format Python code blocks in Markdown files and will do this by default. See the [documentation](https://docs.astral.sh/ruff/formatter/#markdown-code-formatting) for more details. - Ruff now supports `ruff: ignore` comments at the ends of lines, like `noqa` comments, or on the line preceding a diagnostic. For example, these both suppress an [`unused-import`](https://docs.astral.sh/ruff/rules/unused-import/) (`F401`) diagnostic: ```py import math # ruff: ignore[F401] # ruff: ignore[F401] import os ``` - Fixes are now shown in `check` and `format --check` output: ````console ❯ ruff format --check . unformatted: File would be reformatted --> try.md:1:1 | 1 | ```python - import math 2 + import math 3 | ``` | 1 file would be reformatted ```` This example also shows off the Markdown formatting. - `format --check` now supports the same output formats as the linter, including the `github` and `gitlab` outputs for rendering annotations in CI: ```console ❯ ruff format --check --output-format github . ::error title=ruff (unformatted),file=try.md,line=2,col=8,endLine=2,endColumn=10::try.md:2:8: unformatted: File would be reformatted ``` See the CLI help or [documentation](https://docs.astral.sh/ruff/settings/#output-format) for the full list of supported formats. - The `filename`, `location`, `end_location`, `fix.edits[].location`, and `fix.edits[].end_location` fields in the JSON output format may now be `null` rather than defaulting to the empty string and row 1, column 1, respectively. ##### Stabilization The following rules have been stabilized and are no longer in preview: - [`airflow3-incompatible-function-signature`](https://docs.astral.sh/ruff/rules/airflow3-incompatible-function-signature) (`AIR303`) - [`missing-copyright-notice`](https://docs.astral.sh/ruff/rules/missing-copyright-notice) (`CPY001`) - [`unnecessary-from-float`](https://docs.astral.sh/ruff/rules/unnecessary-from-float) (`FURB164`) - [`sorted-min-max`](https://docs.astral.sh/ruff/rules/sorted-min-max) (`FURB192`) - [`implicit-string-concatenation-in-collection-literal`](https://docs.astral.sh/ruff/rules/implicit-string-concatenation-in-collection-literal) (`ISC004`) - [`log-exception-outside-except-handler`](https://docs.astral.sh/ruff/rules/log-exception-outside-except-handler) (`LOG004`) - [`invalid-bool-return-type`](https://docs.astral.sh/ruff/rules/invalid-bool-return-type) (`PLE0304`) - [`too-many-positional-arguments`](https://docs.astral.sh/ruff/rules/too-many-positional-arguments) (`PLR0917`) - [`stop-iteration-return`](https://docs.astral.sh/ruff/rules/stop-iteration-return) (`PLR1708`) - [`none-not-at-end-of-union`](https://docs.astral.sh/ruff/rules/none-not-at-end-of-union) (`RUF036`) - [`access-annotations-from-class-dict`](https://docs.astral.sh/ruff/rules/access-annotations-from-class-dict) (`RUF063`) - [`duplicate-entry-in-dunder-all`](https://docs.astral.sh/ruff/rules/duplicate-entry-in-dunder-all) (`RUF068`) The following behaviors have been stabilized: - [`blind-except`](https://docs.astral.sh/ruff/rules/blind-except) (`BLE001`) is now suppressed when the exception is logged via `logging` methods other than `critical`, `error` and `exception`. - [`future-required-type-annotation`](https://docs.astral.sh/ruff/rules/future-required-type-annotation) (`FA102`) now checks for additional [PEP 585](https://peps.python.org/pep-0585/)-compatible APIs, such as those from `collections.abc`. - [`f-string-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/f-string-in-get-text-func-call) (`INT001`), [`format-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/format-in-get-text-func-call) (`INT002`), and [`printf-in-get-text-func-call`](https://docs.astral.sh/ruff/rules/printf-in-get-text-func-call) (`INT003`) now check for additional common ways of using the `gettext` module, such as assigning it to `builtins._`. - [`suspicious-url-open-usage`](https://docs.astral.sh/ruff/rules/suspicious-url-open-usage) (`S310`) now resolves local string literal bindings to avoid more false positives. - [`snmp-insecure-version`](https://docs.astral.sh/ruff/rules/snmp-insecure-version) (`S508`) and [`snmp-weak-cryptography`](https://docs.astral.sh/ruff/rules/snmp-weak-cryptography) (`S509`) now support the recommended API from newer versions of PySNMP. - [`typing-text-str-alias`](https://docs.astral.sh/ruff/rules/typing-text-str-alias) (`UP019`) now recognizes `typing_extensions.Text` in addition to `typing.Text`. ##### Preview features - \[`pyupgrade`] Fix false positive with `TypeVar` default before Python 3.13 (`UP040`) ([#&#8203;26888](https://github.com/astral-sh/ruff/pull/26888)) ##### Bug fixes - \[`ruff`] Fix missing check on unrecognized early bound (`RUF016`) ([#&#8203;26986](https://github.com/astral-sh/ruff/pull/26986)) ##### Rule changes - Insert a space after the colon in Ruff suppression comments ([#&#8203;27123](https://github.com/astral-sh/ruff/pull/27123)) ##### Performance - \[`pyupgrade`] Speed up `unnecessary-future-import` (`UP010`) ([#&#8203;27047](https://github.com/astral-sh/ruff/pull/27047)) ##### Documentation - \[`ruff`] Add missing period in "Why is this bad?" section (`RUF200`) ([#&#8203;26930](https://github.com/astral-sh/ruff/pull/26930)) - \[`flake8-simplify`] Clarify `os.environ` behavior on Windows (`SIM112`) ([#&#8203;26972](https://github.com/astral-sh/ruff/pull/26972)) - \[`pydocstyle`] Document fix safety (`D400`) ([#&#8203;26971](https://github.com/astral-sh/ruff/pull/26971)) ##### Contributors - [@&#8203;jonathandung](https://github.com/jonathandung) - [@&#8203;Joosboy](https://github.com/Joosboy) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Andrej730](https://github.com/Andrej730) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;zaniebot](https://github.com/zaniebot) ### [`v0.15.22`](https://github.com/astral-sh/ruff/releases/tag/0.15.22) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.21...0.15.22) #### Release Notes Released on 2026-07-16. ##### Preview features - \[`pycodestyle`] Add an autofix for `E402` ([#&#8203;22212](https://github.com/astral-sh/ruff/pull/22212)) - \[`refurb`] Allow subclassing builtins in stub files (`FURB189`) ([#&#8203;26812](https://github.com/astral-sh/ruff/pull/26812)) - \[`ruff`] Add rule to replace `noqa` comments with `ruff:ignore` (`RUF105`) ([#&#8203;26423](https://github.com/astral-sh/ruff/pull/26423)) - \[`ruff`] Add rule to use human-readable names in `ruff:ignore` comments (`RUF106`) ([#&#8203;26682](https://github.com/astral-sh/ruff/pull/26682)) - \[`ruff`] Add rule to use human-readable names in configuration selectors (`RUF201`) ([#&#8203;26772](https://github.com/astral-sh/ruff/pull/26772)) ##### Bug fixes - \[`flake8-pyi`] Fix false positive in `__all__` (`PYI053`) ([#&#8203;26872](https://github.com/astral-sh/ruff/pull/26872)) ##### Rule changes - \[`pylint`] Ignore mutable type updates in `redefined-loop-name` (`PLW2901`) ([#&#8203;25733](https://github.com/astral-sh/ruff/pull/25733)) ##### Performance - Avoid redundant lexer token bookkeeping ([#&#8203;26765](https://github.com/astral-sh/ruff/pull/26765)) - Avoid redundant pending-indentation writes ([#&#8203;26774](https://github.com/astral-sh/ruff/pull/26774)) - Avoid unnecessary identifier lookahead ([#&#8203;26525](https://github.com/astral-sh/ruff/pull/26525)) - Reuse parser scratch buffers ([#&#8203;26798](https://github.com/astral-sh/ruff/pull/26798)) ##### Documentation - Document argfile support ([#&#8203;26803](https://github.com/astral-sh/ruff/pull/26803)) - \[`flake8-datetimez`] Clarify naming guidance for `datetime.today` (`DTZ002`) ([#&#8203;26658](https://github.com/astral-sh/ruff/pull/26658)) - \[`pycodestyle`] Document `E731` fix safety ([#&#8203;26847](https://github.com/astral-sh/ruff/pull/26847)) - \[`ruff`] Clarify intentional async contexts for `unused-async` (`RUF029`) ([#&#8203;26641](https://github.com/astral-sh/ruff/pull/26641)) ##### Contributors - [@&#8203;dwego](https://github.com/dwego) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Joosboy](https://github.com/Joosboy) - [@&#8203;KaufmanDmitriy](https://github.com/KaufmanDmitriy) - [@&#8203;PeterJCLaw](https://github.com/PeterJCLaw) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;charliermarsh](https://github.com/charliermarsh) #### Install ruff 0.15.22 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.22/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.22/ruff-installer.ps1 | iex" ``` #### Download ruff 0.15.22 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.22/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.21`](https://github.com/astral-sh/ruff/releases/tag/0.15.21) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.20...0.15.21) #### Release Notes Released on 2026-07-09. ##### Preview features - Add `--add-ignore` for adding `ruff:ignore` comments ([#&#8203;26346](https://github.com/astral-sh/ruff/pull/26346)) - \[`flake8-comprehensions`] Drop `C409` tuple comprehension preview behavior ([#&#8203;25707](https://github.com/astral-sh/ruff/pull/25707)) - Avoid whitespace normalization when formatting comments ([#&#8203;26455](https://github.com/astral-sh/ruff/pull/26455)) - \[`pyupgrade`] Lint and fix use of deprecated `abc` decorators (`UP051`) ([#&#8203;26417](https://github.com/astral-sh/ruff/pull/26417)) ##### Bug fixes - Refine non-empty f-string detection ([#&#8203;26526](https://github.com/astral-sh/ruff/pull/26526)) - Detect syntax errors in individual notebook cells ([#&#8203;26419](https://github.com/astral-sh/ruff/pull/26419)) - \[`flake8-implicit-str-concat`] Fix `ISC003` autofix incorrectly stripping `+` from comments ([#&#8203;26554](https://github.com/astral-sh/ruff/pull/26554)) ##### Rule changes - \[`flake8-executable`] Mark `EXE004` fix as unsafe ([#&#8203;26033](https://github.com/astral-sh/ruff/pull/26033)) - \[`flake8-pyi`] Mark `PYI061` fixes as unsafe in Python files ([#&#8203;26533](https://github.com/astral-sh/ruff/pull/26533)) - \[`pydocstyle`] Skip `overload-with-docstring` in stub files (`D418`) ([#&#8203;26318](https://github.com/astral-sh/ruff/pull/26318)) ##### Performance - Avoid per-token source index visitor calls ([#&#8203;26506](https://github.com/astral-sh/ruff/pull/26506)) - Cache parenthesized expression boundaries in the formatter ([#&#8203;26344](https://github.com/astral-sh/ruff/pull/26344)) - Improve performance of rendering edits in preview mode ([#&#8203;26565](https://github.com/astral-sh/ruff/pull/26565)) - Inline `fits_element` in formatter ([#&#8203;26429](https://github.com/astral-sh/ruff/pull/26429)) - Inline formatter printing hot paths ([#&#8203;26504](https://github.com/astral-sh/ruff/pull/26504)) - Lazily create builtin bindings ([#&#8203;26510](https://github.com/astral-sh/ruff/pull/26510)) - Skip empty trivia scans in the source indexer ([#&#8203;26507](https://github.com/astral-sh/ruff/pull/26507)) - Use ICF for macOS release builds ([#&#8203;25780](https://github.com/astral-sh/ruff/pull/25780)) ##### Formatter - Add `--extend-exclude` to `ruff format` ([#&#8203;26372](https://github.com/astral-sh/ruff/pull/26372)) ##### Documentation - Add "How does Ruff's import sorting compare to isort?" link to README ([#&#8203;26530](https://github.com/astral-sh/ruff/pull/26530)) - Fix Mozilla Firefox repository link in README ([#&#8203;26537](https://github.com/astral-sh/ruff/pull/26537)) - \[`flake8-bandit`] Fix misleading docstring for `mako-templates` (`S702`) ([#&#8203;26432](https://github.com/astral-sh/ruff/pull/26432)) - \[`ruff`] Fix non-triggering example for `if-key-in-dict-del` (`RUF051`) ([#&#8203;26433](https://github.com/astral-sh/ruff/pull/26433)) ##### Contributors - [@&#8203;EkriirkE](https://github.com/EkriirkE) - [@&#8203;tingerrr](https://github.com/tingerrr) - [@&#8203;s-rigaud](https://github.com/s-rigaud) - [@&#8203;nikolauspschuetz](https://github.com/nikolauspschuetz) - [@&#8203;Avasam](https://github.com/Avasam) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;omar-y-abdi](https://github.com/omar-y-abdi) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;sylvestre](https://github.com/sylvestre) - [@&#8203;shaanmajid](https://github.com/shaanmajid) - [@&#8203;lerebear](https://github.com/lerebear) - [@&#8203;baltasarblanco](https://github.com/baltasarblanco) - [@&#8203;Sanjays2402](https://github.com/Sanjays2402) - [@&#8203;ZedThree](https://github.com/ZedThree) - [@&#8203;servusdei2018](https://github.com/servusdei2018) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;jesco-absolute](https://github.com/jesco-absolut) - [@&#8203;velikodniy](https://github.com/velikodniy) - [@&#8203;zaniebot](https://github.com/zaniebot) - [@&#8203;epage](https://github.com/epage) #### Install ruff 0.15.21 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.21/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.21/ruff-installer.ps1 | iex" ``` #### Download ruff 0.15.21 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.21/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.20`](https://github.com/astral-sh/ruff/releases/tag/0.15.20) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.19...0.15.20) #### Release Notes Released on 2026-06-25. ##### Preview features - Allow human-readable names in rule selectors ([#&#8203;25887](https://github.com/astral-sh/ruff/pull/25887)) - Emit a warning instead of an error for unknown rule selectors ([#&#8203;26113](https://github.com/astral-sh/ruff/pull/26113)) - Match `noqa` shebang handling in `ruff:ignore` comments ([#&#8203;26286](https://github.com/astral-sh/ruff/pull/26286)) - \[`ruff`] Remove `pytest-fixture-autouse` (`RUF076`) ([#&#8203;26240](https://github.com/astral-sh/ruff/pull/26240), [#&#8203;26371](https://github.com/astral-sh/ruff/pull/26371)) ##### Documentation - Add versioning sections to custom crate READMEs ([#&#8203;26317](https://github.com/astral-sh/ruff/pull/26317)) - Update `ruff_python_parser` README for crates.io ([#&#8203;26315](https://github.com/astral-sh/ruff/pull/26315)) - \[`perflint`] Clarify that `PERF402` applies to any iterable ([#&#8203;26242](https://github.com/astral-sh/ruff/pull/26242)) ##### Contributors - [@&#8203;dhruvmanila](https://github.com/dhruvmanila) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;trilamsr](https://github.com/trilamsr) #### Install ruff 0.15.20 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.20/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.20/ruff-installer.ps1 | iex" ``` #### Download ruff 0.15.20 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.19`](https://github.com/astral-sh/ruff/releases/tag/0.15.19) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.18...0.15.19) #### Release Notes Released on 2026-06-23. ##### Preview features - Support human-readable names when hovering suppression comments and in code actions ([#&#8203;26114](https://github.com/astral-sh/ruff/pull/26114)) ##### Bug fixes - Fall back to default settings when editor-only settings are invalid ([#&#8203;26244](https://github.com/astral-sh/ruff/pull/26244)) - Fix panic when inserting text at a notebook cell boundary ([#&#8203;26111](https://github.com/astral-sh/ruff/pull/26111)) ##### Rule changes - \[`pylint`] Update fix suggestions for `__floor__`, `__trunc__`, `__length_hint__`, and `__matmul__` variants (`PLC2801`) ([#&#8203;26239](https://github.com/astral-sh/ruff/pull/26239)) ##### Performance - Avoid allocating when parsing single string literals ([#&#8203;26200](https://github.com/astral-sh/ruff/pull/26200)) - Avoid reallocating singleton call arguments ([#&#8203;26223](https://github.com/astral-sh/ruff/pull/26223)) - Lazily create source files for lint diagnostics ([#&#8203;26226](https://github.com/astral-sh/ruff/pull/26226)) - Optimize formatter text width and indentation ([#&#8203;26236](https://github.com/astral-sh/ruff/pull/26236)) - Reserve capacity for builtin bindings ([#&#8203;26229](https://github.com/astral-sh/ruff/pull/26229)) - Skip repeated-key checks for singleton dictionaries ([#&#8203;26228](https://github.com/astral-sh/ruff/pull/26228)) - Use ArrayVec for qualified name segments ([#&#8203;26224](https://github.com/astral-sh/ruff/pull/26224)) ##### Documentation - \[`flake8-pyi`] Note that `PYI051` is an opinionated stylistic rule ([#&#8203;26179](https://github.com/astral-sh/ruff/pull/26179)) - \[`pyupgrade`] Clarify `UP029` as a Python 2 compatibility rule ([#&#8203;26243](https://github.com/astral-sh/ruff/pull/26243)) ##### Other changes - Publish Ruff crates to crates.io ([#&#8203;26271](https://github.com/astral-sh/ruff/pull/26271)) ##### Contributors - [@&#8203;MakenRosa](https://github.com/MakenRosa) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;trilamsr](https://github.com/trilamsr) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;sanjibani](https://github.com/sanjibani) - [@&#8203;charliermarsh](https://github.com/charliermarsh) #### Install ruff 0.15.19 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.19/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.19/ruff-installer.ps1 | iex" ``` #### Download ruff 0.15.19 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.19/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.18`](https://github.com/astral-sh/ruff/releases/tag/0.15.18) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.17...0.15.18) #### Release Notes Released on 2026-06-18. ##### Preview features - Handle nested `ruff:ignore` comments ([#&#8203;25791](https://github.com/astral-sh/ruff/pull/25791)) - Stop displaying severity in output ([#&#8203;26050](https://github.com/astral-sh/ruff/pull/26050)) - Use human-readable names in CLI output ([#&#8203;25937](https://github.com/astral-sh/ruff/pull/25937)) - Use human-readable names in LSP and playground diagnostics ([#&#8203;26058](https://github.com/astral-sh/ruff/pull/26058)) - \[`pydocstyle`] Prevent property docstrings starting with verbs (`D421`) ([#&#8203;23775](https://github.com/astral-sh/ruff/pull/23775)) - \[`flake8-pyi`] Extend `PYI033` to Python files ([#&#8203;26129](https://github.com/astral-sh/ruff/pull/26129)) ##### Bug fixes - Detect equivalent numeric mapping keys ([#&#8203;26009](https://github.com/astral-sh/ruff/pull/26009)) - Detect mapping keys equivalent to booleans ([#&#8203;25982](https://github.com/astral-sh/ruff/pull/25982)) - Detect repeated signed and complex dictionary keys ([#&#8203;26007](https://github.com/astral-sh/ruff/pull/26007)) ##### Rule changes - \[`flake8-pyi`] Rename `PYI033` to `legacy-type-comment` ([#&#8203;26131](https://github.com/astral-sh/ruff/pull/26131)) ##### Performance - Use `ThinVec` for call keywords ([#&#8203;25999](https://github.com/astral-sh/ruff/pull/25999)) - Inline parser recovery context checks ([#&#8203;26038](https://github.com/astral-sh/ruff/pull/26038)) - Match parser keywords as bytes ([#&#8203;26037](https://github.com/astral-sh/ruff/pull/26037)) - Move value parsing out of lexing ([#&#8203;25360](https://github.com/astral-sh/ruff/pull/25360)) ##### Server - Render subdiagnostics and secondary annotations as related information ([#&#8203;26011](https://github.com/astral-sh/ruff/pull/26011)) ##### Documentation - Update fix availability for always-fixable rules ([#&#8203;26091](https://github.com/astral-sh/ruff/pull/26091)) - \[`flake8-tidy-imports`] Add fix safety section (`TID252`) ([#&#8203;17491](https://github.com/astral-sh/ruff/pull/17491)) ##### Parser - Reject `__debug__` lambda parameters ([#&#8203;26022](https://github.com/astral-sh/ruff/pull/26022)) - Reject `_` as a match-pattern target ([#&#8203;25977](https://github.com/astral-sh/ruff/pull/25977)) - Reject multiple starred names in sequence patterns ([#&#8203;25976](https://github.com/astral-sh/ruff/pull/25976)) - Reject parenthesized star imports ([#&#8203;26021](https://github.com/astral-sh/ruff/pull/26021)) - Reject starred comprehension targets ([#&#8203;26023](https://github.com/astral-sh/ruff/pull/26023)) - Reject unparenthesized generator expressions in class bases ([#&#8203;25978](https://github.com/astral-sh/ruff/pull/25978)) - Reject `yield` expressions after commas ([#&#8203;26024](https://github.com/astral-sh/ruff/pull/26024)) - Validate function type parameter default order ([#&#8203;25981](https://github.com/astral-sh/ruff/pull/25981)) ##### Playground - Make diagnostic links clickable ([#&#8203;26104](https://github.com/astral-sh/ruff/pull/26104)) - Use diagnostic tags ([#&#8203;26105](https://github.com/astral-sh/ruff/pull/26105)) ##### Contributors - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;gtkacz](https://github.com/gtkacz) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;Kalmaegi](https://github.com/Kalmaegi) #### Install ruff 0.15.18 ##### Install prebuilt binaries via shell script ```sh curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.15.18/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.18/ruff-installer.ps1 | iex" ``` #### Download ruff 0.15.18 | File | Platform | Checksum | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.18/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.17`](https://github.com/astral-sh/ruff/releases/tag/0.15.17) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.16...0.15.17) #### Release Notes Released on 2026-06-11. ##### Preview features - Allow human-readable names in suppression comments ([#&#8203;25614](https://github.com/astral-sh/ruff/pull/25614)) - Fix handling of `ignore` comments within a `disable`/`enable` pair ([#&#8203;25845](https://github.com/astral-sh/ruff/pull/25845)) - Prioritize human-readable names in CLI output ([#&#8203;25869](https://github.com/astral-sh/ruff/pull/25869)) - Respect diagnostic start and parent ranges and trailing comments in `ruff:ignore` suppressions ([#&#8203;25673](https://github.com/astral-sh/ruff/pull/25673)) - \[`flake8-async`] Add `trio.as_safe_channel` to safe decorators (`ASYNC119`) ([#&#8203;25775](https://github.com/astral-sh/ruff/pull/25775)) - \[`flake8-pytest-style`] Also check `pytest_asyncio` fixtures ([#&#8203;25375](https://github.com/astral-sh/ruff/pull/25375)) - \[`ruff`] Ban `pytest` autouse fixtures (`RUF076`) ([#&#8203;25477](https://github.com/astral-sh/ruff/pull/25477)) - \[`pyupgrade`] Add `from __future__ import annotations` automatically (`UP007`, `UP045`) ([#&#8203;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 ([#&#8203;25700](https://github.com/astral-sh/ruff/pull/25700)) - \[`pyupgrade`] Preserve leading empty literals to avoid syntax errors (`UP032`) ([#&#8203;25491](https://github.com/astral-sh/ruff/pull/25491)) ##### Rule changes - \[`flake8-pytest-style`] Clarify diagnostic message for single parameters (`PT007`) ([#&#8203;25592](https://github.com/astral-sh/ruff/pull/25592)) - \[`numpy`] Drop autofix for `np.in1d` (`NPY201`) ([#&#8203;25612](https://github.com/astral-sh/ruff/pull/25612)) - \[`pylint`] Exempt Python version comparisons (`PLR2004`) ([#&#8203;25743](https://github.com/astral-sh/ruff/pull/25743)) ##### Performance - Reserve AST `Vec`s with correct capacity for common cases ([#&#8203;25451](https://github.com/astral-sh/ruff/pull/25451)) ##### Formatter - Preserve whitespace for Quarto cell option comments ([#&#8203;25641](https://github.com/astral-sh/ruff/pull/25641)) ##### CLI - Allow rule names in `ruff rule` ([#&#8203;25640](https://github.com/astral-sh/ruff/pull/25640)) ##### Other changes - Fix playground diagnostics scrollbars ([#&#8203;25642](https://github.com/astral-sh/ruff/pull/25642)) ##### Contributors - [@&#8203;SuryanshSS1011](https://github.com/SuryanshSS1011) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;romero-deshaw](https://github.com/romero-deshaw) - [@&#8203;karlhillx](https://github.com/karlhillx) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;Kilo59](https://github.com/Kilo59) - [@&#8203;oconnor663](https://github.com/oconnor663) - [@&#8203;LeonidasZhak](https://github.com/LeonidasZhak) - [@&#8203;DavisVaughan](https://github.com/DavisVaughan) - [@&#8203;MeGaGiGaGon](https://github.com/MeGaGiGaGon) - [@&#8203;jonathandung](https://github.com/jonathandung) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;brianmego](https://github.com/brianmego) #### Install ruff 0.15.17 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.17/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.16`](https://github.com/astral-sh/ruff/releases/tag/0.15.16) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.15...0.15.16) #### Release Notes Released on 2026-06-04. ##### Preview features - \[`flake8-async`] Implement `yield-in-context-manager-in-async-generator` (`ASYNC119`) ([#&#8203;24644](https://github.com/astral-sh/ruff/pull/24644)) - \[`pylint`] Narrow diagnostic range and exclude cases without exception handlers (`PLW0717`) ([#&#8203;25440](https://github.com/astral-sh/ruff/pull/25440)) - \[`ruff`] Treat `yield` before `break` from a terminal loop as terminal (`RUF075`) ([#&#8203;25447](https://github.com/astral-sh/ruff/pull/25447)) ##### Bug fixes - \[`eradicate`] Avoid flagging `ruff:ignore` comments as code (`ERA001`) ([#&#8203;25537](https://github.com/astral-sh/ruff/pull/25537)) - \[`eradicate`] Fix `ERA001`/`RUF100` conflict when `noqa` is on commented-out code ([#&#8203;25414](https://github.com/astral-sh/ruff/pull/25414)) - \[`pyflakes`] Avoid removing the `format` call when it would change behavior (`F523`) ([#&#8203;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`) ([#&#8203;25544](https://github.com/astral-sh/ruff/pull/25544)) - \[`pyupgrade`] Avoid converting `format` calls with more kinds of side effects (`UP032`) ([#&#8203;25484](https://github.com/astral-sh/ruff/pull/25484)) ##### Rule changes - \[`flake8-pytest-style`] Avoid fixes for ambiguous `argnames` and `argvalues` combinations (`PT006`) ([#&#8203;24776](https://github.com/astral-sh/ruff/pull/24776)) ##### Performance - Drop excess capacity from statement suites during parsing ([#&#8203;25368](https://github.com/astral-sh/ruff/pull/25368)) ##### Documentation - \[`pydocstyle`] Improve discoverability of rules enabled for each convention ([#&#8203;24973](https://github.com/astral-sh/ruff/pull/24973)) - \[`ruff`] Restore example code for Python versions before 3.15 (`RUF017`) ([#&#8203;25439](https://github.com/astral-sh/ruff/pull/25439)) - Fix typo `bin/active` → `bin/activate` in tutorial ([#&#8203;25473](https://github.com/astral-sh/ruff/pull/25473)) ##### Other changes - Shrink additional parser AST collections ([#&#8203;25465](https://github.com/astral-sh/ruff/pull/25465)) ##### Contributors - [@&#8203;Redslayer112](https://github.com/Redslayer112) - [@&#8203;koriyoshi2041](https://github.com/koriyoshi2041) - [@&#8203;George-Ogden](https://github.com/George-Ogden) - [@&#8203;TejasAmle](https://github.com/TejasAmle) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;loganrosen](https://github.com/loganrosen) - [@&#8203;RafaelJohn9](https://github.com/RafaelJohn9) - [@&#8203;adityasingh2400](https://github.com/adityasingh2400) #### Install ruff 0.15.16 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.16/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.15`](https://github.com/astral-sh/ruff/releases/tag/0.15.15) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.14...0.15.15) #### Release Notes Released on 2026-05-28. ##### Preview features - Fix Markdown closing fence handling ([#&#8203;25310](https://github.com/astral-sh/ruff/pull/25310)) - \[`pyflakes`] Report duplicate imports in `typing.TYPE_CHECKING` block (`F811`) ([#&#8203;22560](https://github.com/astral-sh/ruff/pull/22560)) ##### Bug fixes - \[`pyflakes`] Treat function-scope bare annotations as locals per PEP 526 (`F821`) ([#&#8203;21540](https://github.com/astral-sh/ruff/pull/21540)) ##### Performance - Avoid redundant `TokenValue` drops in the lexer ([#&#8203;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 ([#&#8203;25354](https://github.com/astral-sh/ruff/pull/25354)) - Use `ThinVec` in AST to shrink `Stmt` ([#&#8203;25361](https://github.com/astral-sh/ruff/pull/25361)) ##### Documentation - Fix `line-length` example for `--config` option ([#&#8203;25389](https://github.com/astral-sh/ruff/pull/25389)) - \[`flake8-comprehensions`] Document `RecursionError` edge case in `__len__` (`C416`) ([#&#8203;25286](https://github.com/astral-sh/ruff/pull/25286)) - \[`mccabe`] Improve example (`C901`) ([#&#8203;25287](https://github.com/astral-sh/ruff/pull/25287)) - \[`pyupgrade`] Clarify fix safety docs (`UP007`, `UP045`) ([#&#8203;25288](https://github.com/astral-sh/ruff/pull/25288)) - \[`refurb`] Document `FURB192` exception change for empty sequences ([#&#8203;25317](https://github.com/astral-sh/ruff/pull/25317)) - \[`ruff`] Document false negative for user-defined types (`RUF013`) ([#&#8203;25289](https://github.com/astral-sh/ruff/pull/25289)) ##### Formatter - Fix formatting of lambdas nested within f-strings ([#&#8203;25398](https://github.com/astral-sh/ruff/pull/25398)) ##### Server - Return code action for `codeAction/resolve` requests that contain no or no valid URL ([#&#8203;25365](https://github.com/astral-sh/ruff/pull/25365)) ##### Other changes - Expand semantic syntax errors for invalid walruses ([#&#8203;25415](https://github.com/astral-sh/ruff/pull/25415)) ##### Contributors - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;adityasingh2400](https://github.com/adityasingh2400) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;fallintoplace](https://github.com/fallintoplace) - [@&#8203;martin-schlossarek](https://github.com/martin-schlossarek) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;Ruchir28](https://github.com/Ruchir28) #### Install ruff 0.15.15 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.15/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.14`](https://github.com/astral-sh/ruff/releases/tag/0.15.14) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.13...0.15.14) #### Release Notes Released on 2026-05-21. ##### Preview features - \[`airflow`] Implement `airflow-task-implicit-multiple-outputs` (`AIR202`) ([#&#8203;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` ([#&#8203;25086](https://github.com/astral-sh/ruff/pull/25086)) - \[`pylint`] Implement `too-many-try-statements` (`W0717`) ([#&#8203;23970](https://github.com/astral-sh/ruff/pull/23970)) - \[`ruff`] Add `incorrect-decorator-order` (`RUF074`) ([#&#8203;23461](https://github.com/astral-sh/ruff/pull/23461)) - \[`ruff`] Add `fallible-context-manager` (`RUF075`) ([#&#8203;22844](https://github.com/astral-sh/ruff/pull/22844)) ##### Bug fixes - Fix lambda formatting in interpolated string expressions ([#&#8203;25144](https://github.com/astral-sh/ruff/pull/25144)) - Treat generic `frozenset` annotations as immutable ([#&#8203;25251](https://github.com/astral-sh/ruff/pull/25251)) - \[`flake8-type-checking`] Avoid `strict` behavior when `future-annotations` are enabled (`TC001`, `TC002`, `TC003`) ([#&#8203;25035](https://github.com/astral-sh/ruff/pull/25035)) - \[`pylint`] Avoid false positives in `else` clause (`PLR1733`) ([#&#8203;25177](https://github.com/astral-sh/ruff/pull/25177)) ##### Rule changes - \[`flake8-comprehensions`] Skip `C417` for lambdas with positional-only parameters ([#&#8203;25272](https://github.com/astral-sh/ruff/pull/25272)) - \[`flake8-simplify`] Preserve f-string source verbatim in `SIM101` fix ([#&#8203;25061](https://github.com/astral-sh/ruff/pull/25061)) ##### Performance - Avoid unnecessary parser lookahead for operators ([#&#8203;25290](https://github.com/astral-sh/ruff/pull/25290)) ##### Documentation - Update code example setting Neovim LSP log level ([#&#8203;25284](https://github.com/astral-sh/ruff/pull/25284)) ##### Other changes - Add full PEP 798 support ([#&#8203;25104](https://github.com/astral-sh/ruff/pull/25104)) - Add a parser recursion limit ([#&#8203;24810](https://github.com/astral-sh/ruff/pull/24810)) - Update various `ruff_python_stdlib` APIs ([#&#8203;25273](https://github.com/astral-sh/ruff/pull/25273)) ##### Contributors - [@&#8203;ocaballeror](https://github.com/ocaballeror) - [@&#8203;lerebear](https://github.com/lerebear) - [@&#8203;samuelcolvin](https://github.com/samuelcolvin) - [@&#8203;baltasarblanco](https://github.com/baltasarblanco) - [@&#8203;aconal-com](https://github.com/aconal-com) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;JelleZijlstra](https://github.com/JelleZijlstra) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;adityasingh2400](https://github.com/adityasingh2400) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;Dev-iL](https://github.com/Dev-iL) - [@&#8203;neutrinoceros](https://github.com/neutrinoceros) - [@&#8203;shivamtiwari3](https://github.com/shivamtiwari3) - [@&#8203;Dev-X25874](https://github.com/Dev-X25874) #### Install ruff 0.15.14 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.14/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.13`](https://github.com/astral-sh/ruff/releases/tag/0.15.13) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.12...0.15.13) #### Release Notes Released on 2026-05-14. ##### Preview features - Add a rule to flag lazy imports that are eagerly evaluated ([#&#8203;25016](https://github.com/astral-sh/ruff/pull/25016)) - \[`pylint`] Standardize diagnostic message (`PLR0914`, `PLR0917`) ([#&#8203;24996](https://github.com/astral-sh/ruff/pull/24996)) ##### Bug fixes - Fix `F811` false positive for class methods ([#&#8203;24933](https://github.com/astral-sh/ruff/pull/24933)) - Fix setting selection for multi-folder workspace ([#&#8203;24819](https://github.com/astral-sh/ruff/pull/24819)) - \[`eradicate`] Fix false positive for lines with leading whitespace (`ERA001`) ([#&#8203;25122](https://github.com/astral-sh/ruff/pull/25122)) - \[`flake8-pyi`] Fix false positive for f-string debug specifier (`PYI016`) ([#&#8203;24098](https://github.com/astral-sh/ruff/pull/24098)) ##### Rule changes - Always include panic payload in panic diagnostic message ([#&#8203;24873](https://github.com/astral-sh/ruff/pull/24873)) - Restrict `PYI034` for in-place operations to enclosing class ([#&#8203;24511](https://github.com/astral-sh/ruff/pull/24511)) - Improve error message for parameters that are declared `global` ([#&#8203;24902](https://github.com/astral-sh/ruff/pull/24902)) - Update known stdlib ([#&#8203;25103](https://github.com/astral-sh/ruff/pull/25103)) ##### Performance - \[`isort`] Avoid constructing `glob::Pattern`s for literal known modules ([#&#8203;25123](https://github.com/astral-sh/ruff/pull/25123)) ##### CLI - Add TOML examples to `--config` help text ([#&#8203;25013](https://github.com/astral-sh/ruff/pull/25013)) - Colorize ruff check 'All checks passed' ([#&#8203;25085](https://github.com/astral-sh/ruff/pull/25085)) ##### Configuration - Increase max allowed value of `line-length` setting ([#&#8203;24962](https://github.com/astral-sh/ruff/pull/24962)) ##### Documentation - Add `D203` to rules that conflict with the formatter ([#&#8203;25044](https://github.com/astral-sh/ruff/pull/25044)) - Clarify `COM819` and formatter interaction ([#&#8203;25045](https://github.com/astral-sh/ruff/pull/25045)) - Clarify that `NotImplemented` is a value, not an exception (`F901`) ([#&#8203;25054](https://github.com/astral-sh/ruff/pull/25054)) - Update number of lint rules supported ([#&#8203;24942](https://github.com/astral-sh/ruff/pull/24942)) ##### Other changes - Simplify the playground's markdown template ([#&#8203;24924](https://github.com/astral-sh/ruff/pull/24924)) ##### Contributors - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;brian-c11](https://github.com/brian-c11) - [@&#8203;Andrej730](https://github.com/Andrej730) - [@&#8203;denyszhak](https://github.com/denyszhak) - [@&#8203;darestack](https://github.com/darestack) - [@&#8203;sharkdp](https://github.com/sharkdp) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;EkriirkE](https://github.com/EkriirkE) - [@&#8203;eyupcanakman](https://github.com/eyupcanakman) - [@&#8203;Hrk84ya](https://github.com/Hrk84ya) - [@&#8203;thernstig](https://github.com/thernstig) - [@&#8203;ntBre](https://github.com/ntBre) #### Install ruff 0.15.13 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.13/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.12`](https://github.com/astral-sh/ruff/releases/tag/0.15.12) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.11...0.15.12) #### Release Notes Released on 2026-04-24. ##### Preview features - Implement `#ruff:file-ignore` file-level suppressions ([#&#8203;23599](https://github.com/astral-sh/ruff/pull/23599)) - Implement `#ruff:ignore` logical-line suppressions ([#&#8203;23404](https://github.com/astral-sh/ruff/pull/23404)) - Revert preview changes to displayed diagnostic severity in LSP ([#&#8203;24789](https://github.com/astral-sh/ruff/pull/24789)) - \[`airflow`] Implement `task-branch-as-short-circuit` (`AIR004`) ([#&#8203;23579](https://github.com/astral-sh/ruff/pull/23579)) - \[`flake8-bugbear`] Fix `break`/`continue` handling in `loop-iterator-mutation` (`B909`) ([#&#8203;24440](https://github.com/astral-sh/ruff/pull/24440)) - \[`pylint`] Fix `PLC2701` for type parameter scopes ([#&#8203;24576](https://github.com/astral-sh/ruff/pull/24576)) ##### Rule changes - \[`pandas-vet`] Suggest `.array` as well in `PD011` ([#&#8203;24805](https://github.com/astral-sh/ruff/pull/24805)) ##### CLI - Respect default Unix permissions for cache files ([#&#8203;24794](https://github.com/astral-sh/ruff/pull/24794)) ##### Documentation - \[`pylint`] Fix `PLR0124` description not to claim self-comparison always returns the same value ([#&#8203;24749](https://github.com/astral-sh/ruff/pull/24749)) - \[`pyupgrade`] Expand docs on reusable `TypeVar`s and scoping (`UP046`) ([#&#8203;24153](https://github.com/astral-sh/ruff/pull/24153)) - Improve rules table accessibility ([#&#8203;24711](https://github.com/astral-sh/ruff/pull/24711)) ##### Contributors - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) - [@&#8203;woodruffw](https://github.com/woodruffw) - [@&#8203;avasis-ai](https://github.com/avasis-ai) - [@&#8203;Dev-iL](https://github.com/Dev-iL) - [@&#8203;denyszhak](https://github.com/denyszhak) - [@&#8203;ShipItAndPray](https://github.com/ShipItAndPray) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;majiayu000](https://github.com/majiayu000) #### Install ruff 0.15.12 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.12/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.11`](https://github.com/astral-sh/ruff/releases/tag/0.15.11) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.10...0.15.11) #### Release Notes Released on 2026-04-16. ##### Preview features - \[`ruff`] Ignore `RUF029` when function is decorated with `asynccontextmanager` ([#&#8203;24642](https://github.com/astral-sh/ruff/pull/24642)) - \[`airflow`] Implement `airflow-xcom-pull-in-template-string` (`AIR201`) ([#&#8203;23583](https://github.com/astral-sh/ruff/pull/23583)) - \[`flake8-bandit`] Fix `S103` false positives and negatives in mask analysis ([#&#8203;24424](https://github.com/astral-sh/ruff/pull/24424)) ##### Bug fixes - \[`flake8-async`] Omit overridden methods for `ASYNC109` ([#&#8203;24648](https://github.com/astral-sh/ruff/pull/24648)) ##### Documentation - \[`flake8-async`] Add override mention to `ASYNC109` docs ([#&#8203;24666](https://github.com/astral-sh/ruff/pull/24666)) - Update Neovim config examples to use `vim.lsp.config` ([#&#8203;24577](https://github.com/astral-sh/ruff/pull/24577)) ##### Contributors - [@&#8203;augustelalande](https://github.com/augustelalande) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;benberryallwood](https://github.com/benberryallwood) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;Dev-iL](https://github.com/Dev-iL) #### Install ruff 0.15.11 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.11/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.10`](https://github.com/astral-sh/ruff/releases/tag/0.15.10) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.9...0.15.10) #### Release Notes Released on 2026-04-09. ##### Preview features - \[`flake8-logging`] Allow closures in except handlers (`LOG004`) ([#&#8203;24464](https://github.com/astral-sh/ruff/pull/24464)) - \[`flake8-self`] Make `SLF` diagnostics robust to non-self-named variables ([#&#8203;24281](https://github.com/astral-sh/ruff/pull/24281)) - \[`flake8-simplify`] Make the fix for `collapsible-if` safe in `preview` (`SIM102`) ([#&#8203;24371](https://github.com/astral-sh/ruff/pull/24371)) ##### Bug fixes - Avoid emitting multi-line f-string elements before Python 3.12 ([#&#8203;24377](https://github.com/astral-sh/ruff/pull/24377)) - Avoid syntax error from `E502` fixes in f-strings and t-strings ([#&#8203;24410](https://github.com/astral-sh/ruff/pull/24410)) - Strip form feeds from indent passed to `dedent_to` ([#&#8203;24381](https://github.com/astral-sh/ruff/pull/24381)) - \[`pyupgrade`] Fix panic caused by handling of octals (`UP012`) ([#&#8203;24390](https://github.com/astral-sh/ruff/pull/24390)) - Reject multi-line f-string elements before Python 3.12 ([#&#8203;24355](https://github.com/astral-sh/ruff/pull/24355)) ##### Rule changes - \[`ruff`] Treat f-string interpolation as potential side effect (`RUF019`) ([#&#8203;24426](https://github.com/astral-sh/ruff/pull/24426)) ##### Server - Add support for custom file extensions ([#&#8203;24463](https://github.com/astral-sh/ruff/pull/24463)) ##### Documentation - Document adding fixes in CONTRIBUTING.md ([#&#8203;24393](https://github.com/astral-sh/ruff/pull/24393)) - Fix JSON typo in settings example ([#&#8203;24517](https://github.com/astral-sh/ruff/pull/24517)) ##### Contributors - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;silverstein](https://github.com/silverstein) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;shizukushq](https://github.com/shizukushq) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;AlexWaygood](https://github.com/AlexWaygood) #### Install ruff 0.15.10 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.10/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.9`](https://github.com/astral-sh/ruff/releases/tag/0.15.9) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.8...0.15.9) #### Release Notes Released on 2026-04-02. ##### Preview features - \[`pyflakes`] Flag annotated variable redeclarations as `F811` in preview mode ([#&#8203;24244](https://github.com/astral-sh/ruff/pull/24244)) - \[`ruff`] Allow dunder-named assignments in non-strict mode for `RUF067` ([#&#8203;24089](https://github.com/astral-sh/ruff/pull/24089)) ##### Bug fixes - \[`flake8-errmsg`] Avoid shadowing existing `msg` in fix for `EM101` ([#&#8203;24363](https://github.com/astral-sh/ruff/pull/24363)) - \[`flake8-simplify`] Ignore pre-initialization references in `SIM113` ([#&#8203;24235](https://github.com/astral-sh/ruff/pull/24235)) - \[`pycodestyle`] Fix `W391` fixes for consecutive empty notebook cells ([#&#8203;24236](https://github.com/astral-sh/ruff/pull/24236)) - \[`pyupgrade`] Fix `UP008` nested class matching ([#&#8203;24273](https://github.com/astral-sh/ruff/pull/24273)) - \[`pyupgrade`] Ignore strings with string-only escapes (`UP012`) ([#&#8203;16058](https://github.com/astral-sh/ruff/pull/16058)) - \[`ruff`] `RUF072`: skip formfeeds on dedent ([#&#8203;24308](https://github.com/astral-sh/ruff/pull/24308)) - \[`ruff`] Avoid re-using symbol in `RUF024` fix ([#&#8203;24316](https://github.com/astral-sh/ruff/pull/24316)) - \[`ruff`] Parenthesize expression in `RUF050` fix ([#&#8203;24234](https://github.com/astral-sh/ruff/pull/24234)) - Disallow starred expressions as values of starred expressions ([#&#8203;24280](https://github.com/astral-sh/ruff/pull/24280)) ##### Rule changes - \[`flake8-simplify`] Suppress `SIM105` for `except*` before Python 3.12 ([#&#8203;23869](https://github.com/astral-sh/ruff/pull/23869)) - \[`pyflakes`] Extend `F507` to flag `%`-format strings with zero placeholders ([#&#8203;24215](https://github.com/astral-sh/ruff/pull/24215)) - \[`pyupgrade`] `UP018` should detect more unnecessarily wrapped literals (UP018) ([#&#8203;24093](https://github.com/astral-sh/ruff/pull/24093)) - \[`pyupgrade`] Fix `UP008` callable scope handling to support lambdas ([#&#8203;24274](https://github.com/astral-sh/ruff/pull/24274)) - \[`ruff`] `RUF010`: Mark fix as unsafe when it deletes a comment ([#&#8203;24270](https://github.com/astral-sh/ruff/pull/24270)) ##### Formatter - Add `nested-string-quote-style` formatting option ([#&#8203;24312](https://github.com/astral-sh/ruff/pull/24312)) ##### Documentation - \[`flake8-bugbear`] Clarify RUF071 fix safety for non-path string comparisons ([#&#8203;24149](https://github.com/astral-sh/ruff/pull/24149)) - \[`flake8-type-checking`] Clarify import cycle wording for `TC001`/`TC002`/`TC003` ([#&#8203;24322](https://github.com/astral-sh/ruff/pull/24322)) ##### Other changes - Avoid rendering fix lines with trailing whitespace after `|` ([#&#8203;24343](https://github.com/astral-sh/ruff/pull/24343)) ##### Contributors - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;MichaReiser](https://github.com/MichaReiser) - [@&#8203;tranhoangtu-it](https://github.com/tranhoangtu-it) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;renovate](https://github.com/renovate) - [@&#8203;bitloi](https://github.com/bitloi) - [@&#8203;danparizher](https://github.com/danparizher) - [@&#8203;chinar-amrutkar](https://github.com/chinar-amrutkar) - [@&#8203;second-ed](https://github.com/second-ed) - [@&#8203;getehen](https://github.com/getehen) - [@&#8203;Redovo1](https://github.com/Redovo1) - [@&#8203;matthewlloyd](https://github.com/matthewlloyd) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;InSyncWithFoo](https://github.com/InSyncWithFoo) - [@&#8203;RenzoMXD](https://github.com/RenzoMXD) #### Install ruff 0.15.9 ##### 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 | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.9/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.8`](https://github.com/astral-sh/ruff/releases/tag/0.15.8) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.7...0.15.8) #### Release Notes Released on 2026-03-26. ##### Preview features - \[`ruff`] New rule `unnecessary-if` (`RUF050`) ([#&#8203;24114](https://github.com/astral-sh/ruff/pull/24114)) - \[`ruff`] New rule `useless-finally` (`RUF072`) ([#&#8203;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 ([#&#8203;24162](https://github.com/astral-sh/ruff/pull/24162)) - \[`pyflakes`] Recognize `frozendict` as a builtin for Python 3.15+ ([#&#8203;24100](https://github.com/astral-sh/ruff/pull/24100)) ##### Bug fixes - \[`flake8-async`] Use fully-qualified `anyio.lowlevel` import in autofix (`ASYNC115`) ([#&#8203;24166](https://github.com/astral-sh/ruff/pull/24166)) - \[`flake8-bandit`] Check tuple arguments for partial paths in `S607` ([#&#8203;24080](https://github.com/astral-sh/ruff/pull/24080)) - \[`pyflakes`] Skip `undefined-name` (`F821`) for conditionally deleted variables ([#&#8203;24088](https://github.com/astral-sh/ruff/pull/24088)) - `E501`/`W505`/formatter: Exclude nested pragma comments from line width calculation ([#&#8203;24071](https://github.com/astral-sh/ruff/pull/24071)) - Fix `%foo?` parsing in IPython assignment expressions ([#&#8203;24152](https://github.com/astral-sh/ruff/pull/24152)) - `analyze graph`: resolve string imports that reference attributes, not just modules ([#&#8203;24058](https://github.com/astral-sh/ruff/pull/24058)) ##### Rule changes - \[`eradicate`] ignore `ty: ignore` comments in `ERA001` ([#&#8203;24192](https://github.com/astral-sh/ruff/pull/24192)) - \[`flake8-bandit`] Treat `sys.executable` as trusted input in `S603` ([#&#8203;24106](https://github.com/astral-sh/ruff/pull/24106)) - \[`flake8-self`] Recognize `Self` annotation and `self` assignment in `SLF001` ([#&#8203;24144](https://github.com/astral-sh/ruff/pull/24144)) - \[`pyflakes`] `F507`: Fix false negative for non-tuple RHS in `%`-formatting ([#&#8203;24142](https://github.com/astral-sh/ruff/pull/24142)) - \[`refurb`] Parenthesize generator arguments in `FURB142` fixer ([#&#8203;24200](https://github.com/astral-sh/ruff/pull/24200)) ##### Performance - Speed up diagnostic rendering ([#&#8203;24146](https://github.com/astral-sh/ruff/pull/24146)) ##### Server - Warn when Markdown files are skipped due to preview being disabled ([#&#8203;24150](https://github.com/astral-sh/ruff/pull/24150)) ##### Documentation - Clarify `extend-ignore` and `extend-select` settings documentation ([#&#8203;24064](https://github.com/astral-sh/ruff/pull/24064)) - Mention AI policy in PR template ([#&#8203;24198](https://github.com/astral-sh/ruff/pull/24198)) ##### Other changes - Use trusted publishing for NPM packages ([#&#8203;24171](https://github.com/astral-sh/ruff/pull/24171)) ##### Contributors - [@&#8203;bitloi](https://github.com/bitloi) - [@&#8203;Sim-hu](https://github.com/Sim-hu) - [@&#8203;mvanhorn](https://github.com/mvanhorn) - [@&#8203;chinar-amrutkar](https://github.com/chinar-amrutkar) - [@&#8203;markjm](https://github.com/markjm) - [@&#8203;RenzoMXD](https://github.com/RenzoMXD) - [@&#8203;vivekkhimani](https://github.com/vivekkhimani) - [@&#8203;seroperson](https://github.com/seroperson) - [@&#8203;moktamd](https://github.com/moktamd) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;zanieb](https://github.com/zanieb) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;MichaReiser](https://github.com/MichaReiser) #### Install ruff 0.15.8 ##### 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 | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.8/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.7`](https://github.com/astral-sh/ruff/releases/tag/0.15.7) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.6...0.15.7) #### Release Notes Released on 2026-03-19. ##### Preview features - Display output severity in preview ([#&#8203;23845](https://github.com/astral-sh/ruff/pull/23845)) - Don't show `noqa` hover for non-Python documents ([#&#8203;24040](https://github.com/astral-sh/ruff/pull/24040)) ##### Rule changes - \[`pycodestyle`] Recognize `pyrefly:` as a pragma comment (`E501`) ([#&#8203;24019](https://github.com/astral-sh/ruff/pull/24019)) ##### Server - Don't return code actions for non-Python documents ([#&#8203;23905](https://github.com/astral-sh/ruff/pull/23905)) ##### Documentation - Add company AI policy to contributing guide ([#&#8203;24021](https://github.com/astral-sh/ruff/pull/24021)) - Document editor features for Markdown code formatting ([#&#8203;23924](https://github.com/astral-sh/ruff/pull/23924)) - \[`pylint`] Improve phrasing (`PLC0208`) ([#&#8203;24033](https://github.com/astral-sh/ruff/pull/24033)) ##### Other changes - Use PEP 639 license information ([#&#8203;19661](https://github.com/astral-sh/ruff/pull/19661)) ##### Contributors - [@&#8203;tmimmanuel](https://github.com/tmimmanuel) - [@&#8203;DimitriPapadopoulos](https://github.com/DimitriPapadopoulos) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;statxc](https://github.com/statxc) - [@&#8203;dylwil3](https://github.com/dylwil3) - [@&#8203;hunterhogan](https://github.com/hunterhogan) - [@&#8203;renovate](https://github.com/renovate) #### Install ruff 0.15.7 ##### 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 | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.7/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.6`](https://github.com/astral-sh/ruff/releases/tag/0.15.6) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.5...0.15.6) #### Release Notes Released on 2026-03-12. ##### Preview features - Add support for `lazy` import parsing ([#&#8203;23755](https://github.com/astral-sh/ruff/pull/23755)) - Add support for star-unpacking of comprehensions (PEP 798) ([#&#8203;23788](https://github.com/astral-sh/ruff/pull/23788)) - Reject semantic syntax errors for lazy imports ([#&#8203;23757](https://github.com/astral-sh/ruff/pull/23757)) - Drop a few rules from the preview default set ([#&#8203;23879](https://github.com/astral-sh/ruff/pull/23879)) - \[`airflow`] Flag `Variable.get()` calls outside of task execution context (`AIR003`) ([#&#8203;23584](https://github.com/astral-sh/ruff/pull/23584)) - \[`airflow`] Flag runtime-varying values in DAG/task constructor arguments (`AIR304`) ([#&#8203;23631](https://github.com/astral-sh/ruff/pull/23631)) - \[`flake8-bugbear`] Implement `delattr-with-constant` (`B043`) ([#&#8203;23737](https://github.com/astral-sh/ruff/pull/23737)) - \[`flake8-tidy-imports`] Add `TID254` to enforce lazy imports ([#&#8203;23777](https://github.com/astral-sh/ruff/pull/23777)) - \[`flake8-tidy-imports`] Allow users to ban lazy imports with `TID254` ([#&#8203;23847](https://github.com/astral-sh/ruff/pull/23847)) - \[`isort`] Retain `lazy` keyword when sorting imports ([#&#8203;23762](https://github.com/astral-sh/ruff/pull/23762)) - \[`pyupgrade`] Add `from __future__ import annotations` automatically (`UP006`) ([#&#8203;23260](https://github.com/astral-sh/ruff/pull/23260)) - \[`refurb`] Support `newline` parameter in `FURB101` for Python 3.13+ ([#&#8203;23754](https://github.com/astral-sh/ruff/pull/23754)) - \[`ruff`] Add `os-path-commonprefix` (`RUF071`) ([#&#8203;23814](https://github.com/astral-sh/ruff/pull/23814)) - \[`ruff`] Add unsafe fix for os-path-commonprefix (`RUF071`) ([#&#8203;23852](https://github.com/astral-sh/ruff/pull/23852)) - \[`ruff`] Limit `RUF036` to typing contexts; make it unsafe for non-typing-only ([#&#8203;23765](https://github.com/astral-sh/ruff/pull/23765)) - \[`ruff`] Use starred unpacking for `RUF017` in Python 3.15+ ([#&#8203;23789](https://github.com/astral-sh/ruff/pull/23789)) ##### Bug fixes - Fix `--add-noqa` creating unwanted leading whitespace ([#&#8203;23773](https://github.com/astral-sh/ruff/pull/23773)) - Fix `--add-noqa` breaking shebangs ([#&#8203;23577](https://github.com/astral-sh/ruff/pull/23577)) - \[formatter] Fix lambda body formatting for multiline calls and subscripts ([#&#8203;23866](https://github.com/astral-sh/ruff/pull/23866)) - \[formatter] Preserve required annotation parentheses in annotated assignments ([#&#8203;23865](https://github.com/astral-sh/ruff/pull/23865)) - \[formatter] Preserve type-expression parentheses in the formatter ([#&#8203;23867](https://github.com/astral-sh/ruff/pull/23867)) - \[`flake8-annotations`] Fix stack overflow in `ANN401` on quoted annotations with escape sequences ([#&#8203;23912](https://github.com/astral-sh/ruff/pull/23912)) - \[`pep8-naming`] Check naming conventions in `match` pattern bindings (`N806`, `N815`, `N816`) ([#&#8203;23899](https://github.com/astral-sh/ruff/pull/23899)) - \[`perflint`] Fix comment duplication in fixes (`PERF401`, `PERF403`) ([#&#8203;23729](https://github.com/astral-sh/ruff/pull/23729)) - \[`pyupgrade`] Properly trigger `super` change in nested class (`UP008`) ([#&#8203;22677](https://github.com/astral-sh/ruff/pull/22677)) - \[`ruff`] Avoid syntax errors in `RUF036` fixes ([#&#8203;23764](https://github.com/astral-sh/ruff/pull/23764)) ##### Rule changes - \[`flake8-bandit`] Flag `S501` with `requests.request` ([#&#8203;23873](https://github.com/astral-sh/ruff/pull/23873)) - \[`flake8-executable`] Fix WSL detection in non-Docker containers ([#&#8203;22879](https://github.com/astral-sh/ruff/pull/22879)) - \[`flake8-print`] Ignore `pprint` calls with `stream=` ([#&#8203;23787](https://github.com/astral-sh/ruff/pull/23787)) ##### Documentation - Update docs for Markdown code block formatting ([#&#8203;23871](https://github.com/astral-sh/ruff/pull/23871)) - \[`flake8-bugbear`] Fix misleading description for `B904` ([#&#8203;23731](https://github.com/astral-sh/ruff/pull/23731)) ##### Contributors - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;carljm](https://github.com/carljm) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;Bortlesboat](https://github.com/Bortlesboat) - [@&#8203;sososonia-cyber](https://github.com/sososonia-cyber) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;leandrobbraga](https://github.com/leandrobbraga) - [@&#8203;11happy](https://github.com/11happy) - [@&#8203;Acelogic](https://github.com/Acelogic) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;xvchris](https://github.com/xvchris) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;getehen](https://github.com/getehen) - [@&#8203;Dev-iL](https://github.com/Dev-iL) #### Install ruff 0.15.6 ##### 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 | | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | [ruff-aarch64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://releases.astral.sh/github/ruff/releases/download/0.15.6/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` ### [`v0.15.5`](https://github.com/astral-sh/ruff/releases/tag/0.15.5) [Compare Source](https://github.com/astral-sh/ruff/compare/0.15.4...0.15.5) #### Release Notes Released on 2026-03-05. ##### Preview features - Discover Markdown files by default in preview mode ([#&#8203;23434](https://github.com/astral-sh/ruff/pull/23434)) - \[`perflint`] Extend `PERF102` to comprehensions and generators ([#&#8203;23473](https://github.com/astral-sh/ruff/pull/23473)) - \[`refurb`] Fix `FURB101` and `FURB103` false positives when I/O variable is used later ([#&#8203;23542](https://github.com/astral-sh/ruff/pull/23542)) - \[`ruff`] Add fix for `none-not-at-end-of-union` (`RUF036`) ([#&#8203;22829](https://github.com/astral-sh/ruff/pull/22829)) - \[`ruff`] Fix false positive for `re.split` with empty string pattern (`RUF055`) ([#&#8203;23634](https://github.com/astral-sh/ruff/pull/23634)) ##### Bug fixes - \[`fastapi`] Handle callable class dependencies with `__call__` method (`FAST003`) ([#&#8203;23553](https://github.com/astral-sh/ruff/pull/23553)) - \[`pydocstyle`] Fix numpy section ordering (`D420`) ([#&#8203;23685](https://github.com/astral-sh/ruff/pull/23685)) - \[`pyflakes`] Fix false positive for names shadowing re-exports (`F811`) ([#&#8203;23356](https://github.com/astral-sh/ruff/pull/23356)) - \[`pyupgrade`] Avoid inserting redundant `None` elements in `UP045` ([#&#8203;23459](https://github.com/astral-sh/ruff/pull/23459)) ##### Documentation - Document extension mapping for Markdown code formatting ([#&#8203;23574](https://github.com/astral-sh/ruff/pull/23574)) - Update default Python version examples ([#&#8203;23605](https://github.com/astral-sh/ruff/pull/23605)) ##### Other changes - Publish releases to Astral mirror ([#&#8203;23616](https://github.com/astral-sh/ruff/pull/23616)) ##### Contributors - [@&#8203;amyreese](https://github.com/amyreese) - [@&#8203;stakeswky](https://github.com/stakeswky) - [@&#8203;chirizxc](https://github.com/chirizxc) - [@&#8203;anishgirianish](https://github.com/anishgirianish) - [@&#8203;bxff](https://github.com/bxff) - [@&#8203;zsol](https://github.com/zsol) - [@&#8203;charliermarsh](https://github.com/charliermarsh) - [@&#8203;ntBre](https://github.com/ntBre) - [@&#8203;kar-ganap](https://github.com/kar-ganap) #### Install ruff 0.15.5 ##### 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 | | --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | [ruff-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-apple-darwin.tar.gz.sha256) | | [ruff-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-apple-darwin.tar.gz.sha256) | | [ruff-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-pc-windows-msvc.zip.sha256) | | [ruff-i686-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-i686-pc-windows-msvc.zip.sha256) | | [ruff-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-pc-windows-msvc.zip.sha256) | | [ruff-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-i686-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-powerpc64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-powerpc64le-unknown-linux-gnu.tar.gz.sha256) | | [ruff-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-riscv64gc-unknown-linux-gnu.tar.gz.sha256) | | [ruff-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-s390x-unknown-linux-gnu.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-unknown-linux-gnu.tar.gz.sha256) | | [ruff-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-armv7-unknown-linux-gnueabihf.tar.gz.sha256) | | [ruff-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-aarch64-unknown-linux-musl.tar.gz.sha256) | | [ruff-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-i686-unknown-linux-musl.tar.gz.sha256) | | [ruff-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-x86_64-unknown-linux-musl.tar.gz.sha256) | | [ruff-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-arm-unknown-linux-musleabihf.tar.gz.sha256) | | [ruff-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/ruff/releases/download/0.15.5/ruff-armv7-unknown-linux-musleabihf.tar.gz.sha256) | #### 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> ``` </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yMjQuMSIsInVwZGF0ZWRJblZlciI6IjQzLjIyNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Update dependency ruff to ~=0.16.0
Some checks failed
Actions / Build (pull_request) Successful in 32s
Actions / Lint (Python 3.14) (pull_request) Failing after 25s
219aafc551
Renovate force-pushed renovate/ruff-0.x from 219aafc551
Some checks failed
Actions / Build (pull_request) Successful in 32s
Actions / Lint (Python 3.14) (pull_request) Failing after 25s
to 39a15cefce
Some checks failed
Actions / Build (pull_request) Successful in 31s
Actions / Lint (Python 3.14) (pull_request) Failing after 24s
2026-07-30 16:12:34 -04:00
Compare
Renovate changed title from Update dependency ruff to ~=0.16.0 to Update dependency ruff to ~=0.16.1 2026-07-30 16:12:36 -04:00
Some checks are pending
Actions / Build (pull_request) Successful in 31s
Required
Details
Actions / Lint (Python 3.14) (pull_request) Failing after 24s
Actions / Lint (Python 3.11) (pull_request)
Required
Actions / Lint (Python 3.12) (pull_request)
Required
Actions / Lint (Python 3.13) (pull_request)
Required
Some required checks are missing.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin renovate/ruff-0.x:renovate/ruff-0.x
git switch renovate/ruff-0.x
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
cswimr/tacklebox!48
No description provided.