
Highlights
Support for Import Attributes
We have updated ESLint to fully support the ECMAScript 2025 Import Attributes syntax. This syntax allows module import statements and dynamic imports to pass on more information alongside the module specifier. Host environments can use this information to modify import behavior and support additional types of modules. For example, when type: "json" is specified, modules are treated as JSON Modules.
import json from "./foo.json" with { type: "json" };
import("foo.json", { with: { type: "json" } });
The updates in ESLint include parsing and ensuring that naming convention rules do not apply to import attribute keys as they are defined by the ECMAScript Specification or by the host environment and thus users have no control over their naming.
Please note that deprecated formatting rules will not be updated to support this syntax. If you are still using core formatting rules, we recommend switching to a source code formatter. Alternatively, you can replace core formatting rules with corresponding rules from @stylistic/eslint-plugin-js.
Support for RegExp Modifiers
We have updated ESLint to fully support the ECMAScript 2025 Regular Expression Pattern Modifiers. This feature allows you to change the currently active RegExp flags within a subexpression.
const regex1 = /^(?i:[a-z])[a-z]$/;
const regex2 = /^[a-z](?-i:[a-z])$/i;
The updates in ESLint include parsing and ensuring that rules related to regular expressions are behaving as expected.
Improved configuration file lookup performance
In v9.13.0, we introduced changes to how configuration files were looked up. Some of these changes negatively impact ESLint’s runtime performance due to incorrect caching of configuration file data. This was visible primarily using the default configuration lookup algorithm, where a 20-30% performance degradation was reported (the new algorithm, accessed via --flag unstable_config_lookup_from_file, has different performance characteristics and didn’t show the same negative performance impact in our tests).
We’ve now fixed the configuration file lookup caching behavior both in the default algorithm and the experimental algorithm so you should improved performance when you upgrade from v9.13.0.
Features
3fa009ffeat: add support for Import Attributes and RegExp Modifiers (#19076) (Milos Djermanovic)b0faee3feat: add types for the@eslint/jspackage (#19010) (Nitin Kumar)
Bug Fixes
24d0172fix: enable retry concurrency limit for readFile() (#19077) (Nicholas C. Zakas)b442067fix: Don’t crash when directory is deleted during traversal. (#19067) (Nicholas C. Zakas)d474443fix: avoid call stack overflow while processing globs (#19035) (Livia Medeiros)
Documentation
151c965docs: updatecontext.languageOptions.parserdescription (#19084) (Nitin Kumar)dc34f94docs: Update README (GitHub Actions Bot)f16e846docs: Update README (GitHub Actions Bot)ee0a77edocs: change link from @types/eslint to lib/types (#19049) (Karl Horky)50f03a1docs: Clarify global ignores in config migration guide (#19032) (Milos Djermanovic)
Build Related
37c9177build: update@wdio/*dependencies (#19068) (Francesco Trotta)35a8858build: exclude flawed dendency versions (#19065) (Francesco Trotta)
Chores
f36cb16chore: upgrade @eslint/js@9.14.0 (#19086) (Milos Djermanovic)28be447chore: package.json update for @eslint/js release (Jenkins)f48a2a0test: addno-invalid-regexptests with RegExp Modifiers (#19075) (Milos Djermanovic)425202eperf: Fix caching in config loaders (#19042) (Milos Djermanovic)3d44b3cci: run tests in Node.js 23 (#19055) (Francesco Trotta)7259627test: ensure tmp directory cleanup incheck-emfile-handling.js(#19036) (Livia Medeiros)
