v5.8.0–v5.26.5 Retrospective
A recap of five months of LTS maintenance: React Compiler alignment, fact-based rule architecture, Web API leak detection hardening, and ecosystem compatibility
This article consolidates the highlights of 107 releases across 19 minor lines, from v5.8.0 (2026-05-17) to v5.26.5 (2026-10-13), while the project is in LTS maintenance mode.
v5.8.x — Documentation Overhaul (2026-05-17 → 06-12, 19 releases)
- JSX package aligned with React/Babel source semantics: children filtering and whitespace handling were unified into public APIs in
@eslint-react/jsx, improving the accuracy ofno-useless-fragment,no-children-prop, and related rules. - Rule documentation overhaul: all plugin docs were migrated from the old
Common Violations/Invalid/Validformat to a scenario-basedExamples/Troubleshooting/Further Readingformat; 48 react-x rule docs gained scenario examples. - Representative fixes: a major false-positive reduction in
no-unused-state; nested state mutation detection inno-direct-mutation-state; React 19 attribute whitelist (precedence/blocking) inno-unknown-property.
v5.9.0 (2026-06-13)
-
New rule:
react-web-api/no-leaked-intersection-observer, enabled aswarnin therecommendedpreset. -
Tighter observer leak semantics: calling
disconnectonly inside the observer's own callback now counts as a leak, since the callback may never run after unmount.useEffect(() => { const observer = new IntersectionObserver((entries) => { // ... observer.disconnect(); // reported: only inside the callback — still a leak }); observer.observe(el); // missing: return () => observer.disconnect(); }, []);
v5.10.x–v5.14.x — React Compiler Alignment Sprint (2026-06-28 → 07-15, 24 releases)
No new rules; the focus was deep rework of refs and immutability:
-
v5.11.0:
refsdetects ref reads/writes inside helper functions called during render; newduplicateRefInitdiagnostic.function Component() { const ref = useRef(0); const bump = () => { ref.current += 1; // reported: `bump` is invoked during render }; bump(); return <div>{ref.current}</div>; } -
v5.12.0:
immutabilitywas reworked to align with React Compiler'sValidateNoFreezingKnownMutableFunctionsvalidation pass. -
v5.13.0:
refsgained nested property write tracking and member-expression-bound function tracing; lazy-initialization guard detection became direction-aware. -
v5.14.0:
refsrender-reachability analysis expanded to IIFEs anduseMemo/useReducercallbacks with unbounded fixed-point propagation; internals switched to scope-variable-identity tracking. -
v5.14.6/.7:
immutabilitystopped treating navigation-hook methods (useRouter().push(),useNavigate()) as in-place mutations inside frozen callbacks;useHistoryfollowed in v5.16.1.
v5.15.x–v5.20.x — New Capabilities and Preset Fixes (2026-07-15 → 09-24, 28 releases)
-
v5.16.0: tagged-template hook calls (Motion-style APIs) are now recognized.
const x = useMotionValue(100); const transform = useMotionTemplate`transform(${x}px)`; // ^^^ tagged template literal hook call -
v5.18.0: new shared setting
additionalRefHooks— five rules uniformly recognize custom ref-creating hooks, completing the custom-hook declaration system alongsideadditionalStateHooks/additionalEffectHooks. -
v5.18.8/.10: fixed the frequently-hit "Cannot redefine plugin" integration error across all presets — the most user-impactful fix of this period.
-
v5.18.2/.3:
no-nested-component-definitionsrefined (known-wrapper resolution, narrowedwith*HOC detection). -
v5.19.0:
immutabilitynow reports direct mutations of props/state, plus nested mutations through shallow copies ({ ...state }).const copy = { ...state }; copy.items.push(item); // reported: nested values are still shared with `state` copy.label = "new"; // not reported: top-level write to the copy's own slot -
v5.20.0:
immutabilityreports mutations offor...ofiteration variables; v5.20.6 systematically closed missed write forms — destructuring targets, loop targets,delete— acrossimmutability,use-memo,globals, andrefs.for (const item of props.items) { item.done = true; // reported: mutates shared elements of `props.items` } -
purityalias resolution improvements;react-dompolymorphic component (<motion.div as="button">) resolution fixes.
v5.21.x–v5.26.5 — Ecosystem Expansion and Final Polish (2026-09-28 → 10-13, 30 releases)
-
v5.21.0: Oxlint compatibility —
eslintbecame an optional peer dependency, so the plugins can run in environments without ESLint installed. -
v5.21.1: web-api leak rules now resolve variables by scope, fixing the cross-effect same-name mispairing that name-only matching could cause.
-
v5.22.0: support for React 19.3 DOM attributes (
closedby,shadowrootmode, and friends). -
v5.23.0 / v5.24.0: fact-based architecture adopted in core rules —
static-components,set-state-in-effect,set-state-in-render, anduse-memowere split intocollect/origins/effectsmodules;static-componentsalso gained dynamic creation-site tracing through logical and sequence expressions, reported once per creation site. -
v5.23.3/.5 → v5.26.5: the ref-derived-value exemption system in
set-state-in-effectkept expanding (template interpolation, literals, optional chaining, indirect calls, assignment tracing, short-circuit operators), aligning withreact-hooks7.1.1.useEffect(() => { const dv = visible - prevVisible.current; if (dv === 0) return; // ref-derived early-return guard exempts the rest setData(`${prevVisible.current}`); // ref-derived interpolation — exempt setMeta({ value: prevVisible.current }); // object literal — exempt }, [visible]); -
v5.24.7: leak-rule fixes — recursive signal alias chains, destructured
AbortController, observer cleanup-phase semantics. -
v5.24.2/.4: smaller published packages (tsdown dead-code elimination, stripped JSDoc).
-
v5.25.0:
no-unsafe-target-blankgained theallowReferreroption. -
v5.26.0: minimum Node.js version lowered from 22 to 20.19, broadening the install base.
-
v5.26.2:
no-unused-propsdetection improvements (default-valued params, alias tracing, template-literal keys). -
v5.26.3/.4: name-lookup boundary fixes for the three naming-convention rules.
References
- Changelog: v5.8.0 … v5.26.5
- Full Changelog: v5.8.0...v5.26.5