Skip to main content

Ruff 0.16.0

Release Date: July 23, 2026

Ruff 0.16.0 is here, and this one is a big deal. The Python linter and formatter written in Rust has shipped a major update that changes everything about how you use it. Let us break down what landed, what broke, and whether you should upgrade today.

⚡ Breaking Changes — The Big One

Ruff 0.16.0 now enables 413 rules by default, up from just 59. That is a 7x increase in the baseline rule set. If you have been using Ruff with default settings, your next run will flag a lot more issues. Most of these are legitimate quality-of-code rules — unused imports, missing error handling, style inconsistencies — but expect a firehose of diagnostics the first time you run the new version.

The team has published a migration guide and a full Default Rules page listing every enabled rule. Before upgrading, read that page. Then run Ruff with --statistics to see what new issues surface in your codebase, and suppress the ones that do not fit your project with a pyproject.toml override.

📝 Markdown Formatting — Finally

Ruff can now format Python code blocks inside Markdown files — and it does this by default. If you write documentation with embedded Python examples (think README files, docs pages, Jupyter-adjacent content), Ruff will format those code blocks just like it formats regular .py files. This is a massive quality-of-life improvement for maintainers who keep Python examples in their docs.

To disable it, set format.markdown-format = false in your config. But honestly, give it a try first — it works surprisingly well.

🗣️ New ruff: ignore Comments

Another long-requested feature: Ruff now supports inline ruff: ignore comments, similar to Flake8's noqa. You can place them at the end of a line or on the line preceding a diagnostic:

import math  # ruff: ignore[F401]
# ruff: ignore[F401]
import os

This makes it much easier to suppress specific warnings without switching to a different comment syntax. It also means migration from Flake8 is smoother — you can gradually replace # noqa with # ruff: ignore at your own pace.

⬆️ Upgrade at Your Own Pace

The upgrade path is straightforward: pip install --upgrade ruff. But do not run it blindly on a large codebase without reviewing the new defaults first. Set up a CI pipeline that runs Ruff in check-only mode before you flip the switch, and budget some time for the initial cleanup.

Ruff 0.16.0 is a genuinely significant release. The expanded defaults, Markdown support, and inline ignore comments all make Ruff a more complete tool. Just budget an afternoon for the migration — your future self will thank you.

What is New?

By continuing to use the site, you agree to the use of cookies.