Popular: Data updated November 12, 2026

Categories

Internet1,409
Communication327
Audio & video931
Graphics & design563
Office & productivity1,167
Developer tools3,263
AI tools600
Security & privacy406
System tools3,174
Games543
Education & science240
Network & IT292

Ruff 0.12.0 download

An extremely fast Python linter, written in Rust.

Astral Languages & SDKs #43 Languages & SDKs
This is an older version. The current version is 0.17.2. Ruff 0.17.2 · Released:

Installer files 0.12.0

ArchitectureTypeScopeFile sizeDownloadSHA256
64-bit ZIP → Portable — — github.com VirusTotal
ARM64 ZIP → Portable — — github.com VirusTotal
32-bit ZIP → Portable — — github.com VirusTotal

Link and SHA256 come from the Windows Package Manager community manifest. Compare the hash of the downloaded file before running it.

Release notes

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

Breaking changes
- Detection of more syntax errors

Ruff now detects version-related syntax errors, such as the use of the `match`
statement on Python versions before 3.10, and syntax errors emitted by
CPython's compiler, such as irrefutable `match` patterns before the final
`case` arm.

- New default Python version handling for syntax errors

Ruff will default to the _latest_ supported Python version (3.13) when
checking for the version-related syntax errors mentioned above to prevent
false positives in projects without a Python version configured. The default
in all other cases, like applying lint rules, is unchanged and remains at the
minimum supported Python version (3.9).

- Updated f-string formatting

Ruff now formats multi-line f-strings with format specifiers to avoid adding a
line break after the format specifier. This addresses a change to the Python
grammar in version 3.13.4 that made such a line break a syntax error.

- **`rust-toolchain.toml` is no longer included in source distributions**

The `rust-toolchain.toml` is used to specify a higher Rust version than Ruff's
minimum supported Rust version (MSRV) for development and building release
artifacts. However, when present in source distributions, it would also cause
downstream package maintainers to pull in the same Rust toolchain, even if
their available toolchain was MSRV-compatible.

Removed Rules
The following rules have been removed:

- `suspicious-xmle-tree-usage`
(S320)

Deprecated Rules
The following rules have been deprecated:

- `pandas-df-variable-name`

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

- `for-loop-writes` (FURB122)
- `check-and-remove-from-set` (FURB132)
- `verbose-decimal-constructor` (FURB157)
- `fromisoformat-replace-z` (FURB162)
- `int-on-sliced-str` (FURB166)
- `exc-info-outside-except-handler` (LOG014)
- `import-outside-top-level` (PLC0415)
- `unnecessary-dict-index-lookup` (PLR1733)
- `nan-comparison` (PLW0177)
- `eq-without-hash` (PLW1641)
- `pytest-parameter-with-default-argument` (PT028)
- `pytest-warns-too-broad` (PT030)
- `pytest-warns-with-multiple-statements` (PT031)
- `invalid-formatter-suppression-comment` (RUF028)
- `dataclass-enum` (RUF049)
- `class-with-mixed-type-vars` (RUF053)
- `unnecessary-round` (RUF057)
- `starmap-zip` (RUF058)
- `non-pep604-annotation-optional` (UP045)
- `non-pep695-generic-class` (UP046)
- `non-pep695-generic-function` (UP047)
- `private-type-parameter` (UP049)

The following behaviors have been stabilized:

- [`collection-literal-concatenation`] (RUF005) now recognizes slices, in
addition to list literals and variables.
- The fix for [`readlines-in-for`] (FURB129) is now marked as always safe.
- [`if-else-block-instead-of-if-exp`] (SIM108) will now further simplify
expressions to use `or` instead of an `if` expression, where possible.
- [`unused-noqa`] (RUF100) now checks for file-level `noqa` comments as well
as inline comments.
- [`subprocess-without-shell-equals-true`] (S603) now accepts literal strings,
as well as lists and tuples of literal strings, as trusted input.
- [`boolean-type-hint-positional-argument`] (FBT001) now applies to types that
include `bool`, like `bool | int` or `typing.Optional[bool]`, in addition to
plain `bool` annotations.
- [`non-pep604-annotation-union`] (UP007) has now been split into two rules.
UP007 now applies only to `typing.Union`, while
[`non-pep604-annotation-optional`] (UP045) checks for use of
`typing.Optional`. UP045 has also been stabilized in this release, but you
may need to update existing `include`, `ignore`, or `noqa` settings to
accommodate this change.

Preview features
- [ruff] Check for non-context-manager use of `pytest.raises`, `pytest.warns`, and `pytest.deprecated_call` (RUF061) (#17368)
- [syntax-errors] Raise unsupported syntax error for template strings prior to Python 3.14 (#18664)

Bug fixes
- Add syntax error when conversion flag does not immediately follow exclamation mark (#18706)
- Add trailing space around `readlines` (#18542)
- Fix `\r` and `\r\n` handling in t- and f-string debug texts (#18673)
- Hug closing `}` when f-string expression has a format specifier (#18704)
- [flake8-pyi] Avoid syntax error in the case of starred and keyword arguments (PYI059) (#18611)
- [flake8-return] Fix RET504 autofix generating a syntax error (#18428)
- [pep8-naming] Suppress fix for N804 and N805 if the recommended name is already used (#18472)
- [pycodestyle] Avoid causing a syntax error in expressions spanning multiple lines (E731) (#18479)
- [pyupgrade] Suppress UP008 if `super` is shadowed (#18688)
- [refurb] Parenthesize lambda and ternary expressions (FURB122, FURB142) (#18592)
- [ruff] Handle extra arguments to `deque` (RUF037) (#18614)
- [ruff] Preserve parentheses around `deque` in fix for `unnecessary-empty-iterable-within-deque-call` (RUF037) (#18598)
- [ruff] Validate arguments before offering a fix (RUF056) (#18631)
- [ruff] Skip fix for RUF059 if dummy name is already bound (#18509)
- [pylint] Fix PLW0128 to check assignment targets in square brackets and after asterisks (#18665)

Rule changes
- Fix false positive on mutations in `return` statements (B909) (#18408)
- Treat `ty:` comments as pragma comments (#18532)
- [flake8-pyi] Apply `custom-typevar-for-self` to string annotations (PYI019) (#18311)
- [pyupgrade] Don't offer a fix for `Optional[None]` (UP007, `UP045)` (#18545)
- [pyupgrade] Fix `super(__class__, self)` detection (UP008) (#18478)
- [refurb] Make the fix for FURB163 unsafe for `log2`, `log10`, `*args`, and deleted comments (#18645)

Server
- Support cancellation requests (#18627)

Documentation
- Drop confusing second `*` from glob pattern example for `per-file-target-version` (#18709)
- Update Neovim configuration examples (#18491)
- [pylint] De-emphasize `__hash__ = Parent.__hash__` (PLW1641) (#18613)
- [refurb] Add a note about float literal handling (FURB157) (#18615)

https://github.com/astral-sh/ruff/releases/tag/0.12.0

Most popular in Languages & SDKs

See all
  1. Go Programming LanguageAn open source programming language that makes it simple to build secure, scalable systems.
  2. LLVMA collection of modular and reusable compiler and toolchain technologies.
  3. DenoA modern runtime for JavaScript and TypeScript
  4. CMakeCMake is a cross-platform, open-source build system generator.
  5. YarnYarn is a package manager that doubles down as project manager. Whether you work on one-shot projects or large monorepos, as a hobbyist or an enterprise user, we've got you covered.
  6. pnpmFast, disk space efficient package manager.
  7. CcacheCcache is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again.
  8. sbtA build tool for Scala, Java, and more
  9. BOINCOpen-source software for volunteer computing and grid computing.
  10. Dart SDKA set of tools and libraries for the Dart programming language.

Tags

Share