Fact-checked by Grok 2 weeks ago

ESLint

ESLint is an open-source, pluggable linting utility that statically analyzes and JSX code to identify problematic patterns, enforce coding standards, and suggest fixes for potential errors, thereby enhancing code quality across browser, server, and framework environments. Created by Nicholas C. Zakas in June 2013 as an extensible alternative to earlier tools like JSLint and JSHint, it uses an () for evaluation and supports installation via , with its first major release (version 1.0.0) arriving in July 2015. Key to its design is a philosophy of full pluggability, where bundled and custom rules can be toggled on or off, configured as warnings or errors, and extended through plugins without promoting any specific coding style—allowing developers to tailor linting to project needs. It integrates seamlessly with text editors like and pipelines, supports modern versions (from ES3 to the latest stage-4 proposals), and receives biweekly updates to maintain compatibility with evolving standards. As the leading JavaScript linter, ESLint boasts over 65 million weekly downloads on and is adopted by prominent organizations such as , , , and , reflecting its robust community support from 150 sponsors contributing approximately $134,000 annually (as of November 2025). Its active maintenance by a technical steering committee ensures ongoing evolution, including recent advancements like version 9.39.1 released in November 2025.

Introduction

Definition and Purpose

ESLint is an open-source, pluggable linting utility designed specifically for and JSX codebases. It performs static code analysis to detect problematic patterns, potential errors, and style inconsistencies, enabling developers to maintain higher code quality without runtime execution. As a tool focused on early issue identification, ESLint integrates seamlessly into development workflows to enforce consistency across projects. The primary purposes of ESLint include enforcing standards, catching potential before they propagate, and promoting the of maintainable in diverse environments such as browsers, servers, and frameworks like and . By highlighting violations against configurable rules, it helps teams adhere to best practices, reducing and improving overall software reliability. This proactive approach has made ESLint a staple in modern , supporting scalable applications across client-side and server-side contexts. ESLint natively supports adhering to 6 and later versions (ES6+), as well as JSX syntax for React-like components. Through extensible parsers provided by plugins, it can analyze code in or other preprocessors, broadening its applicability while maintaining a core focus on JavaScript ecosystems. Unlike compilers, which transpile into executable formats, or formatters like Prettier that automatically reformat code style, ESLint emphasizes linting through analysis and reporting to guide manual corrections. It does not alter code structure for compatibility or aesthetics but instead provides actionable feedback to enhance readability and prevent errors.

Core Principles

ESLint's foundational design revolves around pluggability, enabling users to extend its core functionality without altering the tool itself. This principle manifests through modular components such as rules, which define specific code patterns to enforce or flag; parsers, which handle various syntaxes including standards and extensions like ; and formatters, which output results in customizable styles. Plugins further amplify this by bundling custom rules, configurations, and processors that extract JavaScript from non-standard files, such as , ensuring ESLint remains adaptable to diverse JavaScript ecosystems without core modifications. Central to ESLint's is its emphasis on , allowing teams to tailor linting standards to project needs and . Users can configure rules with severity levels—off, warn, or error—and apply overrides for specific files, directories, or glob patterns, while environments define globals and parser options for contexts like browsers or . This flexibility supports heterogeneous teams by accommodating varied codebases, from legacy scripts to modern frameworks, through shareable configurations that promote consistency across projects. To address performance in large-scale applications, ESLint incorporates caching mechanisms that store linting results in a file, typically .eslintcache, and reuse them to process only modified files on subsequent runs, thereby reducing overhead in iterative development workflows. Recent enhancements, such as multithreaded linting introduced in version 9.34.0, leverage worker threads to parallelize file processing, significantly cutting lint times for expansive monorepos. These features ensure scalability, making ESLint suitable for enterprise-level codebases where full scans would otherwise impede productivity. ESLint embodies an open-source ethos, developed collaboratively under the to foster widespread accessibility and contribution. Maintained by the , it encourages community input via , with integrations into editors, CI pipelines, and tools like , enhancing interoperability while prioritizing permissive licensing for seamless adoption in commercial and open projects.

History

Origins and Creation

ESLint was created by Nicholas C. Zakas in June 2013 while he was working as a principal architect at . The project stemmed from frustrations with existing JavaScript linters such as JSLint and JSHint, which lacked the flexibility to support custom rules tailored to specific team needs. The initial impetus came from addressing a particular bug in a work project at , where a client's security policy blocked the native XMLHttpRequest object, necessitating an in-house Ajax wrapper function. An existing regex-based linter in the build system failed to enforce the team's requirement to use this wrapper consistently, highlighting the limitations of available tools. Zakas sought a more robust solution using an (AST) for precise code analysis, inspired by a linter he encountered in 's build process. Zakas developed the first prototype of ESLint over two weekends, leveraging open-source libraries including Esprima for parsing JavaScript into an , estraverse for traversing the tree, and escope for analyzing variable scopes. This approach enabled the creation of pluggable rules that could be easily extended, setting ESLint apart from its predecessors. The prototype focused on basic rule enforcement to catch patterns like incorrect function usage in the Ajax scenario. Shortly after its inception, ESLint was released as an open-source project on , with the first alpha version, v0.1.0, made publicly available on November 4, 2013. This initial release emphasized core functionality for defining and applying custom linting rules, inviting community feedback to refine the tool.

Major Releases and Evolution

ESLint's evolution has been marked by iterative major releases that introduced foundational extensibility features, refined core mechanics, and shifted toward modern configuration paradigms. The first stable major version, v1.0.0, released on July 31, 2015, established shareable configurations, enabling developers to package and distribute reusable rule sets via under scoped names like @scope/eslint-config, with shortcuts for easier integration and a root: true option to prevent cascading loads from parent directories. This release also updated the Espree parser for emerging language features like new.target and experimental object rest/spread properties, laying groundwork for broader syntax support. Building on this, v2.0.0 arrived on February 12, 2016, introducing plugin support that allowed extensions to environments, globals, and even shareable configs directly, eliminating the need for separate packages and streamlining custom rule development. Key enhancements included code path analysis for more precise rule execution across branches and an improved --[init](/page/init) command for automated based on project patterns, alongside new formatters like [table](/page/table) and visualstudio for better output handling. Auto-fixing capabilities, initially limited, began expanding with support for more rules during this period, allowing --fix to automatically resolve certain issues without manual intervention. Mid-term developments continued with v3.0.0 on July 1, 2016, which mandated explicit configuration files—erroring out without one—and enhanced parser flexibility through Node.js 4+ requirements and updates to the eslint:recommended set, incorporating rules like require-yield for generators while adding fixers for rules such as prefer-const. By v5.0.0, released on June 22, 2018, ESLint deprecated legacy options like experimentalObjectRestSpread in favor of standardized parser configurations, modernizing the API and making linting nonexistent files a fatal error to enforce stricter project setups. These changes prioritized cleaner, more reliable integrations with evolving JavaScript environments. Recent advancements reflect a focus on performance and simplicity. v8.0.0, launched on October 9, 2021, added full ES2022 support—including class fields, private methods, and top-level await—along with autofix for unused disable directives via --report-unused-disable-directives, though the experimental flat config system debuted later in v8.21.0 on August 1, 2022, as an opt-in alternative to the legacy .eslintrc format for array-based, file-centric setups. This shift toward flat configs aimed at simpler, more performant configurations by reducing inheritance complexity and enabling programmatic definitions. v9.0.0, released on April 5, 2024, made flat configs the default, dropping legacy eslintrc as optional while introducing rule API updates for better language plugin compatibility, including TypeScript enhancements through improved parser options and ecosystem alignment. Performance optimizations followed in the v9 series, such as multithreaded linting in v9.34.0 (August 22, 2025) and refined worker management in v9.37.0 (October 3, 2025), alongside architectural refactors like the FileReport system for reporting. As of November 3, 2025, the latest stable release is v9.39.1, primarily delivering bug fixes and minor stability improvements to the flat config implementation and auto-fixing behaviors. Looking ahead, v10.0.0-alpha.0 is slated for release around November 14, 2025, previewing greater modularity by fully removing eslintrc support, updating the config lookup to file-based algorithms, and dropping versions below 20.19.0, while enabling beta JSX reference tracking and refining handling for enhanced extensibility. Across versions, auto-fixing has matured from basic rule-specific patches to syntax-aware transformations that preserve code intent, integrated seamlessly into flat configs for faster, safer automated corrections.

Features

Rules and Customization

ESLint provides over 200 built-in rules that enforce coding standards and detect potential issues in and code. These rules are categorized into groups such as Possible Problems, which focus on preventing logic errors and syntax issues like unused variables via the no-unused-vars rule; Suggestions, which promote best practices to avoid bugs, such as prefer-const for preferring constants over let variables; and Layout & Formatting, which handle stylistic concerns like semicolon usage with the semi rule. Note that Layout & Formatting rules are deprecated since ESLint v8.53.0 and recommended to be replaced with external formatters like Prettier or the @stylistic/eslint-plugin. Each rule can be marked as recommended (✅), fixable (🔧 for auto-correction), a suggestion (💡), or frozen (❄️ for stable rules), allowing users to prioritize based on project needs. Customization of rules occurs through severity levels and options specified in configuration files, enabling fine-tuned enforcement. Severity levels include "off" (0, disabled), "" (1, issues a warning without failing the lint), and "" (2, treats violations as errors that halt builds). For example, the [semi](/page/Semi) rule can be configured as {"semi": ["error", "always"]} to require semicolons and report missing ones as errors, or with additional options like ignoring trailing semicolons in specific contexts. Rules support disabling mechanisms for flexibility, such as block comments (/* eslint-disable no-unused-vars */), line-specific overrides (// eslint-disable-next-line [semi](/page/SEMI)), or file patterns in configs to exclude certain rules from test files. Many rules are auto-fixable, meaning ESLint's --fix flag can automatically apply corrections, such as adding missing semicolons or converting var to const. To accommodate different environments, ESLint uses language options and globals presets that adjust rules for contexts like , , or ES modules. For , the node globals preset enables recognition of built-in modules like process without flagging them as undefined, paired with sourceType: "commonjs". environments activate the browser globals for window and document objects, while ES modules set sourceType: "module" to support import/export syntax and strict mode, ensuring rules like no-undef do not incorrectly flag module globals. These presets allow environment-specific rules to run without additional configuration, enhancing compatibility across project types.

Plugins and Extensibility

ESLint's extensibility is primarily achieved through plugins, which are third-party packages that extend its core functionality by providing additional rules, parsers, configurations, and processors tailored to specific domains or frameworks. These plugins allow developers to enforce domain-specific linting, such as component best practices or type safety, without modifying the core ESLint codebase. Plugins are installed via and configured in ESLint's configuration files, enabling modular enhancements to the linter's capabilities. Custom rules form a of plugin development, allowing users to define bespoke linting logic for unique project needs. To create a custom rule, developers export a object from a that includes a meta property for (such as rule type, description, and fixability) and a create function returning visitor methods for traversing the (). The create function receives a context object, which provides access to the source code, reporting mechanisms via context.report(), and AST node traversal using visitor patterns for specific node types like Identifier or FunctionDeclaration. For testing, ESLint's RuleTester is used to validate rules against valid and invalid code samples, ensuring they correctly identify issues and apply fixes where applicable. This process involves AST analysis to inspect code structure, such as checking for prohibited patterns, and is exemplified in rules that enforce naming conventions or detect potential bugs through node property examination. Beyond rules, ESLint offers multiple extensibility points for deeper customization. Custom parsers enable support for non-standard by transforming into an AST compatible with ESLint's rules; for instance, the @typescript-eslint/parser package parses files, while Babel's parser handles experimental features. Developers create parsers by implementing a parse or parseForESLint method that returns the AST, often leveraging underlying libraries like Espree for base parsing. Custom processors extend linting to non-JavaScript files by preprocessing text to extract embeddable JavaScript (e.g., from via @eslint/markdown) and postprocessing results to map errors back to the original file locations. These processors include preprocess and postprocess functions to handle code extraction and message aggregation. Additionally, custom formatters allow tailoring output styling, such as generating or custom reports; they are functions that process lint results into strings, invocable via the CLI with the -f flag. Among popular plugins, eslint-plugin-react provides rules for and JSX, such as enforcing prop types and key usage in lists, installed via npm install eslint-plugin-react --save-dev. The eslint-plugin-import package focuses on module linting, validating import paths, , and export consistency to prevent resolution errors. For style integration, eslint-plugin-prettier runs Prettier as an ESLint rule to ensure code formatting aligns with linting, avoiding conflicts between style rules and auto-formatting. These plugins, along with others like @typescript-eslint/eslint-plugin for TypeScript-specific rules, demonstrate ESLint's ecosystem for scalable, framework-agnostic code quality enforcement.

Recent Advancements

As of November 2025, ESLint has introduced several new features to expand its scope and performance. In February 2025, ESLint added official support for linting CSS files, enabling validation and enforcement of baseline CSS features through tolerant parsing and custom syntax support. Additionally, version 9.34.0, released in August 2025, introduced multithreaded linting, allowing of files to improve performance on multi-core systems; this can be configured via the CLI with options like --max-threads 4 to specify the maximum number of threads.

Configuration

Basic Setup

To install ESLint, use , the Node Package Manager, as it is the primary distribution method. For a local installation, which is recommended to ensure project-specific versions and avoid conflicts in multi-project environments, execute the command npm install eslint --save-dev in your project's . This adds ESLint as a development dependency to your package.json file. Alternatively, for global installation allowing use across multiple projects without npx, run npm install -g eslint, though this approach may lead to version mismatches and is generally discouraged for team collaborations. Once installed, initialize a basic configuration using the interactive setup wizard. The recommended command for the default flat config format is npm init @eslint/config@latest, which prompts users to select options such as code style preferences (e.g., ), environment (e.g., browser or ), and framework usage (e.g., or ), generating an appropriate configuration file automatically. The legacy command npx eslint --init can still be used but creates a deprecated .eslintrc format. Since ESLint version 9.0.0, released in April 2024, the default format is the flat configuration in eslint.config.js, which offers improved performance and modularity over the legacy .eslintrc.json format. A basic flat configuration example for a browser environment, extending the recommended ruleset, appears as follows:
javascript
import globals from "globals";
import js from "@eslint/js";

export default [
  { files: ["**/*.js"], languageOptions: { globals: globals.browser } },
  js.configs.recommended,
];
This specifies the browser globals (e.g., window and document) and applies ESLint's recommended rules, such as prohibiting unused variables or undefined references. For legacy support, an equivalent .eslintrc.json file could be created manually with {"env": {"browser": true}, "extends": ["eslint:recommended"]}, but flat config is now the standard. To run the first linting pass on your project files, use the command npx eslint . --ext .js, which scans all JavaScript files in the current directory and subdirectories. ESLint outputs results in the default "stylish" format, displaying file paths, line numbers, error messages, and severity levels (warnings or errors); for alternative formats like for programmatic use, append --format json. If no exists, ESLint applies a minimal default set of rules, but a proper config ensures targeted enforcement.

Advanced Configuration Options

ESLint provides several advanced configuration options to handle the complexities of large-scale or specialized projects, enabling fine-grained control over linting behavior across diverse file patterns, parsers, and shared . These features build on basic setups by supporting modular, scalable configurations that can be dynamically imported and extended, particularly useful in monorepos or polyglot codebases. The flat config system, introduced experimentally in ESLint version 8.21.0 and made the default in version 9.0.0, represents a modern alternative to the legacy .eslintrc format, utilizing an eslint.config.js file (or variants like .mjs, .cjs) that exports an array of configuration objects for enhanced modularity. This array-based approach allows configurations to be imported and composed programmatically, such as via dynamic imports, which facilitates better organization in large projects compared to the hierarchical, /YAML-based structure of .eslintrc files. For instance, a basic flat config might be defined as follows:
javascript
import { defineConfig } from "eslint/config";
export default defineConfig([{ rules: { semi: "error" } }]);
This system's advantages include improved performance through reduced parsing overhead and greater flexibility for integration, making it the recommended format for new projects since ESLint v9. In March 2025, flat config was further evolved to support the extends property for simpler inheritance from shareable configs, enhancements to defineConfig for and automatic array flattening, and explicit global ignores for better scoping. Overrides enable project-specific rule applications based on file patterns, allowing developers to tailor linting rules to subsets of files without duplicating global configurations. In the flat config format, overrides are specified using files and ignores properties with glob patterns, such as applying stricter rules only to test files while excluding certain directories. An example override configuration might look like:
javascript
{ files: ["**/*.js"], ignores: ["__tests/**"], rules: { "no-console": "error" } }
Complementing overrides, the .eslintignore file (or inline ignores arrays) allows global exclusions of files or directories from linting, preventing unnecessary processing of build artifacts or third-party code. For global ignores in flat config, the object contains only an ignores key, e.g.:
javascript
{ ignores: [".config/", "dist/"] }
This ensures efficient linting scopes in expansive repositories, with enhanced global ignore support added in March 2025. Shareable configurations promote reusability by allowing teams to extend community-maintained presets or publish their own to , streamlining adoption of best practices across projects. For example, integrating the @typescript-eslint recommended preset in a flat config involves importing and extending it (supported via extends since March 2025):
javascript
import tseslint from "typescript-eslint";

export default tseslint.config(
  tseslint.configs.recommended,
  { rules: { /* custom rules */ } }
);
Custom shareable configs are published as packages named eslint-config-<name>, enabling others to extend them via the extends property (supported in flat config since March 2025) for consistent rule enforcement in frameworks like or Vue. Parser and language options further customize ESLint's interpretation of source code, supporting advanced JavaScript features and framework-specific globals. Parsers like @babel/eslint-parser can be specified to handle ESNext syntax in transpiled environments:
javascript
{ languageOptions: { parser: require("@babel/eslint-parser") } }
Additionally, the languageOptions object defines globals for testing frameworks (e.g., it and describe as readonly) or sets ecmaVersion to "latest" for modern support and sourceType to "module" for ES s, ensuring accurate parsing without false positives. These options are essential for projects using Babel, , or browser-specific variables.

Usage and Integration

Command-Line Interface

ESLint provides a command-line interface (CLI) for executing linting tasks directly from the terminal, allowing developers to analyze JavaScript and related files for potential errors, stylistic inconsistencies, and adherence to coding standards. The basic syntax is npx eslint [options] [file|dir|glob]*, where files, directories, or glob patterns specify the targets for linting; if no patterns are provided, ESLint defaults to linting the current directory (.). For instance, running npx eslint src/ processes all JavaScript files in the src directory recursively. Key flags enhance basic usage, such as --fix to automatically apply safe fixes for reported issues, which modifies the source files in place, or --quiet to suppress warnings and display only errors. Another useful option is --ext .js,.ts to specify file extensions for processing, ensuring ESLint targets the correct file types in a project. These flags enable quick iterations during development without needing integrated development environment (IDE) support. Output and reporting options allow customization for different environments, including pipelines. The --format flag (or -f) controls the output style, with "stylish" as the default for human-readable terminal display; alternatives like "" produce machine-readable results for scripting or , as in npx eslint --format json src/. Reports can be directed to a file using --output-file (or -o), and exit codes indicate success (0 for no errors), errors (1), or warnings exceeding a threshold set by --max-warnings (default 0, meaning any warning fails the process). Caching with --cache stores results in a file (default .eslintcache) to skip unchanged files on subsequent runs, improving performance in large projects when combined with --cache-location for custom paths. Advanced flags support finer control and debugging. The --rule option overrides specific rules inline, such as --rule 'quotes: [error, "double"]' to enforce double quotes, while --plugin loads external plugins like --plugin react for framework-specific linting. For ignoring patterns, --ignore-pattern excludes files or directories (e.g., --ignore-pattern "/node_modules/"), and --no-ignore bypasses the default .eslintignore file. Debugging tools include --debug for verbose logging and --env-info to output environment details, aiding troubleshooting. Input can also come from standard input via --stdin, useful for piping code, as in cat myfile.js | npx eslint --stdin --stdin-filename myfile.js. Integration into build pipelines is facilitated through scripting, commonly via package.json scripts like "lint": "eslint src/" or "lint:fix": "eslint --fix src/", which can be invoked with npm run lint to enforce code quality as part of workflows. The CLI respects a (e.g., eslint.config.js) specified with -c or defaults to one in the project root.

Editor and IDE Integrations

ESLint integrates seamlessly with popular editors and integrated development environments (IDEs), providing real-time feedback on code issues directly within the development workflow. This allows developers to catch and resolve linting errors as they write code, enhancing productivity without relying solely on command-line executions. In , the official ESLint extension developed by enables comprehensive integration by leveraging the ESLint library installed in the workspace folder or globally. It highlights errors and warnings inline with single-line underlines, supports code actions for quick fixes, and allows automatic fixing of issues on save through the editor.codeActionsOnSave setting configured with source.fixAll.eslint. Configuration synchronizes with workspace settings via options like eslint.workingDirectories for multi-root setups and eslint.validate to specify file types such as and . The extension adapts to ESLint versions, using the CLIEngine for versions below 8 and the ESLint class for version 8 and above, ensuring compatibility with flat configuration files like eslint.config.js since ESLint 9. WebStorm and offer built-in support for ESLint, allowing real-time linting that displays warnings and errors directly in the editor as code is typed. This integration supports a wide range of rules extensible via plugins and works with file types including and , with configurable linting scopes limited to specific project directories or files. It also accommodates styles like JavaScript Standard Style and provides options to run ESLint on save or during editing for immediate feedback. For terminal-based editors, Vim and Neovim integrate ESLint through the Asynchronous Lint Engine (ALE) plugin, which performs asynchronous linting to check syntax and semantics without blocking the editor. ALE runs ESLint in real-time as text changes, configurable via g:ale_linters = {'javascript': ['eslint']} in the vimrc or filetype-specific plugins, and supports auto-fixing with the :ALEFix command using ESLint as the fixer. Similarly, uses the Flycheck package with the javascript-eslint syntax checker to integrate ESLint, automatically selecting it for modes like js-mode and providing real-time error highlighting based on flycheck-check-syntax-automatically. Configuration in can specify local ESLint executables via flycheck-set-checker-executable to use project-specific installations from node_modules. Browser-based integrations for ESLint are limited, primarily supporting development through dev tools for quick checks rather than full real-time linting in desktop . Best practices for these integrations include enabling auto-fix on save—such as setting eslint.codeActionsOnSave.mode to "all" in VS Code or g:ale_fix_on_save = 1 in ALE—to automatically resolve fixable issues during editing. To avoid unnecessary processing, ignore directories like node_modules using global ignore patterns in eslint.config.js with globalIgnores(["**/node_modules/"]) or via a .eslintignore file, ensuring consistent behavior across editors and the . For troubleshooting common issues like parser mismatches, verify compatibility between ESLint and the specified parser (e.g., @typescript-eslint/parser for ) in the configuration's languageOptions.parser setting, and enable debug modes like eslint.debug in VS Code to log errors.

Adoption and Community

Usage Statistics

ESLint stands as the premier JavaScript linter, with over 65 million weekly downloads on as of November 2025, solidifying its position as the number one tool in its category. The tool enjoys widespread industry adoption, with major organizations such as , , , and incorporating ESLint into their workflows to enforce code quality standards. Adoption rates for ESLint continue to grow, fueled by its seamless compatibility with ecosystems like and , which have expanded the demand for robust linting solutions. Teams implementing ESLint have reported improvements in code reliability through early detection of potential issues. In comparison to competitors, ESLint far surpasses legacy tools like JSHint, whose usage has steadily declined due to limited extensibility, while newer entrants such as remain niche with under 10% despite performance advantages in specific benchmarks.

Contributions and Governance

ESLint is maintained by a dedicated team under the governance of the , which owns the project's intellectual property and provides legal infrastructure while leaving daily operations to the ESLint team. The Technical Steering Committee (TSC), limited to a maximum of five members, oversees the project's technical direction, release processes, and team membership. Decisions are made through biweekly TSC meetings held on , where consensus is sought, falling back to majority vote if necessary; GitHub issues tagged with "tsc agenda" are prioritized for discussion. Contributions to ESLint follow a open-source , beginning with forking the repository, creating a feature branch with descriptive naming, implementing changes in line with code conventions and Conventional Commits standards, running tests via npm test, and submitting a pull request for review. Contributors can focus on areas such as core rules (for bug fixes or enhancements), updates, or plugin development, with pull requests reviewed by TSC members or designated committers. The project enforces the , which promotes an inclusive environment welcoming participation from all individuals regardless of background. All contributors must sign a to ensure compatibility with the project's Apache 2.0 license. Community engagement is facilitated through multiple channels, including the ESLint Discord server for real-time discussions, the @geteslint account for announcements, and the official blog for in-depth updates on releases and features. As of November 2025, ESLint is supported by 150 sponsors—companies, organizations, and individuals—contributing $11,147 monthly, or approximately $133,764 annually, primarily through Open Collective and Sponsors; these funds support team compensation, project development, and ecosystem initiatives. Sustaining the project involves addressing challenges such as rule and configuration deprecations to evolve with modern JavaScript practices, exemplified by the planned removal of the legacy eslintrc system in ESLint v10.0.0 (expected late 2025), which will require users to migrate to the flat config format for continued compatibility. Deprecated rules receive no further maintenance, including bug fixes or documentation updates, to minimize disruption while encouraging adoption of equivalents in core or plugins. To enhance scalability, the team actively welcomes new maintainers by inviting experienced contributors to join after demonstrating consistent involvement, such as through multiple qualifying pull requests, with connections facilitated via Discord. The most recent release, v9.39.1 on November 3, 2025, includes bug fixes and minor enhancements, underscoring active maintenance.

References

  1. [1]
    Find and fix problems in your JavaScript code - ESLint - Pluggable ...
    ESLint is an open source project that helps you find and fix problems with your JavaScript code. It doesn't matter if you're writing JavaScript in the browser ...Getting StartedConfigure ESLintRules ReferenceNews and UpdatesCommand Line Interface
  2. [2]
    About - ESLint - Pluggable JavaScript Linter
    ESLint is an open source JavaScript linting utility originally created by Nicholas C. Zakas in June 2013.
  3. [3]
    ESLint 1.0.0 released - ESLint - Pluggable JavaScript Linter
    Jul 31, 2015 · Published 31 Jul, 2015 under Release Notes. ESLint 1.0.0 released. We just pushed ESLint 1.0.0, which is the first major release of ESLint.
  4. [4]
    eslint/eslint: Find and fix problems in your JavaScript code. - GitHub
    ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code. In many ways, it is similar to JSLint and JSHint with a few ...
  5. [5]
    eslint
    - **Weekly Downloads**: Not explicitly stated in the content.
  6. [6]
    Getting Started with ESLint - ESLint - Pluggable JavaScript Linter
    ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code, with the goal of making code more consistent and avoiding bugs.Configure ESLint · Core Concepts · Command Line Interface · Integrations
  7. [7]
    Configure Language Options - ESLint - Pluggable JavaScript Linter
    ESLint allows you to specify the JavaScript language options you want to support. By default, ESLint expects the most recent stage 4 ECMAScript syntax and ...Specifying JavaScript Options · Specifying Parser Options · Specifying Globals
  8. [8]
    Languages - ESLint - Pluggable JavaScript Linter
    While ESLint began as a linter strictly for JavaScript, the ESLint core is generic and can be used to lint any programming language.Language Requirements · Parser Requirements for... · The Language Object
  9. [9]
    Core Concepts - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.Missing: pluggability performance open- source
  10. [10]
    Configuration Files - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.Configure Language Options · Configuration Files (Deprecated) · Combine ConfigsMissing: performance open-
  11. [11]
    Command Line Interface Reference - Pluggable JavaScript Linter
    The cache is stored in .eslintcache by default. Argument Type: No argument. If you run ESLint with --cache and then run ESLint without --cache , the .
  12. [12]
    New in ESLint v9.34.0: Multithread Linting
    Aug 22, 2025 · By spawning several worker threads, ESLint can now process multiple files at the same time, dramatically reducing lint times for large projects.Cli Multithreading Support · Node. Js Api Support · Further TipsMissing: scalability | Show results with:scalability
  13. [13]
    The inception of ESLint - Human Who Codes
    Feb 27, 2018 · The inception of ESLint. The story of how one bug at work spawned the pluggable linter. Nicholas C. Zakas.
  14. [14]
    Now available: ESLint v0.1.0 - Human Who Codes
    Nov 4, 2013 · Today I'm excited to announce version 0.1.0 is available. This is the first alpha version that is ready for people to start using and give us ...
  15. [15]
    ESLint v2.0.0 released - ESLint - Pluggable JavaScript Linter
    Feb 12, 2016 · When ESLint began in 2013, we had no idea just how big it would grow. This release is the result of years of feedback, development, and planning ...<|control11|><|separator|>
  16. [16]
    ESLint v3.0.0 released - ESLint - Pluggable JavaScript Linter
    Jul 1, 2016 · A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.
  17. [17]
    Migrating to v5.0.0 - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.
  18. [18]
    ESLint v8.0.0 released - ESLint - Pluggable JavaScript Linter
    Oct 9, 2021 · This release adds some new features and fixes several bugs found in the previous release. ... Update: Suggest missing rule in flat config (fixes # ...Breaking Changes · Enhancements · Documentation
  19. [19]
    Flat config rollout plans - ESLint - Pluggable JavaScript Linter
    Oct 10, 2023 · It took until 2022 (v8.21.0) for us to release an experimental, opt-in version of flat config. Since then, we've been making changes and ...
  20. [20]
    ESLint v9.0.0: A retrospective - ESLint - Pluggable JavaScript Linter
    May 21, 2025 · In April 2024, we released ESLint v9.0.0, our first major release in nearly three years. The key feature of v9.0.0 would be the new ...Timeline · What Went Right · What Went Wrong
  21. [21]
    Releases · eslint/eslint - GitHub
    Find and fix problems in your JavaScript code. Contribute to eslint/eslint development by creating an account on GitHub.
  22. [22]
    Release Notes - ESLint - Pluggable JavaScript Linter
    ESLint v9.39.1 released · 03 Nov, 2025 ; ESLint v9.39.0 released · 31 Oct, 2025 ; ESLint v9.38.0 released · 17 Oct, 2025 ; ESLint v9.37.0 released · 03 Oct, 2025.Missing: major timeline
  23. [23]
    What's coming in ESLint v10.0.0 - ESLint - Pluggable JavaScript Linter
    Oct 3, 2025 · We expect the first alpha release of ESLint v10. 0.0 to be available in November 2025, with the beta following shortly thereafter. The final v ...Missing: initial | Show results with:initial
  24. [24]
    Rules Reference - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.Configure RulesCustom Rules
  25. [25]
    Configure Rules - ESLint - Pluggable JavaScript Linter
    ESLint comes with a large number of built-in rules and you can add more rules through plugins. You can modify which rules your project uses with either ...
  26. [26]
    Configure Plugins - ESLint - Pluggable JavaScript Linter
    Languages allow ESLint to lint programming languages besides JavaScript. To specify a language in a configuration file, use the language key and assign ...
  27. [27]
    Custom Rules - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.Missing: open- | Show results with:open-
  28. [28]
  29. [29]
  30. [30]
  31. [31]
    Custom Parsers - ESLint - Pluggable JavaScript Linter
    ESLint custom parsers extend ESLint to support new features, transforming code into an AST. They use `parse()` or `parseForESLint()` methods.Creating a Custom Parser · Methods in Custom Parsers · AST Specification
  32. [32]
  33. [33]
    Custom Processors - ESLint - Pluggable JavaScript Linter
    ### Summary of Custom Processors for Non-JS Files
  34. [34]
  35. [35]
    Custom Formatters - ESLint - Pluggable JavaScript Linter
    Custom formatters let you display linting results in a format that best fits your needs, whether that's in a specific file format, a certain display style, ...Creating a Custom Formatter · Packaging a Custom Formatter
  36. [36]
    eslint-plugin-react - NPM
    Apr 3, 2025 · React specific linting rules for ESLint. Latest version: 7.37.5, last published: 7 months ago. Start using eslint-plugin-react in your ...
  37. [37]
    eslint-plugin-import - NPM
    Jun 20, 2025 · This plugin intends to support linting of ES2015+ (ES6+) import/export syntax, and prevent issues with misspelling of file paths and import names.
  38. [38]
    eslint-plugin-prettier - NPM
    Aug 6, 2025 · Runs prettier as an eslint rule. Latest version: 5.5.4, last published: 3 months ago. Start using eslint-plugin-prettier in your project by ...57 Versions3.2.0Antfu/eslint-plugin-prettier8540 DependentsEslint-plugin-prettier
  39. [39]
    ESLint v9.0.0 released - ESLint - Pluggable JavaScript Linter
    Apr 5, 2024 · Flat config is now the default configuration format for ESLint and eslintrc is officially deprecated. To continue using a eslintrc configuration ...Highlights · Breaking Changes · Documentation
  40. [40]
  41. [41]
    Integrations - ESLint - Pluggable JavaScript Linter
    This page contains community projects that have integrated ESLint. The projects on this page are not maintained by the ESLint team.
  42. [42]
    microsoft/vscode-eslint - GitHub
    Integrates ESLint into VS Code. If you are new to ESLint check the documentation. The extension uses the ESLint library installed in the opened workspace ...Vscode-eslint extension not ...Microsoft/vscode-eslintRespect estlint-suppressions ...ESLint extension keeps linting ...Microsoft/vscode-eslint#91
  43. [43]
    ESLint | WebStorm Documentation - JetBrains
    Aug 8, 2025 · WebStorm integrates with ESLint which brings a wide range of linting rules that can also be extended with plugins.
  44. [44]
    dense-analysis/ale: Check syntax in Vim/Neovim asynchronously ...
    ALE (Asynchronous Lint Engine) is a plugin providing linting (syntax checking and semantic errors) in Neovim 0.7.0+ and Vim 8.0+ while you edit your text files.
  45. [45]
    Syntax checkers — Flycheck 35.0 documentation
    Flycheck automatically selects the best syntax checkers for the current buffer from flycheck-checkers whenever it needs to check the buffer.
  46. [46]
    Ignore Files - ESLint - Pluggable JavaScript Linter
    ### How to Ignore `node_modules` in ESLint Configuration
  47. [47]
    2024 Stack Overflow Developer Survey
    In May 2024, over 65,000 developers responded to our annual survey about coding, the technologies and tools they use and want to learn, AI, and developer ...1 Developer Profile · 2 Technology · Learn more about AI features · 4 WorkMissing: linter ESLint
  48. [48]
    ESLint's 2024 year in review - ESLint - Pluggable JavaScript Linter
    Jan 22, 2025 · 2024 was an exciting and challenging year for ESLint, with some of the most dramatic changes in the project's history.
  49. [49]
    [PDF] The Adoption of JavaScript Linters in Practice: A Case Study on ESLint
    These tools aid in finding issues and refactoring opportunities early in the software development process, when they require less effort and are cheaper to fix ...
  50. [50]
    How ESLint is Maintained - ESLint - Pluggable JavaScript Linter
    The OpenJS Foundation provides legal infrastructure for JavaScript projects like ESLint. It is the owner of the intellectual property related to ESLint, ...
  51. [51]
    Governance - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.Roles And Responsibilities · Committers · Technical Steering Committee...
  52. [52]
    Submit a Pull Request - ESLint - Pluggable JavaScript Linter
    The process of submitting a pull request is fairly straightforward and generally follows the same pattern each time: Create a new branch. Make your changes.Working with Code · Step 2: Make your changes · Step 7: Send the pull request
  53. [53]
    Contribute to ESLint - ESLint - Pluggable JavaScript Linter
    A pluggable and configurable linter tool for identifying and reporting on patterns in JavaScript. Maintain your code quality with ease.Read The Code Of Conduct · Propose A New Rule · Set Up A Development...
  54. [54]
  55. [55]
  56. [56]
  57. [57]
    Donate - ESLint - Pluggable JavaScript Linter
    Donation tiers · Diamond Sponsor $5000+ per month · Platinum Sponsor $2000-4999 per month · Gold Sponsor $1000–1999 per month · Silver Sponsor $500–999 per month.Missing: engagement 2025
  58. [58]
    Rule Deprecation - ESLint - Pluggable JavaScript Linter
    After a rule has been deprecated, the team will no longer do any work on it. This includes bug fixes, enhancements, and updates to the rule's documentation.Missing: sustainability | Show results with:sustainability