Try @eslint-react/kit@beta
logoESLint React

Third-Party Plugins

High-quality third-party React ESLint plugins that complement ESLint React

The following plugins cover areas not currently addressed by ESLint React and are recommended for specific use cases.

JSX Stylistic

ESLint Stylistic (@stylistic/eslint-plugin) provides 19 JSX-specific rules, including:

RuleDescription
jsx-closing-bracket-locationEnforce closing bracket location in JSX
jsx-closing-tag-locationEnforce closing tag location for multiline JSX
jsx-curly-brace-presenceDisallow unnecessary curly braces around string literals
jsx-curly-spacingEnforce or disallow spaces inside JSX curly braces
jsx-equals-spacingEnforce or disallow spaces around = in JSX attributes
jsx-first-prop-new-lineEnforce first prop position in multiline JSX
jsx-indent-propsEnforce props indentation
jsx-max-props-per-lineLimit props per line
jsx-pascal-caseEnforce PascalCase for user-defined components
jsx-quotesEnforce single or double quotes in JSX attributes
jsx-self-closing-compRequire self-closing for components without children
jsx-tag-spacingEnforce whitespace around JSX tags
jsx-wrap-multilinesRequire parentheses around multiline JSX

JSX Accessibility

eslint-plugin-jsx-a11y-x by es-tooling is a static AST checker for accessibility rules on JSX elements. It is a modern, actively maintained alternative to the classic eslint-plugin-jsx-a11y, with first-class support for ESLint Flat Config.

RuleDescription
alt-textEnforce meaningful alternative text on images
anchor-is-validEnforce all anchors are valid, navigable elements
aria-propsEnforce all aria-* props are valid
aria-roleEnforce valid, non-abstract ARIA roles
click-events-have-key-eventsEnforce clickable elements have keyboard event listeners
interactive-supports-focusEnforce interactive handlers are on focusable elements
label-has-associated-controlEnforce label tags have text label and associated control
no-autofocusDisallow autoFocus prop
no-static-element-interactionsEnforce non-interactive visible elements with handlers have a role
prefer-tag-over-roleEnforce semantic DOM elements over ARIA role property

React Refresh

eslint-plugin-react-refresh by @ArnaudBarre validates that your components can be safely updated with Fast Refresh (hot reloading).

RuleDescription
only-export-componentsEnsures files only export React components to avoid Fast Refresh boundaries breaking

Key features:

  • Single, focused rule that catches common Fast Refresh pitfalls
  • Built-in presets for Vite (allowConstantExport) and Next.js (allows exports like revalidate and fetchCache)
  • Configurable options for custom HOCs (extraHOCs) and framework-specific exports (allowExportNames)

React Import Style

eslint-plugin-react-import by @marcalexiei enforces consistent React import patterns across your codebase.

RuleDescription
consistent-syntaxEnforces a uniform React import style (namespace, default, or named imports)

Use case: Ideal for teams standardizing on import * as React from "react" or any single import convention.


Summary of Scope and Relationship

PluginScopeRelationship with ESLint React
@stylistic/eslint-pluginJSX & JS stylistic rules (indent, spacing, quotes, line breaks)Complementary — covers formatting we deliberately exclude
eslint-plugin-jsx-a11y-xJSX accessibility (ARIA, alt text, focus, semantics)Complementary — covers a11y static analysis; pair with @axe-core/react for runtime checks
eslint-plugin-react-importReact import syntax consistencyComplementary — covers module conventions not in core
eslint-plugin-react-refreshFast Refresh / HMR compatibilityComplementary — covers bundler integration concerns outside React core patterns

If you maintain or know of a plugin that should be listed here, feel free to open an issue.