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.
Common errors
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
Warnings
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.
Install
npm install eslint-config-devextreme yarn add eslint-config-devextreme pnpm add eslint-config-devextreme Imports
- typescript wrong
const typescript = require('eslint-config-devextreme')correctimport { typescript } from 'eslint-config-devextreme' - javascript wrong
import javascript from 'eslint-config-devextreme'correctimport { javascript } from 'eslint-config-devextreme' - react wrong
import React from 'eslint-config-devextreme'correctimport { react } from 'eslint-config-devextreme' - angular wrong
import { ng } from 'eslint-config-devextreme'correctimport { angular } from 'eslint-config-devextreme' - vue wrong
import { vue2 } from 'eslint-config-devextreme'correctimport { vue } from 'eslint-config-devextreme'
Quickstart
// 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'
}
}
];