Repository navigation
Releases: astral-sh/ruff
Release list
0.17.2
Release Notes
Released on 2026-10-22.
Preview features
- [
complexity] Addunnecessary-regular-expression-compile(#25533)
Bug fixes
- Avoid syntax errors for type variables with starred constraints (
UP040,UP046,UP047,RUF053) (#28362) - [
pydocstyle] Treat backslash-escaped*argsand**kwargsas documented (D417) (#29536) - [
pylint] Avoid false positive on starred elements (PLE0643) (#29483) - [
pylint] Mark fixes unsafe when deleting comments (PLR5501,PLW0120) (#29414) - [
pyupgrade] Mark fix unsafe when deleting comments (UP035) (#29413)
Performance
- Avoid intermediate names in lint name resolution (#29506)
- Prefilter bidirectional Unicode checks by UTF-8 leading bytes (#29561)
- Share postfix parsing and reduce expression copies (#29480)
Configuration
- [
pylint] Add a configurable allowlist formagic-value-comparison(PLR2004) (#18961)
Documentation
- Clarify documentation and correct stale guidance (#29374)
- [
pyupgrade] Remove mentions of variance related to fix safety (UP040,UP047) (#29592)
Contributors
- @fixfon
- @MichaReiser
- @zaniebot
- @FrancescoPezzella
- @anishgirianish
- @rajveer3x
- @charliermarsh
- @LckyLike
- @DaniBodor
Install ruff 0.17.2
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.2/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.17.2/ruff-installer.ps1 | iex"Download ruff 0.17.2
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/ruffYou 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>0.17.1
Release Notes
Released on 2026-10-15.
Preview features
- [
pycodestyle] Don't treatNone,True, orFalseas keywords (E271-E274) (#29322)
Bug fixes
- Fix dedent with multiple leading comments (#29382)
- [
flake8-pyi] Detect legacy positional-only parameters in__new__methods (PYI063) (#28502) - [
flake8-pyi] Fix false positives on quoted annotations (PYI036) (#29274) - [
perflint] Avoid invalid comprehension suggestions (PERF401,PERF403) (#29366)
Rule changes
- Treat more
collectionsandweakrefcontainers as mutable (#29213)
Documentation
- [
flake8-import-conventions] Update default and examplealiases(#29333)
Contributors
Install ruff 0.17.1
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.17.1/ruff-installer.ps1 | iex"Download ruff 0.17.1
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/ruffYou 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>0.17.0
Release Notes
Released on 2026-10-09.
The executables in our macOS and Windows release archives and ruff wheels are now code-signed. macOS executables are signed with an Apple Developer ID certificate and notarized by Apple. Windows executables have timestamped Authenticode signatures from Azure Artifact Signing. This enables verification of the release publisher and binary integrity, supports publisher-based allowlisting, and should reduce security warnings and antivirus false positives.
Breaking changes
-
Update the default and latest Python versions for 3.15 (#28792)
Ruff now defaults to Python 3.11 instead of 3.10 when no Python version is configured through
target-versionorrequires-python. When checking for syntax errors without a configured Python version, Ruff now defaults to Python 3.15 instead of 3.14. -
Update the default rule set (#28786)
Several of the
flake8-datetimezrules (DTZ001,DTZ005,DTZ006,DTZ007,DTZ011,DTZ012, andDTZ901) are no longer enabled by default, whileundefined-local-with-nested-import-star-usage(F406), which corresponds to a syntax error, is now enabled by default. -
Update Rust crate quick-junit to 0.8.0 (#27295)
JUnit output now uses a
skippedattribute instead ofdisabledon<testsuite>elements and includes askippedattribute on the root<testsuites>element. -
[
flake8-import-conventions] Adddatetime as dtas a conventional alias (ICN001) (#28790) -
Support Unicode dummy variable names (#28722)
The default
lint.dummy-variable-rgxnow recognizes underscore-prefixed Unicode names, such as_次, as dummy variables. -
Update to Unicode 17 (#21229, #28784)
Ruff now uses Unicode 17 data for identifier normalization and named character escapes (
"\N{...}"). -
Always show unsafe and display-only fixes in the CLI (#27810)
The default
fulloutput format now shows unsafe fixes and suggestions requiring manual review, regardless of theunsafe-fixessetting. Actually applying unsafe fixes still requires explicit opt-in. -
Remove the Python dependency from conda-forge builds (conda-forge/ruff-feedstock#361)
The conda-forge build no longer depends on Python, now supports linux-riscv64, win-arm64, and linux-ppc64le platforms, and now includes shell completions. However, no longer depending on Python means that
python -m ruffandimport ruffwill no longer work. Useruffdirectly fromPATHinstead. PyPI installations and those from the standalone installer are unaffected. -
Remove support for ruff-lsp (#28750)
Support for
ruff-lsp, the legacy Python language server deprecated in Ruff v0.9.5, has been removed. The Ruff VS Code extension now always uses the native language server;ruff.nativeServeris deprecated and ignored. See the migration guide.
Stabilization
The following rules have been stabilized and are no longer in preview:
lazy-import-mismatch(TID254)lazy-import-immediately-resolved(TID255)os-path-commonprefix(RUF071)
The following behaviors have been stabilized:
- The formatter,
unsorted-imports(I001),line-too-long(E501), anddoc-line-too-long(W505) now consistently ignore trailing pragma comments when computing line length. This resolved several bugs involving interactions between these rules (#27313) but may also cause existing imports to be reformatted and was thus classified as a breaking change.
Preview features
- [
flake8-bugbear] Report the method name and a more precise range (B005) (#27050) - [
refurb] Mark fix unsafe and move tosuspicious(FURB152) (#28405) - [
ruff] Allow docstrings in strict mode (RUF067) (#28679)
Bug fixes
- [
flake8-builtins] Expand checks in class scopes (A001) (#29076) - [
flake8-self] Allow private access onobject.__new__(cls)instances (SLF001) (#29001) - [
flake8-tidy-imports] Skiplazy-import-mismatchin stubs (TID254) (#29095) - [
flake8-type-checking] Add the notion of runtime-ambiguous references (#26508) - [
flake8-type-checking] Never flag annotations in function scopes (#29183) - [
pyflakes] Mark the fix as unsafe when it creates a docstring (F541) (#28258) - [
pylint] Preserve trailing comments inuseless-returnfix (PLR1711) (#29180) - [
ruff] Avoid false positive whenpytest.raisesis used in awithstatement (RUF061) (#28186)
Rule changes
- [
pyupgrade] Suggesttyping.TypeFormon Python 3.15 (UP035) (#29084)
Contributors
- @DeviousCardi
- @hugehoo
- @nekomario28
- @Daverball
- @Viicos
- @DebadityaHait
- @saberoueslati
- @baltasarblanco
- @yxshee
- @lognd
- @dor-sr
Install ruff 0.17.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.0/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.17.0/ruff-installer.ps1 | iex"Download ruff 0.17.0
| 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-powerpc64le-unknown-linux-gnu.tar.gz](https://releases.astral.sh/github/ruff/re... |
0.16.10
Release Notes
Released on 2026-10-01.
Preview features
- Add a migration guide for categories (#28087)
- [
pyupgrade] Add rule for context manager iterator annotations (UP052) (#29000)
Performance
- Reduce memory used by diagnostics (#28951)
Server
- Avoid running
uv formatin untrusted workspaces (#28873)
Documentation
- Fix links to moved changelog sections and renamed mdtests (#28941)
- Add Python 3.15 as a supported version (#28907)
- Add ty as a type checker example (#28906)
Other changes
- Update Rust toolchain to 1.99 and MSRV to 1.97 (#29047)
Contributors
Install ruff 0.16.10
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.10/ruff-installer.ps1 | iex"Download ruff 0.16.10
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/ruffYou 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>0.16.9
Release Notes
Released on 2026-09-24.
Preview features
- [
ruff] Avoid false positives for overloaded division (RUF069) (#28309)
Bug fixes
- [
flake8-bugbear] Avoid false positives for calls with keyword arguments (B009,B010,B043) (#28776) - [
flake8-tidy-imports] Allow lazy imports to be used in deferred annotations (TID255) (#28767)
Rule changes
- Update LibCST-based fixes for Python 3.15 (#28616)
- [
flake8-pyi] Mention stubs in the diagnostic message (PYI002) (#28542)
Documentation
- Fix horizontal overflow on the rules documentation page (#28699)
- Update rules table with category information (#28651)
- [
flake8-annotations] Clarify thatANN401checks return types in addition to arguments (#28334) - [
flake8-bugbear] Document type-checker interaction (B010) (#28509) - [
flake8-comprehensions] Documentmap/generator exception behavior (C417) (#27794) - [
ruff] Mention related isort settings (RUF022) (#28719)
Contributors
- @qinpei-dev
- @sanjayrohith
- @ntBre
- @webdevsamran
- @zaniebot
- @ewdurbin
- @MichaReiser
- @spaceone
- @IbrahimKhan12
- @devtechedge
- @GruffElixir
Install ruff 0.16.9
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.9/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.9/ruff-installer.ps1 | iex"Download ruff 0.16.9
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/ruffYou 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>0.16.8
Release Notes
Released on 2026-09-16.
Bug fixes
- Visit functional
TypedDictkeyword arguments correctly (#28584) - [
flake8-simplify] Detect nestedasync withunder sync parent (SIM117) (#27821) - [
flake8-simplify] Preserve operand order inSIM109fix (#27824) - [
pyupgrade] Preserve required parentheses in multilineUP040fixes (#28164) - [
pyupgrade] SkipTypeVarTupleandParamSpecconversions with bounds or constraints (UP040,UP046,UP047) (#28505)
Rule changes
- Add support for
__lazy_modules__(#28459) - Recognize PEP-728
TypedDictclass keywords (#28533) - Recognize quoted types in
typing.TypeForm(#28507) - Support conditional assignment to
__lazy_modules__(#28491) - [
flake8-type-checking] Prefer lazy imports overTYPE_CHECKINGon Python 3.15 and later (TC001,TC002,TC003) (#28541) - [
pyupgrade] Make the fix forUP040always unsafe (#28526) - [
pyupgrade] Stop recommending deprecatedByteStringaliases (UP035) (#28498) - [
ruff,flake8-use-pathlib] Recognize theparent_modeargument (RUF064,PTH103) (#28528) - [
ruff] Detect\Zinpytest.raises()match patterns (RUF043) (#28598)
CLI
- Use rule name and code in formatter incompatibility warnings (#28571)
Configuration
- [
flake8-tidy-imports] Addextend-banned-api(#28644)
Contributors
Install ruff 0.16.8
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.8/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.8/ruff-installer.ps1 | iex"Download ruff 0.16.8
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/ruffYou 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>0.16.7
Release Notes
Released on 2026-09-10.
Preview features
- [
ruff] Add rule for default values on method receivers (RUF077) (#26700) - [
ruff] Recognizere.prefixmatch(RUF039,RUF055) (#28311)
Bug fixes
- Alternate nested quotes inside format spec interpolations (#28259)
- [
flake8-implicit-str-concat] Mark fix unsafe when it creates a docstring (ISC003) (#27981) - [
flake8-tidy-imports] Skip fixes for multi-member imports (TID254) (#26584) - [
pylint] GateImportCycleErroron Python 3.15 (PLW0133) (#28310)
Rule changes
- Correct
D211andD203rule conflict diagnostic (#28444) - Recognize
sliceandfrozendictgenerics (#28477) - Stop defining
__cached__for Python 3.15 (#28476) - [
pyupgrade] Stop recommending removedtyping.no_type_check_decorator(UP035) (#28475)
Performance
- Reuse parser name lookups when interning (#28399)
- Speed up inherited configuration resolution (#28299)
Documentation
Other changes
- Embed archive checksums in the shell installer (#28281)
Contributors
- @The-Compiler
- @mdiniz97
- @zsol
- @gorewilliams
- @RafaelJohn9
- @qatcod
- @zanieb
- @MichaReiser
- @ntBre
- @charliermarsh
- @nightt5879
- @jonathandung
- @jogo-openai
Install ruff 0.16.7
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.7/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.7/ruff-installer.ps1 | iex"Download ruff 0.16.7
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/ruffYou 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>0.16.6
Release Notes
Released on 2026-09-03.
Preview features
- Move
pytest-fixture-autouseto therestrictioncategory (#28219) - [
flake8-pytest-style] Add an autofix forPT020(#27993) - [
flake8-tidy-imports] Prevent fix loop betweenTID254andTID255(#28262) - [
isort] Exclude pragma comments from line length calculation (I001) (#27313)
Bug fixes
- Validate unary expressions when parsing (#28233)
- [
flake8-async,pylint] Recognizebuiltins.open(ASYNC230,PLW1514) (#28021) - [
flake8-bugbear] Fix panic onmatchsubjects (B031) (#27781) - [
flake8-datetimez] Rejecttzinfo=Nonefordatetimebounds (DTZ901) (#28022) - [
flake8-pytest-style] Avoid duplicatePT017diagnostics (#27918) - [
ruff] Removelint.externalhint for Ruff-specific suppressions (RUF102) (#27923)
Rule changes
- [
flake8-use-pathlib] Add display-only fix foros.listdir(PTH208) (#28027)
Documentation
- Add another example and glob reference for
lint.per-file-ignores(#28106) - Add duplicate work guidance (#28229)
- [
flake8-async] Document thread offloading (ASYNC240) (#28008) - [
pyupgrade] Clarify defaultencodingargument handling (UP012) (#27315)
Other changes
- Allow unary plus in match patterns on Python 3.15 (#28231)
Contributors
- @flying-sheep
- @pikammmmm
- @fly1d
- @waterWang
- @Pierre-Sassoulas
- @ntBre
- @jelle-openai
- @ericbuehl
- @tjkuson
- @AbhinavMir
- @Whning0513
- @chirizxc
Install ruff 0.16.6
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.6/ruff-installer.ps1 | iex"Download ruff 0.16.6
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/ruffYou 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>0.16.5
Release Notes
Released on 2026-08-27.
Preview features
- Allow rules without codes (#28049)
- Introduce category selectors (#27666)
- Update preview default rules and categories (#27877)
Bug fixes
- [
flake8-async] Detect blocking generic HTTP requests (ASYNC210) (#28024) - [
flake8-datetimez] Allow timezone-safestrptimechains (DTZ007) (#28023) - [
flake8-simplify] Respect side effects inlambdadefaults (SIM401) (#28000)
Server
- Fix duplicated "of" in
ClientOptionsdoc comment (#27978)
Documentation
Contributors
Install ruff 0.16.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.ps1 | iex"Download ruff 0.16.5
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/ruffYou 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>0.16.4
Release Notes
Released on 2026-08-20.
Preview features
- [
flake8-use-pathlib] Add autofix forPTH116(#26460) - [
refurb] Restrictdelete-full-sliceto lists (FURB131) (#27711) - [
refurb] SkipFURB101andFURB103when theopenargument is a file descriptor (#27643)
Bug fixes
- Fix
InvalidInstructionon Windows CPUs that do not supportPOPCNT(#27803) - [
pyflakes] Emit semantic syntax errors in string type definitions asF722(#27835) - [
pylint] Allowos._exitimports inimport-private-name(PLC2701) (#27738)
Rule changes
- [syntax-errors] Align mixed t-string/bytes error message with CPython 3.14 (#27766)
- [
ruff] Addctypes.LittleEndianStructureand related types to existing exception (RUF012) (#27753) - [syntax-errors] Detect duplicate keyword arguments (#17804)
- [syntax-errors] Detect parameters declared
nonlocal(#27628)
Server
- Offer display-only fixes and mark safe fixes preferred (#27807)
- Support pull diagnostics for notebook cells (#27779)
Documentation
Other changes
- Fix s390x stacker assembly in release builds (#27776)
- Guarantee minimum stack size when parsing a module, standalone expression, and suites (#25464)
- Reduce configuration deserialization code size (#27924)
- Check packed AST index bounds (#27849)
Contributors
- @AbhinavMir
- @eduardorittner
- @royb3
- @MichaReiser
- @carljm
- @rosstitmarsh
- @ntBre
- @zaniebot
- @ewdurbin
- @woodruffw
- @Sacrimento
- @lakshayxi
- @WhiteFox0-0
- @baltasarblanco
Install ruff 0.16.4
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.4/ruff-installer.sh | shInstall prebuilt binaries via powershell script
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
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/ruffYou 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>