
The Technical Steering Committee (TSC) has finalized the features for ESLint v10.0.0. This post outlines our high-level plans for v10.0.0. For more details, and to keep up to date with everything that is planned for v10.0.0, visit our project board.
Development plan
Similar to v9.0.0, we will develop v10.0.0 in phases to ensure stability and gather community feedback:
- Alpha. The alpha release will include the most significant breaking changes that we expect will cause the most disruption for existing users. This early release will help us gather feedback and validate our approach.
- Beta. The beta release will include the remaining features and smaller breaking changes that will impact fewer users.
After the beta has been validated through community testing, we will publish one or more release candidates as we continue to fix bugs and address compatibility issues.
Significant changes in v10.0.0-alpha
The following changes are planned for the alpha release and represent significant breaking changes.
Dropping support for Node.js < v20.19.0
Following our Node.js version support policy for major releases, ESLint v10.0.0 will require Node.js v20.19.0 or later. The new supported versions will be:
- Node.js v20.19.0 and above
- Node.js v22.13.0 and above
- Node.js v24 and above
This change aligns with Node.js’s release schedule as of 2025, where:
- Node.js v18 reached end-of-life in April 2025
- Node.js v20 is in Maintenance LTS until April 2026
- Node.js v22 became Active LTS in October 2024
The updated Node.js requirements will enable ESLint to leverage newer JavaScript features, including native support for require(esm)
(enabled by default since Node.js v20.19.0), and improved performance characteristics of modern Node.js versions.
Removal of eslintrc functionality
In ESLint v9.0.0, we deprecated the old eslintrc config system while leaving the functionality available for backwards compatibility. In v10.0.0, we are removing the eslintrc config system completely. Specifically, this means:
- The
ESLINT_USE_FLAT_CONFIG
environment variable is no longer honored. - The CLI no longer supports eslintrc-specific arguments (
--no-eslintrc
,--env
,--resolve-plugins-relative-to
,--rulesdir
,--ignore-path
). .eslintrc.*
and.eslintignore
files will no longer be honored.- The
loadESLint()
function now always returns theESLint
class. - The
Linter
constructorconfigType
argument can only be"flat"
and will throw an error if"eslintrc"
is passed. - The following
Linter
eslintrc-specific methods are removed:defineParser()
defineRule()
defineRules()
getRules()
- The following changes to the
/use-at-your-own-risk
entrypoint:LegacyESLint
is removedFileEnumerator
is removedshouldUseFlatConfig()
function will always returntrue
Updating eslint:recommended
configuration
The eslint:recommended
configuration will be updated for v10.0.0 to include new rules that help catch common programming errors and improve code quality.
Removing support for jiti < 2.2.0
ESLint v10.0.0 will drop 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 (as documented in issue #19413).
Updates to Program
AST node range coverage
ESLint v10.0.0 will include a significant change to how the Program
AST node’s range is calculated, updating it to span the entire source text.
Currently, the Program
node’s range excludes leading and trailing comments/whitespace, which creates some unintuitive scenarios:
// Leading comment
const x = 1;
// Trailing comment
- Current:
Program
range covers onlyconst x = 1;
(excludes comments) - New:
Program
range covers the entire file from start to finish
Removing deprecated rule context members
ESLint v10.0.0 will remove several deprecated members from the rule context object that have been deprecated since ESLint v9.0.0.
The following deprecated context members will no longer be available:
context.getCwd()
- Usecontext.cwd
insteadcontext.getFilename()
- Usecontext.filename
insteadcontext.getPhysicalFilename()
- Usecontext.physicalFilename
insteadcontext.getSourceCode()
- Usecontext.sourceCode
insteadcontext.parserOptions
- Usecontext.languageOptions
orcontext.languageOptions.parserOptions
insteadcontext.parserPath
- No replacement
New configuration file lookup algorithm
The v10_config_lookup_from_file
flag, which changes configuration lookup to start from the file being linted rather than the current working directory, will become the default in v10.0.0.
This change ensures that ESLint configuration discovery works more intuitively, especially in monorepo setups or when linting files in different directories.
Removal of parserOptions.globalReturn
ESLint v10.0.0 will remove the parserOptions.globalReturn
option from Espree, the default ESLint parser, which may affect some user config files. Because global return
is supported primarily in CommonJS environments, you can instead set languageOptions.sourceType
to "commonjs"
.
Removal of type
property in errors of invalid RuleTester
cases
In ESLint v10.0.0, the deprecated type
property in errors of invalid test cases for rules will be no longer supported. Using the type
property in test cases will throw an error.
Significant changes in v10.0.0-beta
The following changes are planned for the beta release.
Enabling JSX reference tracking
ESLint v10.0.0 will enable JSX reference tracking, allowing ESLint to properly understand JSX element references in scope analysis.
Currently, ESLint doesn’t track JSX references, which creates issues with scope analysis. For example:
import { Card } from "./card.jsx";
export function createCard(name) {
return <Card name={name} />;
}
In this code, ESLint doesn’t recognize that <Card>
is a reference to the imported Card
component. This change brings ESLint’s JSX handling in line with developer expectations and improves the overall linting experience for modern JavaScript applications using JSX.
Removal of deprecated SourceCode
methods
ESLint v10.0.0 will remove several deprecated SourceCode methods that have been marked for removal since ESLint v5.10.0.
The following deprecated SourceCode
methods will be removed:
getTokenOrCommentBefore()
- Replace withgetTokenBefore()
using the{ includeComments: true }
optiongetTokenOrCommentAfter()
- Replace withgetTokenAfter()
using the{ includeComments: true }
optionisSpaceBetweenTokens()
- Replace withisSpaceBetween()
getJSDocComment()
- This functionality will be moved to AST utilities
These methods have been deprecated for multiple major versions and are primarily used by deprecated formatting rules and internal ESLint utilities. Custom rules using these methods will need to be updated to use their modern replacements. The @eslint/compat
package will provide compatibility patches to help with the transition.
When to expect ESLint v10.0.0
We expect the first alpha release of ESLint v10.0.0 to be available in November 2025, with the beta following shortly thereafter. The final v10.0.0 release is targeted for January 2026, though the exact timeline will depend on community feedback and testing results.
All releases will be announced on this blog, our X account, our Bluesky account and our Mastodon account. We encourage users to test the alpha and beta releases to help ensure a smooth transition to v10.0.0.
Stay tuned for more detailed information about specific changes as we approach each release milestone.