extends uses a config file which applies set of rules when you add that to the extends options. A plugin on the other hand provides you with a set of rules that you can individually apply depending on your need. Just having a plugin does not enforce any rule. You have to choose which rules you need. A plugin may provide you with zero, one, or more configuration files. If the plugin provides configuration file, then you can load that in your extends section after adding the plugin in the plugins section.

So essentially, plugins given you some rules that have been coded and you can choose which ones are relevant. It may also provide config files to apply rules that the authors think are logically grouped/relevant but providing a config file is not mandatory for a plugin. extends, on the other hand, provides you the ability to apply rules in bulk based on config file specifications.

Example Plugin - eslint-plugin-react

{
  "plugins": [
    "react"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended"
  ]
}

Example Config - eslint-config-google

{
  "extends": [
    "google"
  ]
}
Answer from shmit on Stack Overflow
🌐
CSDN
cnblogs.com › aidoll › p › 19664153
Coze同插件不同工具之间代码复用 - 笔名钟意 - 博客园
2 weeks ago - Error: Cannot find module 'xxx' ESLint couldn't find an eslint.config.(js|mjs|cjs) file.
🌐
Visual Studio Code
code.visualstudio.com › docs › devcontainers › containers
Developing inside a Container
November 3, 2021 - { "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm", "customizations": { "vscode": { "extensions": ["-dbaeumer.vscode-eslint"] } } }
Discussions

What's the difference between plugins and extends in eslint?
I don't understand why we have plugins and extends. What is the difference between them and do I need one or the other? More on stackoverflow.com
🌐 stackoverflow.com
Change Request: Flat config extends
ESLint version HEAD What problem do you want to solve? Now that more folks are moving to ESLint v9 and flat config, a common complaint is that it's difficult to extend configs from plugins. Whe... More on github.com
🌐 github.com
13
November 7, 2024
Issue with the `extends` priority
I have a configuration that extends the following rules: airbnb-typescript plugin:@typescript-eslint/recommended They both set a rule for @typescript-eslint/no-empty-function: The first sets error,... More on github.com
🌐 github.com
3
1
In an eslint config, do 'extends' in an 'overrides' replace or do they merge with 'extends' up in the main section?
Hi folks, I was wondering if someone would please be able to help me understand how multiple extends works in the context of overrides. I'm wondering this: In an eslint config, say you have a v... More on github.com
🌐 github.com
1
5
🌐
ESLint
eslint.org › docs › latest › extend › custom-rules
Custom Rules - ESLint - Pluggable JavaScript Linter
The core rules shipped in the eslint package are not considered part of the public API and are not designed to be extended from. Building on top of these rules is fragile and will most likely result in your rules breaking completely at some ...
🌐
Medium
allalmohamedlamine.medium.com › eslint-flat-config-and-new-system-an-ultimate-deep-dive-2023-46aa151cbf2b
Eslint flat config and new system an ultimate deep dive 2023 | by Mohamed Lamine Allal | Medium
November 27, 2023 - The goals and design choices when making flat config (Eslint team) What changed between the old and the new and what to look-up for ... Packcages no more strings. Now we import all. And we can add things better · Custom parsers and parser options (mostly the same, but better) [no you import, object config] Plugins and their loading and their config, and the naming and the rules · The naming convention when you import plugins the strong guide ... How to extends and configure old plugins and packages, the new way and using a helper that translates old configs and backward compatibility
🌐
ESLint
eslint.org › docs › latest › extend
Extend ESLint - ESLint - Pluggable JavaScript Linter
Selecting a version will take you to the chosen version of the ESLint docs. Version ... Results will be shown and updated as you type. ... This guide is intended for those who wish to extend the functionality of ESLint.
Find elsewhere
Top answer
1 of 4
148

extends uses a config file which applies set of rules when you add that to the extends options. A plugin on the other hand provides you with a set of rules that you can individually apply depending on your need. Just having a plugin does not enforce any rule. You have to choose which rules you need. A plugin may provide you with zero, one, or more configuration files. If the plugin provides configuration file, then you can load that in your extends section after adding the plugin in the plugins section.

So essentially, plugins given you some rules that have been coded and you can choose which ones are relevant. It may also provide config files to apply rules that the authors think are logically grouped/relevant but providing a config file is not mandatory for a plugin. extends, on the other hand, provides you the ability to apply rules in bulk based on config file specifications.

Example Plugin - eslint-plugin-react

{
  "plugins": [
    "react"
  ],
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended"
  ]
}

Example Config - eslint-config-google

{
  "extends": [
    "google"
  ]
}
2 of 4
51

In addition to shmit's good answer:

extends

is about extending configurations in general, not only plugins. Potential values are:

  • "eslint:recommended"
  • "eslint:all"
  • Shareable configuration from npm package (eslint-config-xxx or scoped name)
  • Plugin configuration from npm package (eslint-plugin-xxx or scoped name)
  • Another configuration file, like "./my/path/.eslintrc.js"

Plugin notation: plugin:<package name>/<configuration name>, e.g. for eslint-plugin-react:

Copy "extends": ["plugin:react/recommended"]

By extending from a plugin config, we can get recommended rules without adding them manually.

plugins

A plugin is a special eslint npm package, that provides additional rule definitions (rules), environments, processors and configs for different configurations of recommended / default rule values.

The plugins property in .eslintrc.js is merely a flag to enable a given plugin after installation with npm i. We now can refer to the plugin's rules, but have to set all rules values manually.

Think of plugins as a way to activate a plugin - to use its rules, you need to add the plugin once in the chain in every case.

plugins is not needed in your own config, if it is already defined in a configuration, that you extend from by extends.

Example:

eslint-plugin-react already contains plugins: [ 'react' ], hence this entry is not needed anymore in own config and plugin rules can be used directly.

🌐
ESLint
eslint.org › blog › 2025 › 03 › flat-config-extends-define-config-global-ignores
Evolving flat config with extends
March 7, 2025 - The evolution of ESLint’s flat config system represents our commitment to continuously improving the developer experience based on real-world feedback. By introducing defineConfig(), we’ve made it easier to write type-safe configurations while also simplifying the way nested configurations are handled. The reintroduction of extends brings back a familiar and powerful way to compose configurations, addressing one of the most common pain points reported by our users.
🌐
Next.js
nextjs.org › docs › app › api-reference › file-conventions › proxy
File-system conventions: proxy.js | Next.js
2 weeks ago - The waitUntil() method takes a promise as an argument, and extends the lifetime of the Proxy until the promise settles.
🌐
ESLint
eslint.org › docs › latest › use › migrate-to-9.0.0
Migrate to v9.x - ESLint - Pluggable JavaScript Linter
Extend ESLint · Ways to Extend ESLint · Create Plugins · Custom Rule Tutorial · Custom Rules · Custom Processors · Languages · Migration to Flat Config · Share Configurations · Custom Formatters · Custom Parsers · Stats Data · integrate ESLint · Integrate with the Node.js API Tutorial ·
🌐
ESLint
eslint.org › docs › latest › use › configure › configuration-files
Configuration Files - ESLint - Pluggable JavaScript Linter
The extends key is an array of values indicating which configurations to extend from. The elements of the extends array can be one of three values: a string that specifies the name of a configuration in a plugin ...
🌐
ESLint
eslint.org › docs › latest › extend › ways-to-extend
Ways to Extend ESLint - ESLint - Pluggable JavaScript Linter
ESLint ships with a built-in JavaScript parser (Espree), but custom parsers allow you to lint other languages or to extend the linting capabilities of the built-in parser.
🌐
GitHub
github.com › eslint › eslint › issues › 19116
Change Request: Flat config extends · Issue #19116 · eslint/eslint
November 7, 2024 - In flat configs, extends will not trigger any file loading. Instead, it will allow string identifiers for configs contained in plugins as well as objects. Here's a simple example: import js from "@eslint/js"; export default [ { plugins: { js }, files: ["**/*.js"], extends: ["js/recommended"], rules: { "prefer-const": "off" } } ];
Author   nzakas
🌐
npm
npmjs.com › package › eslint
eslint - npm
1 week ago - ESLint uses an AST to evaluate patterns in code.
      » npm install eslint
    
Published   Mar 06, 2026
Version   10.0.3
Author   Nicholas C. Zakas
Homepage   https://eslint.org
🌐
GitHub
github.com › eslint › eslint › discussions › 15704
Issue with the `extends` priority · eslint/eslint · Discussion #15704
If you don't want to detail each conflicting rule manually you could try moving just plugin:@typescript-eslint/recommended to an override. { extends: ['airbnb-typescript'], overrides: [ { files: ['*.ts', '*.tsx'], extends: ['plugin:@typescript-eslint/recommended'], }, ], };
Author   eslint
🌐
TypeScript ESlint
typescript-eslint.io › users › configs
Shared Configs | typescript-eslint
We recommend that most projects ... points, but you don't need to use them as-is. ESLint allows configuring own rule settings on top of extended configurations....
🌐
Prateeksurana
prateeksurana.me › blog › difference-between-eslint-extends-and-plugins
What is the difference between extends and plugins in ESLint config
September 11, 2021 - Similar to plugins shareable configs are also published with names in the format of eslint-config-<config-name>. To use the shareable config, you need to install it from npm similar to what we saw with plugins and then you can extend the ESLint config of your project with the extends key, so if you have installed a config called eslint-config-awesome then you can use it in your config like this -
🌐
GitHub
github.com › prettier › eslint-config-prettier
GitHub - prettier/eslint-config-prettier: Turns off all rules that are unnecessary or might conflict with Prettier. · GitHub
eslint-config-prettier not only turns off core rules, but also some from these plugins automatically: ... ℹ️ Note: You might find guides on the Internet saying you should also extend stuff like "prettier/react". Since version 8.0.0 of eslint-config-prettier, all you need to extend is "prettier"!
Starred by 5.9K users
Forked by 262 users
Languages   JavaScript
🌐
Plone Documentation
6.docs.plone.org › volto › development › add-ons › extend-eslint-add-on.html
Extend ESLint configuration from an add-on — Plone Documentation v6
Starting with Volto v16.4.0, you can customize the ESLint configuration from an add-on. You should provide a eslint.extend.js file in your add-on's root folder, which exports a modify(defaultConfig) function.