Frameworks

Enable Vue, React, Next.js, Svelte, Solid, Astro or UnoCSS in vinicuncaESLint.

Vue is auto-detected. Everything else is opt-in. When you enable an integration that needs a peer plugin and you run ESLint in an interactive terminal, the config asks to install the missing packages.

There is no Angular option.

Vue

On by default when vue, nuxt, vitepress or @slidev/cli is installed. eslint-plugin-vue and vue-eslint-parser ship with the config.

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

export default vinicuncaESLint({
  vue: {
    a11y: true,
    overrides: {
      'vue/no-v-html': 'error',
    },
  },
});
a11y
boolean
Defaults to false. Adds vue-a11y/* rules from eslint-plugin-vuejs-accessibility. Install that plugin yourself.
sfcBlocks
boolean | VueBlocksOptions
Defaults to true. Creates virtual files for SFC blocks with eslint-processor-vue-blocks so <style> can be formatted when formatters are on. false uses only the Vue processor.
vueVersion
2 | 3
Defaults to 3. Currently has no effect: Vue 3 rule sets (flat/essential, flat/strongly-recommended, flat/recommended) are always used.
overrides
Rules
Merged into vinicunca/vue/rules.

Notable Vue defaults: <script> then <template> then <style>; PascalCase components in templates; defineOptions → defineProps → defineEmits → defineSlots; HTML attributes use double quotes; vue/multi-word-component-names, vue/no-v-html and vue/require-default-prop are off; vue/brace-style follows stylistic.braceStyle ('stroustrup' by default).

React

eslint.config.js
export default vinicuncaESLint({
  react: true,
});

Requires:

  • @eslint-react/eslint-plugin
  • eslint-plugin-react-refresh

You do not need eslint-plugin-react-hooks or eslint-plugin-react. JSX parsing is already on (jsx: true). For JSX accessibility, use jsx.a11y, not react.

The plugin prefix is renamed to react/*. react-refresh/only-export-components allows Vite constant exports, and extra export names when next, Remix (@remix-run/*) or React Router (@react-router/*) is installed.

Pass typescript.tsconfigPath to enable the type-aware rule react/no-leaked-conditional-rendering.

Next.js

eslint.config.js
export default vinicuncaESLint({
  react: true,
  nextjs: true,
});

Requires @next/eslint-plugin-next. Applies the plugin's recommended and core-web-vitals sets under the next/* prefix. Enable react as well for component rules.

Svelte

eslint.config.js
export default vinicuncaESLint({
  svelte: true,
});

Requires eslint-plugin-svelte and svelte-eslint-parser. Files matched: *.svelte, *.svelte.js, *.svelte.ts. Stylistic indent and trailing-space rules are handed to svelte/* when stylistic is on.

Solid

eslint.config.js
export default vinicuncaESLint({
  solid: true,
});

Requires eslint-plugin-solid. Applies to *.jsx and *.tsx. Set typescript.tsconfigPath for type-aware parsing.

Astro

eslint.config.js
export default vinicuncaESLint({
  astro: true,
});

Requires eslint-plugin-astro and astro-eslint-parser. Unlike the other frameworks, this integration does not prompt to install them — add both yourself.

This lints .astro files. To format them with Prettier, also set formatters.astro.

UnoCSS

eslint.config.js
export default vinicuncaESLint({
  unocss: {
    attributify: true,
    strict: true,
    configPath: '../../uno.config.ts',
  },
});

@unocss/eslint-plugin ships with the config. unocss/order is a warning. attributify (default false) adds unocss/order-attributify. strict (default false) turns on unocss/blocklist.

The overrides key is accepted in the type but ignored; override unocss/* in an extra config.

See the options reference for types and defaults.