17 curated breaking changes across major versions of ruff. Use this as a migration checklist before bumping dependencies.
Formatter and linter config merged under [tool.ruff] with `lint` and `format` sub-tables. Output of some rules changed.
Run `ruff check --fix` after upgrade. For CI pinning, pin an exact version — ruff makes breaking rule-output changes between minors.
Ruff can now format Python code blocks in Markdown files and will do this by default. See the
Ruff now enables a much larger set of rules by default (413, up from 59). See the blog post for
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:
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.
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
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.
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 ```
The linter now supports block suppression comments. For example, to suppress `N803` for all parameters in this function:
Ruff now formats your code according to the 2026 style guide. See the formatter section below or in the blog post for a detailed list of changes.
Binaries for the `ppc64` (64-bit big-endian PowerPC) architecture are no longer included in our releases. It should still be possible to build Ruff manually for this platform, if needed.
The `ruff:alpine` Docker image is now based on Alpine 3.23 (up from 3.21).
Ruff now formats your code according to the 2026 style guide. See the formatter section below or in the blog post for a detailed list of changes.
The linter now supports block suppression comments. For example, to suppress `N803` for all parameters in this function: ```python # ruff: disable[N803] def foo( legacyArg1, legacyArg2, legacyArg3, legacyArg4, ): ... # ruff: enable[N803] ``` See the [documentation](https://docs.astral.sh/ruff/linter/#block-level) for more details.
The `ruff:debian` and `ruff:debian-slim` Docker images are now based on Debian 13 "Trixie" instead of Debian 12 "Bookworm."
Get this data programmatically \u2014 free, no authentication.
curl https://depscope.dev/api/breaking/pypi/ruff