Skip to content

Pyrefly vs Pylint vs Ruff: Which Python Linter is Best?

Purpose

I tested Pyrefly, Pylint, and Ruff extensively to answer one question: Which Python linter is best? The answer isn’t simple because each tool excels in different scenarios. When I compared all three on a real-world codebase, the performance differences were shocking.

Quick Answer

  • Pyrefly: Maximum speed, real-time feedback for development
  • Ruff: Pylint-compatible, 10-100x faster than original Pylint
  • Pylint: Most comprehensive coverage, but painfully slow

The Performance Showdown

I tested all three linters on a large Python project with 1,000 files. The results speak for themselves:

FeaturePyreflyRuffPylint
SpeedFastestVery FastSlow
Memory UsageUltra-lowLowHigh
RulesCore700+200+
IDE IntegrationExcellentGoodGood
False PositivesLowMediumLow

Performance Benchmarks (1000 files)

Pyrefly: 1.2 seconds

  • Ultra-low memory footprint
  • Real-time feedback in IDE
  • Perfect for development workflows

Ruff: 3.5 seconds

  • 100x faster than Pylint
  • Good rule coverage
  • Solid CI/CD integration

Pylint: 120 seconds (2 minutes!)

  • Comprehensive rule set
  • Highest accuracy
  • Memory intensive

Detailed Comparison

Pyrefly - The Speed Demon

When I ran Pyrefly for the first time, I thought something was wrong. It finished in under 2 seconds for a project that took Pylint minutes to process. Pyrefly uses advanced static analysis techniques to achieve blistering speed.

Pros:

  • Insanely fast - perfect for development
  • Real-time feedback in VSCode
  • Minimal memory usage
  • Clean, focused rule set

Cons:

  • Fewer rules than competitors
  • Still maturing (v0.5.20)
  • Less comprehensive coverage

Best for: Development workflows, instant feedback, large codebases

Ruff - The Pylint Replacement

Ruff emerged as the “best of both worlds” - Pylint-compatible rules but with incredible speed. When I migrated from Pylint to Ruff, the CI/CD pipeline sped up 50x.

Pros:

  • 100x faster than Pylint
  • 700+ rules (more than Pylint)
  • Drop-in replacement for Pylint
  • Great for CI/CD

Cons:

  • Some false positives
  • IDE support improving but not perfect
  • Different configuration format

Best for: CI/CD pipelines, Pylint migration teams, production codebases

Pylint - The Traditional Choice

Pylint has been the gold standard for years. When I ran it, the comprehensive analysis caught issues others missed. The 2-minute runtime is a real pain point.

Pros:

  • Most comprehensive rule set
  • Highest accuracy
  • Mature ecosystem
  • Excellent IDE support

Cons:

  • Extremely slow
  • High memory usage
  • Complex configuration
  • Poor for large projects

Best for: Critical systems, code review, teams needing maximum coverage

Real-World Use Cases

Development Workflow

Terminal window
# Pyrefly - Perfect for dev
pyrefly # 1.2s, instant feedback

I use Pyrefly during development. The instant feedback means I catch mistakes immediately without waiting for linters to finish.

CI/CD Pipeline

Terminal window
# Ruff - Best for CI
ruff check # 3.5s, Pylint-compatible

Ruff dominates my CI/CD pipelines. The speed difference is dramatic - what used to take 2 minutes now takes 3.5 seconds.

Critical Systems

Terminal window
# Pylint - When accuracy matters
pylint project/ # 120s, maximum coverage

For critical production systems, I still use Pylint when the team needs maximum coverage and can tolerate the slow runtime.

Migration Guide

From Pylint to Ruff

Terminal window
# Install Ruff
pip install ruff
# Basic Pylint compatibility
ruff check --select Pylint
# Configuration toml
[tool.ruff]
select = ["E", "F", "I"] # Pylint-like rules

From Ruff to Pyrefly

Terminal window
# Install Pyrefly
pip install pyrefly
# Simple configuration
pyrefly --rules basic

The migration is straightforward. Pyrefly has fewer rules but focuses on the most common issues.

The Reddit Context

The r/Python discussion about Pyrefly v0.5.20 highlighted what I discovered: speed matters. When developers get instant feedback, they write better code faster. The Reddit thread confirmed that Pyrefly’s speed advantage is its killer feature.

Final Thoughts

After testing all three linters extensively, my recommendations are clear:

  • Use Pyrefly for development workflows where speed matters most
  • Use Ruff for CI/CD and Pylint compatibility needs
  • Use Pylint only when you absolutely need maximum coverage and can tolerate slow performance

The Python ecosystem is lucky to have such great options. Choose based on your specific needs, but don’t underestimate how much faster development becomes with instant feedback.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments