# @ntnyq/eslint-config

> An opinionated ESLint config preset of ntnyq

Latest version **6.1.5** (published 2026-05-25) · MIT license · 0 weekly downloads

## Install

```sh
npm install @ntnyq/eslint-config
pnpm add @ntnyq/eslint-config
yarn add @ntnyq/eslint-config
bun add @ntnyq/eslint-config
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; high quality score.

Warnings: low downloads.

## Facts

| | |
|---|---|
| Version | 6.1.5 |
| Published | 2026-05-25 |
| First published | 2020-09-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | ^20.19.0 \|\| ^22.13.0 \|\| >=24 |
| Dependencies | 42 |
| Unpacked size | 903.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| Author | ntnyq |
| Maintainers | ntnyq |
| Keywords | eslint, eslint-config, eslint-flat-config, ntnyq |

## Links

- npm: https://www.npmjs.com/package/@ntnyq/eslint-config
- Repository: ntnyq/eslint-config
- Homepage: https://eslint-config.ntnyq.com
- Issues: https://github.com/ntnyq/eslint-config/issues
- npm.io page: https://npm.io/package/@ntnyq/eslint-config

## Dependencies (42)

- [globals](https://npm.io/package/globals.md) ^17.6.0
- [local-pkg](https://npm.io/package/local-pkg.md) ^1.2.1
- [@eslint/js](https://npm.io/package/@eslint/js.md) ^10.0.1
- [@ntnyq/utils](https://npm.io/package/@ntnyq/utils.md) ^0.13.3
- [@clack/prompts](https://npm.io/package/@clack/prompts.md) ^1.4.0
- [eslint-plugin-n](https://npm.io/package/eslint-plugin-n.md) ^18.0.1
- [@eslint/markdown](https://npm.io/package/@eslint/markdown.md) ^8.0.2
- [eslint-plugin-vue](https://npm.io/package/eslint-plugin-vue.md) ^10.9.1
- [eslint-plugin-yml](https://npm.io/package/eslint-plugin-yml.md) ^3.3.2
- [typescript-eslint](https://npm.io/package/typescript-eslint.md) ^8.59.4
- [vue-eslint-parser](https://npm.io/package/vue-eslint-parser.md) ^10.4.0
- [@antfu/install-pkg](https://npm.io/package/@antfu/install-pkg.md) ^1.1.0
- [eslint-plugin-svgo](https://npm.io/package/eslint-plugin-svgo.md) ^0.12.0
- [eslint-plugin-toml](https://npm.io/package/eslint-plugin-toml.md) ^1.3.1
- [toml-eslint-parser](https://npm.io/package/toml-eslint-parser.md) ^1.0.3
- [yaml-eslint-parser](https://npm.io/package/yaml-eslint-parser.md) ^2.0.0
- [eslint-parser-plain](https://npm.io/package/eslint-parser-plain.md) ^0.1.1
- [eslint-plugin-antfu](https://npm.io/package/eslint-plugin-antfu.md) ^3.2.3
- [eslint-plugin-jsdoc](https://npm.io/package/eslint-plugin-jsdoc.md) ^62.9.0
- [eslint-plugin-jsonc](https://npm.io/package/eslint-plugin-jsonc.md) ^3.1.2
- [eslint-plugin-ntnyq](https://npm.io/package/eslint-plugin-ntnyq.md) ^0.14.0
- [eslint-plugin-oxfmt](https://npm.io/package/eslint-plugin-oxfmt.md) ^0.8.0
- [eslint-plugin-pinia](https://npm.io/package/eslint-plugin-pinia.md) ^0.4.2
- [jsonc-eslint-parser](https://npm.io/package/jsonc-eslint-parser.md) ^3.1.0
- [eslint-plugin-depend](https://npm.io/package/eslint-plugin-depend.md) ^1.5.0
- [eslint-plugin-regexp](https://npm.io/package/eslint-plugin-regexp.md) ^3.1.0
- [@unocss/eslint-plugin](https://npm.io/package/@unocss/eslint-plugin.md) ^66.7.0
- [@vitest/eslint-plugin](https://npm.io/package/@vitest/eslint-plugin.md) ^1.6.17
- [eslint-plugin-command](https://npm.io/package/eslint-plugin-command.md) ^3.5.2
- [eslint-plugin-unicorn](https://npm.io/package/eslint-plugin-unicorn.md) ^64.0.0
- [eslint-plugin-import-x](https://npm.io/package/eslint-plugin-import-x.md) ^4.16.2
- [eslint-plugin-prettier](https://npm.io/package/eslint-plugin-prettier.md) ^5.5.5
- [eslint-merge-processors](https://npm.io/package/eslint-merge-processors.md) ^2.0.0
- [eslint-plugin-de-morgan](https://npm.io/package/eslint-plugin-de-morgan.md) ^2.1.2
- [eslint-flat-config-utils](https://npm.io/package/eslint-flat-config-utils.md) 3.2.0
- [eslint-plugin-github-action](https://npm.io/package/eslint-plugin-github-action.md) ^0.2.0
- [eslint-plugin-no-only-tests](https://npm.io/package/eslint-plugin-no-only-tests.md) ^3.4.0
- [eslint-plugin-perfectionist](https://npm.io/package/eslint-plugin-perfectionist.md) ^5.9.0
- [eslint-processor-vue-blocks](https://npm.io/package/eslint-processor-vue-blocks.md) ^2.0.0
- [eslint-config-flat-gitignore](https://npm.io/package/eslint-config-flat-gitignore.md) ^2.3.0
- [eslint-import-resolver-typescript](https://npm.io/package/eslint-import-resolver-typescript.md) ^4.4.4
- [@eslint-community/eslint-plugin-eslint-comments](https://npm.io/package/@eslint-community/eslint-plugin-eslint-comments.md) ^4.7.1

## Alternatives

- [eslint-plugin-sonarjs](https://npm.io/package/eslint-plugin-sonarjs.md) — 2.9M weekly downloads
- [eslint-config-expo](https://npm.io/package/eslint-config-expo.md) — 1.5M weekly downloads
- [@matter/protocol](https://npm.io/package/@matter/protocol.md) — 63.5K weekly downloads
- [@eventcatalog/linter](https://npm.io/package/@eventcatalog/linter.md) — 24.8K weekly downloads
- [@pandacss/eslint-plugin](https://npm.io/package/@pandacss/eslint-plugin.md) — 18.7K weekly downloads

## Recent versions

- 6.1.5 (latest) — 2026-05-25
- 7.0.0-beta.22 (next) — 2026-09-24
- 7.0.0-beta.21 — 2026-09-23
- 7.0.0-beta.20 — 2026-09-16
- 7.0.0-beta.19 — 2026-09-01
- 7.0.0-beta.18 — 2026-08-27
- 7.0.0-beta.17 — 2026-08-19
- 7.0.0-beta.16 — 2026-08-11
- 7.0.0-beta.15 — 2026-08-05
- 7.0.0-beta.14 — 2026-07-28
- 7.0.0-beta.13 — 2026-07-22
- 7.0.0-beta.12 — 2026-07-16
- 7.0.0-beta.11 — 2026-07-12
- 7.0.0-beta.10 — 2026-07-06
- 7.0.0-beta.9 — 2026-07-02
- … 238 more at https://npm.io/package/@ntnyq/eslint-config/versions

## README

# @ntnyq/eslint-config

> 🎨 ESLint config for JavaScript, TypeScript, Vue, JSON, Markdown, YAML, TOML, SVG, and more.

[![CI](https://github.com/ntnyq/eslint-config/workflows/CI/badge.svg)](https://github.com/ntnyq/eslint-config/actions)
[![NPM VERSION](https://img.shields.io/npm/v/@ntnyq/eslint-config/latest.svg)](https://www.npmjs.com/package/@ntnyq/eslint-config/v/latest)
[![NPM DOWNLOADS](https://img.shields.io/npm/dy/@ntnyq/eslint-config)](https://www.npmjs.com/package/@ntnyq/eslint-config)
[![LICENSE](https://img.shields.io/github/license/ntnyq/eslint-config.svg)](https://github.com/ntnyq/eslint-config/blob/main/LICENSE)

<!-- [![NPM NEXT VERSION](https://img.shields.io/npm/v/@ntnyq/eslint-config/next.svg)](https://www.npmjs.com/package/@ntnyq/eslint-config/v/next) -->

> [!IMPORTANT]
> Feel free to create and maintain your own fork if you think this is too opinionated.

## 📋 Requirements

- Node.js ^20.19.0 || ^22.13.0 || >=24
- ESLint ^9.38.0

> [!TIP]
> For Node.js v18 support, please use [v4](https://github.com/ntnyq/eslint-config/tree/v4).
>
> For Node.js versions below 20.19.0, please use [v5](https://github.com/ntnyq/eslint-config/tree/v5).

## ✨ Features

- ✅ Designed to work alongside formatters, e.g. [Prettier](https://prettier.io) or [oxfmt](https://oxc.rs/docs/guide/usage/formatter)
- 🎯 Opinionated: single quote, no semi, trailing comma, etc
- 🪄 Respect `.gitignore` via [eslint-config-flat-gitignore](https://github.com/antfu/eslint-config-flat-gitignore)
- 📦 Out-of-the-box support for TypeScript, Vue, JSON, Markdown, YAML, TOML, SVG, Astro, Svelte, etc
- 🛡️ Strict but provides useful rules to guard your codebase
- 🔧 Custom ESLint commands for [eslint-plugin-command](https://github.com/antfu/eslint-plugin-command)
- 🎪 [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files) for ESLint v9.38.0+

## 📦 Install

```shell
npm i eslint typescript @ntnyq/eslint-config -D
```

```shell
yarn add eslint typescript @ntnyq/eslint-config -D
```

```shell
pnpm add eslint typescript @ntnyq/eslint-config -D
```

```shell
bun add eslint typescript @ntnyq/eslint-config -D
```

## 🚀 Usage

Highly recommend using **`eslint.config.mjs`** as the config file:

```js
// @ts-check

import { defineESLintConfig } from '@ntnyq/eslint-config'

export default defineESLintConfig(
  // Options here
  {
    // Enable a config
    svgo: true,
    // Disable a config
    jsdoc: false,
    vue: {
      // Overrides built-in rules
      overrides: {
        'vue/slot-name-casing': 'off',
      },
    },
  },
  // Optional user configs here
  [
    {
      files: ['**/utils/*.ts'],
      rules: {
        'antfu/top-level-function': 'error',
      },
    },
  ],
)
```

Add a `lint` script to `package.json`:

```json
{
  "scripts": {
    "lint": "eslint",
    "lint:fix": "eslint --fix"
  }
}
```

<details>
<summary>💼 Integration: Prettier, VS Code, husky and nano-staged</summary>

<br>

## 🎨 Prettier config

> Feel free to use your own prettier config.

Install `prettier` and set up your Prettier config:

```shell
npm i prettier @ntnyq/prettier-config -D
```

```shell
yarn add prettier @ntnyq/prettier-config -D
```

```shell
pnpm add prettier @ntnyq/prettier-config -D
```

```shell
bun add prettier @ntnyq/prettier-config -D
```

```js
// prettier.config.mjs
// @ts-check

import { defineConfig } from '@ntnyq/prettier-config'

export default defineConfig({
  // Custom options if needed
  printWidth: 100,
  trailingComma: 'none',
  overrides: [
    {
      files: ['**/*.html'],
      options: {
        singleAttributePerLine: false,
      },
    },
    {
      files: ['**/*.{css,scss,less}'],
      options: {
        singleQuote: false,
      },
    },
  ],
})
```

## 💻 VS Code config

```json
{
  "eslint.enable": true,
  "prettier.enable": true,
  "editor.formatOnSave": true,
  "prettier.configPath": "./prettier.config.mjs",
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit",
    "source.organizeImports": "never",
    "source.sortImports": "never"
  },
  "eslint.validate": [
    "vue",
    "yaml",
    "toml",
    "json",
    "jsonc",
    "json5",
    "markdown",
    "javascript",
    "typescript",
    "javascriptreact",
    "typescriptreact"
  ]
}
```

## 🎯 Lint changed files only

### 1. Add dependencies

```shell
pnpm add husky nano-staged -D
```

### 2. Config in `package.json`

```json
{
  "scripts": {
    "prepare": "husky"
  },
  "nano-staged": {
    "*.{js,ts,cjs,mjs,jsx,tsx,vue,md,svg,yml,yaml,toml,json}": "eslint --fix",
    "*.{css,scss,html}": "prettier -uw"
  }
}
```

### 3. Add a Git hook

```shell
echo "nano-staged" > .husky/pre-commit
```

</details>

## 🔍 View what rules are enabled

Please check [eslint-config-inspector](https://eslint-config-inspector.ntnyq.com/) powered by [@eslint/config-inspector](https://github.com/eslint/config-inspector).

## ⚙️ Advanced config

For details, see:

- [./src/types/config.ts](https://github.com/ntnyq/eslint-config/blob/main/src/types/config.ts)
- [./src/core.ts](https://github.com/ntnyq/eslint-config/blob/main/src/core.ts)

### 📝 Config interface

```ts
export interface ConfigOptions {
  /**
   * Shareable options
   */
  shareable?: OptionsShareable

  /**
   * Configs enabled by default
   */
  command?: ConfigCommandOptions
  eslintComments?: ConfigESLintCommentsOptions
  ignores?: ConfigIgnoresOptions
  javascript?: ConfigJavaScriptOptions
  node?: ConfigNodeOptions

  /**
   * Configs below can be disabled
   */
  antfu?: boolean | ConfigAntfuOptions
  deMorgan?: boolean | ConfigDeMorganOptions
  depend?: boolean | ConfigDependOptions
  githubAction?: boolean | ConfigGitHubActionOptions
  gitignore?: boolean | ConfigGitIgnoreOptions
  importX?: boolean | ConfigImportXOptions
  jsdoc?: boolean | ConfigJsdocOptions
  jsonc?: boolean | ConfigJsoncOptions
  markdown?: boolean | ConfigMarkdownOptions
  ntnyq?: boolean | ConfigNtnyqOptions
  perfectionist?: boolean | ConfigPerfectionistOptions
  pinia?: boolean | ConfigPiniaOptions
  prettier?: boolean | ConfigPrettierOptions
  regexp?: boolean | ConfigRegexpOptions
  sort?: boolean | ConfigSortOptions
  specials?: boolean | ConfigSpecialsOptions
  test?: boolean | ConfigTestOptions
  toml?: boolean | ConfigTomlOptions
  typescript?: boolean | ConfigTypeScriptOptions
  unicorn?: boolean | ConfigUnicornOptions
  unocss?: boolean | ConfigUnoCSSOptions
  vue?: boolean | ConfigVueOptions
  yml?: boolean | ConfigYmlOptions

  /**
   * Configs below are disabled by default
   */
  astro?: boolean | ConfigAstroOptions
  html?: boolean | ConfigHtmlOptions
  pnpm?: boolean | ConfigPnpmOptions
  oxfmt?: boolean | ConfigOxfmtOptions
  svelte?: boolean | ConfigSvelteOptions
  svgo?: boolean | ConfigSVGOOptions
  eslintPlugin?: boolean | ConfigESLintPluginOptions
  unusedImports?: boolean | ConfigUnusedImportsOptions
}
```

## 📌 Versioning policy

This project aims to follow [Semantic Versioning](https://semver.org/) for releases.

### 🔴 Changes treated as Breaking Changes

- Node.js version requirement changes
- Huge refactors that might break the config
- Plugins made major changes that might break the config
- Changes that might affect most of the codebases

### 🟢 Changes treated as Non-Breaking Changes

- Enable/disable rules and plugins (that might become stricter)
- Rule option changes
- Version bumps of dependencies

## 🙏 Credits

- [@sxzz/eslint-config](https://github.com/sxzz/eslint-config)
- [@antfu/eslint-config](https://github.com/antfu/eslint-config)

## 📄 License

[MIT](./LICENSE) License © 2023-PRESENT [ntnyq](https://github.com/ntnyq)

---
_Source: https://npm.io/package/@ntnyq/eslint-config · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
