ESLint Major Version Migration (v8 to v9)

Track all package changes when migrating ESLint from v8 to v9, including removed plugins, new flat config packages, and updated shared configs.

Framework Migration

Detailed Explanation

ESLint v8 to v9 Migration

ESLint 9 introduced the flat config system, which fundamentally changed how ESLint is configured. This migration involves not just updating ESLint itself but replacing many plugins and config packages.

Typical ESLint 8 to 9 diff

devDependencies:
  ~ eslint: ^8.50.0 -> ^9.0.0                    [MAJOR]
  - eslint-config-next: ^14.0.0                   [REMOVED]
  - @typescript-eslint/parser: ^6.0.0             [REMOVED]
  - @typescript-eslint/eslint-plugin: ^6.0.0      [REMOVED]
  + @eslint/js: ^9.0.0                            [ADDED]
  + typescript-eslint: ^8.0.0                     [ADDED]
  + eslint-config-next: ^15.0.0                   [ADDED - new version]
  + globals: ^15.0.0                              [ADDED]

Key changes in ESLint 9

Old (v8) New (v9)
.eslintrc.json eslint.config.mjs (flat config)
@typescript-eslint/parser typescript-eslint (unified package)
@typescript-eslint/eslint-plugin typescript-eslint
eslint-plugin-import Often replaced with eslint-plugin-import-x
extends array ...configs spread syntax

Migration checklist

Use the diff to verify:

  1. ESLint core updated to v9+
  2. Old packages removed: @typescript-eslint/parser, @typescript-eslint/eslint-plugin
  3. New packages added: typescript-eslint, @eslint/js, globals
  4. Config file renamed: .eslintrc.* to eslint.config.*
  5. Scripts updated: eslint commands may need new flags

Why the diff tool helps here

This migration involves simultaneous additions and removals. Without a structured diff, it is easy to miss a removed package or forget to add a replacement. The summary panel shows you the total count of changes at a glance.

Use Case

A team is migrating their project from ESLint 8 with the traditional .eslintrc config to ESLint 9 with flat config. They use the Package.json Diff tool to verify all old plugin packages were properly replaced with their new equivalents.

Try It — Package.json Diff

Open full tool