The ESLint config for teams that ship with AI and want to move fast.
Most ESLint configs compose rules at runtime from dozens of plugins. That means version conflicts, plugin mismatches, and "works on my machine" differences. ESLint Config Setup resolves every rule at build time — you get a flat, pre-built config where every rule is already decided. No runtime composition, no surprises.
- AI guardrails — a dedicated
aimode that enforces what code review can't: explicit types, strict naming, no magic values, complexity limits. Rules that humans find tedious are trivial for an AI to follow. The AI doesn't push back. It just fixes the code. - OxLint-ready — a single
oxlintflag disables every ESLint rule that OxLint already covers, andgetOxlintConfig()generates a matching OxLint config. No manual migration, no rule conflicts, no coverage gaps. Run both linters, get the full rule set at 100x the speed. - 27 plugins, one import — TypeScript (
strictTypeChecked), React 19, import cycles, security, browser compat, spell checking, and more. Every rule pre-resolved at build time. No plugin conflicts, no version mismatches.
// eslint.config.ts
import { getEslintConfig } from "eslint-config-setup"
export default await getEslintConfig({ react: true, ai: true })npm install -D eslint-config-setup eslint typescript// eslint.config.ts
import { getEslintConfig } from "eslint-config-setup"
export default await getEslintConfig({ react: true })Requires Node.js >= 22, ESLint >= 9.22, and TypeScript >= 5.0.
| Flag | Default | What it does |
|---|---|---|
react |
false |
React 19+ with Hooks, Compiler, JSX-A11y, Storybook, Testing Library |
node |
false |
Node.js globals, eslint-plugin-n. Disables browser compat checks. |
ai |
false |
Strict guardrails for AI-generated code (naming, types, complexity) |
oxlint |
false |
Disables ESLint rules already covered by OxLint |
Flags are independent. Combine them however you need.
import { getEslintConfig, disableRule, addRule } from "eslint-config-setup"
const config = await getEslintConfig({ react: true, ai: true })
disableRule(config, "@typescript-eslint/no-magic-numbers", { scope: "tests" })
addRule(config, "no-console", "off", { scope: "scripts" })
export default config- Getting Started — installation and setup
- React Linting — React 19 rules, compat layer, and OxLint acceleration
- AI Mode — why AI-generated code needs different rules
- OxLint Integration — run ESLint + OxLint without conflicts
- All 27 Plugins — what's included and why
- Configuration — flags and usage examples
- Rule API — rule manipulation and scoped overrides
- File Conventions — automatic test/config/story/script overrides
- Modular Imports — compose individual config blocks manually
- Architecture — how pre-generation works
- Contributing — monorepo workflow, self-linting, and hooks
See CONTRIBUTING.md for development setup, architecture overview, and PR guidelines.
MIT — Copyright (c) 2025 Sebastian Software GmbH