ESLint flat config preset for modern frontend projects (TypeScript, Vue, JSON, Markdown, YAML, TOML, and more).
- Node.js ^22.23.0 || >=24.15.0
- ESLint ^10.4.0
Tip
Need legacy runtime support?
- π Works out of the box with ESLint flat config.
- π Auto-detects and enables configs by your dependencies and file types.
- π§© Covers common frontend files: TS, Vue SFC, JSON, Markdown, YAML, TOML.
- π¨ Keeps formatting tool friendly (Prettier or oxfmt).
- π Supports scaling from single apps to monorepos.
# pnpm
pnpm add -D eslint typescript @ntnyq/eslint-config
# npm
npm i -D eslint typescript @ntnyq/eslint-config
# yarn
yarn add -D eslint typescript @ntnyq/eslint-config
# bun
bun add -D eslint typescript @ntnyq/eslint-config- Create
eslint.config.mjsin project root. - Add npm scripts.
- Run lint.
// eslint.config.mjs
// @ts-check
import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig(){
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix"
}
}pnpm lint// eslint.config.mjs
import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig({
vue: true,
typescript: {
tsconfigPath: './tsconfig.app.json',
},
})// eslint.config.mjs
import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig({
vue: false,
typescript: {
tsconfigPath: './tsconfig.json',
},
})// eslint.config.mjs
import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig(
{
typescript: true,
vue: true,
},
[
{
files: ['apps/web/**'],
rules: {
'no-console': 'warn',
},
},
{
files: ['packages/**'],
rules: {
'no-console': 'off',
},
},
],
)import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig({
svgo: true,
astro: true,
jsdoc: false,
unicorn: false,
})import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig({
vue: {
overrides: {
'vue/slot-name-casing': 'off',
},
},
typescript: {
overrides: {
'@typescript-eslint/no-unused-vars': 'warn',
},
},
})import { defineESLintConfig } from '@ntnyq/eslint-config'
export default defineESLintConfig({}, [
{
files: ['**/scripts/**'],
rules: {
'no-console': 'off',
},
},
])Use one formatter strategy in a project:
- Prettier path: install
prettierand optional@ntnyq/prettier-config - Oxfmt path: install
oxfmt
pnpm add -D prettier @ntnyq/prettier-config// prettier.config.mjs
// @ts-check
import { defineConfig } from '@ntnyq/prettier-config'
export default defineConfig(){
"eslint.enable": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "never",
"source.sortImports": "never"
}
}astroeslintPluginhtmlpnpmsveltesvgounusedImports
Enable them explicitly in defineESLintConfig({ ... }) when needed.
- Online inspector: eslint-config-inspector.ntnyq.com
- Local inspect:
npx eslint --inspect-config path/to/file.ts
This project follows Semantic Versioning with opinionated lint rules:
- Treated as breaking: Node.js engine changes, major plugin incompatibility, broad refactors.
- Treated as non-breaking: enabling/disabling rules, rule option tuning, dependency bumps.