ESLint

The pluggable JavaScript and TypeScript linter that finds and fixes code problems through a fully customizable, plugin-based rule engine.

Tool
npm
v10.13.0
27,575 stars
MIT License

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 →
95 /100 Excellent
Architecture 92
Code Quality 95
Innovation 93
Learning Curve 100

ESLint is the de facto standard for identifying and enforcing code quality patterns in JavaScript and TypeScript projects. It parses source code into an abstract syntax tree using Espree and walks that tree to apply rules, every one of which is itself a plugin, so teams can enable, disable, or write their own without touching ESLint’s core. With flat config (eslint.config.js), rule sets, parsers, and language options are expressed as plain JavaScript arrays and objects rather than the legacy cascading .eslintrc format, making configuration composition explicit and easy to reason about.

With 294 built-in rules covering ESM/CommonJS quirks, unused variables, unreachable code, and stylistic conventions, plus first-class support for custom parsers (TypeScript, Babel) and processors (Markdown, Vue), ESLint underpins the linting layer of nearly every major JavaScript toolchain. Downloaded over 159 million times a week from npm, it’s typically wired into CI, editor integrations, and pre-commit hooks to catch bugs and enforce consistency before code ships.

What You Get

  • 294 built-in core rules spanning correctness, best practices, and stylistic conventions, each independently toggleable and configurable.
  • A flat config system (eslint.config.js) that composes rule sets, parsers, and language options as plain JS, replacing the legacy cascading .eslintrc resolution.
  • A pluggable parser/processor pipeline, so TypeScript, JSX, Vue SFCs, and Markdown code blocks can all be linted through the same CLI and API.
  • An autofix engine (--fix) that safely rewrites source files for any rule that defines a fixer, plus a suggestions mechanism for editor-driven fixes.
  • A public Node.js API (Linter, ESLint classes) for embedding linting in custom tooling, editors, and CI systems beyond the CLI.

Common Use Cases

  • Enforcing a shared style guide across a team by extending a shared config (e.g. eslint-config-airbnb) and layering project-specific overrides.
  • Catching real bugs before merge — unused variables, unreachable code, unsafe comparisons — as a required CI check on every pull request.
  • Linting TypeScript codebases by pairing ESLint’s rule engine with @typescript-eslint’s parser and type-aware rules.
  • Powering editor-integrated real-time feedback in VS Code and other IDEs via the ESLint language server.

Under The Hood

Architecture

Execution starts at the CLI entry point (lib/cli.js), which hands off to the ESLint class (lib/eslint/eslint.js), a high-level orchestrator that resolves configuration via ConfigLoader/FlatConfigArray (lib/config/), optionally fans work out across worker threads (node:worker_threads), and delegates per-file linting to lib/eslint/worker.js. The actual rule-running core lives in the Linter class (lib/linter/linter.js): it builds a SourceCode object from the parsed AST, traverses it via SourceCodeTraverser, applies each active rule’s visitor, resolves inline eslint-disable directives (apply-disable-directives.js), and iterates SourceCodeFixer up to MAX_AUTOFIX_PASSES (10) when autofixing. Cross-cutting concerns are split into dedicated services (lib/services/: parser-service, processor-service, suppressions-service, warning-service), and the JS-specific parsing/traversal logic is isolated behind a Language interface (lib/languages/js) implementing the @eslint/core contract, decoupling the linting engine from JavaScript so it can, in principle, target other languages.

Tech Stack

ESLint is plain CommonJS Node.js (engines ^20.19.0 || ^22.13.0 || >=24), authored without a TypeScript build step but shipping hand-maintained .d.ts type definitions validated against multiple TypeScript versions (5.3, 5.x, and the native-preview 7.x compiler) in CI. Core dependencies include Espree for AST parsing, eslint-scope for variable scope analysis, esquery for AST querying, Ajv for JSON-schema validation of rule options, and the newer @eslint/config-array, @eslint/plugin-kit, and @eslint/core packages that back the flat-config and language-plugin system. The repo is an npm workspace (packages/*) hosting companion packages, tested with Mocha for the core suite and Cypress for browser bundle tests, bundled for the browser via Webpack, and formatted with Prettier.

Code Quality

The test suite is extensive — individual rule test files run into the thousands of lines (tests/lib/rules/no-unused-vars.js alone is over 5,000 lines) — and every rule is exercised through a dedicated RuleTester harness (lib/rule-tester/rule-tester.js) that standardizes valid/invalid test cases and autofix assertions. Coverage is collected with c8 (lcov, cobertura, and text-summary reporters) and ESLint dogfoods itself: eslint.config.js lints ESLint’s own source with directory-specific overrides for internal packages, layered with eslint-plugin-eslint-plugin for meta-linting rule modules and Prettier for formatting. CI (ci.yml, types-integration.yml, codeql-analysis.yml, ecosystem-tests.yml) runs the full test/type-check/lint matrix across supported Node and TypeScript versions and additionally re-lints real downstream projects on every change to catch regressions before release.

API Design ESLint offers both a zero-config CLI (npx eslint) and a granular public API (Linter, ESLint, SourceCode, RuleTester) for embedding linting into other tools, editors, and build systems. Flat config replaced the older cascading .eslintrc resolution algorithm — long a source of confusion — with plain JS arrays/objects composed via defineConfig and globalIgnores helpers. Rule authors work against a consistent meta/create contract with JSON-schema-validated options and a context.report API for messages, fixers, and suggestions, and the public API surface ships with full TypeScript types and an extensive per-rule documentation site, lowering the barrier for both end users and third-party plugin authors.

Used by 511 apps in this directory

Go
86%
Apache 2.0

Argo Workflows

Data Engineering · Devops

17,050

The most popular Kubernetes-native workflow engine for orchestrating containerized DAGs, ML pipelines, CI/CD, and parallel batch jobs at scale.

View details
96
Repo Health
90
Technical
68
Dependency
Built with
Go 86%
TypeScript 10%
Updated 1 weeks ago
Python
59%
Other

Arkon

AI Assistants · Knowledge Management · Mcp

1,496

Self-hosted enterprise AI knowledge hub that compiles internal docs into a scoped, reviewable wiki and serves it to Claude and other LLMs through an MCP server.

View details
45
Repo Health
74
Technical
70
Dependency
Built with
Python 59%
TypeScript 41%
Updated 4 months ago
Rust
86%
Other

Arroyo

Analytics · Data Engineering

5,060

A distributed stream processing engine written in Rust that lets you write SQL to run stateful, real-time computations over data streams with subsecond results.

View details
87
Repo Health
74
Technical
62
Dependency
Built with
Rust 86%
Updated 1 weeks ago
Go
82%
Apache 2.0

Authelia

Authentication · Security

29,393

OpenID Certified SSO and MFA portal for securing self-hosted web applications behind reverse proxies.

View details
91
Repo Health
81
Technical
72
Dependency
Built with
Go 82%
TypeScript 15%
Updated 6 days ago
Python
56%
Other

authentik

Authentication · Security

26,076

The self-hosted Identity Provider that replaces Okta, Auth0, and Entra ID with a unified SSO platform supporting SAML, OAuth2/OIDC, LDAP, RADIUS, and WebAuthn.

View details
92
Repo Health
81
Technical
66
Dependency
Built with
Python 56%
TypeScript 35%
Updated 1 weeks ago
Python
56%
Other

authentik

Authentication · Security

26,076

The self-hosted Identity Provider that replaces Okta, Auth0, and Entra ID with a unified SSO platform supporting SAML, OAuth2/OIDC, LDAP, RADIUS, and WebAuthn.

View details
92
Repo Health
81
Technical
66
Dependency
Built with
Python 56%
TypeScript 35%
Updated 1 weeks ago
Go
58%
Apache 2.0

Authgear

Authentication

2,123

Open-source, self-hostable authentication platform with passkeys, biometric login, SSO, MFA, and GraphQL admin API — a full Auth0/Clerk/Firebase alternative for SaaS and mobile apps.

View details
89
Repo Health
81
Technical
65
Dependency
Built with
Go 58%
HTML 21%
TypeScript 18%
Updated 1 weeks ago
Python
68%
Other

AutoGPT

AI Assistants · Automation · Productivity

187,722

Build, deploy, and run autonomous AI agents that automate complex multi-step workflows using a visual block-based graph editor.

View details
93
Repo Health
78
Technical
66
Dependency
Built with
Python 68%
TypeScript 30%
Updated 6 days ago
JavaScript
100%
Other

Automatisch

Automation · No Code Platforms

13,999

Self-hosted, no-code workflow automation that keeps your data on your own servers—a privacy-first alternative to Zapier with 90+ integrations.

View details
45
Repo Health
78
Technical
62
Dependency
Built with
JavaScript 100%
Updated 8 months 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