This section documents version-specific API changes — prioritize recent major/minor releases.
-
BREAKING: chalk removed from stylish formatter, replaced with Node.js styleText API in v10.0.0 — output behavior changes with environment variables (NO_COLOR, NODE_DISABLE_COLORS, FORCE_COLOR) and --color/--no-color flags now take precedence source · migration
-
BREAKING: JSX references are now tracked — <Card> is treated as a variable reference, affecting no-unused-vars and no-undef rules; custom rules relying on scope analysis may encounter JSXIdentifier references source · migration
-
BREAKING: eslint:recommended configuration updated — three new rules enabled: no-unassigned-vars, no-useless-assignment, preserve-caught-error source · migration
-
BREAKING: Config file lookup algorithm changed — eslint.config.js is now located starting from each linted file's directory, not the cwd; v10_config_lookup_from_file flag removed source · migration
-
BREAKING: ESLintrc format (.eslintrc, .eslintrc.json) no longer supported — only flat config (eslint.config.js) is supported; FlatESLint and LegacyESLint exports removed, use ESLint only source · migration
-
BREAKING: eslint-env comments reported as errors — /* eslint-env node */ style comments no longer supported source · migration
-
BREAKING: SourceCode deprecated methods removed (#20137) — use alternatives from current API source
-
BREAKING: Rule context deprecated methods removed (#20086) — update custom rules to use non-deprecated equivalents source
-
BREAKING: LintMessage#nodeType property removed (#20096) — do not access this field source
-
BREAKING: TestCaseError#type property removed (#20096) — replaced with RuleTester location estimation source
-
BREAKING: Program AST node range now spans entire source text (#20133) — affects node boundary calculations source
-
BREAKING: RuleFixer methods require string text arguments (#20082) — all fixer methods must receive string values, not other types source
-
BREAKING: ScopeManager implementations must support addGlobals() method (#20132) — custom parser implementations need to implement this source
-
BREAKING: Minimatch v10 with POSIX character classes in glob patterns — bracket expressions now support [[:upper:]], [[:lower:]] etc., existing glob patterns may match differently source · migration
-
BREAKING: no-shadow-restricted-names now reports globalThis by default (#20027) — may produce new linting errors in existing codebases source
-
BREAKING: func-names schema stricter (#20119) — validation rules tightened source
-
BREAKING: no-invalid-regexp allowConstructorFlags option requires uniqueItems: true (#20155) — duplicates in this array are now rejected source
-
Use defineConfig() helper when creating configuration arrays — enables type inference, plugin namespace resolution, and makes composition more explicit source
-
Apply rules to specific file patterns with files and ignores keys in configuration objects — files without these keys apply globally, which may be unintended source
-
Set name property on configuration objects for clarity in debugging output and config inspector — helps identify which config object is applying rules to a file source
-
Use configuration objects without files or ignores to define global rule configuration — they automatically apply to any file matched by other config objects source
-
Combine configurations with extends to merge predefined and shareable configs — preferred over manual property merging source
-
Enable reportUnusedDisableDirectives to catch stale eslint disable comments that no longer affect rules source
-
Declare languages property in custom rules to restrict execution to specific language types — prevents errors when rules are applied to unsupported languages source
-
Use messageIds in context.report() instead of hardcoded message strings — enables maintainability, i18n, and consistency across rule variants source
-
Specify meta.fixable property when rule can modify code and meta.hasSuggestions when rule provides alternatives — ESLint throws if these are missing when attempting fixes or suggestions source
-
Use AST selectors in rule visitors for targeted node matching instead of broad visitor patterns — enables more concise rules and filters nodes before callback execution source
-
Provide meta.namespace in plugins to enable ESLint to resolve the plugin even if users register it under a different name — recommended for better plugin discovery source
-
Run config inspector with --inspect-config flag during setup to verify which configuration objects match target files — crucial for diagnosing unexpected rule application source
-
Separate JavaScript-specific configuration into its own config object with files: ["**/*.js", "**/*.cjs", "**/*.mjs"] rather than relying on defaults — ensures rules don't unexpectedly apply to non-JS files source
-
Use baseConfig and overrideConfig in the Node.js API when linting text in tests — allows full control over configuration without relying on config file discovery source