{"full_name":"astral-sh/ruff","owner":"astral-sh","name":"ruff","url":"https://github.com/astral-sh/ruff","description":"An extremely fast Python linter and code formatter, written in Rust.","homepage":"https://docs.astral.sh/ruff","topics":[],"language":"Rust","license":"MIT","avatar":"https://avatars.githubusercontent.com/u/115962839?v=4","created_at":"2022-08-09T17:17:44Z","pushed_at":"2026-11-10T09:26:12Z","metrics":{"stars":51148,"forks":2640,"watchers":158,"issues":8445,"prs":20708,"releases":435,"issues_open":null,"issues_closed":null,"prs_open":null,"prs_closed":null,"prs_merged":null,"discussions":468},"growth":{"day":{"stars":21,"forks":1,"base_day":"2026-11-09"}},"history":{"dates":["2026-11-09","2026-11-10"],"stars":[51127,51148],"forks":[2639,2640],"watchers":[158,158],"issues_open":[null,null],"prs_open":[null,null]},"boards":{},"same_owner":[{"full_name":"astral-sh/uv","name":"uv","boards":{"total":175}}],"issues":[{"number":970,"title":"Implement Pylint","comments":342,"created_at":"2022-11-30T04:52:53Z"},{"number":283,"title":"Meta issue: plugin system","comments":102,"created_at":"2022-09-29T09:42:17Z"},{"number":2402,"title":"Implement remaining `pycodestyle` rules","comments":72,"created_at":"2023-01-31T17:28:09Z"},{"number":7684,"title":"Formatter: Keep right-hanging comments aligned","comments":59,"created_at":"2023-09-27T23:50:36Z"},{"number":659,"title":"Expose Ruff's public API as a Python library","comments":50,"created_at":"2022-11-08T14:36:51Z"},{"number":458,"title":"Implement rules in `darglint`","comments":47,"created_at":"2022-10-21T01:21:21Z"},{"number":8232,"title":"Unified command for linting and formatting","comments":44,"created_at":"2023-10-25T22:07:07Z"},{"number":9216,"title":"How to use COM812 in linter but avoid conflict with formatter?","comments":42,"created_at":"2023-12-20T17:29:41Z"}],"discussions":[{"number":29646,"title":"Expanding `blind-except` to contextlib.suppress","comments":1,"category":"Ideas","created_at":"2026-10-22T20:24:03Z"},{"number":29457,"title":"Rule idea: \"Inline-newlines\"","comments":1,"category":"Ideas","created_at":"2026-10-18T11:43:02Z"},{"number":29122,"title":"Tag v0.0.268 declares version 0.0.267 in pyproject.toml — intended?","comments":4,"category":"Q&A","created_at":"2026-10-05T23:36:46Z"},{"number":28504,"title":"VSCode extension vs ruff binary differing behaviour - how to synchronize behaviour?","comments":1,"category":"Q&A","created_at":"2026-09-10T19:32:02Z"},{"number":28417,"title":"Research inquiry: Ruff’s release approval workflow","comments":1,"category":"General","created_at":"2026-09-08T16:33:28Z"},{"number":28100,"title":"astral-sh badges: uv, ty, Ruff","comments":0,"category":"General","created_at":"2026-08-27T12:37:17Z"},{"number":28098,"title":"Formatter: Option for compact wrapping comma-separated constructs","comments":1,"category":"Ideas","created_at":"2026-08-27T10:45:48Z"},{"number":27566,"title":"Is there a way to use checker in preview-mode and formatter in non-preview mode for same code?","comments":2,"category":"Q&A","created_at":"2026-08-07T06:51:33Z"}],"latest_release":{"name":"0.17.4","tag":"0.17.4","published_at":"2026-11-05T18:53:24Z","body":"## Release Notes\n\nReleased on 2026-11-05.\n\n### Preview features\n\n- \\[`flake8-logging-format`\\] Avoid behavior changes and syntax errors in fixes (`G004`) ([#27419](https://github.com/astral-sh/ruff/pull/27419))\n- \\[`security`\\] Implement `tarfile-ignore-zeros-true` ([#28680](https://github.com/astral-sh/ruff/pull/28680))\n\n### Bug fixes\n\n- Accept a bare raise before a semicolon ([#29761](https://github.com/astral-sh/ruff/pull/29761))\n- Allow match identifiers after a semicolon ([#29760](https://github.com/astral-sh/ruff/pull/29760))\n- Fix panic on BOM-prefixed files in diagnostic renderer ([#30017](https://github.com/astral-sh/ruff/pull/30017))\n- \\[`flake8-simplify`\\] Report collapsible `elif` clauses after a multi-statement `if` branch (`SIM102`) ([#29814](https://github.com/astral-sh/ruff/pull/29814))\n\n### Rule changes\n\n- Show more nonprinting characters in diagnostic fix diffs ([#30062](https://github.com/astral-sh/ruff/pull/30062))\n\n### Performance\n\n- Coalesce source slices when formatting attributes ([#29841](https://github.com/astral-sh/ruff/pull/29841))\n- Collect return statements with a statement-only visitor ([#29911](https://github.com/astral-sh/ruff/pull/29911))\n- \\[`pyflakes`\\] Defer value comparisons for repeated dictionary keys (`F601`, `F602`) ([#29739](https://github.com/astral-sh/ruff/pull/29739))\n- Format node fields directly when comment handling is unnecessary ([#29853](https://github.com/astral-sh/ruff/pull/29853))\n- Reduce formatter source-slice overhead ([#29855](https://github.com/astral-sh/ruff/pull/29855))\n- Reuse a callee's qualified name across lint rules ([#29916](https://github.com/astral-sh/ruff/pull/29916))\n- Skip invalid string character checks when the source contains none ([#29883](https://github.com/astral-sh/ruff/pull/29883))\n- Use a Bloom filter for formatter comment lookups ([#29852](https://github.com/astral-sh/ruff/pull/29852))\n- Use a concrete buffer for ordinary writes ([#29819](https://github.com/astral-sh/ruff/pull/29819))\n\n### CLI\n\n- Give `NO_COLOR` precedence in Ruff and ty diagnostics ([#29898](https://github.com/astral-sh/ruff/pull/29898))\n- Honor `CLICOLOR=0` in Ruff and ty diagnostics ([#29910](https://github.com/astral-sh/ruff/pull/29910))\n\n### Documentation\n\n- Correct the documented `version` and `src` defaults for `ruff-action` ([#29880](https://github.com/astral-sh/ruff/pull/29880))\n- \\[`flake8-bugbear`\\] Make `B014` example error out-of-the-box ([#29941](https://github.com/astral-sh/ruff/pull/29941))\n- \\[`flake8-no-pep420`\\] Document preview behavior (`INP001`) ([#29764](https://github.com/astral-sh/ruff/pull/29764))\n- \\[`isort`\\] Expand `I001` documentation ([#29843](https://github.com/astral-sh/ruff/pull/29843))\n\n### Other changes\n\n- [syntax-errors] Extend `__debug__` write check to attribute targets ([#27908](https://github.com/astral-sh/ruff/pull/27908))\n\n### Contributors\n\n- [@fixfon](https://github.com/fixfon)\n- [@hirehamir](https://github.com/hirehamir)\n- [@MichaReiser](https://github.com/MichaReiser)\n- [@saberoueslati](https://github.com/saberoueslati)\n- [@mangod12](https://github.com/mangod12)\n- [@Sacrimento](https://github.com/Sacrimento)\n- [@AlexWaygood](https://github.com/AlexWaygood)\n- [@mulaihonglixihonglixi-web](https://github.com/mulaihonglixihonglixi-web)\n- [@adarrevah](https://github.com/adarrevah)\n- [@charliermarsh](https://github.com/charliermarsh)\n- [@shan3520](https://github.com/shan3520)\n- [@halcyon-past](https://github.com/halcyon-past)\n\n## Install ruff 0.17.4\n\n### Install prebuilt binaries via shell script\n\n```sh\ncurl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.17.4/ruff-installer.sh | sh\n```\n\n### Install prebuilt binaries via powershell script\n\n```sh\npowershell -ExecutionPolicy Bypass -c \"irm https://releases.astral.sh/github/ruff/releases/download/0.17.4/ruff-installer.ps1 | iex\"\n```\n\n## Download ruff 0.17.4\n\n|  File  | Platform | Checksum |\n|--------|----------|----------|\n| [ruff-aarch64-apple-darw"},"readme":true,"readme_zh":false,"news":[],"stale":false,"snapshot_at":"2026-11-10T09:35:25Z","history_start":"2026-09-06"}