eslint-plugin-compat
=====================
[](https://dev.azure.com/amilajack/amilajack/_build/latest?definitionId=7&branchName=master)
[](https://opencollective.com/eslint-plugin-compat) [](http://badge.fury.io/js/eslint-plugin-compat)
[](https://david-dm.org/amilajack/eslint-plugin-compat)
[](https://npm-stat.com/charts.html?package=eslint-plugin-compat)
[](#backers) [](#sponsors)
Lint the browser compatibility of your code

## Setup
### 1. Install
```bash
npm install --save-dev eslint-plugin-compat
```
### 2. Update ESLint Config
#### `.eslintrc.json`
```diff
{
+ "extends": ["plugin:compat/recommended"],
+ "env": {
+ "browser": true
+ },
// ...
}
```
### 3. Configure Target Browsers
Browser targets are configured using [browserslist](https://github.com/browserslist/browserslist). You can configure browser targets in your `package.json`:
#### `package.json`
```diff
{
// ...
+ "browserslist": [
+ "defaults"
+ ]
}
```
If no configuration is found, browserslist [defaults to](https://github.com/browserslist/browserslist#queries) `"> 0.5%, last 2 versions, Firefox ESR, not dead"`.
See [browserslist/browserslist](https://github.com/browserslist/browserslist) for more details.
## Adding Polyfills
Add polyfills to the settings section of your eslint config. Append the name of the object and the property if one exists. Here are some examples:
```jsonc
{
// ...
"settings": {
"polyfills": [
// Example of marking entire API and all methods and properties as polyfilled
"Promise",
// Example of marking specific method of an API as polyfilled
"WebAssembly.compile",
// Example of API with no property (i.e. a function)
"fetch",
// Example of instance method, must add `.prototype.`
"Array.prototype.push"
]
}
}
```
## Demo
For a minimal demo, see [amilajack/eslint-plugin-compat-demo](https://github.com/amilajack/eslint-plugin-compat-demo)
## Advanced
* [Allowing Custom Records](https://github.com/amilajack/eslint-plugin-compat/wiki/Custom-Compatibility-Records)
## Road Map
See the [Road Map](https://github.com/amilajack/eslint-plugin-compat/wiki) for the details.
## Inspiration
Toolchains for native platforms, like iOS and Android, have had API linting from the start. It's about time that the web had similar tooling.
This project was inspired by a two hour conversation I had with someone on the experience of web development and if it is terrible or not. The premise they argued was that `x` browser doesn't support `y` feature while `z` browser does. Eventually, I agreed with him on this and checked made this plugin to save web developers from having to memorize browser compatibility of specs.
## Related
* [ast-metadata-inferer](https://github.com/amilajack/ast-metadata-inferer)
* [compat-db](https://github.com/amilajack/compat-db)
## Contributors
### Code Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
### Financial Contributors
Become a financial contributor and help us sustain our community. [[Contribute](https://opencollective.com/eslint-plugin-compat/contribute)]
#### Individuals
#### Organizations
Support this project with your organization. Your logo will show up here with a link to your website. [[Contribute](https://opencollective.com/eslint-plugin-compat/contribute)]