DevExtreme ESLint Config

raw JSON →
1.1.9 verified Sat Apr 25 auth: no javascript

ESLint shareable config enforcing DevExtreme team code style, based on Airbnb style guide. Current stable version 1.1.9, released monthly with community contributions. Key differentiators: vendored legacy Airbnb presets (no need for eslint-config-airbnb-base/typescript), includes framework-specific configs (jQuery, Angular, React, Vue) and test configs (Jest, QUnit, TestCafe). Built for ESLint 9.18.0 flat config. Requires heavy peer dependency set (14 plugins) but provides comprehensive linting out-of-the-box. ESM-only, no CJS support.

error ERR_REQUIRE_ESM: require() of ES Module not supported
cause Using require() with ESM-only package
fix
Change to import syntax: import { typescript } from 'eslint-config-devextreme'
error Error: Cannot find module '@stylistic/eslint-plugin'
cause Missing peer dependency
fix
Install all peer dependencies: npm install --save-dev @stylistic/eslint-plugin@5.4.0 ... (see package.json peerDependencies)
error Configuration for rule 'import/no-extraneous-dependencies' is invalid
cause Rule expects settings.packageDir but not configured
fix
Add settings to your config: settings: { 'import/resolver': { node: { paths: ['src'] } } }
error @typescript-eslint/parser requires project path but tsconfig not found
cause Missing or misconfigured tsconfig.json for TypeScript parser
fix
Ensure tsconfig.json exists at project root, or configure parserOptions.project in your config
breaking ESLint 9 flat config only — legacy .eslintrc files not supported
fix Use eslint.config.mjs with flat config format; do not use .eslintrc.* files.
breaking ESM-only, no CommonJS compatibility
fix Use import syntax; require() will throw. Set type: 'module' in package.json or use .mjs extension.
deprecated Airbnb presets removed in v1.0.0
fix Use DevExtreme configs directly; legacy Airbnb presets vendored as airbnb-config-legacy internal export (not recommended).
deprecated '@typescript-eslint/no-parameter-properties' rule removed in v1.1.3
fix Remove rule from custom overrides if present; no replacement needed.
gotcha Heavy peer dependency set — many packages must be installed manually at exact version ranges
fix Run npm install with --legacy-peer-deps if using npm<7, or use npm>=7 which installs peers automatically.
gotcha SpellCheck config uses eslint-plugin-spellcheck which has limited maintenance
fix Consider if spell check is necessary; may produce false positives with technical terms.
npm install eslint-config-devextreme
yarn add eslint-config-devextreme
pnpm add eslint-config-devextreme

Typical flat config setup combining multiple DevExtreme configs (TypeScript, JavaScript, React, test frameworks) with a custom rule override.

// eslint.config.mjs
import { typescript, javascript, react, testcafe, jest, qunit, spellCheck } from 'eslint-config-devextreme';

export default [
  ...typescript,
  ...javascript,
  ...react,
  ...testcafe,
  ...jest.map(config => ({
    ...config,
    settings: {
      jest: {
        version: 29
      }
    }
  })),
  ...qunit,
  ...spellCheck,
  {
    rules: {
      'custom-rule': 'error'
    }
  }
];