mrkeyoor.com_
Tue 01 Sept 17:07 UTC
Dev Toolsevaluationupdated 01 Sept 2026

eslint review

ESLint reads JavaScript, applies a configurable set of rules to its syntax tree, and reports code patterns your team wants to catch. It can also fix some findings, while plugins and alternate parsers extend it to frameworks and languages such as React and TypeScript.

trackingstars / 7d
Verdict

Our ESLint run installed 1,067 packages in 133 seconds and passed all 38,615 tests in 85 seconds, with 0 audit findings. ESLint remains the safest default for teams that value rule choice, plugins, and custom policy over a single preset. Pin updates, review autofixes, and budget parser-plugin maintenance; choose Biome or Oxlint when speed and a smaller configuration surface matter more than ecosystem breadth.

We ran it

Lab card: what happened when we ran eslintScreenshot of eslint (eslint.org)
Install✓ · 133s1067 packages · 386 MB
Buildn/ano build script
Tests✓ · 85s38615 passed · 0 failed of 38615 (mocha)
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo2298 files~539,564 lines of source · 23.6 MB · 10 CI workflows · tests dir

Answers from our run

Does eslint build from source?

Dependencies installed in 133 seconds (1067 packages), and the project has no separate build step. We cloned commit c6cc6c5 into a clean Debian container with 3 CPUs and no project-specific setup.

Do eslint's tests pass?

Yes: 38615 of 38615 passed when we ran the project's own test command (mocha). Some failures need services or credentials a bare container does not have.

Does eslint have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use eslint?

Projects pinned below Node.js 20.19.0: ESLint 10 requires ^20.19.0, ^22.13.0, or >=24.

What are the alternatives to eslint?

Biome, Oxlint, quick-lint-js. Our ESLint run installed 1,067 packages in 133 seconds and passed all 38,615 tests in 85 seconds, with 0 audit findings.

Setup5/5133-second install and all 38,615 tests passed
Docs5/5Clear config, runtime, release, plugin, and support policy
Community5/527,494 stars, August push, and fast issue triage
Maturity5/5v10.9.1, scheduled releases, and a fully passing suite

Who it’s for

JavaScript teams that want enforceable correctness rules in editors, local scripts, and CI.
Organizations that need custom rules, shareable configurations, or framework plugins.
Maintainers who want each file group to have an explicit parser, globals, and rule policy.
TypeScript or React teams willing to install and manage the matching parser and plugins.

Who it’s NOT for

Projects pinned below Node.js 20.19.0: ESLint 10 requires ^20.19.0, ^22.13.0, or >=24.
Teams expecting core ESLint to understand TypeScript types or React behavior: the README says those semantics require other parsers or plugins.
Codebases built around experimental ECMAScript proposals that need rule-level support immediately: core officially targets the latest final standard and refers other syntax to external parsers and plugins.
Teams seeking one tool whose main job is formatting: ESLint describes itself as a linter and points to Prettier for formatting.
Workflows that apply every autofix without review: accepted issue 21279 shows an autofix changing behavior when Object is shadowed, and issue 21155 reports a TypeScript fix that produces invalid code.

Setup reality

Our sandbox installed 1,067 npm packages in 133 seconds and used 386 MB. This repository has no build script or target, so the build step was skipped. Tests completed in 85 seconds: all 38,615 passed and 0 failed. Npm audit found 0 known vulnerabilities.

Using ESLint needs no credential or external service. It requires a supported Node.js release and an eslint.config.js policy. React, TypeScript, Babel syntax, frameworks, and house rules add parsers, plugins, and shareable configurations that must stay version-compatible.

The README recommends auto-install-peers=true and node-linker=hoisted for pnpm. It also warns that a minor ESLint update may report more errors, so teams seeking stable CI findings should pin with a tilde and review rule changes before upgrading.

ESLint 10.9.1 turns JavaScript policy into executable rules

ESLint 10.9.1 parses JavaScript with Espree, walks the resulting syntax tree, and runs configured rules against it. Each rule can be off, a warning, or an error that changes the process exit code. The value is control: a team can start with the recommended set, narrow rules to certain file patterns, consume plugin rules, or write a rule for a project-specific invariant that a compiler does not enforce.

The measured checkout contained 2,298 files, roughly 539,564 source lines, and 23.6 MB before dependencies. That scale includes the core engine, built-in rules, test fixtures, documentation support, and monorepo workspaces. ESLint is mature infrastructure rather than a tiny command wrapper. The codebase is large, but most users interact with one configuration file and a CLI command in package scripts.

Flat config makes file scope and rule severity explicit

The current README uses eslint.config.js with an exported array of configuration objects. A block can target **/*.js, **/*.cjs, and **/*.mjs, then set its language options and rules. This arrangement is readable when a repository has browser code, Node scripts, tests, and generated files with different globals. It also makes order significant, so teams should keep blocks focused and test which files each block matches.

Our npm installation added 1,067 packages and occupied 386 MB. That is a bigger dependency tree than the single npx eslint command suggests, though npm audit reported no known vulnerabilities in the measured environment. Plugins and framework presets increase the tree further. A central shared config can reduce drift across repositories, but its peer ranges and ESLint compatibility should be tested before a fleet-wide update.

What happened when we ran it

Our sandbox installed ESLint in 133 seconds inside an unprivileged Node 22 Debian container with 3 CPUs and 8 GB of RAM. The test command finished in 85 seconds. Mocha reported 38,615 passed and 0 failed out of 38,615. Npm audit returned 0 critical, 0 high, 0 moderate, and 0 low known vulnerabilities for the installed tree.

There was no build script or target, so our harness skipped that step rather than treating it as a pass or failure. The repository had 10 CI workflow files, a tests directory, and monorepo workspaces, but no Dockerfile. Those observations describe commit c6cc6c5. ESLint is a Node package that needs no resident service, database, or container for ordinary use.

The 38,615-test pass supports adoption, not every rule decision

Passing all 38,615 measured tests is strong evidence that the checked-out core behaved as its maintainers expected on our Node 22 image. It cannot prove that a chosen third-party parser, plugin set, and shareable config work together in another repository. Add a small fixture project to dependency update jobs, lint representative JavaScript and TypeScript files, and make a changed finding count visible before merging version bumps.

The 85-second suite and 133-second install are reasonable for core maintenance, while ordinary project lint time depends on file count, enabled rules, cache state, and plugins. We did not measure lint throughput on an application, so this review makes no speed comparison with Biome or Oxlint. Teams with a very large monorepo should benchmark their own files and rule set rather than borrow headline performance claims from another workload.

TypeScript 5.3, React, and stage 3 syntax need extra pieces

ESLint's own TypeScript definitions require TypeScript 5.3 or later, but type-aware linting still comes from the TypeScript ESLint parser and plugin stack. JSX parsing can be enabled in core; React semantics require a React plugin. Experimental ECMAScript syntax may need Babel's parser and plugin. These boundaries are documented, and they explain why an ESLint upgrade cannot be evaluated separately from parser and plugin peer ranges.

The measured 1,067-package install covered ESLint's repository, not every framework combination. A mixed project should pin a known set, run rule tests, and upgrade one layer at a time. Pnpm users have another decision: the README recommends automatic peer installation and a hoisted node linker for compatibility. Teams that deliberately enforce an isolated pnpm layout should test whether their plugin stack resolves cleanly before adopting those settings globally.

Autofix and cache output still need human review

Accepted issue 21279 reports that the prefer-object-has-own autofix in v10.9.0 can change behavior when a local variable shadows the global Object. Issue 21155 reports prefer-arrow-callback offering a fix that becomes invalid TypeScript when a function declares a typed this parameter. Both reports have reproductions. They support a conservative policy: inspect fix diffs and reserve automatic CI fixes for rules the team has tested on its syntax.

Those open reports do not conflict with our 38,615 passing core tests; they describe cases that were missing or not handled as expected. Issue 21188 adds a different risk for long runs: a file edited after linting but before cache reconciliation may pair current content metadata with old results. Repositories with editors or generators writing during lint should avoid overlapping writes or clear suspicious cache entries until that report is resolved.

August 2026 releases and 104 open issues show active triage

GitHub recorded ESLint's last push on August 31, 2026, and 27,494 stars when fetched. Search found 104 open issues, while repository metadata listed 138 issues and pull requests combined. Releases v10.5.0 through v10.9.1 arrived from June 12 through August 24, matching the README's stated two-week release schedule closely enough to show current maintenance rather than an old package living on reputation.

ESLint's 10 CI workflows and complete 85-second test pass reinforce that maintenance signal. The tradeoff is policy ownership: minor releases may produce more findings, built-in rules cannot cover every framework semantic, and plugin compatibility belongs to the adopting team. For a JavaScript codebase that wants tailored static checks, that cost is justified. For a team wanting a fast preset plus formatting, Biome is the cleaner starting point.

Alternatives

ProjectWhat it isPick it when
Biome gh↗A Rust-based linter and formatter with one configuration and broad JavaScript and TypeScript support.pick this instead when one fast formatter-linter package matters more than ESLint's plugin and custom-rule ecosystem.
Oxlint gh↗A fast JavaScript and TypeScript linter from the Oxc toolchain.pick this instead when lint throughput and a curated rule set matter more than full ESLint plugin compatibility.
quick-lint-jsA low-configuration JavaScript checker designed for immediate editor feedback.pick this instead when developers need quick syntax and bug feedback without maintaining a large rule policy.

What people are saying

  1. [velocity-scout] eslint/eslint

Sources

  1. ESLint README
  2. ESLint GitHub repository metadata
  3. ESLint v10.9.1 release notes
  4. Autofix shadowed Object issue 21279
  5. TypeScript autofix issue 21155
  6. Cache reconciliation issue 21188
  7. Bulk suppression issue 21226

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · fastfetch · composer · the whole board →