🌐
Eslint-react
eslint-react.xyz
ESLint React
First-class support for TypeScript, React 19, and more. Fully customizable rule severity levels, allowing you to enforce or relax rules as needed. Built with performance in mind, optimized for large codebases, 4-7x faster than other ESLint plugins.
Changelog
Bumped ESLint plugins and related dependencies to latest versions. Converted React 19 migration rules from auto-fix to suggestions:
Docs
Getting started using ESLint React in your TypeScript React project
🌐
npm
npmjs.com › package › eslint-plugin-react-19-upgrade
eslint-plugin-react-19-upgrade - npm
An ESLint plugin to identify and fix breaking changes when upgrading React 18 to React 19. Latest version: 1.7.0, last published: 9 months ago. Start using eslint-plugin-react-19-upgrade in your project by running `npm i eslint-plugin-react...
      » npm install eslint-plugin-react-19-upgrade
    
Published   May 29, 2025
Version   1.7.0
Author   Brett Farrow
People also ask

Is my React app vulnerable to React2Shell?
If you're using Next.js, check your Next.js version, not your React version. Next.js bundles its own React internally. Update to Next.js 14.2.35, 15.0.7, 15.1.11, 15.2.8, or 16.0.10 depending on your version line. For other frameworks, update react-server-dom-* packages to 19.2.3.
🌐
makerkit.dev
makerkit.dev › blog › tutorials › react-19-2
React 19.2: Upgrade Guide
Do I need to update if I only use client-side React?
The critical RCE vulnerability (CVE-2025-55182) only affects apps using React Server Components. Pure client-side apps aren't vulnerable to this specific issue, but updating for the other features and bug fixes is still recommended.
🌐
makerkit.dev
makerkit.dev › blog › tutorials › react-19-2
React 19.2: Upgrade Guide
When should I use useEffectEvent vs regular functions?
Use useEffectEvent when your effect needs to read a value but shouldn't re-run when that value changes. Common cases: logging with current state, notifications using current theme, callbacks that need fresh values but aren't the trigger for the effect.
🌐
makerkit.dev
makerkit.dev › blog › tutorials › react-19-2
React 19.2: Upgrade Guide
🌐
npm
npmjs.com › package › eslint-plugin-react
eslint-plugin-react - npm
React specific linting rules for ESLint. Latest version: 7.37.5, last published: a year ago. Start using eslint-plugin-react in your project by running `npm i eslint-plugin-react`. There are 16982 other projects in the npm registry using eslint-plugin-react.
      » npm install eslint-plugin-react
    
Published   Apr 03, 2025
Version   7.37.5
Author   Yannick Croissant
🌐
GitHub
github.com › Rel1cx › eslint-react
GitHub - Rel1cx/eslint-react: 4-7x faster, composable ESLint rules for React and friends.
4-7x faster, composable ESLint rules for React and friends. ... Modern: First-class support for TypeScript, React 19, and more.
Starred by 490 users
Forked by 39 users
Languages   TypeScript 80.1% | MDX 19.3% | TypeScript 80.1% | MDX 19.3%
🌐
React
react.dev › blog › 2025 › 10 › 01 › react-19-2
React 19.2 – React
React 19.2 adds support for Web Streams for streaming SSR in Node.js: renderToReadableStream is now available for Node.js ... This is because Node Streams are much faster than Web Streams in Node, and Web Streams do not support compression by ...
🌐
Reddit
reddit.com › r/reactjs › eslint, 6 or 7? react 19.2
r/reactjs on Reddit: ESLint, 6 or 7? React 19.2
October 21, 2025 -

Hey guys, according React 19.2 blog-post we are supposed to use eslint-plugin-react-hooks 6,

But I can already see that 7 is availabe. What did you guys use?

Also, I notice that 7 gave me several new errors, but those errors are not connected to the IDE and are only shown when the 'lint' command is ran. I know we are supposed to use the new hook with Effects now, but I was wondering why no visual warning for the IDE, anyone else?

edit: I found out that i just need to restart my eslint server, and now the errors are properly showing :).

in vscode its CTRL+SHIFT+P and write restart eslint, it will show.

🌐
MakerKit
makerkit.dev › blog › tutorials › react-19-2
React 19.2: Upgrade Guide
October 19, 2025 - React 19.2 refines how React handles effects, state, and visibility. The new APIs (<Activity>, useEffectEvent, cacheSignal, Partial Pre-rendering) move React toward a more declarative model.
🌐
React
react.dev › reference › eslint-plugin-react-hooks
eslint-plugin-react-hooks – React
The lints cover both fundamental React patterns (exhaustive-deps and rules-of-hooks) and issues flagged by React Compiler. React Compiler diagnostics are automatically surfaced by this ESLint plugin, and can be used even if your app hasn’t adopted the compiler yet.
Find elsewhere
🌐
npm
npmjs.com › package › @eslint-react › eslint-plugin
@eslint-react/eslint-plugin - npm
Modern: First-class support for TypeScript, React 19, and more. Flexible: Fully customizable rule severity levels, allowing you to enforce or relax rules as needed. Performant: Built with performance in mind, optimized for large codebases, 4-7x ...
      » npm install @eslint-react/eslint-plugin
    
Published   Feb 14, 2026
Version   2.13.0
Author   Rel1cx
🌐
GitHub
github.com › facebook › react › issues › 29107
[React 19] `eslint-plugin-react-compiler` throws SyntaxErrors when it encounters `.json` or `.graphql` files · Issue #29107 · facebook/react
May 16, 2024 - Summary If your linting command encompasses .json or .graphql files (e.g. eslint . package.json --ext .js,.jsx,.ts,.tsx,.graphql), and you have react-compiler/react-compiler enabled in your rules o...
Published   May 16, 2024
Author   trello-drew
🌐
npm
npmjs.com › package › eslint-plugin-react-compiler
eslint-plugin-react-compiler - npm
ESLint plugin to display errors found by the React compiler.. Latest version: 19.1.0-rc.2, last published: 9 months ago. Start using eslint-plugin-react-compiler in your project by running `npm i eslint-plugin-react-compiler`. There are 107 ...
      » npm install eslint-plugin-react-compiler
    
Published   May 14, 2025
Version   19.1.0-rc.2
Top answer
1 of 1
3

Your flat config has some issues, so let's go one by one:

  1. You're missing an import at the top:
import js from '@eslint/js';

Since you're using the following rules: ...js.configs.recommended.rules.

  1. You're importing eslint-plugin-react twice, this isn't an error but it's better to just import it once.

  2. The last line where you're extending the config pluginReact.configs.recommended will not work because it has an older format for plugins. Considering how you already have the plugins and parserOptions manually added onto your config, you should probably just extend the rules:

rules: {
  ...react.configs.recommended.rules
}
  1. The error you're facing is actually documented here, it is a known issue with eslint-plugin-import when using the import/no-unused-modules rule. You can fix it by adding an empty .eslintrc file in your project.

Finally, your config could look like this:

import js from '@eslint/js';
import globals from "globals";
import { defineConfig } from "eslint/config";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import prettier from "eslint-plugin-prettier";
import importPlugin from "eslint-plugin-import";
import react from "eslint-plugin-react";
import jsxA11y from "eslint-plugin-jsx-a11y";

export default defineConfig([
  { ignores: ["dist"] },
  {
    files: ["**/*.{js,mjs,cjs,jsx}"],
    languageOptions: {
      ecmaVersion: 2020,
      globals: globals.browser,
      parserOptions: {
        ecmaVersion: "latest",
        ecmaFeatures: { jsx: true },
        sourceType: "module",
      },
    },
    plugins: {
      "react-hooks": reactHooks,
      "react-refresh": reactRefresh,
      prettier,
      import: importPlugin,
      react,
      "jsx-a11y": jsxA11y,
    },
    rules: {
      ...js.configs.recommended.rules,
      ...reactHooks.configs.recommended.rules,
      // "no-unused-vars": ["error", { varsIgnorePattern: "^[A-Z_]" }],
      // "no-undef": ["error", { globals: { process: true } }],
      // Vite React specific
      "react-refresh/only-export-components": [
        "warn",
        { allowConstantExport: true },
      ],

      // Your custom rules from old config
      "prettier/prettier": "off",
      "no-nested-ternary": "off",
      "no-underscore-dangle": "off",
      "default-param-last": "off",
      "prefer-arrow-callback": "error",
      camelcase: ["error", { properties: "never", ignoreDestructuring: true }],
      "no-else-return": ["error", { allowElseIf: true }],
      "no-param-reassign": ["error", { props: false }],

      // Import rules
      "import/no-extraneous-dependencies": [
        "error",
        {
          devDependencies: false,
          optionalDependencies: false,
          peerDependencies: false,
        },
      ],
      "import/order": [
        "error",
        {
          pathGroups: [
            {
              pattern: "react",
              group: "external",
              position: "before",
            },
          ],
          pathGroupsExcludedImportTypes: ["builtin"],
        },
      ],
      "import/no-unused-modules": ["error", { unusedExports: true }],

      // React rules
      "react/require-default-props": "off",
      "react/jsx-no-undef": ["error", { allowGlobals: true }],
      "react/jsx-uses-vars": "error",
      ...react.configs.recommended.rules,

      // Best Practices
      eqeqeq: "error",
      "no-invalid-this": "error",
      "no-return-assign": "error",
      "no-unused-expressions": ["error", { allowTernary: true }],
      "no-useless-concat": "error",
      "no-useless-return": "error",
      "no-use-before-define": "error",
      "no-duplicate-imports": "error",
      "no-plusplus": ["error", { allowForLoopAfterthoughts: true }],

      // Variable and import rules
      "no-undef": "error",
      "no-unused-vars": [
        "error",
        {
          vars: "all",
          args: "after-used",
          ignoreRestSiblings: true,
          varsIgnorePattern: "^[A-Z_]", // Keep the pattern from new config
        },
      ],
    },
    settings: {
      react: {
        version: "detect",
      },
    },
  },
]);
🌐
Letsreact
letsreact.org › how-to-use-eslint-plugin-react-hooks-v6-in-react-19-2
How to Use eslint-plugin-react-hooks v6 in React 19.2 | LetsReact.org
October 6, 2025 - Using `eslint-plugin-react-hooks v6` in React 19.2 helps you write better code. This tool checks your hooks to make sure they follow rules. Install the plugin,…
🌐
LogRocket
blog.logrocket.com › home › react 19.2 is here: activity api, useeffectevent, and more
React 19.2 is here: Activity API, useEffectEvent, and more - LogRocket Blog
October 14, 2025 - npm install eslint-plugin-react-hooks@^6.1.1 --save-dev # or yarn add eslint-plugin-react-hooks@^6.1.1 --dev · React 19.2 may be a minor release, but it certainly feels like a major one.
🌐
DEV Community
dev.to › elvissautet › react-192-just-dropped-what-actually-matters-my-3-week-production-test-5387
React 19.2 Just Dropped: What Actually Matters (My 3-Week Production Test) - DEV Community
October 24, 2025 - You can't test thoroughly The ESLint changes can surface hidden bugs. You're close to a major release Wait until after your current milestone. You're on React < 18 Upgrade to 18.3 first, then 19, then 19.2.
🌐
Eslint-react
eslint-react.xyz › docs › roadmap
Roadmap | ESLint React
eslint-plugin-react-naming-convention - Naming convention rules designed for React projects · ... (Free to combine with other plugins from the community) ... react-x/jsx-no-comment-textnodes - Disallow text nodes with comments in JSX (Replaces no-comment-textnodes) react-x/no-context-provider - Replaces usage of <Context.Provider> with <Context> (React 19)
🌐
DEV Community
dev.to › manojspace › creating-a-modern-react-app-a-comprehensive-guide-1plk
Creating a Modern React App: Vite + TypeScript + ESLint + Tailwind + shadcn/ui and Zustand - DEV Community
January 1, 2025 - In this guide, we'll walk through the process of setting up a React application with the latest features and popular libraries. We'll be using React 19, React Router, Tailwind CSS, shadcn/ui, ESLint with Prettier, and Zustand for state management.
🌐
GitHub
github.com › patternfly › patternfly-react › issues › 11483
React 19: eslint-plugin-react-19-upgrade · Issue #11483 · patternfly/patternfly-react
December 13, 2024 - Describe the enhancement or change Install and configure eslint-plugin-react-19-upgrades, it can be found here . Run the rules to fix the breaking changes for React 19. This should be done before fixing the other breaking change react 19...
Author   tlabaj
🌐
GitHub
github.com › jsx-eslint › eslint-plugin-react
GitHub - jsx-eslint/eslint-plugin-react: React-specific linting rules for ESLint · GitHub
It is also possible to install ESLint globally rather than locally (using npm install -g eslint). However, this is not recommended, and any plugins or shareable configs that you use must be installed locally in either case. ... If you are using the new JSX transform from React 17, extend react/jsx-runtime in your eslint config (add "plugin:react/jsx-runtime" to "extends") to disable the relevant rules.
Starred by 9.3K users
Forked by 2.7K users
Languages   JavaScript
🌐
Medium
medium.com › @onix_react › whats-new-in-react-19-2-0-04b9019ceb27
What’s new in React 19.2.0
October 2, 2025 - eslint-plugin-react-hooks@6.1.0 is now available with: Flat config as default in the recommended preset. Opt-in rules powered by the React Compiler. ... The default prefix for IDs generated by the useId hook is updated from :r: (or «r» in 19.1) to _r_.