Pylint

A static code analyser for Python that catches bugs and enforces coding standards

Tool
PyPI
v4.0.9
5,726 stars
GNU GPLv2

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
95 /100 Excellent
Development Activity 100
Maintenance 96
Community 84
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
84 /100 Excellent
Architecture 88
Code Quality 92
Innovation 85
Learning Curve 70

Pylint is a static code analysis tool for Python that inspects your source code without executing it, looking for programming errors, enforcing a coding standard, and flagging code smells. Unlike simpler linters, Pylint performs deep type inference through its companion library astroid, letting it catch mistakes that purely syntactic tools miss — at the cost of being slower than lightweight alternatives.

Pylint has been maintained by the Python Code Quality Authority (PyCQA) community since 2003 and ships as both a standalone CLI and an extensible framework: teams write custom checkers for internal conventions, and a large ecosystem of third-party plugins (pylint-django, pylint-pydantic, and others) extends it to popular frameworks.

What You Get

  • A CLI (pylint) that scores a codebase 0-10 and reports categorized messages (errors, warnings, refactors, conventions)
  • Deep type and value inference via astroid, catching bugs plain AST-based linters can’t see
  • A plugin architecture for framework-specific and organization-specific custom checkers
  • pyreverse, a bundled tool that generates UML class and package diagrams from Python code
  • symilar, a bundled duplicate-code detector also integrated into the main lint run
  • Fine-grained per-message configuration and inline disable comments for incremental adoption

Common Use Cases

  • Enforcing a consistent coding standard across a team or open-source project in CI
  • Catching latent bugs (undefined names, wrong arg counts, unreachable code) before code review
  • Gradually introducing linting to a legacy codebase via --errors-only then progressively re-enabling convention/refactor checks
  • Generating architecture diagrams of an existing codebase with the bundled pyreverse tool
  • Writing custom checkers to enforce internal libraries’ usage conventions

Under The Hood

Architecture - Pylint is organized around a PyLinter orchestrator (in pylint/lint) that walks an astroid AST of the target modules and dispatches nodes to a registry of independent checkers (design, imports, exceptions, typecheck, etc. under pylint/checkers), each contributing messages through a shared reporters layer that renders text, JSON, or other output formats; a separate config package handles the layered pylintrc/toml/CLI configuration resolution, and pyreverse/symilar live as standalone entry points reusing the same astroid-based parsing.

Tech Stack - Pure Python 3.10+, with astroid (a sister PyCQA project) doing all static inference of types and values, isort and mccabe vendored in for import-order and complexity checks, tomlkit/tomli for config parsing, and dill for caching inference results across runs; packaging uses a standard pyproject.toml/setuptools build with no compiled extensions.

Code Quality - The project has an unusually large test suite (1,274+ test files) covering individual checkers, functional test fixtures with expected-message assertions, and regression tests for prior bugs; the codebase is fully typed (Typing :: Typed classifier, py.typed marker) and enforces its own style using pylint on itself, with CI running the full suite across supported Python versions via GitHub Actions and pre-commit.ci.

API Design - As a CLI tool the primary interface is command-line flags and pylintrc/toml configuration keys, which is idiomatic for its category (mirrors flake8, ruff) though the sheer number of configurable messages raises the learning curve for newcomers; the plugin API (register() hooks, BaseChecker subclassing) is stable and well-documented, letting third parties add checkers without touching pylint core.

Used by 5 apps in this directory

C++
68%
Apache 2.0

ClickHouse

Analytics · Data Engineering · Databases

50,116

Open-source column-oriented database that delivers real-time analytical queries on petabyte-scale data with millisecond latency.

View details
95
Repo Health
90
Technical
64
Dependency
Built with
C++ 68%
Python 14%
Updated 5 days ago
Python
47%
MIT

Docs

CMS · File Storage

16,868

Open-source collaborative knowledge platform with real-time editing, AI writing tools, and full self-hosting control — built by the French and German governments.

View details
88
Repo Health
81
Technical
68
Dependency
Built with
Python 47%
TypeScript 45%
Updated 5 days ago
Python
63%
BSD 3

Flagsmith

Ab Testing Experimentation · Developer Tools · Devops

6,577

Open-source feature flagging, remote config, and A/B/multivariate testing platform for web, mobile, and server-side apps — self-host or use the hosted SaaS.

View details
90
Repo Health
82
Technical
63
Dependency
Built with
Python 63%
TypeScript 31%
Updated 1 weeks ago
Python
100%
Other

OpenBB

Analytics · Databases · Invoicing Finance

73,553

The AI Workspace for Finance: Connect Data, Run AI Agents, Build Analytics

View details
77
Repo Health
80
Technical
67
Dependency
Built with
Python 100%
Updated 5 days ago
Go
67%
Apache 2.0

OSV.dev

Security

2,948

Google's open-source vulnerability database that maps CVEs to exact package versions across 50+ ecosystems with a public API and data dumps.

View details
87
Repo Health
82
Technical
66
Dependency
Built with
Go 67%
Python 22%
Updated 5 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers