Releases: Rel1cx/eslint-react
v5.7.1 (2026-05-02)
What's Changed
🐞 Fixes
allpreset: Fixed an issue where theallpreset accidentally included rules requiring type information (#1744).
📝 Documentation
- Fixed a typo in the shared settings description.
- Fixed missing trailing commas in ESLint settings examples.
- Updated
no-unused-staterule wording and examples. - Added a Resources section with AST Explorer, ESLint Developer Guide, and TypeScript Compiler API links to kit-related documentation pages.
🏗️ Internal
- Pinned dependency versions for
nextand@rbxts/react. - Added
react-compiler-fixtures-all-preset.jsonlsnapshot generation.
Full Changelog: v5.7.0...v5.7.1
v5.7.0 (2026-05-02)
What's Changed
✨ New
react-x/no-unused-state: The rule re-added as a no-op inv5.6.6is now fully implemented. It detects state variables declared viauseState(or similar state hooks) that are assigned but never read, or only read inside an effect or effect dependency array (#1741).
📝 Documentation
- Updated minimum version requirements in README and docs (ESLint 10.2.1, TypeScript 6.0.3, pnpm 10.33.2).
- Fixed
no-unused-statemigration docs and removed rule reasons.
LTS Maintenance Mode: Starting with v5.7.0, the project has entered a Long-Term Support (LTS) maintenance mode. New feature development is temporarily on hold while the project prioritizes bug fixes, rule improvements, and documentation updates. See #1740 for details.
Full Changelog: v5.6.6...v5.7.0
v5.6.6 (2026-05-01)
What's Changed
✨ New
react-x/no-unused-state: Re-add thereact-x/no-unused-staterule that was removed in5.0.0as a no-op rule for detecting unused state in function components in a future release.
Full Changelog: v5.6.4...v5.6.6
v5.6.4 (2026-05-01)
What's Changed
✨ New
react-x/no-unused-class-component-members: Now flagsshouldComponentUpdatemethods defined in classes extendingPureComponentas unused, sincePureComponentimplements its ownshouldComponentUpdatewith shallow prop and state comparison (#1738).
📝 Documentation
- Added
jsxpreset documentation to multiple rule docs. - Removed empty Presets sections from rule documentation.
🏗️ Internal
ast: Added an optionalstoppredicate tofindParentutility for more control over ancestor traversal (#1736).- Replaced
skottwithsentruxfor architecture linting. - Updated sentrux rules and baseline metrics.
Full Changelog: v5.6.3-beta.0...v5.6.4
v5.6.3-beta.0 (2026-04-30)
What's Changed
🏗️ Internal
- JSX detection utilities moved to
@eslint-react/core:isJsxLike,JsxConfig,JsxDetectionHint, and related types now import from@eslint-react/core. The old@eslint-react/jsxmodule no longer re-exports these symbols.isJsxTextandJsxEmithave been removed in favor of core equivalents. - Added Nx and set up project graph caching.
- Added architectural boundaries for app and package dependencies.
- Added devtools verification script.
- Added sentrux layer architecture and dependency rules.
- Updated sentrux baseline timestamps.
- Upgraded
zodfrom 4.3.6 to 4.4.1.
Full Changelog: v5.6.2...v5.6.3-beta.0
v5.6.2 (2026-04-30)
What's Changed
🐞 Fixes
react-x/use-memo: Fixed false positives inuseMemodependency analysis by using reference/definition analysis (#1735).
📝 Documentation
- Added anchor links to rule names in recipe docs.
- Added migration overview page with sidebar entry.
- Added naming-convention preset configuration documentation.
- Simplified conditional formatting in
custom-rules-of-staterecipe. - Updated migration guide and added
noDirectAccessPropscustom rule example.
🏗️ Internal
- Removed unused diagram components and imports.
- Reordered redirects with comments for clarity.
- Bumped
lucide-reactfrom 1.12.0 to 1.14.0. - Updated
baseline-browser-mappingto 2.10.24.
Full Changelog: v5.6.0...v5.6.2
v5.6.0 (2026-04-29)
What's Changed
This release consolidates all changes since v4.2.1.
💥 Breaking Changes
Core API Refactoring (@eslint-react/core)
- Performed a large-scale flattening refactor of the core package's internal structure, merging modules previously scattered across subdirectories like
component/,function/,hook/,semantic/, andapi/into the root directory. - Renamed several core APIs:
isReactAPI→isAPIisReactAPICall→isAPICallisInitializedFromReact→isAPIFromReactisInitializedFromReactNative→isAPIFromReactNativeComponentDetectionHint→FunctionComponentDetectionHintComponentFlag→FunctionComponentFlaggetComponentCollector→getFunctionComponentCollectorgetComponentCollectorLegacy→getClassComponentCollector
- Migrated type utilities (
type-is,type-name,type-variant) fromeslint-plugin-react-xto@eslint-react/core. - Updated the
Toolkitinterface in@eslint-react/kitto reflect the naming changes above.
Kit API Simplification (@eslint-react/kit)
- Simplified
RuleToolkit.isAPI: Removed pre-built identifier predicates (memo,lazy,forwardRef, etc.) fromRuleToolkit.is. Only*Callvariants andAPI/APICallfactories are now available. - Renamed initialization checkers:
initializedFromReact→APIFromReactinitializedFromReactNative→APIFromReactNative
- Code using
is.memo(node),is.lazy(node), etc. must migrate tois.memoCall(node)or useis.API("memo")(node).
Type Alias Removal
- Removed deprecated
RuleDefinitiontype alias: TheRuleDefinitiontype has been completely removed from@eslint-react/kit. UseRuleFunctioninstead.
Removed Rules
The following rules have been removed from eslint-plugin-react-x, eslint-plugin-react-dom, and eslint-plugin-react-debug:
| Rule | Package | Notes |
|---|---|---|
component-hook-factories |
react-x |
Removed from all configs |
no-redundant-should-component-update |
react-x |
Removed from all configs |
no-unnecessary-use-callback |
react-x |
Removed from all configs |
no-unnecessary-use-memo |
react-x |
Removed from all configs |
no-unused-state |
react-x |
Removed from all configs |
prefer-destructuring-assignment |
react-x |
Removed from all configs |
prefer-namespace-import |
react-x |
Removed from all configs |
prefer-namespace-import |
react-dom |
Removed from all configs |
debug/class-component |
react-debug |
Removed from all configs |
Class Component Support Deprecation
- All Class Component-related detection functions in the core package (such as
isClassComponent,isPureComponent, and various lifecycle checkers) have been marked as@deprecated, retaining only minimal compatibility support for existing rules. - Rules in
eslint-plugin-react-web-api, includingno-leaked-event-listener,no-leaked-interval, andno-leaked-timeout, have removed detection for Class Component lifecycles (componentDidMount/componentWillUnmount) and now only report on Hook Effects (useEffect, etc.).
✨ New
New Rules
react-x/globals: New rule for restricting usage of global variables in React components.react-x/static-components: New rule for enforcing static component definitions. Enhanced with variable reference tracking and acreatedHerediagnostic to reduce false positives.react-web-api/no-leaked-fetch: New rule that detects leakedfetchcalls in effects, closing #1714.
Kit Enhancements
- Added
ast.findParentutility to@eslint-react/kitfor traversing AST ancestors. - Added support for Universally Unique Lexicographically Sortable Identifiers (ULID) for anonymous rules (later migrated to
node:crypto randomBytes).
Custom Rule Examples
- Added Error Boundaries custom rule example.
- Added boolean prop naming custom rule and documentation.
🐞 Fixes
Rule Fixes
react-x/error-boundaries: Fixed false positives on non-React code and resolved catch block over-reporting.react-x/set-state-in-effect: Improved validation accuracy.react-x/use-memo: Added reassignment check, aligned message IDs, and added support forfor-of/for-inloops.
Config Fixes
- Added missing rules to presets, cleaned up experimental disables, and updated documentation.
- Extracted naming-convention preset and fixed config gaps.
Type Expression Fixes
- Added missing
Extract.unwrapfor type expressions and chain expressions. - Unwrapped type expressions before inspecting AST node types.
🪄 Improvements
API & Refactoring
ast: Normalized API naming conventions and rewrote Check helpers.ast: RenamedisJSXLike→isJSXElementOrFragmentandisMethodOrProperty→isPropertyOrMethod.- Extracted ESLint types and utilities into the
@eslint-react/eslintpackage. - Extracted
@eslint-react/jsxfrom@eslint-react/coreinto a standalone utility package for static analysis of JSX patterns. - Migrated to
@and#path aliases and replacedtsxwithvite-node. - Moved pattern utilities to rule directories and extracted rule helpers into co-located
lib.tsmodules across multiple plugins. - Reorganized imports across the codebase.
- Replaced
RuleConfigwithLinter.RulesRecordfrom ESLint. - Restructured monorepo packages directory layout.
- Unified import style across packages and plugins.
Core & AST Improvements
ast: UpdatedFunctionInitPathtypes to support method definitions and property arrow functions in class expressions.ast/isNodeEqual: FixedJSXNamespacedNamecomparison logic.
Rule Improvements
react-x/static-components: Registered inall,x, anddisable-experimentalconfigs.react-rsc/function-definition: Added directive position and quote checks.- Extracted HOC detection helpers to dedicated
lib.tsfiles.
Website & Documentation Improvements
- Added LLM routes (
/llms.txt,/llms-full.txt,/llms.mdx). - Added inline TOCs and improved navigation.
- Enabled twoslash type-checking for code examples.
- Improved accessibility and unified layout configuration.
Testing
- Expanded compiler fixture coverage across 9 rules.
- Added comprehensive unit tests for component/hook detection utilities.
Dependencies
- Bumped TypeScript to 6.0.3.
- Bumped Vite to ^8.0.7 in examples.
- Bumped
@typescript-eslintpackages to 8.59.1. - Bumped
tsl-dx,tsdown,fumadocs,postcss,lucide-react,eslint-plugin-package-json, and other dependencies.
📝 Documentation
- Added custom rule recipes for React Children API, Context API, props, state, boolean prop naming, and error boundaries.
- Added migration examples (
no-set-state,no-string-refs). - Added IMPL vs SPEC diff documents for 5 React Compiler aligned rules.
- Added spec documentation for validation rules.
- Added rule feature docs.
- Added table of contents to multiple documentation files.
- Updated migrating-from-eslint-plugin-react guide.
- Updated local packages docs.
- Updated roadmap and contributing architecture diagram.
🏗️ Internal
- Added
build:pluginsscript and updated build path patterns. - Added
publishConfig.accessto packages and marked@local/effas private. - Added documentation comments to rule scripts.
- Added typedoc docs and engines field.
- Extracted shared tsdown config.
- Fixed high-priority build, lockfile, script and doc inconsistencies.
- Removed "Naming Pattern Quick Reference" from AST abbreviations doc.
- Removed
major-release-checklist.md. - Removed
scripts/prepare-release.tsand the accompanyingprepare:releasenpm script. - Removed barrel exports for utils.
- Removed unused dependencies and added missing devDependencies.
Full Changelog: v4.2.1...v5.6.0
v5.6.0-beta.1 (2026-04-28)
What's Changed
🐞 Fixes
- fix: unwrap type expressions before inspecting AST node types (#1732) (
c5290fcb3)
Full Changelog: v5.5.6-beta.0...v5.6.0-beta.1
v5.5.6-beta.0 (2026-04-28)
What's Changed
🪄 Improvements
- Register
static-componentsrule inall,x, anddisable-experimentalconfigs (1d179849c)
🏗️ Internal
- Add major release checklist to internal docs (
1d179849c)
Full Changelog: v5.5.5-beta.1...v5.5.6-beta.0
v5.5.5-beta.1 (2026-04-28)
What's Changed
🪄 Improvements
- eslint-plugin-react-x: improve
set-state-in-effectvalidation (#1731) (081ef976b)
Full Changelog: v5.5.4-beta.0...v5.5.5-beta.1