# Migration: peer range bounds (v13.0.0)

`13.0.0` raises every peer whose *declared floor* had an `eslint` peer that excludes part of this package's declared support (`^9.38.0 || ^10.0.0`). Each new floor is the lowest published version covering both ESLint 9 and ESLint 10, so ESLint 9 remains fully supported. It also caps `typescript`, which was unbounded.

## What changed

| Peer | Was | Now | Why the old floor failed |
| --- | --- | --- | --- |
| `eslint-config-flat-gitignore` | `^2.0.0` | `>=2.2.1 <3.0.0` | `2.0.0` and `2.1.0` peer `^9.5.0` |
| `@typescript-eslint/eslint-plugin` | `>=8.0.0` | `>=8.58.0` | `8.0.0` peers `^8.57.0 \|\| ^9.0.0`; `8.58.0` is also the first to peer `typescript <6.1.0` |
| `@typescript-eslint/parser` | `>=8.0.0` | `>=8.58.0` | as above |
| `eslint-plugin-vue` | `>=10.0.0` | `>=10.8.0` | `10.0.0` peers `^8.57.0 \|\| ^9.0.0` |
| `vue-eslint-parser` | `>=10.1.1` | `>=10.3.0` | `10.1.1` peers `^8.57.0 \|\| ^9.0.0` |
| `@nuxt/eslint-config` | `>=1.6.0 <2.0.0` | `>=1.15.0 <2.0.0` | `1.6.0` peers `^9.0.0` |
| `eslint-plugin-vuejs-accessibility` | `>=2.0.0` | `>=2.4.2` | `2.0.0` peers `^5.0.0` through `^8.0.0`, excluding ESLint 9 as well |
| `typescript` | `>=4.8.4` | `>=4.8.4 <6.1.0` | unbounded, so it admitted TS 7, which no `@typescript-eslint` release supports |

## What you need to do

- **Bump any of the above you pin below its new floor.** A pin below the floor fails the install outright under npm's default resolution, or under pnpm with `strict-peer-dependencies` (pnpm's own default only warns). ESLint 9 consumers are affected too: most removed versions supported ESLint 9.
- **A required peer's floor reaches every consumer; an optional one reaches only the projects that use its entrypoint.** Run `npm info @bitfactory/eslint-config peerDependenciesMeta` against the version you are installing to see which is which, rather than trusting a list here that a later release can outdate.
- Nothing changes if you resolve these peers by range rather than pinning them, and your installed versions satisfy every new range - including `typescript`'s new `<6.1.0` upper bound, which a floor check alone will not catch.

## What did not change

ESLint support is untouched: `^9.38.0 || ^10.0.0`. Every new floor still peers ESLint 9, so this is not an ESLint 10 requirement.

## If you use TypeScript

The `typescript` peer gains a ceiling of `<6.1.0`, matching what the `@typescript-eslint` toolchain supports: the `@typescript-eslint` 8.x releases from `8.58.0` peer `typescript >=4.8.4 <6.1.0`. It was unbounded, so it promised TypeScript 7 support that no `@typescript-eslint` release has.

TypeScript 6.0.x is supported and unaffected. The `@typescript-eslint` floor is `>=8.58.0` rather than the `8.56.0` its ESLint peer alone would allow, precisely so the two agree: `8.56.0` and `8.57.0` peer `typescript <6.0.0`, and admitting them would have meant capping `typescript` below 6.

## If you use `/nuxt`

The `@nuxt/eslint-config` floor moves from `1.6.0` to `1.15.0`, and `1.6.0` was the version `12.0.0` told you to upgrade *to* in order to clear the `import` namespace collision. If you followed that advice and landed anywhere in `1.6.0`-`1.14.0`, you are now below the floor. The collision remedy is unchanged otherwise; see [Known issue: `import` plugin namespace collision](known-issue-import-namespace.md).

## Why bound rather than widen

A range that promises a combination that does not work cannot be fixed by adding versions; the incompatible ones have to leave it. See ADR-0011.
