The prylint release
Adam Raudonis published prylint on PyPI in June 2026. The package delivers a Rust port of pylint's error checking that matches the original output byte for byte. It runs 15-2300 times faster depending on the codebase, with a median around 85 times on the tested set. The project was announced on Hacker News and verified against 52 production repositories containing roughly 65,000 Python files.
Installation and command usage
Install with a single pip command:
pip install prylint
prylint requires a Python 3.9+ interpreter on PATH only for module resolution and to reproduce CPython syntax error messages. Neither pylint nor astroid needs to be present.
Run it the same way as the original tool. Full check mode is default:
prylint .
prylint -E .
prylint --disable=C0114 .
All flags for disabling messages, reading pyproject.toml or custom rc files, init-hook execution, and inline # pylint: pragmas produce identical results to pylint 4.0.5, including exit codes and the final score footer.
Internal architecture and verification
The implementation rewrites pylint's core checkers in Rust while preserving every observable behavior. Message text, line and column numbers, ordering, and crash messages stay the same even when the original contains bugs. Verification covered django, numpy, pandas, sympy, home-assistant, sqlalchemy, twisted, scikit-learn, and pylint's own functional test suite. Any difference in output would have been caught during the byte-identical comparison.
The Rust binary handles AST traversal and rule evaluation directly. Python is invoked only at startup for path setup and for files that fail to parse. This hybrid approach keeps syntax-error fidelity while moving the hot path out of interpreted code.
Performance numbers and remaining constraints
Single-threaded benchmarks on Apple M-series hardware show large gains:
- black: 26.7 hours down to 41 seconds
- sentry: 3.7 hours down to 24 seconds
- home-assistant (17.5k files): 10.3 hours down to 82 seconds
- django: 1524 seconds down to 10.1 seconds
- sqlalchemy: 614 seconds down to 7.1 seconds
The tool still depends on an external Python interpreter, so projects without a working python3 binary cannot use it. It targets pylint 4.0.5 behavior exactly; newer pylint features that change message output will require corresponding updates to the Rust side. No additional plugins or custom checkers written for pylint will load.
When to adopt prylint
Teams running pylint in CI on repositories above a few thousand files will see the largest wall-clock reductions. Smaller projects gain less, but the identical output removes any need to audit diffs after switching. The package remains in beta, so production pipelines should pin a specific version and re-verify output after upgrades.
FAQs
Does prylint require pylint to be installed? No. Only a Python 3.9+ binary on PATH is needed for module paths and syntax errors.
Will the reported messages ever differ from pylint? The project aims for byte-identical output, including cases where pylint itself is incorrect.
Can I use existing pylint plugins? No. prylint does not load pylint plugins or custom checkers written in Python.
---
๐ Related articles
- Agentic Coding: Una Trappola per lo Sviluppo Software?
- File agents.md: utili per gli agenti di coding?
- Lean-ctx: Ottimizzatore Ibrido Riduce Consumo Token LLM del 89-99%
Need a consultation?
I help companies and startups build software, automate workflows, and integrate AI. Let's talk.
Get in touch