ESLint .eslintrc → ESLint flat config (eslint.config.js)
mediumESLint v9 makes flat config the default. Legacy .eslintrc files still work with a flag but will be removed in v10. Flat config uses imports instead of extends.
npm install eslint@9
Use the official migration helper to convert config.
npx @eslint/migrate-config .eslintrc.json
extends: ['plugin:react/recommended'] becomes import reactPlugin from 'eslint-plugin-react' and spreading into config array.
.eslintignore → ignores property in eslint.config.js. Glob patterns are the same.
Remove ESLINT_USE_FLAT_CONFIG=false if set. Verify eslint . works.
What this migration involves
Moving from ESLint .eslintrc to ESLint flat config (eslint.config.js) is rated medium and takes about 2-4h on a typical project. The guide breaks it into 5 steps, 2 of which ship with runnable commands and 1 with a verification check.
FAQ
How long does migrating from ESLint .eslintrc to ESLint flat config (eslint.config.js) take?
Around 2-4h for a typical project — 5 steps, difficulty rated medium, 2 of them with copy-paste commands.
Is moving from ESLint .eslintrc to ESLint flat config (eslint.config.js) reversible?
No reverse guide is tracked yet, so treat this as a one-way move and keep a full export of your ESLint .eslintrc data before you start.
What does ESLint flat config (eslint.config.js) cost compared to ESLint .eslintrc?
Pricing for both tools is contact-based or not tracked yet.