npm / @eslint/js
@eslint/js
What changed in @eslint/js 9 to 10, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
42 breaking2 new APIs and options5 behavior and defaults1 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@eslint/js 104 changes
Breaking changes 3
Enabled in eslint:recommended, so projects using that config may report new lint errors.
Enabled in eslint:recommended, so projects using that config may report new lint errors.
Enabled in eslint:recommended, so projects using that config may report new lint errors.
Fixes and other changes 1
The name property has been restored to ESLint core configs exported from @eslint/js; FlatCompat users should update @eslint/eslintrc for compatibility.
@eslint/js 946 changes
Breaking changes 39
The no-invalid-regexp option now matches flags case-sensitively.
The allow option now only accepts an array of strings.
The formatter was removed from core; install eslint-formatter-checkstyle to use it.
The deprecated property was removed.
The formatter was removed from core; install eslint-formatter-compact to use it.
Deprecated source, comment, token, parser-services, scope, ancestor, and variable-usage methods were removed from context and moved to SourceCode, with some replacements requiring a node argument.
Flat config no longer accepts the "eslint:all" string in its config array; use the @eslint/js preset instead.
The preset enables no-constant-binary-expression, no-empty-static-block, no-new-native-nonconstructor, and no-unused-private-class-members, and removes no-extra-semi, no-inner-declarations, no-mixed-spaces-and-tabs, and no-new-symbol.
Flat config no longer accepts the "eslint:recommended" string in its config array; use the @eslint/js preset instead.
Flat config is now the default; eslintrc is deprecated and is no longer searched for automatically.
Multiple configuration comments for the same rule are no longer silently accepted: the first applies and subsequent ones are reported as lint errors.
Variables followed by a colon and value are ignored as invalid; variable names must be comma-separated.
The temporary FlatESLint class is now named ESLint, and the v8 ESLint class is named LegacyESLint.
Rules exported as functions are no longer supported; rules must use an object with a create() method.
The formatter was removed from core; install eslint-formatter-jslint-xml to use it.
The formatter was removed from core; install eslint-formatter-junit to use it.
The method is no longer available; configure parsers through flat config languageOptions instead.
The method is no longer available; define rules through flat config plugins instead.
The method is no longer available; define rules through flat config plugins instead.
The method is no longer available.
The config argument must use flat config format.
The config argument must use flat config format.
Rules that receive options must specify meta.schema; ESLint throws an error when options are passed to a rule without it.
The rule schema now rejects options; the rule does not accept any options.
By default, the rule additionally reports -(-foo) and foo - 0; configure allow with ["-", "- -"] to retain the previous behavior.
With flat config, running the CLI without patterns lints the current directory; with eslintrc, it errors. Use --pass-on-no-patterns to retain the previous exit-zero behavior.
The caughtErrors option now defaults to all, so caught errors are checked for being used.
The option now defaults to true, so unnecessary computed member names in classes are flagged by default.
ESLint v9 requires Node.js v18.18.0 or above, v20.9.0 or above, or v21 and above; earlier versions are no longer supported.
Rules set to warn are no longer executed unless --max-warnings is used, which can improve performance and affect rules that modify data used by other rules.
The rule was removed; use replacement rules in eslint-plugin-jsdoc for equivalent linting.
RuleTester replaces FlatRuleTester, while the v8 RuleTester is removed; the new tester uses flat-config defaults for ecmaVersion and sourceType.
RuleTester now validates autofix outputs, error and suggestion fields, suggestion uniqueness and syntax, duplicate test cases, filename and only types, and unsubstituted message placeholders.
The deprecated method was removed; use getCommentsBefore, getCommentsAfter, or getCommentsInside instead.
The formatter was removed from core; install eslint-formatter-tap to use it.
The formatter was removed from core; install eslint-formatter-unix to use it.
The rule was removed; use replacement rules in eslint-plugin-jsdoc for equivalent linting.
The no-unused-vars option no longer applies to catch arguments; use caughtErrorsIgnorePattern to ignore catch-clause variable names.
The formatter was removed from core; install eslint-formatter-visualstudio to use it.
New APIs and options 2
Adds blockScopeFunctions, which by default allows block-level functions in strict mode when ecmaVersion is 2015 or above.
The rule schema now accepts one option: an object with a boolean allowInParentheses property.
Behavior and default changes 5
Code path information is now calculated before rule traversal, so it is complete regardless of when a rule accesses it.
A configuration comment specifying only severity now retains options configured for that rule in the config file.
Set this environment variable to false to continue using the deprecated eslintrc config format.
Multiple paths entries with the same name now all apply, allowing different restrictions and messages for imported names.
The CLI now writes the output file even when the output is empty.