Problem/Motivation
ESLint 9.0.0 was released in April 2024, and has a number of breaking changes. ESLint 8 was EOL'ed in October 2024 and is no longer supported. Drupal's coding standards are based on eslint-config-airbnb-base, which has not yet been updated to support ESLint v9.
https://eslint.org/blog/2024/04/eslint-v9.0.0-released/
https://eslint.org/docs/latest/use/migrate-to-9.0.0
ESLint v10 was released in February 2026.
https://eslint.org/blog/2026/02/eslint-v10.0.0-released/
Most notably:
Flat config is now the default configuration format for ESLint and eslintrc is officially deprecated. To continue using a such a legacy configuration file format, we need to set the ESLINT_USE_FLAT_CONFIG environment variable to false.
Proposed resolution
The original proposal here was to update Drupal Core to support ESLint v9 but this is dependent on the airbnb rules being updated first, and the eslint 9 support has still not been added as of May 17, 2026.
The current proposal is to stop depending on Airbnb and use ESLint 9 with the standard rules, as this eliminates an additional third party dependency and should make it easier to update to ESLint 10 later.
Remaining tasks
TBC
Release notes snippet
TBC
| Comment | File | Size | Author |
|---|---|---|---|
| #19 | estlint-config.txt | 3.67 KB | smustgrave |
Issue fork drupal-3440225
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #2
nicrodgersComment #3
cilefen commentedI've been updating our non-Drupal projects to the new config file format. It's a bit different, but Drupal's configs are not enormous so it should not be very difficult. I don't think backward compatibility will be a problem because eslint 8 supports the config format.
Comment #4
neclimdulThe new config format is kind of confusing but it looks like it might be useful.
Playing around with the compat layer and eslint-config-drupal I found a couple things to keep an eye one that are kinda blocking.
Seems like things are still catching up in the community so don't know if the other plugins need changes to support v9 but that could be a problem.
Comment #5
spokjeComment #6
longwaveDoesn't seem like there's much we can do here until the upstream packages are all compatible too.
Comment #7
woldtwerk commentedis airbnb config still the preferred config?
I always found it quite cumbersome. Had much more joy without airbnb and prettier and instead using antfu's config which includes eslint stylistic.
Comment #8
longwave@woldtwerk if you want to propose changing our JS standards for something else please open an issue in https://www.drupal.org/project/issues/coding_standards with some more details as to what the change is and why you think it is better.
The Airbnb standards were chosen some years ago and the JS community moves fast so it is not surprising to me that better options have become available, and we can definitely consider changing if there are advantages to doing so.
Comment #9
xjmComment #10
neclimdulGuess eslint is EOLing this weekend(tomorrow)?
https://eslint.org/blog/2024/09/eslint-v8-eol-version-support/
plugin-import rushed an update out this week.
No update on airbnb and comments asking for an update have just been marked as spam...
Comment #11
spokjeComment #12
longwaveIt seems like there is little to no movement on supporting ESLint 9 upstream in
eslint-config-airbnb-base. Is it time we moved on to a different JavaScript standard?Comment #13
nicrodgersupdated the issue summary
Comment #14
tom kondaI don't try yet but find eslint-config-airbnb-extended which supporting ESLint flat config.
IMO, it is worth trying.
Comment #15
tom kondaThe valid-jsdoc rule was removed from ESLint 9.
#3269001: Replace valid-jsdoc rule with eslint-plugin-jsdoc for eslint is blocking this issue.
Comment #16
baluertlFix annoying style ignorance in IS.
Comment #17
smustgrave commentedExperienced this on a contrib theme where I'm trying to mimic core standards and noticed couldn't update to eslint 9. And noticed eslint-config-airbnb-base still hasn't done a release in 4 years.
eslint-config-airbnb-extended looks nice just not sure how to get it working with existing eslint-json config. I converted it to a .mjs file and tried eslint-config-airbnb-extended auto create .mjs file just merging the two has been tricky. But that's a me problem.
I'm +1 for moving away from eslint-config-airbnb-base
Comment #18
konfuzed commentedSeems even more relevant as ESLint has published their v10 roadmap and looks to have that out early 2026. v10 also removes the option to use an .eslintrc on top of the other security issues being past EOL involves for ESLint v8 in core.
https://eslint.org/blog/2025/10/whats-coming-in-eslint-10.0.0/
Comment #19
smustgrave commentedNot to be used by core but uploading a txt file of the mjs file I used on a contrib theme using eslint-config-airbnb-extended
ChatGPT did help some.
Comment #20
nishargshah commentedHey @everyone,
I heard from the chat that some of you are having issues with the `eslint-config-airbnb-extended` setup. I’d be happy to help out if needed.
Could someone please share the repository URL so I can take a look and raise a PR with the new config?
Comment #21
kmonty@nishargshah The repository is here: https://git.drupalcode.org/project/drupal/-/tree/11.x
You'll want to create an issue fork. The guide for doing so is here: https://www.drupal.org/community/contributor-guide/task/create-a-merge-r...
Comment #22
nishargshah commentedShould I raise a PR here https://github.com/drupal/core? and after that some of your team members can merge it in drupal main repo, works?
Comment #23
smustgrave commentedWould say before going to through the work we need the thumbs up if this is the path to go.
Comment #24
longwaveThis is purely a frontend decision. Wondering if we want to stick with ESLint or move to something newer like Biome; the ESLint 8 to 9 upgrade looks overly complicated to me with the new config format.
Comment #25
nishargshah commentedOkay, waiting for your go ahed, its around 2 hours of work, so not a big deal, let me know once you get all the approvals so I will raise a PR for the same.
Comment #26
longwaveDiscussed with @justafish and @nod_ who have no strong preference and have not used Biome, but suggested that if we stay with ESLint 9 then we could just use the standard style instead of the airbnb rules.
As that seems to be the simplest move forward here then let's try that to start with, if it turns out standard isn't enough for us for some reason then we could consider airbnb-extended.
Comment #28
longwaveMR!13889 upgrades to ESLint v9, trying to keep the config intact as much as possible.
yarn lint:core-js-passingpasses with no errors.yarn lint:core-jshas 5574 problems (82 errors, 5492 warnings) - compared to 1599 problems (156 errors, 1443 warnings) on ESLint v8. The jsdoc and no-jquery plugins seem a lot stricter than before, unsure if they need reconfiguring or if we should genuinely look to fix all those issues.I've removed
yarn lint:yamlas I'm not sure it was much use on its own, and I can't figure out how to get ESLint to only read YAML files with the existing config, unless I make a separate flat config just for that.We need to decide what to do about these files scaffolded in composer.json:
I suspect that nobody uses them; CSS Lint is obsolete, and #2876298: [12.x] Remove scaffolded csslint and eslint config is stale, I think the same is likely for the ESLint config.
Comment #29
longwaveyarn lint:core-js-statson ESLint v9:vs
yarn lint:core-js-statson ESLint v8:Comment #30
smustgrave commentedThis looks really good!
Comment #31
longwave@jonathan1055 pointed out that contrib testing relies on some of this config: https://git.drupalcode.org/project/gitlab_templates/-/blob/main/includes...
We will have to figure out what to do there as well to help them out.
Given the scale of this change and the fact there is no way to provide BC I think this might have to be for Drupal 12 only.
Comment #32
fjgarlin commentedCreated #3559584: Move some scaffolding files for linting jobs from core to the assets folder for Contrib CI.
Comment #33
smustgrave commentedShould this be postponed on https://www.drupal.org/project/drupal/issues/2876298
Comment #34
longwaveWould like to leave it at NR in case anyone who has used ESLint 9 can help out with reviews, I don't think either issue can really land until 12.x opens.
Comment #35
smustgrave commentedComment #36
nishargshah commentedHey @longwave, have you decided whether to go with the standard setup or `eslint-extended`?
I will be available over Christmas, so I would be happy to contribute if your team is interested. Let me know what you think :)
Comment #37
needs-review-queue-bot commentedThe Needs Review Queue Bot tested this issue. It no longer applies to Drupal core. Therefore, this issue status is now "Needs work".
This does not mean that the patch necessarily needs to be re-rolled or the MR rebased. Read the Issue Summary, the issue tags and the latest discussion here to determine what needs to be done.
Consult the Drupal Contributor Guide to find step-by-step guides for working with issues.
Comment #38
nicrodgersSince updating to 11.3, core now seems to accidentally need Eslint 9 even though it doesn't work yet. See https://www.drupal.org/project/drupal/issues/3269001#comment-16391313
Comment #40
tom kondaESLint has been released v10 at Feb 6th.
https://eslint.org/blog/2026/02/eslint-v10.0.0-released/
Should we use newer version?
Comment #41
longwaveWe should try to upgrade if we can, if it looks tricky or dependencies are not ready maybe we just go to ESLint 9 first.
Comment #42
tom kondaOK.
eslint-plugin-import isn't satisfy with ESLint v10 at this point, need to go ESLint 9.
https://github.com/import-js/eslint-plugin-import/issues/3227
Comment #43
ptmkenny commentedDid a quick update of the issue summary to make it clear that:
1. ESLint 10 has been released.
2. The plan for now is to move to ESLint 9 with standard rules.