/core-rules)
    * [ Governance ](/docs/latest/contribute/governance)
    * [ Report a Security Vulnerability ](/docs/latest/contribute/report-security-vulnerability)
  * [ Maintain ESLint ](/docs/latest/maintain/)
    * [ How ESLint is Maintained ](/docs/latest/maintain/overview)
    * [ Manage Issues and Pull Requests ](/docs/latest/maintain/manage-issues)
    * [ Review Pull Requests ](/docs/latest/maintain/review-pull-requests)
    * [ Manage Releases ](/docs/latest/maintain/manage-releases)
    * [ Working Groups ](/docs/latest/maintain/working-groups)

#  Core Concepts

##  Table of Contents

  1. What is ESLint? 
  2. Rules 
    1. Rule Fixes 
    2. Rule Suggestions 
  3. Configuration Files 
  4. Shareable Configurations 
  5. Plugins 
  6. Parsers 
  7. Custom Processors 
  8. Formatters 
  9. Integrations 
  10. CLI & Node.js API 

This page contains a high-level overview of some of the core concepts of
ESLint.

##  What is ESLint?

ESLint is a configurable JavaScript linter. It helps you find and fix problems
in your JavaScript code. Problems can be anything from potential runtime bugs,
to not following best practices, to styling issues.

##  Rules

Rules are the core building block of ESLint. A rule validates if your code
meets a certain expectation, and what to do if it does not meet that
expectation. Rules can also contain additional configuration options specific
to that rule.

For example, the [ ` semi ` ](../../rules/semi) rule lets you specify whether
or not JavaScript statements should end with a semicolon ( ` ; ` ). You can
set the rule to either always require semicolons or require that a statement
never ends with a semicolon.

ESLint contains hundreds of built-in rules that you can use. You can also
create custom rules or use rules that others have created with  plugins  .

For more information, refer to [ Rules ](../../rules/) .

###  Rule Fixes

Rules may optionally provide fixes for violations that they find. Fixes safely
correct the violation without changing application logic.

Fixes may be applied automatically with the [ ` --fix ` command line option
](../command-line-interface#--fix) and via editor extensions.

Rules that may provide fixes are marked with 🔧 in [ Rules ](../../rules/) .

###  Rule Suggestions

Rules may optionally provide suggestions in addition to or instead of
providing fixes. Suggestions differ from fixes in two ways:

  1. Suggestions may change application logic and so cannot be automatically applied. 
  2. Suggestions cannot be applied through the ESLint CLI and are only available through editor integrations. 

Rules that may provide suggestions are marked with 💡 in [ Rules
](../../rules/) .

##  Configuration Files

An ESLint configuration file is a place where you put the configuration for
ESLint in your project. You can include built-in rules, how you want them
enforced, plugins with custom rules, shareable configurations, which files you
want rules to apply to, and more.

For more information, refer to [ Configuration Files
](../configure/configuration-files) .

##  Shareable Configurations

Shareable configurations are ESLint configurations that are shared via npm.

Often shareable configurations are used to enforce style guides using ESLint’s
built-in rules. For example the sharable configuration [ eslint-config-airbnb-
base ](https://www.npmjs.com/package/eslint-config-airbnb-base) implements the
popular Airbnb JavaScript style guide.

For more information, refer to [ Using a shareable configuration package
](../configure/configuration-files#using-a-shareable-configuration-package) .

##  Plugins

An ESLint plugin is an npm module that can contain a set of ESLint rules,
configurations, processors, and environments. Often plugins include custom
rules. Plugins can be used to enforce a style guide and support JavaScript
extensions (like TypeScript), libraries (like React), and frameworks
(Angular).

A popular use case for plugins is to enforce best practices for a framew