eslint-config-airbnb

Airbnb's widely-adopted ESLint config for JavaScript and React, encoding the public Airbnb style guide as enforceable lint rules.

Tool
npm
v19.0.4
148,048 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
49 /100 Fair
Development Activity 4
Maintenance 0
Community 92
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
63 /100 Good
Architecture 60
Code Quality 65
Innovation 70
Learning Curve 55

eslint-config-airbnb is the shareable ESLint configuration that enforces Airbnb’s public JavaScript and React style guide. Rather than hand-picking dozens of individual ESLint rules and arguing over defaults, teams add a single "extends": "airbnb" entry to their ESLint config and inherit a comprehensive, actively maintained rule set covering ES6+ syntax, React, and JSX.

The package is deliberately layered: the default export combines the core rules from eslint-config-airbnb-base with React and JSX-specific rules, while separate entry points (airbnb/hooks, airbnb/whitespace, airbnb/legacy) let consumers opt into React Hooks linting, formatting-only enforcement, or the deprecated ES5-era rule set independently. It ships no linting plugins itself — instead it declares exact peerDependency ranges on eslint, eslint-plugin-import, eslint-plugin-jsx-a11y, eslint-plugin-react, and eslint-plugin-react-hooks, so version mismatches surface at install time rather than as silent rule drift.

What You Get

  • Airbnb’s complete ESLint rule set for modern JavaScript (ES6+), matching the public Airbnb JavaScript Style Guide rule-for-rule
  • A bundled React and JSX rule layer (rules/react.js, rules/react-a11y.js) included in the default airbnb export
  • A separate airbnb/hooks entry point that adds React Hooks lint rules without requiring the rest of the React rule set
  • An airbnb/whitespace variant that downgrades every non-whitespace rule to a warning, for incremental adoption
  • An airbnb/legacy alias pointing to the deprecated ES5-era rules in eslint-config-airbnb-base, for older codebases

Common Use Cases

  • New React project bootstrap: extend airbnb on day one instead of hand-picking a JS+JSX rule set
  • Incremental legacy codebase adoption: extend airbnb/whitespace first, then graduate to the full config
  • Hooks-only rule layering: add just airbnb/hooks to an existing React lint setup for Hooks-specific checks
  • Style-guide-as-code enforcement: keep an org’s documented JavaScript style guide and its enforced lint rules from drifting apart

Under The Hood

Architecture

eslint-config-airbnb is a small set of plain CommonJS modules (index.js, base.js, hooks.js, legacy.js, whitespace.js) that each export a config object whose extends array resolves, via require.resolve, to other config packages — primarily eslint-config-airbnb-base for the core rule set, layered with React-specific overrides from rules/react.js, rules/react-a11y.js, and rules/react-hooks.js. There is no runtime execution model beyond module resolution: ESLint itself loads and merges these plain objects at lint time. Separation of concerns is expressed entirely through entry points (the default index vs /hooks vs /legacy vs /whitespace vs /base), letting consumers opt into exactly the layer they want without forking rules; the tradeoff is that every rule effectively lives one hop away, in the eslint-config-airbnb-base dependency, so this package’s own surface area stays intentionally thin.

Tech Stack

The package is plain, unbundled JavaScript with no build step and no TypeScript. It declares peerDependencies on eslint (^7.32.0 || ^8.2.0), eslint-plugin-import, eslint-plugin-jsx-a11y, eslint-plugin-react, and eslint-plugin-react-hooks, and a direct dependency on eslint-config-airbnb-base. Test tooling runs on tape with babel-tape-runner (transpiled via babel-preset-airbnb), and eclint enforces the repo’s .editorconfig rules. CI runs through GitHub Actions workflows (node.yml, node-pretest.yml) alongside a rebase-enforcement workflow, and publishing is gated by safe-publish-latest and an unused-rule check via eslint-find-rules.

Code Quality

Testing goes beyond config-shape snapshots: test/requires.js smoke-tests that every entry point resolves without throwing, test/test-base.js asserts that non-React rule files never leak react/ rules or the react plugin, and test/test-react-order.js actually lints sample JSX components through ESLint’s own CLIEngine/ESLint API to assert real linting behavior rather than just object equality. The package also lints itself (npm run lint) with its own exported config, and the repo’s README is linted with markdownlint. There is no type checking — everything is plain JS objects — but naming is fully consistent since every rule key mirrors ESLint’s own canonical rule id.

API Design The public surface is minimal: a single string, "extends": "airbnb", activates the entire rule set once peer dependencies are installed, and documented sub-entry-points (airbnb/hooks, eslint-config-airbnb/whitespace) require no custom code to opt into — just an additional string in the extends array. The main friction point is peer-dependency installation, since five packages must satisfy exact semver ranges; the README documents copy-pasteable npm info ... peerDependencies and install-peerdeps commands to remove the guesswork. Documentation quality is a particular strength: every rule traces back to a public, human-readable rationale in the Airbnb JavaScript style guide, so the “why” behind a lint failure is always one link away.

Used by 16 apps in this directory

PHP
81%
Other

Mautic

Automation · Ecommerce · Marketing

10,830

The world's largest open source marketing automation platform — own your data, run multi-channel campaigns, and escape vendor lock-in forever.

View details
98
Repo Health
76
Technical
63
Dependency
Built with
PHP 81%
Updated yesterday
Go
74%
Apache 2.0

ntfy

Developer Tools · Marketing

35,022

Send push notifications to your phone or desktop from any script or service using a single HTTP PUT or POST—no sign-up required.

View details
90
Repo Health
89
Technical
75
Dependency
Built with
Go 74%
JavaScript 25%
Updated yesterday
TypeScript
92%
Other

OpenHands

AI Code Assistants · AI Development

91,695

The self-hosted developer control center for running AI coding agents — locally, in Docker, on VMs, or across cloud backends — with automation workflows for GitHub, Slack, and more.

View details
91
Repo Health
82
Technical
67
Dependency
Built with
TypeScript 92%
Updated yesterday
TypeScript
54%
Other

OpenReplay

Analytics

13,042

Self-hosted session replay and product analytics suite that lets you see exactly what users do on your web app — without sending data to third parties.

View details
91
Repo Health
77
Technical
66
Dependency
Built with
TypeScript 54%
Go 13%
Updated yesterday
JavaScript
50%
AGPL 3.0

QRev

AI Agents · CRM

364

Open source AI-first sales platform that replaces Salesforce with autonomous agents handling prospecting, outreach, and lead management at scale.

View details
39
Repo Health
68
Technical
63
Dependency
Built with
JavaScript 50%
Python 28%
TypeScript 14%
Updated 8 months ago
TypeScript
97%
AGPL 3.0

Responsively App

Design Tools · Developer Tools

25,464

Preview and interact with your responsive web design across every device size simultaneously — no more manual resizing.

View details
79
Repo Health
71
Technical
67
Dependency
Built with
TypeScript 97%
Updated 3 weeks ago
TypeScript
89%
Other

strapi

CMS

73,368

Open-source headless CMS that auto-generates REST and GraphQL APIs from your content models, with a fully customizable admin panel you control.

View details
93
Repo Health
84
Technical
63
Dependency
Built with
TypeScript 89%
JavaScript 11%
Updated yesterday

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers