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
3fa009f
feat: add support for Import Attributes and RegExp Modifiers (#19076) (Milos Djermanovic)b0faee3
feat: add types for the@eslint/js
package (#19010) (Nitin Kumar)
Bug Fixes
24d0172
fix: enable retry concurrency limit for readFile() (#19077) (Nicholas C. Zakas)b442067
fix: Don’t crash when directory is deleted during traversal. (#19067) (Nicholas C. Zakas)d474443
fix: avoid call stack overflow while processing globs (#19035) (Livia Medeiros)
Documentation
151c965
docs: updatecontext.languageOptions.parser
description (#19084) (Nitin Kumar)dc34f94
docs: Update README (GitHub Actions Bot)f16e846
docs: Update README (GitHub Actions Bot)ee0a77e
docs: change link from @types/eslint to lib/types (#19049) (Karl Horky)50f03a1
docs: Clarify global ignores in config migration guide (#19032) (Milos Djermanovic)
Build Related
37c9177
build: update@wdio/*
dependencies (#19068) (Francesco Trotta)35a8858
build: exclude flawed dendency versions (#19065) (Francesco Trotta)
Chores
f36cb16
chore: upgrade @eslint/js@9.14.0 (#19086) (Milos Djermanovic)28be447
chore: package.json update for @eslint/js release (Jenkins)f48a2a0
test: addno-invalid-regexp
tests with RegExp Modifiers (#19075) (Milos Djermanovic)425202e
perf: Fix caching in config loaders (#19042) (Milos Djermanovic)3d44b3c
ci: run tests in Node.js 23 (#19055) (Francesco Trotta)7259627
test: ensure tmp directory cleanup incheck-emfile-handling.js
(#19036) (Livia Medeiros)