---
title: Plugins
description: "Where every rule in every preset comes from — the upstream plugin or spec it's ported or wrapped from, and where to read why a rule is off."
type: package
package: "@zap-studio/oxlint"
---

Every rule in `oxlint` traces back to one of two places: a plugin **built into oxlint itself** (ported from an upstream ESLint plugin into Rust, and run natively), or an **external ESLint plugin** loaded through `jsPlugins` and run as real JS. This page lists both, with a link to the upstream source and a link to the file in this repo where the rule is turned on or off — every `"off"` entry carries a comment explaining why, so you never have to guess.

## Built into oxlint

These run as native oxc rules, ported from the ESLint plugin named. Browse the full ported rule set on [oxc's rules reference](https://oxc.rs/docs/guide/usage/linter/rules.html); the upstream link is where the rule concept and original docs come from.

| Plugin       | Upstream                                                                           | Used by                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------ | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `eslint`     | [ESLint core rules](https://eslint.org/docs/latest/rules/)                         | [`base`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/base.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `typescript` | [typescript-eslint](https://typescript-eslint.io/rules/)                           | [`base`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/base.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `unicorn`    | [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn)     | [`base`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/base.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `oxc`        | oxc-original — no upstream, native to the linter                                   | [`base`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/base.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `import`     | [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import)          | [`base`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/base.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `jsdoc`      | [eslint-plugin-jsdoc](https://github.com/gajus/eslint-plugin-jsdoc)                | [`jsdoc`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/jsdoc.ts)                                                                                                                                                                                                                                                                                                                                                            |
| `node`       | [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n)             | [`node`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/node.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `promise`    | [eslint-plugin-promise](https://github.com/eslint-community/eslint-plugin-promise) | [`base`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/base.ts)                                                                                                                                                                                                                                                                                                                                                              |
| `react`      | [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react)           | [`react`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/react.ts), [`react-compiler`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/react-compiler.ts), [`jsx-runtime-automatic`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/jsx-runtime-automatic.ts)/[`jsx-runtime-classic`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/jsx-runtime-classic.ts) |
| `react-perf` | [eslint-plugin-react-perf](https://github.com/cvazac/eslint-plugin-react-perf)     | [`react-perf`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/react-perf.ts)                                                                                                                                                                                                                                                                                                                                                  |
| `jsx-a11y`   | [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)     | [`react-a11y`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/react-a11y.ts)                                                                                                                                                                                                                                                                                                                                                  |
| `vitest`     | [eslint-plugin-vitest](https://github.com/vitest-dev/eslint-plugin-vitest)         | [`vitest`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/vitest.ts)                                                                                                                                                                                                                                                                                                                                                          |

None of these appear in `package.json` — oxlint ships its own port, so there's no npm dependency to install or version to track.

## External ESLint plugins

These are real npm packages, loaded through `jsPlugins` and run as actual ESLint plugin JS (listed as `dependencies` in [`packages/oxlint/package.json`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/package.json)). Every upstream rule is covered — either `"error"` or explicitly `"off"` with a comment.

| Plugin            | Package                          | Upstream                                                                                                                                                      | Rule decisions in this repo                                                                                                                                                                                                                                                                                                                      |
| ----------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `regexp`          | `eslint-plugin-regexp`           | [GitHub](https://github.com/ota-meshi/eslint-plugin-regexp) · [docs](https://ota-meshi.github.io/eslint-plugin-regexp/)                                       | [`_rules-regexp.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-regexp.ts)                                                                                                                                                                                                                                      |
| `sonarjs`         | `eslint-plugin-sonarjs`          | [GitHub](https://github.com/SonarSource/SonarJS) · [rule docs](https://github.com/SonarSource/SonarJS/blob/master/packages/analysis/src/jsts/rules/README.md) | [`_rules-sonarjs.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-sonarjs.ts)                                                                                                                                                                                                                                    |
| `github`          | `eslint-plugin-github`           | [GitHub](https://github.com/github/eslint-plugin-github)                                                                                                      | [`_rules-github.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-github.ts) (`base`); its 4 `a11y-*` rules with no jsx-a11y equivalent live in [`react-a11y.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/react-a11y.ts) instead                                                     |
| `e18e`            | `@e18e/eslint-plugin`            | [GitHub](https://github.com/e18e/eslint-plugin)                                                                                                               | [`_rules-e18e.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-e18e.ts)                                                                                                                                                                                                                                          |
| `playwright`      | `eslint-plugin-playwright`       | [GitHub](https://github.com/mskelton/eslint-plugin-playwright)                                                                                                | [`playwright.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/playwright.ts), rules in [`_rules-playwright.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-playwright.ts)                                                                                                              |
| `react-doctor`    | `oxlint-plugin-react-doctor`     | [GitHub](https://github.com/millionco/react-doctor) (directory `packages/oxlint-plugin-react-doctor`)                                                         | [`react-doctor.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/react-doctor.ts) (framework-agnostic core, rules in [`_rules-react-doctor.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-react-doctor.ts)) and the per-framework leaves, each with its own `_rules-react-doctor-*.ts` |
| `tanstack-query`  | `@tanstack/eslint-plugin-query`  | [Docs](https://tanstack.com/query/latest/docs/eslint/eslint-plugin-query) · [GitHub](https://github.com/TanStack/query)                                       | [`tanstack-query.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/tanstack-query.ts), rules in [`_rules-tanstack-query.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-tanstack-query.ts)                                                                                              |
| `tanstack-router` | `@tanstack/eslint-plugin-router` | [Docs](https://tanstack.com/router/latest/docs/eslint/eslint-plugin-router) · [GitHub](https://github.com/TanStack/router)                                    | [`tanstack-router.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/tanstack-router.ts), rules in [`_rules-tanstack-router.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-tanstack-router.ts)                                                                                          |
| `stylex`          | `@stylexjs/eslint-plugin`        | [GitHub](https://github.com/facebook/stylex/tree/main/packages/eslint-plugin)                                                                                 | [`stylex.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/stylex.ts), rules in [`_rules-stylex.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-stylex.ts)                                                                                                                              |
| `tailwindcss`     | `eslint-plugin-tailwindcss`      | [GitHub](https://github.com/francoismassart/eslint-plugin-tailwindcss)                                                                                        | [`tailwindcss.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/tailwindcss.ts), rules in [`_rules-tailwindcss.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-tailwindcss.ts)                                                                                                          |
| `testing-library` | `eslint-plugin-testing-library`  | [GitHub](https://github.com/testing-library/eslint-plugin-testing-library)                                                                                    | [`testing-library.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/testing-library.ts), rules in [`_rules-testing-library.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-testing-library.ts)                                                                                          |
| `jest-dom`        | `eslint-plugin-jest-dom`         | [GitHub](https://github.com/testing-library/eslint-plugin-jest-dom)                                                                                           | [`jest-dom.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/jest-dom.ts), rules in [`_rules-jest-dom.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-jest-dom.ts)                                                                                                                      |
| `cypress`         | `eslint-plugin-cypress`          | [GitHub](https://github.com/cypress-io/eslint-plugin-cypress)                                                                                                 | [`cypress.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/cypress.ts), rules in [`_rules-cypress.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-cypress.ts)                                                                                                                          |
| `storybook`       | `eslint-plugin-storybook`        | [GitHub](https://github.com/storybookjs/eslint-plugin-storybook)                                                                                              | [`storybook.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/storybook.ts), rules in [`_rules-storybook.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-storybook.ts)                                                                                                                  |
| `solid`           | `eslint-plugin-solid`            | [GitHub](https://github.com/solidjs-community/eslint-plugin-solid)                                                                                            | [`solid.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/solid.ts), rules in [`_rules-solid.ts`](https://github.com/zap-studio/monorepo/blob/main/packages/oxlint/src/_rules-solid.ts)                                                                                                                                  |

`react-doctor` is the one wrapped plugin that ships its own per-framework rule slices — [`presets`](/oxlint/presets) explains how those slices map onto the framework and library leaf presets. Its framework-agnostic core used to duplicate roughly 90 rules already owned by `react`, `react-perf`, and `jsx-a11y`; those now live exclusively in the plugin that originates them, not in `react-doctor`.

## Original rules

[`anti-slop`](/oxlint/anti-slop) isn't wrapped from anything upstream — it's original to this repo. Its rules and their rationale live directly in [`src/anti-slop/rules`](https://github.com/zap-studio/monorepo/tree/main/packages/oxlint/src/anti-slop/rules).

## Checking why a rule is off

Every `"off"` entry in this package sits next to a comment explaining the reason — a deprecation, a false-positive pattern, an option this repo's rule-map shape can't express. Open the file for the plugin in question (linked in the tables above) and search for the rule name; the comment sits directly above it. If a rule you'd expect isn't covered at all, it means the preset simply doesn't load that plugin — check [presets](/oxlint/presets) for which plugins each preset pulls in.
