{"id":19590,"library":"eslint-config-skyux","title":"SKY UX ESLint Config","description":"Recommended ESLint configuration for SKY UX projects. Current stable version is 14.2.2, released April 2026 with frequent patch releases. This package provides a shared eslint.config extending from typescript-eslint, angular-eslint, and @eslint/js. It includes SKY UX-specific lint rules (e.g., no-sky-selectors) and stylelint integration. Key differentiators: it is the only config tailored to the SKY UX component library, automatically setting up recommended rules for Angular + TypeScript + SKY UX conventions. Requires Angular 19+, angular-eslint 21, and typescript-eslint 8.","status":"active","version":"14.2.2","language":"javascript","source_language":"en","source_url":"https://github.com/blackbaud/skyux","tags":["javascript","blackbaud","skyux","typescript"],"install":[{"cmd":"npm install eslint-config-skyux","lang":"bash","label":"npm"},{"cmd":"yarn add eslint-config-skyux","lang":"bash","label":"yarn"},{"cmd":"pnpm add eslint-config-skyux","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Base ESLint recommended rules","package":"@eslint/js","optional":false},{"reason":"Angular-specific lint rules","package":"angular-eslint","optional":false},{"reason":"SKY UX custom lint rules","package":"skyux-eslint","optional":false},{"reason":"TypeScript lint rules and config builder","package":"typescript-eslint","optional":false}],"imports":[{"note":"This package is ESM-only. In ESLint flat config, import as default.","wrong":"const skyux = require('eslint-config-skyux');","symbol":"default export","correct":"import skyux from 'eslint-config-skyux';"},{"note":"tseslint is the default export of typescript-eslint.","wrong":"import { TSLint } from 'typescript-eslint';","symbol":"typescript-eslint helper","correct":"import tseslint from 'typescript-eslint';"},{"note":"Must use tseslint.config() to properly merge configs. Since v14.","wrong":"export default [...skyux, { ... }];","symbol":"tseslint.config","correct":"export default tseslint.config(...skyux, { ... });"}],"quickstart":{"code":"// eslint.config.mjs\nimport skyux from 'eslint-config-skyux';\nimport tseslint from 'typescript-eslint';\n\nexport default tseslint.config(\n  ...skyux,\n  {\n    languageOptions: {\n      parserOptions: {\n        projectService: true,\n        tsconfigRootDir: import.meta.dirname,\n      },\n    },\n  },\n  {\n    files: ['**/*.ts'],\n    rules: {\n      '@angular-eslint/directive-selector': [\n        'error',\n        {\n          type: 'attribute',\n          prefix: 'app',\n          style: 'camelCase',\n        },\n      ],\n      '@angular-eslint/component-selector': [\n        'error',\n        {\n          type: 'element',\n          prefix: 'app',\n          style: 'kebab-case',\n        },\n      ],\n    },\n  },\n);","lang":"javascript","description":"Minimal eslint.config.mjs setup for a SKY UX Angular project using flat config and typescript-eslint."},"warnings":[{"fix":"Delete .eslintrc.* files and create eslint.config.mjs using the pattern shown in README.","message":"Migrated from legacy eslintrc to flat config (eslint.config.*). Requires ESLint >=9 and removal of .eslintrc files.","severity":"breaking","affected_versions":">=14.0.0"},{"fix":"Set parserOptions.projectService: true in your config.","message":"Requires projectService: true in parserOptions for typed lint rules to work correctly (since v14).","severity":"breaking","affected_versions":">=14.0.0"},{"fix":"Upgrade to Angular 19 or later.","message":"Support for Angular <19 dropped in v14; Angular 19+ required.","severity":"deprecated","affected_versions":">=14.0.0"},{"fix":"Use tseslint.config(...skyux, ...). Do not manually merge config arrays.","message":"Must use ...skyux spread inside tseslint.config(), not directly in an array. Flat configs from different plugins may conflict.","severity":"gotcha","affected_versions":">=14.0.0"},{"fix":"Update Node.js to >=18.19 (recommended 22 LTS).","message":"Dropped support for Node <18.19 (required for ESLint flat config).","severity":"breaking","affected_versions":">=14.0.0"}],"env_vars":null,"search_vec":"'14.2.2':16 '19':83 '2026':19 '21':87 '8':92 'angular':36,76,82,85 'angular-eslint':35,84 'april':18 'automat':70 'blackbaud':94 'compon':68 'config':4,62 'configur':7 'convent':80 'current':12 'differenti':57 'e.g':48 'eslint':3,6,34,37,86,91 'eslint.config':29 'eslint/js':39 'extend':30 'frequent':21 'includ':41 'integr':55 'javascript':93 'key':56 'librari':69 'lint':46 'no-sky-selector':49 'packag':25 'patch':22 'project':11 'provid':26 'recommend':5,73 'releas':17,23 'requir':81 'rule':47,74 'selector':52 'set':71 'share':28 'sky':1,9,42,51,66,78 'skyux':95 'specif':45 'stabl':13 'stylelint':54 'tailor':63 'typescript':33,77,90,96 'typescript-eslint':32,89 'ux':2,10,44,67,79 'ux-specif':43 'version':14","created_at":"2026-04-25T11:18:36.463468+00:00","updated_at":"2026-04-25T11:18:36.463468+00:00","problems":[{"fix":"Convert your eslint config to an .mjs file and use import instead of require().","cause":"Using CommonJS require() to import an ESM-only package.","error":"Error [ERR_REQUIRE_ESM]: require() of ES Module /node_modules/eslint-config-skyux/index.js not supported."},{"fix":"Use array syntax: ['error', { type: 'attribute', prefix: 'app', style: 'camelCase' }]","cause":"Incorrect format for rule configuration (common when migrating from eslintrc).","error":"Configuration for rule '@angular-eslint/directive-selector' is invalid. Expected an array of objects, got string."},{"fix":"Use tseslint.config(...skyux, ...otherConfigs)","cause":"Forgetting to spread the skyux config inside tseslint.config() (e.g., using skyux directly without ...).","error":"TypeError: skyux is not iterable"},{"fix":"Run 'ng add eslint-config-skyux' or install 'skyux-eslint' as a dev dependency.","cause":"Missing skyux-eslint package in dependencies.","error":"ESLint: Error while loading rule 'skyux-eslint/no-sky-selectors': Rule 'no-sky-selectors' is not defined."}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":"","cli_version":null,"type":"library","homepage":"https://developer.blackbaud.com/skyux","github":"https://github.com/blackbaud/skyux","docs":null,"changelog":null,"pypi":null,"npm":"https://www.npmjs.com/package/eslint-config-skyux","openapi_spec":null,"status_page":null,"smithery":null,"categories":["testing"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-17","next_check":"2026-07-24","install_tag":null}}