npm / @eslint-react/eslint-plugin
@eslint-react/eslint-plugin
What changed in @eslint-react/eslint-plugin 2 to 5, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-27.
30 breaking10 new APIs and options3 behavior and defaults6 tooling12 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@eslint-react/eslint-plugin 513 changes
Breaking changes 3
Class declarations in a component body are recognized as per-render constructions, so using one as a context value is reported.
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.
Class declarations in a component body are recognized as per-render constructions, so using one as a default prop is reported.
Behavior and default changes 1
General-purpose presets now enable JSX syntax support, so you no longer need to configure it yourself.
Fixes and other changes 9
Builtin member resolution no longer follows computed or unknown middle segments, preventing false reports of non-builtin calls.
Now reports Date calls during render, including Date(), Date(arg), and window.Date(); unlike new Date(arg), Date(arg) always returns the current time.
The ref-derived parameter exemption now also applies to helpers wrapped in useCallback.
The suggested fix now adds rel="noreferrer" instead of rel="noreferrer noopener", because noreferrer already implies noopener; values combining both tokens remain valid.
Reverted component-scope-bounded identifier resolution and per-component single-report attribution; class declarations in a component body remain recognized as per-render constructions.
Reverted component-scope-bounded identifier resolution and per-component single-report attribution; class declarations in a component body remain recognized as per-render constructions.
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.
The script now emits YAML-safe quoted descriptions so scaffolded rules cannot reintroduce the website build failure.
Stops reporting the React camelCase SVG prop renderingIntent as unknown, including when produced by the rule's autofix for rendering-intent.
@eslint-react/eslint-plugin 248 changes
Breaking changes 27
This setting is discontinued; rules now use improved heuristics and no longer require manual configuration.
This setting is discontinued; rules now use improved heuristics and no longer require manual configuration.
This rule is removed; use jsx-shorthand-boolean instead.
This rule is removed; use jsx-shorthand-fragment instead.
CommonJS support is dropped; packages are distributed only as ECMAScript Modules.
The core preset is removed and replaced by x.
This rule is removed and renamed to dom/no-void-elements-with-children.
This rule is removed and renamed to no-forward-ref.
ESLint 8 support is dropped; ESLint 9.3.6 is the minimum required version.
The legacy ESLint config system is no longer supported; configure the plugin with ESLint Flat Config.
This rule is removed; use hooks-extra/no-direct-set-state-in-use-effect instead.
This rule is relocated to no-unnecessary-use-callback.
This rule is relocated to no-unnecessary-use-memo.
This rule is relocated to no-unnecessary-use-prefix.
This rule is relocated to use-state.
This rule is removed and renamed to jsx-no-comment-textnodes.
This rule is discontinued with no replacement listed.
This rule is removed and renamed to jsx-no-duplicate-props.
This rule is removed and renamed to no-nested-component-definitions.
Node.js 18 support is dropped; Node.js 20 is the minimum required version.
The off-dom preset is removed and replaced by disable-dom.
This rule is removed and renamed to prefer-namespace-import.
This rule is removed; use jsx-shorthand-boolean instead.
This rule is removed; use jsx-shorthand-fragment instead.
This setting is discontinued; rules now use improved heuristics and no longer require manual configuration.
TypeScript 4 support is dropped; TypeScript 5.9.2 is the minimum required version.
This rule is removed and renamed to jsx-uses-vars.
New APIs and options 10
New configuration preset disables eslint-plugin-react rules that conflict with rules in these plugins.
This rule now supports suggestion fixes.
New rule disallows string values for the style prop.
This rule now supports suggestion fixes.
New rule enforces using a namespace import for react-dom.
New rule enforces a consistent style for boolean attributes.
New rule enforces a consistent style for React Fragments.
New rule disallows specific props on components.
New rule reports unnecessary key props on elements.
New rule reports unused props in components and is included in the recommended-type-checked preset.
Behavior and default changes 2
This rule now supports suggestion fixes.
This rule now supports auto-fix.
Tooling 6
This rule now supports Codemod features.
This rule now supports Codemod features.
This rule now supports Codemod features.
This rule now supports Codemod features.
This rule now supports Codemod features.
This rule now supports Codemod features.
Fixes and other changes 3
Fixes a false positive for React Hooks defined within a vi.mock(...) callback in Vitest test files.
Fixes false positives on well-known filenames.
The useEffect setup function check now handles React.useEffect() calls correctly.