Example◆Article
Running the latest Ruff against my three biggest projects — Datasette, sqlite-utils, and LLM — found hundreds of minor issues that breached the new default rules, and the upgrade was safe because all three projects have comprehensive test suites running against Python 3.10 through 3.14.
The author ran Ruff v0.16.0 on three major projects, finding hundreds of new issues, but the upgrades were safe thanks to comprehensive test suites covering Python 3.10–3.14. ✦ AI generated
Simon Willison · Simon Willison's Weblog · 2026-07-25 · original ↗
I ran the latest Ruff against my three biggest projects - Datasette, sqlite-utils, and LLM - and it found hundreds of minor issues that breached the new default rules. All three projects have very comprehensive test suites, executed in CI against Python 3.10 through Python 3.14, so upgrades like this are pretty safe. The following command did the bulk of the upgrades: uvx ruff@latest check . --fix --unsafe-fixes. Against sqlite-utils, that command reported: Found 1618 errors (1538 fixed, 80 remaining).
Read full article ↗excerpt · fair-use quotation
- ·Ran against Datasette, sqlite-utils, and LLM
- ·Found hundreds of minor issues breaching new default rules
- ·Upgrade safe due to comprehensive test suites
- ·Tests run in CI against Python 3.10 through 3.14
- ·Command: uvx ruff@latest check . --fix --unsafe-fixes
- ·Against sqlite-utils: 1618 errors found
- ·1538 fixed automatically, 80 remaining
Around this claim
This moment responds to
gives example → Ruff now enables 413 rules by default, up from 59 in previous versions.Brent Westbrook · Simon Willison's Webloggives example → Many of the 968 rules that were not previously enabled by default catch severe issues including syntax errors and immediate runtime errors, and will now be brought to developers' attention without any Ruff configuration.Brent Westbrook · Simon Willison's Weblog