{"id":19494,"library":"eslint-config-braintree","title":"ESLint Config Braintree","description":"Shared ESLint configuration for Braintree JavaScript projects. Current stable version is 7.0.1, requiring ESLint ^9.0.0 (flat config only, legacy .eslintrc support removed). It ships with TypeScript type declarations and provides presets for client (browserify), server (Node), and ES6 environments, as well as a JSDoc configuration. Unlike generic shareable configs (e.g., eslint-config-airbnb), it is opinionated for Braintree's internal standards and relies on plugins (e.g., @typescript-eslint/eslint-plugin, eslint-plugin-prettier) that must be installed separately. Release cadence is low; primarily updated for major ESLint versions.","status":"active","version":"7.0.1","language":"javascript","source_language":"en","source_url":"https://github.com/braintree/eslint-config","tags":["javascript","typescript"],"install":[{"cmd":"npm install eslint-config-braintree","lang":"bash","label":"npm"},{"cmd":"yarn add eslint-config-braintree","lang":"bash","label":"yarn"},{"cmd":"pnpm add eslint-config-braintree","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"This package uses CommonJS require() for flat config; ESM import is not supported. The correct usage for flat config is 'module.exports = braintreeConfig;'.","wrong":"import braintreeConfig from 'eslint-config-braintree';","symbol":"braintreeConfig","correct":"const braintreeConfig = require('eslint-config-braintree');"},{"note":"Use require() to load the client (browserify) preset. For flat config, spread into array: [...braintreeClientConfig, ...otherConfig].","wrong":"import braintreeClientConfig from 'eslint-config-braintree/client';","symbol":"braintreeClientConfig","correct":"const braintreeClientConfig = require('eslint-config-braintree/client');"},{"note":"The server config is exported as a separate entry point, not a property of the main config. Correct path is 'eslint-config-braintree/server'.","wrong":"require('eslint-config-braintree').server","symbol":"braintreeServerConfig","correct":"const braintreeServerConfig = require('eslint-config-braintree/server');"}],"quickstart":{"code":"// Install dependencies:\n// npm install eslint@^9 --save-dev\n// npm install eslint-config-braintree --save-dev\n// npm install @typescript-eslint/eslint-plugin eslint-plugin-prettier --save-dev\n\n// eslint.config.js (ESLint flat config, v9+)\nconst braintreeConfig = require('eslint-config-braintree');\n\nmodule.exports = [\n  ...braintreeConfig,\n  {\n    files: ['**/*.ts', '**/*.tsx'],\n    rules: {\n      'no-new-object': 'warn',\n    },\n  },\n];","lang":"javascript","description":"Shows how to install and configure the Braintree ESLint config using flat config (ESLint v9+), including required plugins and custom rule overrides."},"warnings":[{"fix":"Update ESLint to v9 and migrate to flat config (eslint.config.js). Remove .eslintrc files and use module.exports = [ ...braintreeConfig ].","message":"Version 7.0.0+ drops ESLint v8 support and requires ESLint ^9. Only flat config is supported; .eslintrc files are not compatible.","severity":"breaking","affected_versions":">=7.0.0"},{"fix":"Run: npm install @typescript-eslint/eslint-plugin eslint-plugin-prettier --save-dev","message":"All required ESLint plugins must be installed separately (peer dependencies not auto-installed). Missing plugins will cause ESLint to throw resolution errors.","severity":"gotcha","affected_versions":"*"},{"fix":"Use require() in CommonJS context or configure ESLint's flat config as a CommonJS file (eslint.config.js, not .mjs).","message":"The config uses CommonJS (require) and does not export an ESM-compatible module. Attempting to import with ESM (import) will fail.","severity":"gotcha","affected_versions":"*"},{"fix":"Migrate to flat config (eslint.config.js) by spreading the config array.","message":"Legacy .eslintrc format is not supported in v7.x (ESLint v9+). Using 'eslint-config-braintree' with extends in .eslintrc will not work.","severity":"deprecated","affected_versions":">=7.0.0"},{"fix":"If using ESLint v8, stay on eslint-config-braintree v5.x (if available) or upgrade ESLint to v9.","message":"Version 6.x (last ESLint v8 compatible) is not officially released or documented; users still on v8 must pin to an older version or migrate.","severity":"breaking","affected_versions":">=7.0.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"npm install @typescript-eslint/eslint-plugin --save-dev","cause":"Required plugin is not installed as a direct dependency.","error":"Error: Failed to load plugin '@typescript-eslint' declared in 'eslint-config-braintree': Cannot find module '@typescript-eslint/eslint-plugin'"},{"fix":"Use 'const x = require(...);' in a CommonJS file. Ensure eslint.config.js is not treated as ESM (name it .cjs or set type: 'module' and use dynamic import).","cause":"Using import (ESM) instead of require to load the config, or loading config file as .mjs instead of .cjs.","error":"TypeError: Cannot read properties of undefined (reading 'configs')"},{"fix":"Wrap the config import in an array: module.exports = [ ...braintreeConfig, { rules: { 'no-new-object': 'warn' } } ];","cause":"Flat config requires spreading the config array before overriding rules; direct override on the module fails.","error":"Error: Configuration for rule 'no-new-object' is invalid: you must specify options for this rule"},{"fix":"Switch to flat config (eslint.config.js) and use require('eslint-config-braintree') as described in the docs.","cause":"Using the legacy '.eslintrc' extends format with ESLint v9 (flat config only).","error":"ESLint couldn't find the config 'braintree' after extending from it. Check that the name of the config is correct."}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}