@kununu/eslint-config
v7.3.4
Published
kununu's ESLint config
Maintainers
Readme
@kununu/eslint-config
kununu's shared ESLint config (ESLint v9 — flat config)
Shared linting rules for consistent JS, JSX, TS, and TSX across kununu's frontend apps, BFFs, and shared libraries. It bundles the parsers and plugins it needs, so consumers only install this one package.
Flat config only. This package targets ESLint v9's flat config (
eslint.config.*). There is no legacy.eslintrcexport. (v6.0.0+ is flat config; v4/v5 were the legacy format.)
📦 Installation
npm install --save-dev @kununu/eslint-configtypescript is an optional peer dependency (>=5.0.0) — only needed for the
type-aware TypeScript rules (see below).
💻 Usage
Create an eslint.config.mjs (ESM — the config is published as an ES module):
import kununuConfig from '@kununu/eslint-config';
export default [
...kununuConfig,
// your project-specific overrides here
];Add a lint script to package.json:
{
"scripts": {
"lint": "eslint ."
}
}See the ESLint docs for more on configuration and usage.
TypeScript (type-aware rules)
The TS rules use @typescript-eslint's projectService, which auto-discovers
your tsconfig.json. Make sure one exists at the project root, otherwise the
type-aware rules will error.
Project-specific overrides
Append your own flat-config objects after the spread. Scope them with files,
and remember last match wins:
import kununuConfig from '@kununu/eslint-config';
export default [
...kununuConfig,
{
rules: {
'no-console': 'off',
},
},
{
files: ['**/*.spec.*'],
rules: {
// test-only tweaks
},
},
];🎨 What's included
Built on @eslint/js, typescript-eslint, and the React ecosystem, plus kununu
conventions. Parsers are wired up automatically: .ts/.tsx use
@typescript-eslint/parser (with projectService), .js/.jsx use
@babel/eslint-parser.
| Area | Plugins |
| --- | --- |
| Base | @eslint/js, typescript-eslint |
| React | eslint-plugin-react, eslint-plugin-react-hooks (incl. React Compiler rules) |
| Accessibility | eslint-plugin-jsx-a11y |
| Style / formatting | @stylistic/eslint-plugin |
| Code smells | eslint-plugin-sonarjs |
| Imports / ordering | eslint-plugin-perfectionist |
| Tests (*.spec.*) | eslint-plugin-jest, eslint-plugin-jest-dom, eslint-plugin-testing-library |
| kununu-specific | eslint-plugin-lodash, eslint-plugin-granular-selectors, @babel/eslint-plugin |
Notable conventions
- No default React import —
import React from 'react'is disallowed; import named hooks/types instead (import {useState} from 'react'). - Per-method lodash imports —
import debounce from 'lodash/debounce', notimport {debounce} from 'lodash'. - Import ordering (
perfectionist/sort-imports):react→ types → builtins/externals →@kununu/*internals → aliases → relatives. - Granular Redux selectors for
use*Selector*/use*Store*hooks. - Formatting via
@stylistic(120-char lines ignoring comments/strings/URLs, semicolons, single quotes, …). - React Compiler rules (
react-hooks/refs,set-state-in-effect, …) are warnings, not errors. - Test files (
**/*.spec.*) automatically get Jest globals plus the jest / jest-dom / testing-library rule sets; some source-only rules (e.g.react/prop-types,sonarjs/no-hardcoded-passwords) are relaxed there.
⚡️ Editor integration
Linting runs in CI / pre-commit, but catching errors in your editor is faster. We recommend the ESLint VS Code extension.
Recent versions auto-detect flat config. If your editor still defaults to the
legacy format, enable it in .vscode/settings.json:
{
"eslint.useFlatConfig": true
}