0.16.4

astral-sh/ruff0.16.4Aug 20, 2026by github-actions[bot]

AI Summary

Features updates for flake8-use-pathlib, refurb, and pyflakes, including syntax error detection improvements and Windows CPU compatibility fixes.

Key Highlights

  • Add autofix for PTH116 in flake8-use-pathlib
  • Fix InvalidInstruction on Windows CPUs without POPCNT
  • Detect duplicate keyword arguments
  • Detect parameters declared nonlocal
  • Support pull diagnostics for notebook cells

New Features

  • Add ctypes.LittleEndianStructure and related types to existing exception (RUF012)
  • Detect duplicate keyword arguments
  • Detect parameters declared nonlocal
  • Support pull diagnostics for notebook cells
  • Restrict delete-full-slice to lists (FURB131)
  • Skip FURB101 and FURB103 when open argument is a file descriptor

Full Release Notes

## Release Notes

Released on 2026-08-20.

### Preview features

- \[`flake8-use-pathlib`\] Add autofix for `PTH116` ([#26460](https://github.com/astral-sh/ruff/pull/26460))
- \[`refurb`\] Restrict `delete-full-slice` to lists (`FURB131`) ([#27711](https://github.com/astral-sh/ruff/pull/27711))
- \[`refurb`\] Skip `FURB101` and `FURB103` when the `open` argument is a file descriptor ([#27643](https://github.com/astral-sh/ruff/pull/27643))

### Bug fixes

- Fix `InvalidInstruction` on Windows CPUs that do not support `POPCNT` ([#27803](https://github.com/astral-sh/ruff/pull/27803))
- \[`pyflakes`\] Emit semantic syntax errors in string type definitions as `F722` ([#27835](https://github.com/astral-sh/ruff/pull/27835))
- \[`pylint`\] Allow `os._exit` imports in `import-private-name` (`PLC2701`) ([#27738](https://github.com/astral-sh/ruff/pull/27738))

### Rule changes

- [syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 ([#27766](https://github.com/astral-sh/ruff/pull/27766))
- \[`ruff`\] Add `ctypes.LittleEndianStructure` and related types to existing exception (`RUF012`) ([#27753](https://github.com/astral-sh/ruff/pull/27753))
- [syntax-errors] Detect duplicate keyword arguments ([#17804](https://github.com/astral-sh/ruff/pull/17804))
- [syntax-errors] Detect parameters declared `nonlocal` ([#27628](https://github.com/astral-sh/ruff/pull/27628))

### Server

- Offer display-only fixes and mark safe fixes preferred ([#27807](https://github.com/astral-sh/ruff/pull/27807))
- Support pull diagnostics for notebook cells ([#27779](https://github.com/astral-sh/ruff/pull/27779))

### Documentation

- Add default indicator to rules table ([#27724](https://github.com/astral-sh/ruff/pull/27724))
- Fix broken link to Python docs ([#27757](https://github.com/astral-sh/ruff/pull/27757))

### Other changes

- Fix s390x stacker assembly in release builds ([#27776](https://github.com/astral-sh/ruff/pull/27776))
- Guarantee minimum stack size when parsing a module, standalone expression, and suites ([#25464](https://github.com/astral-sh/ruff/pull/25464))
- Reduce configuration deserialization code size ([#27924](https://github.com/astral-sh/ruff/pull/27924))
- Check packed AST index bounds ([#27849](https://github.com/astral-sh/ruff/pull/27849))

### Contributors

- [@AbhinavMir](https://github.com/AbhinavMir)
- [@eduardorittner](https://github.com/eduardorittner)
- [@royb3](https://github.com/royb3)
- [@MichaReiser](https://github.com/MichaReiser)
- [@carljm](https://github.com/carljm)
- [@rosstitmarsh](https://github.com/rosstitmarsh)
- [@ntBre](https://github.com/ntBre)
- [@zaniebot](https://github.com/zaniebot)
- [@ewdurbin](https://github.com/ewdurbin)
- [@woodruffw](https://github.com/woodruffw)
- [@Sacrimento](https://github.com/Sacrimento)
- [@lakshayxi](https://github.com/lakshayxi)
- [@WhiteFox0-0](https://github.com/WhiteFox0-0)
- [@baltasarblanco](https://github.com/baltasarblanco)

## Install ruff 0.16.4

### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.4/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.16.4/ruff-installer.ps1 | iex"
```

## Download ruff 0.16.4

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