Change8

0.15.0

Breaking Changes
📦 ruffView on GitHub →
6 breaking2 features🐛 9 fixes🔧 34 symbols

Summary

This release introduces the new 2026 style guide for formatting and stabilizes numerous linter rules. It also adds support for block-level suppression comments in the linter.

⚠️ Breaking Changes

  • Ruff now formats code according to the 2026 style guide, requiring review of formatter changes.
  • The linter now supports block suppression comments (e.g., # ruff: disable[N803] ... # ruff: enable[N803]).
  • The `ruff:alpine` Docker image is now based on Alpine 3.23 (up from 3.21).
  • The `ruff:debian` and `ruff:debian-slim` Docker images are now based on Debian 13 "Trixie" instead of Debian 12 "Bookworm."
  • Binaries for the `ppc64` (64-bit big-endian PowerPC) architecture are no longer included in releases.
  • Ruff now resolves all `extend`ed configuration files before falling back on a default Python version.

Migration Steps

  1. Review the formatter section of the blog post for changes related to the 2026 style guide.
  2. If using `ppc64` architecture, you may need to build Ruff manually.

✨ New Features

  • The formatter now supports applying formatting to Markdown code blocks (preview feature).
  • The `--color` CLI option was added to force colored output.

🐛 Bug Fixes

  • Fixed suppression indentation matching.
  • The `--output-format` flag is now respected when running Ruff in `--watch` mode, defaulting to `full` output format.
  • Rule `A003` (`builtin-attribute-shadowing`) now detects shadowed built-in names in additional contexts like decorators, default arguments, and other attribute definitions.
  • Rule `PYI016` (`duplicate-union-member`) now considers `typing.Optional` when searching for duplicate union members.
  • Rule `SIM905` (`split-static-string`) now offers an autofix when the `maxsplit` argument is provided, even without a `sep` argument.
  • Rule `SIM910` (`dict-get-with-none-default`) now applies to more types of key expressions.
  • Rule `UP008` (`super-call-with-parameters`) now has a safe fix when it will not delete comments.
  • Rule `UP043` (`unnecessary-default-type-args`) now applies to stub (.pyi) files on Python versions before 3.13.
  • Notebooks are now identified by LSP `didOpen` instead of the `.ipynb` file extension.

Affected Symbols