# What changed in @eslint-react/eslint-plugin

> 61 changes in @eslint-react/eslint-plugin 2 to 5 from its official release notes, upgrade guides and advisories: 30 breaking, 10 new APIs and options. Each one cited. Sources checked 2026-10-27. HTML: https://unstale.sh/npm/@eslint-react/eslint-plugin/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @eslint-react/eslint-plugin 5

### Breaking changes

- Class declarations in a component body are recognized as per-render constructions, so using one as a context value is reported. (5.28.3) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5283-2026-10-20)
- Identifier resolution is bounded by the enclosing component scope: render-scoped values in nested callbacks are detected, module-level values are treated as stable, and nested components report each value once from the innermost component. (5.28.3) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5283-2026-10-20)
- Class declarations in a component body are recognized as per-render constructions, so using one as a default prop is reported. (5.28.3) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5283-2026-10-20)

### Behavior and default changes

- General-purpose presets now enable JSX syntax support, so you no longer need to configure it yourself. (5.28.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5280-2026-10-16)

### Fixes and other changes

- Builtin member resolution no longer follows computed or unknown middle segments, preventing false reports of non-builtin calls. (5.28.8) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5288-2026-10-24)
- Now reports Date calls during render, including Date(), Date(arg), and window.Date(); unlike new Date(arg), Date(arg) always returns the current time. (5.28.7) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5287-2026-10-23)
- The ref-derived parameter exemption now also applies to helpers wrapped in useCallback. (5.28.6) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5286-2026-10-22)
- The suggested fix now adds rel="noreferrer" instead of rel="noreferrer noopener", because noreferrer already implies noopener; values combining both tokens remain valid. (5.28.5) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5285-2026-10-22)
- Reverted component-scope-bounded identifier resolution and per-component single-report attribution; class declarations in a component body remain recognized as per-render constructions. (5.28.4) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5284-2026-10-21)
- Reverted component-scope-bounded identifier resolution and per-component single-report attribution; class declarations in a component body remain recognized as per-render constructions. (5.28.4) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5284-2026-10-21)
- Identifier resolution is bounded by the enclosing component scope: render-scoped values in nested callbacks are detected, module-level values are treated as stable, and nested components report each value once from the innermost component. (5.28.3) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5283-2026-10-20)
- The script now emits YAML-safe quoted descriptions so scaffolded rules cannot reintroduce the website build failure. (5.28.2) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5282-2026-10-19)
- Stops reporting the React camelCase SVG prop renderingIntent as unknown, including when produced by the rule's autofix for rendering-intent. (5.28.1) — [release notes](https://github.com/Rel1cx/eslint-react/blob/80e6b4be530dcc532012116ba61eda53505c7779/CHANGELOG.md#v5281-2026-10-17)

## @eslint-react/eslint-plugin 2

### Breaking changes

- This setting is discontinued; rules now use improved heuristics and no longer require manual configuration. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This setting is discontinued; rules now use improved heuristics and no longer require manual configuration. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed; use jsx-shorthand-boolean instead. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed; use jsx-shorthand-fragment instead. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- CommonJS support is dropped; packages are distributed only as ECMAScript Modules. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- The core preset is removed and replaced by x. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to dom/no-void-elements-with-children. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to no-forward-ref. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- ESLint 8 support is dropped; ESLint 9.3.6 is the minimum required version. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- The legacy ESLint config system is no longer supported; configure the plugin with ESLint Flat Config. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed; use hooks-extra/no-direct-set-state-in-use-effect instead. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is relocated to no-unnecessary-use-callback. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is relocated to no-unnecessary-use-memo. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is relocated to no-unnecessary-use-prefix. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is relocated to use-state. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to jsx-no-comment-textnodes. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is discontinued with no replacement listed. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to jsx-no-duplicate-props. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to no-nested-component-definitions. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- Node.js 18 support is dropped; Node.js 20 is the minimum required version. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- The off-dom preset is removed and replaced by disable-dom. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to prefer-namespace-import. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed; use jsx-shorthand-boolean instead. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed; use jsx-shorthand-fragment instead. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This setting is discontinued; rules now use improved heuristics and no longer require manual configuration. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- TypeScript 4 support is dropped; TypeScript 5.9.2 is the minimum required version. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule is removed and renamed to jsx-uses-vars. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)

### New APIs and options

- New configuration preset disables eslint-plugin-react rules that conflict with rules in these plugins. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports suggestion fixes. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule disallows string values for the style prop. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports suggestion fixes. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule enforces using a namespace import for react-dom. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule enforces a consistent style for boolean attributes. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule enforces a consistent style for React Fragments. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule disallows specific props on components. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule reports unnecessary key props on elements. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- New rule reports unused props in components and is included in the recommended-type-checked preset. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)

### Behavior and default changes

- This rule now supports suggestion fixes. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports auto-fix. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)

### Tooling

- This rule now supports Codemod features. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports Codemod features. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports Codemod features. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports Codemod features. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports Codemod features. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- This rule now supports Codemod features. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)

### Fixes and other changes

- Fixes a false positive for React Hooks defined within a vi.mock(...) callback in Vitest test files. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- Fixes false positives on well-known filenames. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
- The useEffect setup function check now handles React.useEffect() calls correctly. (2.0.0) — [release notes](https://github.com/Rel1cx/eslint-react/blob/HEAD/CHANGELOG.md)
