
TL;DR
Ruff v0.16.0 ships 413 default rules (up from 59), Markdown code-block formatting, and a new ruff: ignore system. Here is what changed, what HN is saying, and why zero-config linting matters more with AI coding agents.
Ruff shipped v0.16.0 on July 23 -- and it is the most significant default-behavior change in the project's history. The Rust-based Python linter and formatter, now under OpenAI's roof after the Astral acquisition, expanded its default rule set from 59 rules to 413 in a single release. That is a 7x increase in the number of issues Ruff will flag without any configuration file at all.
If you have been using Ruff with a pyproject.toml or .ruff.toml, most of this does not affect you -- your explicit select/extend-select still controls what fires. But if you rely on Ruff's out-of-the-box behavior (or if you onboard new projects and want sensible defaults without debate), this release changes the calculus on what "running Ruff" means.
The headline number is 413 default rules. Ruff's total rule count grew from 708 to 968 since the default set was last touched in v0.1.0, and the team decided that many of the new rules -- including rules from flake8-bugbear (B), pyupgrade (UP), and Ruff's own RUF category -- caught real bugs and deserved to be on by default. The full rule listing lives on the new Default Rules docs page.
Three new features stand out:
Markdown code-block formatting. Ruff can now format Python code blocks inside Markdown files. It recognizes fenced blocks with python, py, python3, py3, pyi, and pycon info strings. Quarto notebooks with {python} fences work too if you configure the .qmd extension mapping. You can suppress formatting with <!-- fmt: off --> HTML comments or exclude Markdown files entirely via extend-exclude.
New ruff: ignore suppression comments. Building on the ruff: disable/ruff: enable range suppression from v0.15, Ruff v0.16 adds ruff: ignore (suppress on the same or next logical line) and ruff: file-ignore (suppress for the whole file). A new --add-ignore CLI flag auto-inserts these comments. In preview mode, rule names work instead of codes: # ruff: ignore[unused-import] instead of # ruff: ignore[F401].
Fixes shown in check and format output. The check and format --check commands now display diffs directly in the default output format -- no more running with --diff separately to see what would change. The format command also supports the full range of output formats now (JSON, GitHub annotations, GitLab code quality).
The release also stabilizes 12 rules from preview, including sorted-min-max (FURB192), none-not-at-end-of-union (RUF036), and too-many-positional-arguments (PLR0917).
From the archive
Jul 26, 2026 • 8 min read
Jul 26, 2026 • 5 min read
Jul 25, 2026 • 7 min read
Jul 25, 2026 • 12 min read
The Hacker News thread (105 points, 46 comments as of writing) split into three camps worth hearing.
The zero-config camp was excited. One commenter ran v0.16 on a file with no config and found it flagged unsorted imports and bare except Exception by default. Another said their new .ruff.toml is now just line-length = 300. The thesis: "413 rules by default means most projects get useful linting without touching the config at all."
The "why no v1.0?" camp pushed back on breaking changes in a 0.x release. A top-voted comment asked: "Why must my poor semver be hurt so!" Others pointed out that semver explicitly allows breaking changes in 0.x minor releases, and referenced Ruff's own versioning policy. The question of when Ruff will hit 1.0 is not new, but it resurfaced with more urgency after the OpenAI acquisition.
The agentic coding angle got real attention. Multiple commenters noted that strong linting matters more when AI agents write the code. One wrote: "With the advent of agentic coding, strong linting is more important than ever." Another raised the counterpoint: AI agents "spend lots of tokens trying to fix a benign issue" and that it is hard to "trust their judgement on code quality." This tension -- rules catch real bugs but also burn agent context on churn -- is the key practical debate for teams running AI coding tools at scale.
A working developer shared a real migration report: upgrading a ~3k line project from v0.15 to v0.16, with linked commits showing what the new rules caught and how the fixes broke down between manual edits and auto-corrections.
Several commenters also noted that Ruff, ty, and uv are all seeing active development post-acquisition, which was not a given after Astral joined OpenAI in March.
Ruff's default-rule expansion arrives at a moment when more Python code is being written by AI agents than ever before. The calculus is different from the pre-agent era:
When a human writes code, they (usually) have some sense of what the linter will flag and can avoid patterns they know will trigger warnings. An LLM generating code has no such internalized linting model -- it produces whatever pattern the training data suggests, lint be damned. That makes the linter the first and often only quality gate before the code reaches a human reviewer.
A 7x increase in default rules changes the character of that gate. On one hand, more rules means more real bugs caught before they ship. The flake8-bugbear rules now enabled by default catch iterator-mutation footguns and subtle except semantics that production incidents are made of. On the other hand, as the HN thread noted, agent token budgets are finite. Every ruff: ignore comment an agent adds to silence a false positive is context that does not go toward the actual feature.
The pragmatic take: for greenfield projects, the v0.16 defaults are an unambiguous improvement. For existing codebases with established configs, they do not change anything. For agent-generated code, the right approach is to run Ruff with the defaults, measure the noise-to-signal ratio, and add explicit select/ignore lines to the project config rather than relying on per-file suppression comments that eat agent context.
The continued active development of Ruff post-Acquisition (ty and uv are also shipping regularly) is a welcome signal for the Python ecosystem. Even under OpenAI ownership, the team is shipping features that benefit all Python developers, not just Codex users.
Read next
The Godot Foundation has established a policy banning autonomous AI agent code and substantial AI-generated contributions, citing reviewer burnout and concerns about maintainer mentorship.
6 min readThe Gleam programming language has migrated to Tangled, a new ATProto-based code hosting platform. Here's what this means for developers and the future of decentralized forges.
6 min readThe creators of Ruff and uv are joining OpenAI. Here is what this means for the Python ecosystem, AI tooling, and why OpenAI is investing in developer infrastructure.
4 min readTechnical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
Open-source terminal agent runtime with approval modes, rollback snapshots, MCP servers, LSP diagnostics, and a headless...
View ToolAI app builder - describe what you want, get a deployed full-stack app with React, Supabase, and auth. No coding requi...
View ToolAnthropic's Python SDK for building production agent systems. Tool use, guardrails, agent handoffs, and orchestration. R...
View ToolMost popular LLM framework. 100K+ GitHub stars. Chains, RAG, vector stores, tool use. LangGraph adds stateful multi-agen...
View ToolSee exactly what your agent did, locally. No cloud, no signup.
View AppKnow what each agent run cost before the bill arrives. Budgets and alerts included.
View AppGive your agents a filesystem that branches like git. Crash-safe by default.
View AppWhat MCP servers are, how they work, and how to build your own in 5 minutes.
AI AgentsA concrete step-by-step guide to moving your development workflow from Cursor to Claude Code - settings, rules, keybindings, and the habits that transfer.
Getting StartedInteractive timeline showing what's in context at each turn.
Claude Code
The Godot Foundation has established a policy banning autonomous AI agent code and substantial AI-generated contribution...

Mitchell Hashimoto (Vagrant, Terraform, Ghostty) launched Superlogical - a new company building a terminal multiplexer t...

PGSimCity is an explorable 3D city that models PostgreSQL internals - shared buffers, WAL, autovacuum, checkpoints, and...

A technical deep dive into AM halftoning with ImageMagick hit the HN front page at 195 points. We break down the techniq...

The Gleam programming language has migrated to Tangled, a new ATProto-based code hosting platform. Here's what this mean...

Days after getting caught uploading entire codebases to xAI servers, Grok Build is now open source on GitHub. The HN com...

New tutorials, open-source projects, and deep dives on coding agents - delivered weekly.