---
title: "Options"
description: "Reference of every option accepted by the first argument of vinicuncaESLint, with types and defaults."
canonical_url: "https://vinicunca.dev/eslint/configuration/options"
---
# Options

> Reference of every option accepted by the first argument of vinicuncaESLint, with types and defaults.

All options go in the first argument of `vinicuncaESLint()`. Options typed `boolean | object` turn the integration on when you pass an object.

```js [eslint.config.js]
import { vinicuncaESLint } from '@vinicunca/eslint-config';

export default vinicuncaESLint({
  type: 'lib',
  stylistic: { indent: 2, quotes: 'single' },
  typescript: { tsconfigPath: 'tsconfig.json' },
});
```

## General

**type** (`'app' | 'lib'`): Defaults to 'app'. 'lib' also enables ts/explicit-function-return-type (expressions, higher-order functions and IIFEs are allowed) for published libraries.

**ignores** (`string[] | ((originals: string[]) => string[])`): Defaults to []. Global ignore globs. An array extends the built-in list (node_modules, dist, lockfiles, coverage, .nuxt, .next, .output, CHANGELOG*.md, *.min.*, __snapshots__, .claude, .agents and more). A function receives the built-in list and returns the final one. When TypeScript support is off, *.ts and *.tsx files are ignored too.

**gitignore** (`boolean | FlatGitignoreOptions`): Defaults to true. Adds the patterns from .gitignore to the ignores, without failing when the file is missing. Pass an object to configure eslint-config-flat-gitignore (for example files or strict).

**isInEditor** (`boolean`): Defaults to auto-detection (VS Code, JetBrains IDEs, Vim, Neovim, Zed; never in CI, git hooks or lint-staged). When true, prefer-const, unused-imports/no-unused-imports and test/no-only-tests become non-fixable warnings. See Editor-specific behavior.

**autoRenamePlugins** (`boolean`): Defaults to true. Renames plugin prefixes (for example @typescript-eslint to ts) in every config, including yours. See Plugin renaming.

**componentExts** (`string[]`): Defaults to []. Extra file extensions treated as components: they are parsed by the TypeScript parser and linted inside Markdown code blocks. vue is added automatically when Vue support is on.

**lessOpinionated** (`boolean`): Defaults to false. Accepted for compatibility with antfu/eslint-config but currently has no effect: curly, antfu/top-level-function and the other stylistic rules stay on.

The first argument also accepts the flat config properties `name`, `languageOptions`, `linterOptions`, `processor`, `plugins`, `rules` and `settings` (but not `files`). See [Options](https://vinicunca.dev/eslint/configuration#options).

## JavaScript and core rules

**javascript** (`{ overrides?: Rules }`): Core JavaScript rules. Always enabled; use overrides to change them.

**node** (`boolean`): Defaults to true. Node.js rules from eslint-plugin-n (renamed node/*).

**jsdoc** (`boolean`): Defaults to true. JSDoc rules (as warnings) from eslint-plugin-jsdoc.

**imports** (`boolean | { overrides?: Rules }`): Defaults to true. Import hygiene rules from eslint-plugin-import-lite (renamed import/*) and eslint-plugin-antfu.

**perfectionist** (`boolean | { overrides?: Rules }`): Defaults to true. Sorts imports, exports, named imports and named exports with eslint-plugin-perfectionist.

**unicorn** (`boolean | { allRecommended?: boolean }`): Defaults to true. A curated set of eslint-plugin-unicorn rules. allRecommended: true (default false) uses the plugin's full recommended set instead. The overrides key is accepted by the type but currently ignored; override unicorn rules in an extra config.

**e18e** (`boolean | OptionsE18e`): Defaults to true. Ecosystem performance rules from @e18e/eslint-plugin. See e18e options.

**regexp** (`boolean | { level?: 'error' | 'warn', overrides?: Rules }`): Defaults to true. The recommended rules of eslint-plugin-regexp. level: 'warn' downgrades every error to a warning.

**test** (`boolean | { overrides?: Rules }`): Defaults to true. Rules for *.test.*, *.spec.*, *.bench.*, *.benchmark.* and __tests__/** files, from @vitest/eslint-plugin and eslint-plugin-no-only-tests (both under test/*).

### e18e

**modernization** (`boolean`): Defaults to true. Rules that prefer modern built-in APIs.

**moduleReplacements** (`boolean`): Defaults to false in practice. The type docs say type === 'lib' && isInEditor, but the factory doesn't forward type to this integration, so set it explicitly to enable it.

**performanceImprovements** (`boolean`): Defaults to true. Rules that flag slow patterns.

**overrides** (`Rules`): Rule overrides for e18e/*. e18e/prefer-static-regex and the array-copy rules (prefer-array-at, prefer-array-from-map, prefer-array-to-reversed, prefer-array-to-sorted, prefer-array-to-spliced, prefer-spread-syntax) are off by default.

## Stylistic

**stylistic** (`boolean | StylisticOptions`): Defaults to true. Formatting rules from ESLint Stylistic (renamed style/*). Pass false if you format with another tool, or an object with the keys below.

### Stylistic options

**indent** (`number | 'tab'`): Defaults to 2. Also used for JSON, YAML, TOML, Vue templates, Svelte and the Prettier/dprint formatters.

**quotes** (`'single' | 'double' | 'backtick'`): Defaults to 'single'.

**semi** (`boolean`): Defaults to true. Set false to forbid semicolons.

**jsx** (`boolean`): Defaults to the value of the jsx option. Enables JSX stylistic rules.

**braceStyle** (`'1tbs' | 'stroustrup' | 'allman'`): Defaults to 'stroustrup', but JavaScript and TypeScript always use 1tbs (} else {) because the config sets style/brace-style without options. The value only reaches vue/brace-style in Vue templates. To change the brace style, override style/brace-style.

**experimental** (`boolean`): Defaults to false. Enables ESLint Stylistic's experimental rules and drops antfu/consistent-list-newline.

**overrides** (`Rules`): Rule overrides merged into vinicunca/stylistic/rules.

## TypeScript

**typescript** (`boolean | OptionsTypescript`): Defaults to true when typescript or @typescript/native-preview is installed. Pass an object with the keys below to configure it. See TypeScript.

### TypeScript options

**tsconfigPath** (`string`): Path to your tsconfig.json. Setting it enables type-aware rules.

**overrides** (`Rules`): Overrides for vinicunca/typescript/rules.

**overridesTypeAware** (`Rules`): Overrides for vinicunca/typescript/rules-type-aware. Only used when tsconfigPath is set.

**filesTypeAware** (`string[]`): Defaults to ['**/*.?([cm])ts', '**/*.?([cm])tsx']. Files that get type-aware parsing and rules.

**ignoresTypeAware** (`string[]`): Defaults to ['**/*.md/**', '**/*.astro/*.ts']. Files excluded from type-aware parsing and rules.

**parserOptions** (`Partial<ParserOptions>`): Extra options for @typescript-eslint/parser, merged last.

**erasableOnly** (`boolean`): Defaults to false. Forbids TypeScript syntax that can't be erased (enums, namespaces, parameter properties, import/export aliases), for Node.js type stripping.

## Languages

**jsx** (`boolean | { a11y?: boolean | { overrides?: Rules } }`): Defaults to true. Enables JSX parsing for *.jsx/*.tsx and JSX stylistic rules. a11y (default false) adds the recommended rules of eslint-plugin-jsx-a11y, which you must install.

**jsonc** (`boolean | { overrides?: Rules }`): Defaults to true. Lints *.json, *.json5 and *.jsonc, and sorts the keys of package.json, tsconfig.json, tsconfig.*.json and jsconfig.json.

**yaml** (`boolean | { overrides?: Rules }`): Defaults to true. Lints *.yaml and *.yml with eslint-plugin-yml (renamed yaml/*).

**toml** (`boolean | { overrides?: Rules }`): Defaults to true. Lints *.toml with eslint-plugin-toml.

**markdown** (`boolean | OptionsMarkdown`): Defaults to true. Lints Markdown files with @eslint/markdown and the code blocks inside them. See Markdown options.

### Markdown options

**gfm** (`boolean`): Defaults to true. Parses Markdown as GitHub Flavored Markdown. false uses CommonMark.

**overrides** (`Rules`): Overrides for the code blocks inside Markdown files (vinicunca/markdown/disables).

**overridesMarkdown** (`Rules`): Overrides for the Markdown document itself (vinicunca/markdown/rules).

## Frameworks

**vue** (`boolean | OptionsVue`): Defaults to true when vue, nuxt, vitepress or @slidev/cli is installed. See Vue options.

**react** (`boolean | { overrides?: Rules }`): Defaults to false. Requires @eslint-react/eslint-plugin and eslint-plugin-react-refresh.

**nextjs** (`boolean | { overrides?: Rules }`): Defaults to false. Requires @next/eslint-plugin-next.

**svelte** (`boolean | { overrides?: Rules }`): Defaults to false. Requires eslint-plugin-svelte and svelte-eslint-parser.

**solid** (`boolean | { overrides?: Rules }`): Defaults to false. Requires eslint-plugin-solid.

**astro** (`boolean | { overrides?: Rules }`): Defaults to false. Requires eslint-plugin-astro and astro-eslint-parser.

**unocss** (`boolean | OptionsUnoCSS`): Defaults to false. @unocss/eslint-plugin ships with the config. See UnoCSS options.

See [Frameworks](https://vinicunca.dev/eslint/configuration/frameworks) for examples.

### Vue options

**a11y** (`boolean`): Defaults to false. Adds accessibility rules from eslint-plugin-vuejs-accessibility (renamed vue-a11y/*), which you must install.

**sfcBlocks** (`boolean | VueBlocksOptions`): Defaults to true. Creates virtual files for SFC blocks with eslint-processor-vue-blocks so <style> blocks can be linted and formatted. false uses only the Vue processor.

**vueVersion** (`2 | 3`): Defaults to 3. Currently has no effect: the Vue 3 rule sets are always used.

**overrides** (`Rules`): Overrides for vinicunca/vue/rules.

### UnoCSS options

**attributify** (`boolean`): Defaults to false (the type docs say true, but the config uses false). Enables unocss/order-attributify.

**strict** (`boolean`): Defaults to false. Reports blocklisted classes with unocss/blocklist.

**configPath** (`string`): Path to uno.config.ts, useful in monorepos.

The `overrides` key is accepted for `unocss` but currently ignored; override `unocss/*` rules in an extra config.

## Optional configs

**formatters** (`boolean | OptionsFormatters`): Defaults to false. Formats CSS, HTML, XML, SVG, Markdown, GraphQL and Astro files with Prettier or dprint. See Formatters.

**antislop** (`boolean | OptionsAntislop`): Defaults to true. Experimental. Rules against low-value code patterns from eslint-plugin-slop and eslint-plugin-sonarjs, both installed with this config. Set false to turn them off. See Antislop options.

**pnpm** (`boolean | OptionsPnpm`): Defaults to true when a pnpm-workspace.yaml is found in the current directory or a parent. Experimental. See pnpm options.

### Formatters options

**css** (`boolean | 'prettier'`): Formats *.css, *.pcss, *.postcss, *.scss and *.less (and Vue <style> blocks) with Prettier.

**html** (`boolean | 'prettier'`): Formats *.html and *.htm with Prettier.

**xml** (`boolean | 'prettier'`): Formats *.xml with Prettier. Requires @prettier/plugin-xml.

**svg** (`boolean | 'prettier'`): Formats *.svg with Prettier. Requires @prettier/plugin-xml.

**markdown** (`boolean | 'prettier' | 'dprint'`): Formats *.md. true means Prettier.

**graphql** (`boolean | 'prettier'`): Formats *.graphql and *.gql with Prettier.

**astro** (`boolean | 'prettier'`): Formats *.astro with Prettier. Requires prettier-plugin-astro.

**slidev** (`boolean | { files?: string[] }`): Formats Slidev decks (**/slides.md by default) with prettier-plugin-slidev. Only works when markdown uses Prettier.

**prettierOptions** (`PrettierOptions`): Prettier options merged over the defaults derived from your stylistic options.

**dprintOptions** (`object`): dprint options for Markdown, merged over the defaults. Currently typed as boolean, so TypeScript users need a cast.

### Antislop options

**slop** (`boolean | { cwd?: string, inspection?: 'full' | 'uncommitted' | 'recent-changes' | object }`): Defaults to true. Enables eslint-plugin-slop rules. An object is forwarded to the plugin as settings.slop.

**sonarjs** (`boolean`): Defaults to true. Enables a curated subset of eslint-plugin-sonarjs rules.

**cognitiveComplexity** (`number | false`): Defaults to 15. Threshold for sonarjs/cognitive-complexity; false turns the rule off.

**overrides** (`Rules`): Overrides for vinicunca/antislop/rules/javascript.

### pnpm options

**catalogs** (`boolean`): Defaults to true when pnpm-workspace.yaml mentions catalog: or catalogs:. Enforces catalog usage in package.json with pnpm/json-enforce-catalog.

**json** (`boolean`): Defaults to true unless jsonc is false. Lints package.json files.

**yaml** (`boolean`): Defaults to true unless yaml is false. Lints pnpm-workspace.yaml.

**sort** (`boolean`): Defaults to true (the type docs say false). Sorts the keys of pnpm-workspace.yaml.

See [Optional configs](https://vinicunca.dev/eslint/configuration/optional-configs) for what each one checks.


## Sitemap

See the full [sitemap](https://vinicunca.dev/sitemap.md) for all pages.
