Ruff: Python linter and code formatter written in Rust

Astral toolchain & scope

  • Ruff is part of a broader Astral toolchain (ruff, uv, upcoming type checker “Red Knot”).
  • Some users say Astral tools are now everywhere; others note many active Python/Rust users hadn’t heard of the org itself.
  • Astral is VC-funded; business model is unclear in the thread.

Performance and Rust implementation

  • Many report huge speed gains vs pylint/flake8/black combos: minutes down to under a second, even on modest (~20k LOC) codebases.
  • Others argue previous Python linters are already “instant” on their codebases and that the speed hype is overstated.
  • Rust binary is praised for:
    • Not depending on the project’s Python environment.
    • Avoiding multi-Python/version headaches when tooling has different version constraints than the project.
    • Easier rollout to non-expert colleagues (“download binary and run it”).
  • Counterargument: Python-native tools can already be isolated via separate environments; “decoupling” is more about setup preferences than inherent coupling.

Formatting and style debates

  • Ruff’s formatter is largely Black-compatible; some appreciate that it ends style arguments and gives team-wide consistency.
  • Others dislike Black-style choices (e.g., collapsing multi-line argument lists; no spaces around = in keyword args).
  • Accessibility concerns are raised around indentation; Black is criticized as inflexible, while Ruff is praised for configurability.

Tooling integration and rewrites

  • Many like Ruff because it unifies linting and formatting with one tool and one config instead of several (black, isort, flake8, pylint, etc.).
  • Some are uneasy that Ruff reimplements decades of Python tooling instead of improving flake8/pylint, losing plugin ecosystems and extensibility.
  • Others argue rewrites were necessary: legacy tools were architecturally limited, Python packaging/tooling had deep inertia, and Rust/Go-style single binaries are a qualitative improvement.

Type checking and complementary tools

  • Pyright (and community fork basedpyright) are frequently recommended; some teams have dropped pylint and rely on Pyright for many lint-like checks.
  • Mypy is still used but is viewed as missing some bugs that Pyright catches.
  • Astral is confirmed to be working on a type checker; users expect Ruff + Rust-based type checker + uv to form a cohesive stack.

Workflow, CI, and DX

  • Debate over running linters in CI vs pre-commit:
    • CI favored for large monorepos and enforcement (harder to bypass).
    • Hooks favored where speed and instant feedback matter.
  • Newer Python users describe the Astral stack as a welcome, opinionated “one way to do it,” contrasting with the fragmented traditional ecosystem.

Django and multi-language formatting

  • Ruff only covers Python; for Django templates and mixed HTML/CSS/JS, people mention Prettier and DjLint, but performance and template-mixing remain pain points.