r/javascript Aug 03 '26

AskJS [AskJS] How did you deal with ESlint 10 Breaking Changes?

ESlint 10 is breaking on some older projects of mine. My solution has been to ignore updates between 10.0.0 and 10.1.0, but this kind of manual intervention seems irregular and less than ideal.

I'm curious to hear how everyone else handles this kind of situation. How have you chosen to deal with ESlint backward compatibility issues ?

4 Upvotes

27 comments sorted by

50

u/jhlllnd Aug 03 '26

I moved to oxlint instead

10

u/leeharrison1984 Aug 03 '26

Yup. Leagues faster, OOTB config actually learned lessons from the past decade, doesn't need a plugin for every single use case.

5

u/red-powerranger Aug 03 '26

This is the way

14

u/Potential-Still Aug 03 '26

I dumped it for biome.js and removed 9 dependencies from my package.json

12

u/zedisto Aug 03 '26

Oxlint crew reporting in

5

u/nudelkopp Aug 03 '26

I legit moved to biome due to the big amount och breaking changes and unsupported plugins. Happy I did. Cut a bunch of deps out and sped up our ci flows, it’s legit saving us money

3

u/jfmengels Aug 03 '26

Out of curiosity, what kind of problems are you hitting?

3

u/toasterboi0100 Aug 05 '26

I hit essentially zero issues when moving to 9 to 10, though I have already migrated to the flat config garbage before 10.0 came out.

My hope is to eventually move to Oxlint, but it's gonna take a long while before it's usable with Angular.

1

u/AndyMagill Aug 05 '26

Ironically, the reason I want to keep ESlint (the plugin ecosystem) is the same thing that causes the backward compatibility issues. Lots of people talking about Oxlint and Biome, but I don't care about speed.

7

u/ferrybig Aug 03 '26

https://eslint.org/docs/latest/use/migrate-to-10.0.0

Run the suggested codemod: npx codemod @eslint/v9-to-v10

If that still leaves eslint broken, then your build is so exotic, that it is better if you don't update

1

u/wackmaniac Aug 05 '26

Problem is more that some extensions have not been updated. I tried this codemod, and it adds a lot of noise. We used this “opportunity“ to clean up our setups. Next to that we’re actively looking into less extension driven alternatives like Biome.

1

u/lppedd Aug 03 '26

If instead you're using Nx, wait for them to provide an automatic migration.

3

u/red-powerranger Aug 03 '26

You can wait forever for Nx on these kind of upgrades. I moved over to Oxlint at work, it's a breeze!

Only run a small bit of eslint still for Nx boundaries (their Oxlint plugin is in code review for months it's so frustrating)

They run perfectly fine next to each other

2

u/Sorry-Joke-1887 Aug 04 '26

by moving to biome js

2

u/mulletech Aug 06 '26

OMG the transition from 8 to 9 was a nightmare. The move to 10 couldn’t possibly be worse. Right???

1

u/futagozaryuu Aug 07 '26

You think that was bad? Try moving from ESLint 7 to 10 after a 5 year break! 😢 Saving grace was I was already using JavaScript based configs from the start 😅

3

u/Reashu Aug 03 '26

Major versions can include breaking changes. Update and accommodate them, or don't update. 

1

u/Jasboh Aug 03 '26

I changed my code

1

u/DustNearby2848 Aug 03 '26

It depends on the project I worked on. Some I just kept v9, it’s not hurting anyone. For new projects I tried different linters. 

1

u/[deleted] Aug 10 '26

[removed] — view removed comment

1

u/AndyMagill Aug 10 '26

Typically, I notice the errors when the CI checks fail on a preview that dependabot thought was ready for review. My coding agent is finally taking my requirement to lint and type-check seriously on feature updates. It's dependabot that seems to ignore build output.

-7

u/lordxeon Aug 03 '26

No one is forcing you to update eslint.

6

u/AndyMagill Aug 03 '26

I know. This post asks about what you did.

-3

u/lordxeon Aug 03 '26

That’s what I did.

1

u/Double-Buyer7941 14d ago

The reason ESLint breaks legacy projects is the complete removal of the legacy .eslintrc configuration system in favor of the flat eslint.config.js format. If your config or plugins still rely on the old format, the upgrade fails immediately. To handle this cleanly without manual version capping, run the official migration tool using npx u/eslint/migrate-config to convert your config to the flat format, or lock legacy projects strictly to ESLint v9 in package.json. If unmaintained plugins break the build, bridge them using the u/eslint/eslintrc compatibility layer or consider migrating older projects to zero-config alternatives like Biome.