A simple, modern ESLint config that covers most use cases.
A strict-but-practical ESLint config that doesn’t require much thought. It works out of the box, adapts to your stack, and enforces good patterns without getting in the way.
- Auto-detects dependencies – Handles React, TypeScript, Astro, Next.js, Vitest, Jest, Playwright, Storybook, and TanStack Query.
- Prevents real issues – Focuses on rules that actually matter.
- Fast & lightweight – Loads only what’s needed, so it won’t slow you down.
- No setup needed – Install it, import it, done.
- Customizable – Turn off what you don’t need.
- Works with tests – Supports Vitest, Jest, Playwright, and Testing Library.
- Encourages modern JS – Keeps things clean and readable.
[!NOTE]
Works best with @jimmy.codes/prettier-config.
pnpm add -D @jimmy.codes/eslint-config
Add this to eslint.config.ts
:
import { defineConfig } from "@jimmy.codes/eslint-config";
export default defineConfig();
It’ll auto-configure based on your installed dependencies.
import { defineConfig } from "@jimmy.codes/eslint-config";
export default defineConfig({ autoDetect: false });
import { defineConfig } from "@jimmy.codes/eslint-config";
export default defineConfig({
astro: false,
jest: false,
nextjs: false,
playwright: false,
react: false,
storybook: false,
tanstackQuery: false,
testingLibrary: false,
typescript: false,
vitest: false,
});
import { defineConfig } from "@jimmy.codes/eslint-config";
export default defineConfig({
overrides: [
{
files: ["**/*.js"],
rules: {
"prefer-spread": "error",
},
},
{
files: ["**/*.ts"],
rules: {
"prefer-const": "error",
},
},
],
});
This config includes the following plugins:
Plugin | Purpose |
---|---|
@eslint-community/eslint-plugin-eslint-comments |
ESLint directive comments |
@eslint-react/eslint-plugin |
Modern React linting |
@eslint/js |
Core ESLint rules |
@next/eslint-plugin-next |
Next.js best practices |
@stylistic/eslint-plugin |
Consistent formatting |
@tanstack/eslint-plugin-query |
TanStack Query rules |
@vitest/eslint-plugin |
Vitest support |
eslint-config-prettier |
Disable formatting conflicts |
eslint-plugin-astro |
Astro framework support |
eslint-plugin-import-x |
Import order and hygiene |
eslint-plugin-jest |
Jest support |
eslint-plugin-jest-dom |
DOM assertions for tests |
eslint-plugin-jsdoc |
JSDoc comment rules |
eslint-plugin-jsx-a11y |
Accessibility in JSX |
eslint-plugin-n |
Node.js-specific rules |
eslint-plugin-perfectionist |
Sorting and consistency |
eslint-plugin-playwright |
Playwright testing support |
eslint-plugin-react-compiler |
React Compiler rules |
eslint-plugin-react-hooks |
Enforce React Hooks rules |
eslint-plugin-react-refresh |
Safe Fast Refresh boundaries |
eslint-plugin-regexp |
RegExp best practices |
eslint-plugin-storybook |
Storybook support |
eslint-plugin-testing-library |
Testing Library rules |
eslint-plugin-unicorn |
Modern JavaScript best practices |
typescript-eslint |
TypeScript linting and type safety |
PRs and issues welcome.
Inspired by: