---
title: "Frameworks"
description: "Enable Vue, React, Next.js, Svelte, Solid, Astro or UnoCSS in vinicuncaESLint."
canonical_url: "https://vinicunca.dev/eslint/configuration/frameworks"
---
# 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.

```js [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

```js [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`](https://vinicunca.dev/eslint/configuration/options#languages), 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

```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

```js [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

```js [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

```js [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`](https://vinicunca.dev/eslint/configuration/formatters).

## UnoCSS

```js [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](https://vinicunca.dev/eslint/configuration/options#frameworks) for types and defaults.


## Sitemap

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