4-7x faster composable ESLint rules for React and friends.
- Features
- Public Packages
- Installation
- Presets
- Rules
- Benchmark
- FAQ
- Roadmap
- Disclaimer
- Contributing
- License
- 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 faster than other ESLint plugins.
- Context-aware Linting: Rules that understand the context of your code and project configuration to provide more accurate linting.
- @eslint-react/eslint-plugin- A unified plugin that combines all individual plugins into one.
- eslint-plugin-react-x- X Rules (renderer-agnostic, compatible with x-platform).
- eslint-plugin-react-dom- DOM specific rules for React DOM.
- eslint-plugin-react-web-api- Rules for interacting with Web APIs.
- eslint-plugin-react-hooks-extra- Extra React Hooks rules.
- eslint-plugin-react-naming-convention- Naming convention rules.
Note
Don't know which one to use? See our FAQ for guidance.
Note
ESLint React requires the following minimum versions:
- Node.js: 20.19.0
- ESLint: 9.36.0
- TypeScript: 5.0.0
npm install --save-dev typescript-eslint @eslint-react/eslint-plugin// eslint.config.js
import eslintReact from "@eslint-react/eslint-plugin";
import eslintJs from "@eslint/js";
import { defineConfig } from "eslint/config";
import tseslint from "typescript-eslint";
export default defineConfig([
  {
    files: ["**/*.ts", "**/*.tsx"],
    // Extend recommended rule sets from:
    // 1. ESLint JS's recommended rules
    // 2. TypeScript ESLint recommended rules
    // 3. ESLint React's recommended-typescript rules
    extends: [
      eslintJs.configs.recommended,
      tseslint.configs.recommended,
      eslintReact.configs["recommended-typescript"],
    ],
    // Configure language/parsing options
    languageOptions: {
      // Use TypeScript ESLint parser for TypeScript files
      parser: tseslint.parser,
      parserOptions: {
        // Enable project service for better TypeScript integration
        projectService: true,
        tsconfigRootDir: import.meta.dirname,
      },
    },
    // Custom rule overrides (modify rule levels or disable rules)
    rules: {
      "@eslint-react/no-missing-key": "warn",
    },
  },
]);- x
 Enable rules for- "react".
- dom
 Enable rules for- "react-dom".
- web-api
 Enable rules for interacting with Web APIs.
- 
recommended
 Enforce rules that are recommended by ESLint React for general purpose React + React DOM projects.
 This preset includes thex,dom, andweb-apipresets.
- 
strict
 Same as therecommendedpreset but enables additional strict rules.
- 
recommended-typescript
 Same as therecommendedpreset but disables rules that can be enforced by TypeScript.
- 
recommended-type-checked
 Same as therecommended-typescriptpreset but enables additional rules that require type information.
- 
strict-typescript
 Same as thestrictpreset but disables rules that can be enforced by TypeScript.
- 
strict-type-checked
 Same as thestrict-typescriptpreset but enables additional rules that require type information.
- disable-dom
 Disable rules in the- dompreset.
- disable-web-api
 Disable rules in the- web-apipreset.
- disable-type-checked
 Disable rules that require type information.
- disable-conflict-eslint-plugin-react
 Disable rules in- eslint-plugin-reactthat conflict with rules in our plugins.
- off
 Disable all rules in this plugin except for debug rules.
ESLint React is not affiliated with Meta Corporation or facebook/react project or team, nor is it endorsed or sponsored by them.
Contributions are welcome!
Please follow our contributing guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.