Skip to content

ast-grep vs Ruff

Which should you use? A side-by-side look at what each one does, who it suits, what it costs, how hard it is to set up, and where each falls short.

ast-grep

Open source · MIT

A command-line tool that searches, lints, and rewrites code by its syntax structure, not plain text.

Ruff

Open source · MIT

A very fast Python linter and code formatter, written in Rust.

The short answer

Choose ast-grep if you need…

  • Developers who want grep-like searching that understands code structure
  • Library authors migrating users across breaking API changes
  • Tech leads who want to enforce custom code practices with lint rules
  • Engineers doing large-scale, consistent code rewrites

Choose Ruff if you need…

  • Python developers who want one tool for linting and formatting
  • Teams with large Python codebases where slow checks are a problem
  • People running checks in a pre-commit hook or editor on save
  • Projects that already use pyproject.toml for configuration

Side-by-side

ast-grepRuff
TypeCLICLI
PriceFree and open sourceFree and open source
LicenceMITMIT
GitHub stars16.4k50.4k
Setup difficultyBeginnerBeginner
How you get itInstall with a package managerInstall with a package manager
Main languageRustRust
Last code update4 days ago4 days ago

What each one is

ast-grep

ast-grep is a command-line tool that searches code by matching its syntax tree rather than raw text, so a pattern written like ordinary code can find every place that shares the same structure. It can also rewrite matches and run YAML-defined lint rules. People use it to find usages, migrate code across breaking changes, or enforce team coding standards.

Ruff

Ruff checks Python code for style problems and likely bugs, and can automatically format code and fix some errors. It is a single command-line tool that aims to replace several older Python tools such as Flake8, Black, and isort. The README says it is much faster than those tools, and it is installed through pip, uv, or pipx.

Best for

ast-grep

  • Developers who want grep-like searching that understands code structure
  • Library authors migrating users across breaking API changes
  • Tech leads who want to enforce custom code practices with lint rules
  • Engineers doing large-scale, consistent code rewrites

Ruff

  • Python developers who want one tool for linting and formatting
  • Teams with large Python codebases where slow checks are a problem
  • People running checks in a pre-commit hook or editor on save
  • Projects that already use pyproject.toml for configuration

Strengths

ast-grep

  • Patterns look like the code you already write
  • Matches by syntax tree, so it ignores formatting differences
  • Installable through many package managers including npm, pip, Homebrew, and cargo

Ruff

  • The README reports speeds of 10-100x over Flake8 and Black, with testimonials citing larger gains
  • Combines linting, formatting, and import sorting behind one interface
  • Supports hierarchical configuration for monorepos

Not ideal for

ast-grep

  • People who only need simple text search, since plain grep or ripgrep is simpler for that
  • Non-programmers, because patterns assume familiarity with code syntax
  • Languages not supported by its tree-sitter parsers, which the README does not fully list

Ruff

  • Non-Python projects, since it only handles Python code
  • People who need to keep using specific Flake8 plugins not covered by its rules (the README says it re-implements many popular ones, not all)
  • Users who want a tool with no configuration decisions to learn; it has over 900 rules to choose from

Trade-offs

ast-grep

  • Its matching depends on the language grammars it supports, so coverage varies by language
  • The README is truncated and does not describe every feature or limitation in detail

Ruff

  • Speed figures and testimonials come from the project and its users, not independent benchmarks
  • Rule coverage is broad but may not match every plugin or edge case of the tools it replaces
  • Version is under 1.0 (0.17.3), so behavior may change between releases

Getting started

ast-grep

Install via npm

npm install --global @ast-grep/cli

Install via pip

pip install ast-grep-cli
Step-by-step guide: how to use ast-grep

Ruff

Install with uv (recommended)

uv tool install ruff@latest

Install with pip

pip install ruff
Step-by-step guide: how to use Ruff

Frequently asked questions

What is the difference between ast-grep and Ruff?

ast-grep: A command-line tool that searches, lints, and rewrites code by its syntax structure, not plain text. Ruff: A very fast Python linter and code formatter, written in Rust. ast-grep suits developers who want grep-like searching that understands code structure, while Ruff suits python developers who want one tool for linting and formatting.

Are ast-grep and Ruff free?

ast-grep: Free and open source. Ruff: Free and open source.

Is ast-grep or Ruff more popular?

Ruff has more GitHub stars (50.4k) than ast-grep (16.4k). Popularity isn't the same as fit — check which one matches your use case above.

What are other alternatives to ast-grep and Ruff?

Other options people compare them with include jscodeshift, broot, Black.

Keep comparing

Built from our catalogue entries for both products: open-source details come from each project's README (AI-assisted, refreshed weekly) and GitHub data; AI-tool details are editorial. Spotted something wrong? Let us know from either product's page.