---
title: "eslint Breaking Changes on npm | Since.dev"
description: "What each eslint release removed, renamed or changed: 891 breaking changes in 51 versions on npm, each with its source."
canonical_url: https://since.dev/packages/npm/eslint
last_updated: 2026-10-02
---

# eslint breaking changes

Every breaking API change we have recorded in eslint on npm: 891 breaking changes in 51 versions. Below are its newest 6 versions, removals and renames first, each with its source.

Newest change October 2, 2026

## 10.12.0

4 breaking changes, first published October 2, 2026.

- **Signature changed** `SourceCode`  

Was class SourceCode implements TextSourceCode<{LangOptions: Linter.LanguageOptions; RootNode: AST.Program; SyntaxElementWithLoc: AST.Token | ESTree.Node; ConfigNode: ESTree.Comment;}>; now class SourceCode implements... [npmjs.com](https://www.npmjs.com/package/eslint/v/10.12.0)
- **Signature changed** `SourceCode.getLoc`  

Was getLoc(syntaxElement: AST.Token | ESTree.Node): ESTree.SourceLocation; now getLoc(syntaxElement: AST.Token | ESTree.Node | ESTree.Comment): ESTree.SourceLocation. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.12.0)
- **Signature changed** `SourceCode.getRange`  

Was getRange(syntaxElement: AST.Token | ESTree.Node): SourceRange; now getRange(syntaxElement: AST.Token | ESTree.Node | ESTree.Comment): SourceRange. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.12.0)
- **Signature changed** `SourceCode.getText`  

Was getText(node?: ESTree.Node, beforeCount?: number, afterCount?: number): string; now getText(node?: ESTree.Node | AST.Token | ESTree.Comment, beforeCount?: number, afterCount?: number): string. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.12.0)

## 10.11.0

3 breaking changes, first published September 18, 2026.

- **Behavior changed** `new-cap`  

The new-cap rule exempts fewer built-in constructors than before, so code that calls some built-ins without new may now be reported. [github.com](https://github.com/eslint/eslint/releases/tag/v10.11.0)
- **Behavior changed** `no-unsafe-finally`  

The no-unsafe-finally rule reports labeled continue statements inside finally blocks that it did not report before, so existing code may get new lint errors. [github.com](https://github.com/eslint/eslint/releases/tag/v10.11.0)
- **Signature changed** `Linter.TimePass.parse`  

Was parse: {total: number}; now parse?: {total: number}. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.11.0)

## 10.9.0

2 breaking changes, first published August 21, 2026.

- **Behavior changed** `no-loss-of-precision`  

The rule now also detects loss of precision from underflow, so existing code may get new lint reports. Review flagged literals if your linting fails after upgrading. [github.com](https://github.com/eslint/eslint/releases/tag/v10.9.0)
- **Signature changed** `rules:ESLintRules.no-unmodified-loop-condition`  

Was "no-unmodified-loop-condition": Linter.RuleEntry<\[\]>; now "no-unmodified-loop-condition": Linter.RuleEntry<\[Partial<{checkConditionalExpressions: boolean;}>\]>. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.9.0)

## 10.8.0

4 breaking changes, first published July 24, 2026.

- **Signature changed** `config:Config`  

Was export {type Config, defineConfig, globalIgnores, includeIgnoreFile}; now export {type Config, type ConfigObject, defineConfig, globalIgnores, includeIgnoreFile}. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.8.0)
- **Signature changed** `config:defineConfig`  

Was export {type Config, defineConfig, globalIgnores, includeIgnoreFile}; now export {type Config, type ConfigObject, defineConfig, globalIgnores, includeIgnoreFile}. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.8.0)
- **Signature changed** `config:globalIgnores`  

Was export {type Config, defineConfig, globalIgnores, includeIgnoreFile}; now export {type Config, type ConfigObject, defineConfig, globalIgnores, includeIgnoreFile}. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.8.0)
- **Signature changed** `config:includeIgnoreFile`  

Was export {type Config, defineConfig, globalIgnores, includeIgnoreFile}; now export {type Config, type ConfigObject, defineConfig, globalIgnores, includeIgnoreFile}. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.8.0)

## 10.7.0

8 breaking changes, first published July 10, 2026.

- **Signature changed** `Linter.LintOptions.filterCodeBlock`  

Was filterCodeBlock?: | ((filename: string, text: string) => boolean) | undefined; now filterCodeBlock?: ((filename: string, text: string) => boolean) | undefined. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `Linter.LintOptions.postprocess`  

Was postprocess?: | ((problemLists: LintMessage\[\]\[\]) => LintMessage\[\]) | undefined; now postprocess?: ((problemLists: LintMessage\[\]\[\]) => LintMessage\[\]) | undefined. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `Rule.NodeListener`  

Was interface NodeListener extends CustomRuleVisitorWithExit<{\[Node in Rule.Node as Node\["type"\]\]?: | ((node: Node) => void) | undefined;} & {Program?: ((node: AST.Program) => void) | undefined;}>; now interface NodeListener extends... [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `rules:EitherGroupOrRegEx`  

Was type EitherGroupOrRegEx = | {group: string\[\]; regex?: never} | {regex: string; group?: never}; now type EitherGroupOrRegEx = {group: string\[\]; regex?: never} | {regex: string; group?: never}. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `rules:ESLintRules.max-nested-callbacks`  

Was "max-nested-callbacks": Linter.RuleEntry<\[| number | Partial<{maximum: number; max: number;}>\]>; now "max-nested-callbacks": Linter.RuleEntry<\[| number | Partial<{maximum: number; max: number; checkConstructorCallCallbacks... [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `rules:ESLintRules.no-extra-parens`  

Was "no-extra-parens": | Linter.RuleEntry<\["all", Partial<{conditionalAssign: boolean; returnAssign: boolean; nestedBinaryExpressions: boolean; ignoreJSX: | "none" | "all" | "multi-line" | "single-line"; enforceForArrowConditionals... [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `rules:ESLintRules.preserve-caught-error`  

Was "preserve-caught-error": Linter.RuleEntry<\[Partial<{requireCatchParameter: boolean;}>\]>; now "preserve-caught-error": Linter.RuleEntry<\[Partial<{requireCatchParameter: boolean; errorClassNames: Array<| string | {name: string... [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)
- **Signature changed** `rules:ESLintRules.semi`  

Was semi: | Linter.RuleEntry<\["always", Partial<{omitLastInOneLineBlock: boolean;}>\]> | Linter.RuleEntry<\["never", Partial<{beforeStatementContinuationChars: | "any" | "always" | "never";}>\]>; now semi: | Linter.RuleEntry<\["always"... [npmjs.com](https://www.npmjs.com/package/eslint/v/10.7.0)

## 10.6.0

1 breaking change, first published June 26, 2026.

- **Signature changed** `rules:ESLintRules.no-constant-binary-expression`  

Was "no-constant-binary-expression": Linter.RuleEntry<\[\]>; now "no-constant-binary-expression": Linter.RuleEntry<\[Partial<{checkRelationalComparisons: boolean;}>\]>. [npmjs.com](https://www.npmjs.com/package/eslint/v/10.6.0)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
