New Nov 14, 2025

ESLint v10.0.0-alpha.0 released

Libraries, Frameworks, etc. All from ESLint Blog View ESLint v10.0.0-alpha.0 released on eslint.org

Highlights

This version of ESLint is not ready for production use and is provided to gather feedback from the community before releasing the final version. Please let us know if you having any problems or feedback by creating issues on our GitHub repo.

Most of the highlights of this release are breaking changes, and are discussed further in the migration guide. There are summaries of the significant changes below. (Less significant changes are included in the migration guide.)

This prerelease version of ESLint has a separate documentation section.

Node.js < v20.19.0, v21, v23 no longer supported

As of this post, Node.js v22.x is the LTS release, and as such we are dropping support for all versions of Node.js prior to v20.19.0 as well as v21.x and v23.x.

ESLint v10.0.0 supports the following versions of Node.js:

New configuration file lookup algorithm

ESLint v10.0.0 locates eslint.config.* by starting from the directory of each linted file rather than the current working directory as it was the case with ESLint v9.x. The new behavior allows for using multiple configuration files in the same run and can be particularly useful in monorepo setups.

In ESLint v9.x, this config lookup behavior could be enabled with the v10_config_lookup_from_file feature flag. In ESLint v10.0.0, this behavior is now the default and the v10_config_lookup_from_file flag has been removed.

Removed eslintrc functionality

As announced in Flat config rollout plans, the eslintrc config system has been completely removed in ESLint v10.0.0. Specifically, this means:

  1. The ESLINT_USE_FLAT_CONFIG environment variable is no longer honored.
  2. The CLI no longer supports eslintrc-specific arguments (--no-eslintrc, --env, --resolve-plugins-relative-to, --rulesdir, --ignore-path).
  3. .eslintrc.* and .eslintignore files will no longer be honored.
  4. /* eslint-env */ comments are reported as errors.
  5. The loadESLint() function now always returns the ESLint class.
  6. The Linter constructor configType argument can only be "flat" and will throw an error if "eslintrc" is passed.
  7. The following Linter eslintrc-specific methods are removed:
    • defineParser()
    • defineRule()
    • defineRules()
    • getRules()
  8. The following changes to the /use-at-your-own-risk entrypoint:
    • LegacyESLint is removed
    • FileEnumerator is removed
    • shouldUseFlatConfig() function will always return true

Jiti < v2.2.0 no longer supported

ESLint v10.0.0 drops support for jiti versions prior to 2.2.0 when loading TypeScript configuration files due to known issues that can cause compatibility problems when configurations load certain plugins.

Updated eslint:recommended

The eslint:recommended configuration is updated to include new rules that we feel are important.

Removed deprecated rule context members

The following rule context members are no longer available:

Users of plugins that haven’t updated their code yet can use the @eslint/compat utility in the meantime.

Removed deprecated LintMessage#nodeType and TestCaseError#type properties

In ESLint v10.0.0, the deprecated nodeType property on LintMessage objects has been removed. Correspondingly, RuleTester no longer accepts the deprecated type property in errors of invalid test cases.

Program AST node range spans entire source text

Starting with ESLint v10.0.0, Program AST node’s range spans the entire source text. Previously, leading and trailing comments/whitespace were not included in the range.

The default parser (espree) has already been updated. Custom parsers are expected to be updated accordingly.

New requirements for ScopeManager implementations

Starting with ESLint v10.0.0, custom ScopeManager implementations must automatically resolve references to global variables declared in the code, including var and function declarations, and provide an instance method addGlobals(names: string[]) that creates variables with the given names in the global scope and resolves references to them.

The default ScopeManager implementation (eslint-scope) has already been updated. Custom ScopeManager implementations are expected to be updated accordingly.

Installing

Since this is a pre-release version, you will not automatically be upgraded by npm. You must specify the next tag when installing:

npm i eslint@next --save-dev

You can also specify the version directly:

npm i eslint@10.0.0-alpha.0 --save-dev

Migration Guide

As there are a lot of changes, we’ve created a migration guide describing the breaking changes in great detail along with the steps you should take to address them. We expect that most users should be able to upgrade without any build changes, but the migration guide should be a useful resource if you encounter problems.

Breaking Changes

Documentation

Chores

Scroll to top