NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #123 most downloaded on PyPI
An extremely fast Python linter and code formatter, written in Rust.
Last release 4 days ago
16 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
4 versions withdrawn
withdrawn after publishing
4 years old
424 releases · first in 2022
One column per quarter.
Remove Result from SourceCodeGenerator signature by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1677
From conversion for style detector-to-generator by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1678toml with toml_edit by @messense in https://github.com/charliermarsh/ruff/pull/1680CONTRIBUTING.md location on README.md by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1688flake8-bandit] Add Rule for S113 (requests call without timeout) by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1692flake8-bandit] Add Rule for S501 (request call with verify=False) by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1695stderr output by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1701add_check methods by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1705trim_end when checking line continutation by @harupy in https://github.com/charliermarsh/ruff/pull/1706stderr output (#1701)" by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1711Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.212...v0.0.213
Add task-tags & ignore-overlong-task-comments settings by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1654
CheckCodePrefix by @messense in https://github.com/charliermarsh/ruff/pull/1656flake8-bandit] Add Rule for S324 (Insecure hash functions in hashlib) by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1661flake8-bandit] Add Rule for S506 (unsafe use of yaml load) by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1664&String, &Option, and &Vec usages by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1670Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.211...v0.0.212
Implement SIM220 and SIM221 by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1630
SIM220 and SIM221 by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1630SIM105 by @harupy in https://github.com/charliermarsh/ruff/pull/1633S103 by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1636S108 by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1644SIM110 and SIM111 (conversion to any and all) by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1653Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.210...v0.0.211
Do not Change Quotation Style for PT006 Autofix by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1600
PT006 Autofix by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1600PT022 by @harupy in https://github.com/charliermarsh/ruff/pull/1604ImportFrom statements by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1609pass for PIE790 by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1612PT006 by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1622yield-to-yield from conversion by @colin99d in https://github.com/charliermarsh/ruff/pull/1544SIM118 in comprehension by @harupy in https://github.com/charliermarsh/ruff/pull/1627Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.209...v0.0.210
Fix several typos in README by @jvstme in https://github.com/charliermarsh/ruff/pull/1590
' first, , second ' by @bluetech in https://github.com/charliermarsh/ruff/pull/1591Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.208...v0.0.209
Adds a codespell linter by @colin99d in https://github.com/charliermarsh/ruff/pull/1553
flake8-pytest-style by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1506flake8-pie plugin with prefer_list_builtin by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1578FStringMissingPlaceholders as fixable by @harupy in https://github.com/charliermarsh/ruff/pull/1582Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.207...v0.0.208
Implement list-to-tuple comprehension unpacking by @colin99d in https://github.com/charliermarsh/ruff/pull/1534
__init__.py being private by @not-my-profile in https://github.com/charliermarsh/ruff/pull/1556Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.206...v0.0.207
PyUpgrade: Turn errors into OSError by @colin99d in https://github.com/charliermarsh/ruff/pull/1434
import mock to from unittest import mock by @colin99d in https://github.com/charliermarsh/ruff/pull/1488Name node range in NamedExpr node by @harupy in https://github.com/charliermarsh/ruff/pull/1526SIM118 Autofix by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1529visit_format_spec to avoid false positives for F541 in f-string format specifier by @harupy in https://github.com/charliermarsh/ruff/pull/1528Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.205...v0.0.206
Avoid flagging nested f-strings by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1516
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.204...v0.0.205
Trim CLI help during generation by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1492
T20X ranges by @harupy in https://github.com/charliermarsh/ruff/pull/1502test_path helper to detect round-trip autofix issues by @squiddy in https://github.com/charliermarsh/ruff/pull/1501Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.203...v0.0.204
Support multi-line noqa directives for 'import from' by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1479
noqa directives for 'import from' by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1479ur prefixes by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1481Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.202...v0.0.203
Make banned-api config setting optional by @not-my-profile in https://github.com/charliermarsh/ruff/pull/1465
CONTRIBUTING.md improvements by @not-my-profile in https://github.com/charliermarsh/ruff/pull/1466--select by @not-my-profile in https://github.com/charliermarsh/ruff/pull/1471Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.201...v0.0.202
Rename config to settings in the playground by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1450
flake8-simplify by @mkniewallner in https://github.com/charliermarsh/ruff/pull/1449Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.200...v0.0.201
Re-style the Ruff playground by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1438
# noqa by @saadmk11 in https://github.com/charliermarsh/ruff/pull/1440Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.199...v0.0.200
Check for keyword arguments before the last star argument by @andersk in https://github.com/charliermarsh/ruff/pull/1420
capture_output=True by @colin99d in https://github.com/charliermarsh/ruff/pull/1415Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.198...v0.0.199
Set convention in flake8-to-ruff by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1410
code_gen.rs by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1412Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.196...v0.0.198
Implement pyupgrade check for io.open alias by @squiddy in https://github.com/charliermarsh/ruff/pull/1399
make_tokenize with make_tokenizer_located by @harupy in https://github.com/charliermarsh/ruff/pull/1405universal_newlines to text in subprocess.run by @colin99d in https://github.com/charliermarsh/ruff/pull/1403Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.195...v0.0.196
Add support for ruff.toml by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1378
ruff.toml by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1378Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.194...v0.0.195
Fix F841 (UnusedVariable) range in except handler by @harupy in https://github.com/charliermarsh/ruff/pull/1367
UnusedVariable) range in except handler by @harupy in https://github.com/charliermarsh/ruff/pull/1367excepthandler_name_range by @harupy in https://github.com/charliermarsh/ruff/pull/1368--fix-only command-line and pyproject.toml option by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1375Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.193...v0.0.194
Update CONTRIBUTING.md by @colin99d in https://github.com/charliermarsh/ruff/pull/1344
BinOp location by @harupy in https://github.com/charliermarsh/ruff/pull/1355Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.192...v0.0.193
Add some more repositories to the user list by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1328
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.191...v0.0.192
Fix false positive DTZ001 on datetime(2000, 1, 1, 0, 0, 0, 0, utc) by @bluetech in https://github.com/charliermarsh/ruff/pull/1308
datetime(2000, 1, 1, 0, 0, 0, 0, utc) by @bluetech in https://github.com/charliermarsh/ruff/pull/1308pyproject.toml Black section by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1317extend paths by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1323Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.190...v0.0.191
Avoid F821 false positives for Mypy extensions by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1304
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.189...v0.0.190
Update Arg section checking to match latest pydocstyle by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1293
--force-exclude setting to force exclusions with pre-commit by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1295Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.188...v0.0.189
implement flake8-datetimez by @Yasu-umi in https://github.com/charliermarsh/ruff/pull/1270
T201 errors for print(..., file=fp)-like calls by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1287Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.187...v0.0.188
pygrep-hooks - deprecated use of logging.warn & no blanket type ignore by @squiddy in https://github.com/charliermarsh/ruff/pull/1275
rustfmt automatically; only write if changed by @andersk in https://github.com/charliermarsh/ruff/pull/1282--stdin-filename when resolving configuration files by @cdbrendel in https://github.com/charliermarsh/ruff/pull/1281Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.186...v0.0.187
Add instructions for Sublime Text installation by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1271
ruff-lsp to README by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1272Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.185...v0.0.186
Auto-detect same-package imports by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1266
noqa enforcement by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1267Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.184...v0.0.185
test: Fix flake8-errmsg snapshots by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1260
flake8-errmsg snapshots by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1260ignore_noqa and autofix booleans with enums by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1264Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.183...v0.0.184
Avoid fixing E711 and E712 issues that would cause F632 by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1248
pandas-vet by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1235flake8-errmsg by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1258Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.182...v0.0.183
Ignore any pyproject.toml without a [tool.ruff] section by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1243
pyproject.toml without a [tool.ruff] section by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1243extend-* configuration options as "always extended" by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1245Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.181...v0.0.182
Apply fix to all errors in E711 and E712 autofix by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1238
.gitignore by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1234.gitignore checks via respect-gitignore flag by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1242Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.180...v0.0.181
Apply CLI options even when no pyproject.toml is found by @cdbrendel in https://github.com/charliermarsh/ruff/pull/1232
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.179...v0.0.180
Support hierarchical settings for nested directories by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1190
--config everywhere if provided by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1210pyproject.toml discovery by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1213src by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1225Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.177...v0.0.178
Avoid inserting extra newlines for comment-delimited import blocks by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1201
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.176...v0.0.177
Mark C413 as fixable by @squiddy in https://github.com/charliermarsh/ruff/pull/1191
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.175...v0.0.176
Add jupyter_server to README by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1182
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.174...v0.0.175
Add pacman instructions to README by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1175
global declarations by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1178Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.173...v0.0.174
Extract docstring exactly once by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1171
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.172...v0.0.173
Clarify combination of combine-as-imports and force-wrap-aliases by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1162
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.171...v0.0.172
Include else block in break detection by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1143
RedefinedWhileUnused) by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1137Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.170...v0.0.171
Remove 'consider' language from check messages by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1135
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.169...v0.0.170
Rename I252 to TID252; add redirects for all renamed codes by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1129
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.168...v0.0.169
Implement unused argument detection (ARG) by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1126
ARG) by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1126Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.167...v0.0.168
Add flake8-import-conventions to TOC in readme by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1114
flake8-import-conventions to TOC in readme by @edgarrmondragon in https://github.com/charliermarsh/ruff/pull/1114Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.166...v0.0.167
Update readme in order to match pylint prefixes by @billou57 in https://github.com/charliermarsh/ruff/pull/1105
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.165...v0.0.166
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.164...v0.0.165
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.164...v0.0.165
Track nested imports without column number detection by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1097
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.163...v0.0.164
Don't autofix D210 by introducing a syntax error by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1093
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.162...v0.0.163
Ignore newline enforcement when imports break indentation boundaries by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1085
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.161...v0.0.162
Support unterminated isort: off directives by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1074
isort newline-insertion behavior by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1078Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.160...v0.0.161
Preserve star imports when re-formatting import blocks by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1066
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.159...v0.0.160
Style fixes by @youknowone in https://github.com/charliermarsh/ruff/pull/1049
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.158...v0.0.159
Update RustPython by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1045
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.157...v0.0.158
Fix D205 autofix by detecting summary line by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1041
__init__.py files by default by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1042Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.156...v0.0.157
Remove sloppy match_name_or_attr helper by @andersk in https://github.com/charliermarsh/ruff/pull/1027
PLR0402 by @harupy in https://github.com/charliermarsh/ruff/pull/1024useless-import-alias by @harupy in https://github.com/charliermarsh/ruff/pull/1025Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.155...v0.0.156
Rename pyupgrade rules from UXXX to UPXXX by @charliermarsh in https://github.com/charliermarsh/ruff/pull/957
consider-using-from-import by @harupy in https://github.com/charliermarsh/ruff/pull/1018U-to-UP rename by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1019misplaced-comparison-constant by @harupy in https://github.com/charliermarsh/ruff/pull/1023Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.154...v0.0.155
Implement flake8-return plugin by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1016
flake8-return plugin by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1016flake8-return rules auto-fixable by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1017Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.153...v0.0.154
Support whole-file noqa exclusions by @charliermarsh in https://github.com/charliermarsh/ruff/pull/1001
match_like_matches_macro in src/pylint/plugins.rs by @harupy in https://github.com/charliermarsh/ruff/pull/1007unnecessary-direct-lambda-call by @harupy in https://github.com/charliermarsh/ruff/pull/1008consider-merging-isinstance by @harupy in https://github.com/charliermarsh/ruff/pull/1009Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.152...v0.0.153
Add no-eval rule from pygrep-hooks by @JonathanPlasse in https://github.com/charliermarsh/ruff/pull/994
Full Changelog: https://github.com/charliermarsh/ruff/compare/v0.0.151...v0.0.152
Your coding agent can read these notes before it upgrades. Set up the MCP server →