Modern, composable ESLint config for JavaScript, TypeScript, React, Next.js & Tailwind CSS
npm install -D eslint @iamankeshsharma/eslint-configimport config from "@iamankeshsharma/eslint-config";
export default config();Most ESLint configs are:
- too rigid ❌
- too minimal ❌
- hard to extend ❌
This config is:
- ✅ Modular
- ✅ Composable
- ✅ Flat config ready (ESLint v9+)
- ✅ Works with modern stacks (Next.js, Tailwind, TS)
- ✅ Flexible peer dependencies (no install conflicts)
- ✅ Designed for real-world scaling (monorepos, teams)
npm install -D eslint @eslint/js typescript-eslint eslint-plugin-import eslint-plugin-unicorn eslint-plugin-sonarjs eslint-plugin-simple-import-sort eslint-config-prettier @iamankeshsharma/eslint-config👉 Install additional plugins only when needed (React, Next, Tailwind).
import createConfig from "@iamankeshsharma/eslint-config";
export default createConfig();import createConfig from "@iamankeshsharma/eslint-config";
export default createConfig({
ignores: ["coverage", "generated"],
rules: {
"no-console": "warn",
},
});npm install -D eslint-plugin-react eslint-plugin-react-hooksimport createReactConfig from "@iamankeshsharma/eslint-config/react";
export default createReactConfig();npm install -D @next/eslint-plugin-next eslint-plugin-react eslint-plugin-react-hooksimport createNextConfig from "@iamankeshsharma/eslint-config/next";
export default createNextConfig();npm install -D eslint-plugin-tailwindcss prettier prettier-plugin-tailwindcssimport createTailwindConfig from "@iamankeshsharma/eslint-config/tailwind";
export default createTailwindConfig();{
"plugins": ["prettier-plugin-tailwindcss"]
}- ✔ Automatically sorts Tailwind classes
- ✔ Cleaner diffs in PRs
import createNextConfig from "@iamankeshsharma/eslint-config/next";
import tailwindcss from "eslint-plugin-tailwindcss";
export default [
...createNextConfig(),
{
plugins: { tailwindcss },
settings: {
tailwindcss: {
callees: ["clsx", "cn"],
config: "tailwind.config.js",
},
},
rules: {
"tailwindcss/classnames-order": "warn",
"tailwindcss/no-contradicting-classname": "error",
},
},
];- ESLint v9 flat config
- TypeScript support
- Import sorting
- Code quality rules (SonarJS)
- Unicorn best practices
- Prettier compatibility
- Hooks enforcement
- JSX best practices
- Next.js Core Web Vitals rules
- Class order enforcement
- Conflict detection
- Shorthand optimization
eslint-config/
├ base/
├ react/
├ next/
├ tailwind/
└ package.json
{
"scripts": {
"lint": "eslint .",
"format": "prettier --write .",
"release": "standard-version",
"release:dry": "standard-version --dry-run"
}
}| Package | Version |
|---|---|
| eslint | ^9 |
| @eslint/js | ^9 |
| typescript-eslint | ^8 |
👉 Designed for ESLint v9 flat config
This project uses standard-version for automated versioning and changelog generation.
feat: add react config support
fix: resolve peer dependency issue
chore: update dependencies| Commit Type | Version Bump |
|---|---|
| fix | Patch |
| feat | Minor |
| BREAKING CHANGE | Major |
npm run release👉 Automatically:
- bumps version
- updates
CHANGELOG.md - creates commit + tag
npm pack
git log --oneline -5git push --follow-tagsnpm publish --access publicgit add .
git commit -m "feat: improve eslint config compatibility"
npm run release
git push --follow-tags
npm publish --access publicnpm packTest install:
mkdir test-install
cd test-install
npm init -y
npm install ../your-package.tgzMIT
If this helped you, consider giving a star ⭐