# Migration: ESLint 10 support (v10.0.0)

As of `10.0.0`, `@bitfactory/eslint-config` supports **ESLint 10** (peer range widened to `^9.38.0 || ^10.0.0`). Node.js 20 remains supported (minimum raised to `20.19`, matching ESLint 10's own floor). Superseded in `11.0.0`: Node 20 was dropped, so this line requires `^22.13.0 || ^24.11.0`; see `docs/migration-node-20-drop.md`.

## What changed

- Peer ranges for `eslint` and `@eslint/js` now include `^10`.
- `eslint-plugin-import` is replaced by `eslint-plugin-import-x` (a maintained drop-in with ESLint 10 support; the `import/*` rule IDs this config uses are unchanged). Superseded in `12.0.0`: the plugin moved to the `import-x` namespace and the rule ID became `import-x/no-duplicates`. See `docs/migration-import-x-namespace.md`.
- The `eslint-plugin-jsdoc` peer has a floor of `>=62.7.0`, where jsdoc first peers ESLint 10; `62.6.0` and below peer only up to ESLint 9. Run `npm info @bitfactory/eslint-config peerDependencies` against the version you are installing for the current ceiling, rather than trusting a bound quoted here.
- Minimum Node.js raised to `^20.19.0 || ^22.13.0 || ^24.11.0` (ESLint 10's engine floor). Superseded in `11.0.0`: Node 20 was dropped; see `docs/migration-node-20-drop.md`.

## What you need to do

- **Upgrade ESLint** to `^10` (or stay on `^9.38.0` - both are supported).
- **Replace the peer** `eslint-plugin-import` with `eslint-plugin-import-x` in your devDependencies. On the `10.x` line no rule-name changes are needed; from `12.0.0` onward, rename any `import/no-duplicates` reference to `import-x/no-duplicates` (see `docs/migration-import-x-namespace.md`).
- **Ensure Node.js `^22.13.0 || ^24.11.0`** - `11.0.0` dropped Node 20, so a `13.0.0` upgrade needs this rather than the range above. See `docs/migration-node-20-drop.md`.

## Why import-x

`eslint-plugin-import` does not declare ESLint 10 support; `eslint-plugin-import-x` is its maintained flat-config successor. See ADR-0002.
