Eslint Release Notes

Last updated: Dec 9, 2025

  • Nov 28, 2025
    • Parsed from source:
      Nov 28, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v10.0.0-alpha.1 released

    ESLint announces the v10.0.0-alpha.1 prerelease, a major upgrade with breaking changes and new features. It’s not production ready and asks for community feedback, with a migration guide to smooth upgrades.

    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.

    Removed deprecated SourceCode methods

    The following SourceCode methods are no longer available:

    • getTokenOrCommentBefore() - Use getTokenBefore() with the { includeComments: true } option instead
    • getTokenOrCommentAfter() - Use getTokenAfter() With the { includeComments: true } option instead
    • isSpaceBetweenTokens() - Use isSpaceBetween() instead
    • getJSDocComment() - No replacement

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

    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 [email protected] --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

    • fa31a60 feat!: add name to configs (#20015) (Kirk Waiblinger)
    • 3383e7e fix!: remove deprecated SourceCode methods (#20137) (Pixel998)
    • 501abd0 feat!: update dependency minimatch to v10 (#20246) (renovate[bot])
    • ca4d3b4 fix!: stricter rule tester assertions for valid test cases (#20125) (唯然)

    Features

    • 09e6654 feat: update error loc of require-yield and no-useless-constructor (#20267) (Tanuj Kanti)

    Documentation

    • 0f5a94a docs: [class-methods-use-this] explain purpose of rule (#20008) (Kirk Waiblinger)
    • df5566f docs: add Options section to all rule docs (#20296) (sethamus)
    • adf7a2b docs: no-unsafe-finally note for generator functions (#20330) (Tom Pereira)
    • ef7028c docs: Update README (GitHub Actions Bot)
    • fbae5d1 docs: consistently use “v10.0.0” in migration guide (#20328) (Pixel998)
    • 778aa2d docs: ignoring default file patterns (#20312) (Tanuj Kanti)

    Chores

    • 0b14059 chore: package.json update for @eslint/js release (Jenkins)
    • d6e7bf3 ci: bump actions/checkout from 5 to 6 (#20350) (dependabot[bot])
    • 139d456 chore: require mandatory headers in rule docs (#20347) (Milos Djermanovic)
    • 3b0289c chore: remove unused .eslintignore and test fixtures (#20316) (Pixel998)
    • a463e7b chore: update dependency js-yaml to v4 [security] (#20319) (renovate[bot])
    • ebfe905 chore: remove redundant rules from eslint-config-eslint (#20327) (Milos Djermanovic)
    • 88dfdb2 test: add regression tests for message placeholder interpolation (#20318) (fnx)
    • 6ed0f75 chore: skip type checking in eslint-config-eslint (#20323) (Francesco Trotta)
    Original source Report a problem
  • Nov 14, 2025
    • Parsed from source:
      Nov 14, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v10.0.0-alpha.0 released

    ESLint v10.0.0-alpha.0 lands as a major prerelease with breaking changes and new config lookup behavior. It moves to flat config only, drops eslintrc support, and starts guiding users toward migration. Node support shifts to newer LTS releases as the team gathers feedback.

    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:

    • Node.js v20.19.0 and above
    • Node.js v22.13.0 and above
    • Node.js v24 and above

    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:

    • context.getCwd() - Use context.cwd instead
    • context.getFilename() - Use context.filename instead
    • context.getPhysicalFilename() - Use context.physicalFilename instead
    • context.getSourceCode() - Use context.sourceCode instead
    • context.parserOptions - Use context.languageOptions or context.languageOptions.parserOptions instead
    • context.parserPath - No replacement

    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 [email protected] --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

    • 96512a6 fix!: Remove deprecated rule context methods (#20086) (Nicholas C. Zakas)
    • c69fdac feat!: remove eslintrc support (#20037) (Francesco Trotta)
    • 208b5cc feat!: Use ScopeManager#addGlobals() (#20132) (Milos Djermanovic)
    • a2ee188 fix!: add uniqueItems: true in no-invalid-regexp option (#20155) (Tanuj Kanti)
    • a89059d feat!: Program range span entire source text (#20133) (Pixel998)
    • 39a6424 fix!: assert ‘text’ is a string across all RuleFixer methods (#20082) (Pixel998)
    • f28fbf8 fix!: Deprecate "always" and "as-needed" options of the radix rule (#20223) (Milos Djermanovic)
    • aa3fb2b fix!: tighten func-names schema (#20119) (Pixel998)
    • f6c0ed0 feat!: report eslint-env comments as errors (#20128) (Francesco Trotta)
    • 4bf739f fix!: remove deprecated LintMessage#nodeType and TestCaseError#type (#20096) (Pixel998)
    • 523c076 feat!: drop support for jiti < 2.2.0 (#20016) (michael faith)
    • 454a292 feat!: update eslint:recommended configuration (#20210) (Pixel998)
    • 4f880ee feat!: remove v10_* and inactive unstable_* flags (#20225) (sethamus)
    • f18115c feat!: no-shadow-restricted-names report globalThis by default (#20027) (sethamus)
    • c6358c3 feat!: Require Node.js ^20.19.0 || ^22.13.0 || >=24 (#20160) (Milos Djermanovic)

    Documentation

    • 4b5dbcd docs: reorder v10 migration guide (#20315) (Milos Djermanovic)
    • 5d84a73 docs: Update README (GitHub Actions Bot)
    • 37c8863 docs: fix incorrect anchor link in v10 migration guide (#20299) (Pixel998)
    • 077ff02 docs: add migrate-to-10.0.0 doc (#20143) (唯然)
    • 3822e1b docs: Update README (GitHub Actions Bot)

    Chores

    • 1e2cad5 chore: package.json update for @eslint/js release (Jenkins)
    • 9da2679 chore: update @eslint/* dependencies (#20321) (Milos Djermanovic)
    • 0439794 refactor: use types from @eslint/core (#20235) (jaymarvelz)
    • cb51ec2 test: cleanup SourceCode#traverse tests (#20289) (Milos Djermanovic)
    • 897a347 chore: remove restriction for type in rule tests (#20305) (Pixel998)
    • d972098 chore: ignore prettier updates in renovate to keep in sync with trunk (#20304) (Pixel998)
    • a086359 chore: remove redundant fast-glob dev-dependency (#20301) (루밀LuMir)
    • 564b302 chore: install prettier as a dev dependency (#20302) (michael faith)
    • 8257b57 refactor: correct regex for eslint-plugin/report-message-format (#20300) (루밀LuMir)
    • e251671 refactor: extract assertions in RuleTester (#20135) (唯然)
    • 2e7f25e chore: add legacy-peer-deps to .npmrc (#20281) (Milos Djermanovic)
    • 39c638a chore: update eslint-config-eslint dependencies for v10 prereleases (#20278) (Milos Djermanovic)
    • 8533b3f chore: update dependency @eslint/json to ^0.14.0 (#20288) (renovate[bot])
    • 796ddf6 chore: update dependency @eslint/js to ^9.39.1 (#20285) (renovate[bot])
    Original source Report a problem
  • Nov 3, 2025
    • Parsed from source:
      Nov 3, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v9.39.1 released

    ESLint rolls out patch v9.39.1 to fix a visitor-argument bug and restore the single-arg behavior for JavaScript/TypeScript rules. The update safeguards third party rules like @typescript-eslint/unified-signatures and keeps compatibility intact with the previous release.

    We just pushed ESLint v9.39.1, which is a patch release upgrade of ESLint. This release fixes several bugs found in the previous release.

    Highlights

    This patch release fixes an issue introduced in ESLint v9.39.0 where visitors of all rules are invoked with a second argument. This change broke third-party rules that expect visitor functions to receive only a single argument, notably @typescript-eslint/unified-signatures. To ensure compatibility, ESLint v9.39.1 restores the previous behavior of invoking visitors for JavaScript/TypeScript with only the target node as the argument.

    Bug Fixes

    • 650753e fix: Only pass node to JS lang visitor methods (#20283) (Nicholas C. Zakas)

    Documentation

    • 51b51f4 docs: add a section on when to use extends vs cascading (#20268) (Tanuj Kanti)
    • b44d426 docs: Update README (GitHub Actions Bot)

    Chores

    • 92db329 chore: update @eslint/js version to 9.39.1 (#20284) (Francesco Trotta)
    • c7ebefc chore: package.json update for @eslint/js release (Jenkins)
    • 61778f6 chore: update eslint-config-eslint dependency @eslint/js to ^9.39.0 (#20275) (renovate[bot])
    • d9ca2fc ci: Add rangeStrategy to eslint group in renovate config (#20266) (唯然)
    • 009e507 test: fix version tests for ESLint v10 (#20274) (Milos Djermanovic)
    Original source Report a problem
  • Oct 31, 2025
    • Parsed from source:
      Oct 31, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v9.39.0 released

    ESLint 9.39.0 is a smart minor upgrade with focused error highlighting and a unified timing report. It trims visual noise by refining where violations show for several rules and introduces updated locations for for-direction and no-dupe-args, plus a consolidated perf report. Also numerous fixes and docs.

    We just pushed ESLint v9.39.0, which is a minor release upgrade of ESLint. This release adds some new features and fixes several bugs found in the previous release.

    Highlights

    More precise problem locations

    ESLint v9.39.0 introduces improvements that narrow the highlighted locations for certain rule violations. By reducing unnecessary highlighting, these changes cut down on visual noise and make issues in code easier to spot and fix.

    Here’s what’s new:

    • complexity: In v9.38.0, this rule was updated to highlight only a function’s header instead of the entire function. With v9.39.0, the same refinement now applies to class static blocks: only the header is highlighted, not the whole block.
    • for-direction: Now highlights only the header portion of a for loop, instead of the full statement.
    • no-dupe-args: Now highlights just the argument list in a function definition, not the whole function.
    • no-dupe-class-members: Now highlights only the identifiers of duplicated members, rather than their full definitions.

    Unified rule performance report

    When the TIMING environment variable is set and ESLint runs in multithread mode with the --concurrency option, the output now includes a single, unified performance report. This consolidated report aggregates timing data from all threads, replacing the previous behavior of printing multiple separate reports.

    Example:

    $ TIMING=1 npx eslint --concurrency=2
    Rule                                | Time (ms) | Relative
    :-----------------------------------|----------:|--------:
    jsdoc/valid-types                   |   484.199 |     5.1%
    n/no-extraneous-require             |   431.187 |     4.5%
    jsdoc/check-access                  |   375.205 |     3.9%
    jsdoc/check-values                  |   323.224 |     3.4%
    jsdoc/check-types                   |   308.546 |     3.2%
    jsdoc/check-tag-names               |   305.308 |     3.2%
    n/no-unsupported-features/es-syntax |   275.097 |     2.9%
    expect-type/expect                  |   257.434 |     2.7%
    jsdoc/check-alignment               |   255.678 |     2.7%
    jsdoc/require-property-type         |   250.951 |     2.6%
    

    Features

    • cc57d87 feat: update error loc to key in no-dupe-class-members (#20259) (Tanuj Kanti)
    • 126552f feat: update error location in for-direction and no-dupe-args (#20258) (Tanuj Kanti)
    • 167d097 feat: update complexity rule to highlight only static block header (#20245) (jaymarvelz)

    Bug Fixes

    • 15f5c7c fix: forward traversal step.args to visitors (#20253) (jaymarvelz)
    • 5a1a534 fix: allow JSDoc comments in object-shorthand rule (#20167) (Nitin Kumar)
    • e86b813 fix: Use more types from @eslint/core (#20257) (Nicholas C. Zakas)
    • 927272d fix: correct Scope typings (#20198) (jaymarvelz)
    • 37f76d9 fix: use AST.Program type for Program node (#20244) (Francesco Trotta)
    • ae07f0b fix: unify timing report for concurrent linting (#20188) (jaymarvelz)
    • b165d47 fix: correct Rule typings (#20199) (jaymarvelz)
    • fb97cda fix: improve error message for missing fix function in suggestions (#20218) (jaymarvelz)

    Documentation

    • d3e81e3 docs: Always recommend to include a files property (#20158) (Percy Ma)
    • 0f0385f docs: use consistent naming recommendation (#20250) (Alex M. Spieslechner)
    • a3b1456 docs: Update README (GitHub Actions Bot)
    • cf5f2dd docs: fix correct tag of no-useless-constructor (#20255) (Tanuj Kanti)
    • 10b995c docs: add TS options and examples for nofunc in no-use-before-define (#20249) (Tanuj Kanti)
    • 2584187 docs: remove repetitive word in comment (#20242) (reddaisyy)
    • 637216b docs: update CLI flags migration instructions (#20238) (jaymarvelz)
    • e7cda3b docs: Update README (GitHub Actions Bot)
    • 7b9446f docs: handle empty flags sections on the feature flags page (#20222) (sethamus)

    Chores

    • dfe3c1b chore: update @eslint/js version to 9.39.0 (#20270) (Francesco Trotta)
    • 2375a6d chore: package.json update for @eslint/js release (Jenkins)
    • a1f4e52 chore: update @eslint dependencies (#20265) (Francesco Trotta)
    • c7d3229 chore: update dependency @eslint/core to ^0.17.0 (#20256) (renovate[bot])
    • 27549bc chore: update fuzz testing to not error if code sample minimizer fails (#20252) (Milos Djermanovic)
    • a1370ee ci: bump actions/setup-node from 5 to 6 (#20230) (dependabot[bot])
    • 9e7fad4 chore: add script to auto-generate eslint:recommended configuration (#20208) (唯然)
    Original source Report a problem
  • Oct 17, 2025
    • Parsed from source:
      Oct 17, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v9.38.0 released

    ESLint 9.38.0 is a minor release with plugin config resolution improvements and a refined complexity rule highlight. It also includes type support fixes, docs updates, and dependency bumps that tighten stability.

    Highlights

    We just pushed ESLint v9.38.0, which is a minor release upgrade of ESLint. This release adds some new features and fixes several bugs found in the previous release.

    This release introduces improvements in determining which configuration to use from plugins that support both old (eslintrc) and new configuration formats. When extending a plugin configuration, for example extends: ["my-plugin/recommended"], the defineConfig() config helper was already looking for configs["flat/recommended"] configuration if configs["recommended"] configuration exists in the plugin but is detected as the eslintrc configuration format.

    As of this release:

    • The defineConfig() config helper will look for configs["flat/recommended"] configuration even if configs["recommended"] configuration does not exist in the plugin.
    • Configurations that have array values as the plugins property will be detected as the eslintrc configuration format.

    Other notable changes

    • The complexity rule now highlights only the function header instead of the entire function.

    Features

    • feat: update complexity rule to only highlight function header (#20048) (Atul Nair)
    • feat: correct no-loss-of-precision false positives with e notation (#20187) (Francesco Trotta)

    Bug Fixes

    • fix: improve type support for isolated dependencies in pnpm (#20201) (Francesco Trotta)
    • fix: correct SourceCode typings (#20114) (Pixel998)

    Documentation

    • docs: improve web accessibility by hiding non-semantic character (#20205) (루밀LuMir)
    • docs: correct formatting in no-irregular-whitespace rule documentation (#20203) (루밀LuMir)
    • docs: Update README (GitHub Actions Bot)
    • docs: move custom-formatters type descriptions to nodejs-api (#20190) (Percy Ma)

    Chores

    • chore: upgrade @eslint/[email protected] (#20221) (Milos Djermanovic)
    • chore: package.json update for @eslint/js release (Jenkins)
    • refactor: Use types from @eslint/core (#20168) (Nicholas C. Zakas)
    • ci: add Node.js 25 to ci.yml (#20220) (루밀LuMir)
    • ci: bump github/codeql-action from 3 to 4 (#20211) (dependabot[bot])
    • test: remove use of nodejsScope option of eslint-scope from tests (#20206) (Milos Djermanovic)
    • chore: fix typo in legacy-eslint.js (#20202) (Sweta Tanwar)
    • chore: fix typos (#20200) (ntnyq)
    • chore: use team member’s username when name is not available in data (#20194) (Milos Djermanovic)
    • chore: mark deprecated rules as available until v11.0.0 (#20184) (Pixel998)
    Original source Report a problem
  • Oct 3, 2025
    • Parsed from source:
      Oct 3, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    What's coming in ESLint v10.0.0

    ESLint outlines a forthcoming v10.0.0 with major breaking changes, including Node.js minimum v20.19, removal of the eslintrc config, updated eslint:recommended, and new configuration lookup. Alpha and beta phases ramp up feedback ahead of a 2026 release.

    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 the ESLint class.
    • The Linter constructor configType 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 removed
      • FileEnumerator is removed
      • shouldUseFlatConfig() function will always return true

    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 only const 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() - Use context.cwd instead
    • context.getFilename() - Use context.filename instead
    • context.getPhysicalFilename() - Use context.physicalFilename instead
    • context.getSourceCode() - Use context.sourceCode instead
    • context.parserOptions - Use context.languageOptions or context.languageOptions.parserOptions instead
    • context.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 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 ;
    }

    In this code, ESLint doesn’t recognize that 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 with getTokenBefore() using the { includeComments: true } option
    • getTokenOrCommentAfter() - Replace with getTokenAfter() using the { includeComments: true } option
    • isSpaceBetweenTokens() - Replace with isSpaceBetween()
    • 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.

    Update(2025-11-07): We previously planned on removing parserOptions.globalReturn but decided to hold off based on feedback from the community.

    Original source Report a problem
  • Oct 3, 2025
    • Parsed from source:
      Oct 3, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v9.37.0 released

    ESLint 9.37.0 lands as a feature and bug fix release with TypeScript syntax support in core rules, new allowTypeImports for no-restricted-imports, smarter --concurrency=auto performance, and preserve-caught-error fixes plus assorted docs and chores.

    Highlights

    allowTypeImports option in no-restricted-imports
    The no-restricted-imports rule now supports the allowTypeImports option. When set to true, this will allow type-only imports in TypeScript files while still disallowing regular imports.

    For example, the following rule setting permits only type-only imports from the node:assert module:

    /*
    eslint no-restricted-imports: ["error", {
    name: "node:assert",
    allowTypeImports: true,
    }]
    */
    import assert from "node:assert";
    // [31m[1m[4m[39m[22m[24m[39m Incorrect
    import type { AssertionError } from "node:assert";
    // [32m[1m[4m[39m[22m[24m[39m Correct

    This aligns the no-restricted-imports rule with the corresponding typescript-eslint rule, and continues ESLints ongoing efforts to extend TypeScript Syntax support in core rules.

    Improved heuristic for --concurrency=auto
    After the introduction of multithreaded linting in ESLint v9.34.0, some users running ESLint with the --cache flag reported slower performance when using --concurrency=auto compared to leaving the --concurrency option unset.

    The slowdown occurred because ESLint would sometimes enable multithread mode even when most results were already cached, adding unnecessary overhead.

    This behavior has been corrected in ESLint v9.37.0, where the heuristic for --concurrency=auto has been improved to better account for cases where increased parallelism provides no benefit.

    preserve-caught-error recognizes computed cause property
    The preserve-caught-error rule now correctly handles cases where the cause option in a thrown error is expressed using computed property syntax. For example:

    try {
    // ...
    } catch (error) {
    throw new Error("Unexpected error!", { ["cause"]: error });
    }

    Features

    • feat: preserve-caught-error should recognize all static [4m"cause"[24m keys (#20163) (Pixel998)
    • feat: support TS syntax in no-restricted-imports (#19562) (Nitin Kumar)

    Bug Fixes

    • fix: correct no-loss-of-precision false positives for leading zeros (#20164) (Francesco Trotta)
    • fix: add missing AST token types (#20172) (Pixel998)
    • fix: correct ESLint typings (#20122) (Pixel998)

    Documentation

    • docs: fix typos across the docs (#20182) (루밀LuMir)
    • docs: improve ToC accessibility by hiding non-semantic character (#20181) (Percy Ma)
    • docs: Update README (GitHub Actions Bot)
    • docs: show availableUntil in deprecated rule banner (#20170) (Pixel998)
    • docs: update README files to add badge and instructions (#20115) (루밀LuMir)
    • docs: update references from master to main (#20153) (루밀LuMir)

    Chores

    • chore: update @-eslint/js dependency to version 9.37.0 (#20183) (Francesco Trotta)
    • chore: package.json update for @eslint/js release (Jenkins)
    • chore: fix typos in comments (#20175) (overlookmotel)
    • chore: unpin jiti (#20173) (renovate[bot])
    • refactor: mark ESLint.findConfigFile() as async, add missing docs (#20157) (Pixel998)
    • chore: update eslint (#20149) (renovate[bot])
    • test: remove tmp dir created for circular fixes in multithread mode test (#20146) (Milos Djermanovic)
    • ci: pin jiti to version 2.5.1 (#20151) (Pixel998)
    • perf: improve worker count calculation for "auto" concurrency (#20067) (Francesco Trotta)
    • chore: Mark deprecated formatting rules as available until v11.0.0 (#20144) (Milos Djermanovic)
    Original source Report a problem
  • Sep 19, 2025
    • Parsed from source:
      Sep 19, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v9.36.0 released

    ESLint releases version 9.36.0 a small upgrade with fixes to preserve-caught-error and firmer config object freezing. It also tightens typings updates and docs while upgrading the @eslint/js package.

    We just pushed ESLint v9.36.0, which is a minor release upgrade of ESLint. This release adds some new features and fixes several bugs found in the previous release.

    Highlights

    • This release fixes several edge cases in the recently added preserve-caught-error rule. In some cases, this can result in reporting more linting errors.
    • All config objects exported from the @eslint/js package are now deeply frozen.

    Features

    • feat: correct preserve-caught-error edge cases (#20109) (Francesco Trotta)

    Bug Fixes

    • fix: add missing rule option types (#20127) (ntnyq)
    • fix: update eslint-all.js to use Object.freeze for rules object (#20116) (루밀LuMir)
    • fix: add missing scope types to Scope.type (#20110) (Pixel998)
    • fix: correct rule option typings in rules.d.ts (#20084) (Pixel998)

    Documentation

    • docs: update examples to use defineConfig (#20131) (sethamus)
    • docs: fix typos (#20118) (Pixel998)
    • docs: Update README (GitHub Actions Bot)
    • docs: Update README (GitHub Actions Bot)
    • docs: Update README (GitHub Actions Bot)

    Chores

    • chore: upgrade @eslint/[email protected] (#20139) (Milos Djermanovic)
    • chore: package.json update for @eslint/js release (Jenkins)
    • ci: simplify renovate configuration (#19907) (唯然)
    • ci: bump actions/labeler from 5 to 6 (#20090) (dependabot[bot])
    • refactor: use defaultOptions in rules (#20121) (Pixel998)
    • chore: update example to use defineConfig (#20111) (루밀LuMir)
    • test: add missing loc information to error objects in rule tests (#20112) (루밀LuMir)
    • chore: disallow use of deprecated type property in core rule tests (#20094) (Milos Djermanovic)
    • test: remove deprecated type property from core rule tests (#20093) (Pixel998)
    • ci: bump actions/setup-node from 4 to 5 (#20089) (dependabot[bot])
    • refactor: use meta.defaultOptions in preserve-caught-error (#20080) (Pixel998)
    • chore: package.json update for eslint-config-eslint release (Jenkins)
    • chore: update eslint peer dependency in eslint-config-eslint (#20079) (Milos Djermanovic)
    Original source Report a problem
  • Sep 5, 2025
    • Parsed from source:
      Sep 5, 2025
    • Detected by Releasebot:
      Dec 9, 2025
    Eslint logo

    Eslint

    ESLint v9.35.0 released

    ESLint ships a minor v9.35.0 release with a new core rule preserve-caught-error and enhancements across no-empty-function, no-empty-static-block, and no-empty. It allows empty switch comments, plus bug fixes and documentation tweaks for smoother development.

    Highlights

    • New Rule preserve-caught-error
      One new rule has been added to the core: preserve-caught-error.
      This rule enforces the use of the cause property when throwing a new error inside a catch block.
      An example of incorrect code for this rule:
      /* eslint preserve-caught-error: "error" /
      try {
      // ...
      } catch (error) {
      throw new Error("Something went wrong");
      }
      An example of correct code for this rule:
      /
      eslint preserve-caught-error: "error" */
      try {
      // ...
      } catch (error) {
      throw new Error("Something went wrong", { cause: error });
      }

    • Other notable changes
      • The no-empty-function and no-empty-static-block rules now provide suggestions to add an /* empty */ comment when the function or class static block is intentionally empty.
      • The no-empty rule now allows empty switch statements with a comment inside the body.

    Features

    • 42761fa feat: implement suggestions for no-empty-function (#20057) (jaymarvelz)
    • 102f444 feat: implement suggestions for no-empty-static-block (#20056) (jaymarvelz)
    • e51ffff feat: add preserve-caught-error rule (#19913) (Amnish Singh Arora)

    Bug Fixes

    • 10e7ae2 fix: update uncloneable options error message (#20059) (soda-sorcery)
    • bfa4601 fix: ignore empty switch statements with comments in no-empty rule (#20045) (jaymarvelz)
    • dfd11de fix: add before and after to test case types (#20049) (Francesco Trotta)
    • dabbe95 fix: correct types for no-restricted-imports rule (#20034) (Milos Djermanovic)
    • ea789c7 fix: no-loss-of-precision false positive with uppercase exponent (#20032) (sethamus)

    Documentation

    • d265515 docs: improve phrasing - “if” → “even if” from getting-started section (#20074) (jjangga0214)
    • a355a0e docs: invert comparison logic for example in no-var doc page (#20064) (OTonGitHub)
    • 5082fc2 docs: Update README (GitHub Actions Bot)
    • 99cfd7e docs: add missing “the” in rule deprecation docs (#20050) (Josh Goldberg ✨)
    • 6ad8973 docs: update --no-ignore and --ignore-pattern documentation (#20036) (Francesco Trotta)
    • 8033b19 docs: add documentation for --no-config-lookup (#20033) (Francesco Trotta)

    Chores

    • da87f2f chore: upgrade @eslint/[email protected] (#20077) (Milos Djermanovic)
    • af2a087 chore: package.json update for @eslint/js release (Jenkins)
    • 7055764 test: remove tests/lib/eslint/eslint.config.js (#20065) (Milos Djermanovic)
    • 84ffb96 chore: update @eslint-community/eslint-utils (#20069) (Francesco Trotta)
    • d5ef939 refactor: remove deprecated context.parserOptions usage across rules (#20060) (sethamus)
    • 1b3881d chore: remove redundant word (#20058) (pxwanglu)
    Original source Report a problem

This is the end. You've seen all the release notes in this feed!

Related vendors