Nuxt Best Practices
Comprehensive performance optimization guide for Nuxt 4 applications (current: Nuxt 4.5, with notes for 3.x apps approaching EOL). Contains 23 rules across 9 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
- Writing new Nuxt pages, components, or composables
- Implementing data fetching (useFetch, useAsyncData, the 4.5
enabled option)
- Creating server routes and API endpoints
- Organizing types, composables, and auto-imports
- Working with Nuxt modules and plugins
- Configuring rendering modes (SSR, SSG, SPA, 4.5 experimental SSR streaming)
- Using layouts, named views, and NuxtLink prefetching (Nuxt 4.5 conventions)
Rule Categories by Priority
| Priority |
Category |
Impact |
Prefix |
| 1 |
Data Fetching |
CRITICAL |
data- |
| 2 |
Auto-Imports & Organization |
CRITICAL |
imports- |
| 3 |
Server & API Routes |
HIGH |
server- |
| 4 |
Rendering Modes |
HIGH |
rendering- |
| 5 |
State Management |
MEDIUM-HIGH |
state- |
| 6 |
Pages, Layouts & Navigation |
MEDIUM |
pages- |
| 7 |
Type Safety |
MEDIUM |
types- |
| 8 |
Modules & Plugins |
LOW-MEDIUM |
modules- |
| 9 |
Performance & Deployment |
LOW |
perf- |
Quick Reference
1. Data Fetching (CRITICAL)
data-use-fetch - Use useFetch/useAsyncData, never raw fetch in components
data-key-unique - Always provide unique keys for data fetching
data-lazy-loading - Use lazy option for non-critical data
data-transform - Transform data at fetch time, not in template
data-error-handling - Always handle error and pending states
data-refresh-patterns - Use refresh() and clear() appropriately
data-conditional-enabled - Use the enabled option for conditional fetching (4.5+)
2. Auto-Imports & Organization (CRITICAL)
imports-no-barrel-autoimport - Never create barrel exports in auto-imported directories
imports-component-naming - Don't duplicate folder prefix in component names
imports-type-locations - Place types in dedicated directories (app/types, shared/types, server/types)
imports-composable-exports - Composables export functions only, not types
imports-direct-composable-imports - Use direct imports between composables
3. Server & API Routes (HIGH)
server-validated-input - Use getValidatedQuery/readValidatedBody with Zod
server-route-meta - Always add defineRouteMeta for OpenAPI docs
server-runtime-config - Use useRuntimeConfig, never process.env
server-error-handling - Use createError for consistent error responses
server-middleware-order - Understand middleware execution order
4. Rendering Modes (HIGH)
rendering-route-rules - Configure rendering per-route with routeRules
rendering-hybrid - Use hybrid rendering for optimal performance
rendering-prerender - Prerender static pages at build time
rendering-client-only - Use ClientOnly for browser-specific components
rendering-ssr-streaming - Understand SSR streaming before enabling it (4.5+, experimental)
5. State Management (MEDIUM-HIGH)
state-use-state - Use useState for SSR-safe shared state
state-pinia-setup - Set up Pinia correctly with Nuxt
state-hydration - Handle hydration mismatches properly
state-computed-over-watch - Prefer computed over watch for derived state
6. Pages, Layouts & Navigation (MEDIUM)
pages-use-layout - Use useLayout to read the resolved layout (4.5+)
pages-named-views - Use the name@view.vue convention for named views (4.5+)
pages-nuxtlink-custom-prefetch - Wire prefetch manually in NuxtLink custom slots (4.5+)
7. Type Safety (MEDIUM)
types-no-inline - Never define types inline in components/composables
types-import-paths - Use correct import paths (#shared, ~/, ~~/)
types-no-any - Never use any type
types-zod-schemas - Use Zod for runtime validation with type inference
types-strict-emits - Type emits fully; declare camelCase, listen kebab-case
8. Modules & Plugins (LOW-MEDIUM)
modules-order - Module order matters in nuxt.config
modules-runtime-vs-build - Understand runtime vs build-time modules
plugins-client-server - Use .client.ts and .server.ts suffixes correctly
plugins-provide-inject - Use provide/inject for cross-cutting concerns
9. Performance & Deployment (LOW)
perf-bundle-analysis - Analyze and optimize bundle size
perf-image-optimization - Use nuxt/image for optimized images
perf-font-loading - Configure font loading strategy
perf-caching-headers - Set appropriate cache headers
How to Use
Read individual rule files for detailed explanations and code examples:
rules/data-use-fetch.md
rules/imports-no-barrel-autoimport.md
rules/_sections.md
Each rule file contains:
- Brief explanation of why it matters
- Incorrect code example with explanation
- Correct code example with explanation
- Additional context and Nuxt-specific notes
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
1---2name: nuxt-best-practices3description: Nuxt 4 performance optimization and architecture guidelines (current through Nuxt 4.5) for building fast, maintainable full-stack applications. This skill should be used when writing, reviewing, or refactoring Nuxt code to ensure optimal patterns. Triggers on tasks involving data fetching, server routes, auto-imports, rendering modes, layouts, named views, or Nuxt-specific features.4license: MIT5---67# Nuxt Best Practices89Comprehensive performance optimization guide for Nuxt 4 applications (current: Nuxt 4.5, with notes for 3.x apps approaching EOL). Contains 23 rules across 9 categories, prioritized by impact to guide automated refactoring and code generation.1011## When to Apply1213Reference these guidelines when:1415- Writing new Nuxt pages, components, or composables16- Implementing data fetching (useFetch, useAsyncData, the 4.5 `enabled` option)17- Creating server routes and API endpoints18- Organizing types, composables, and auto-imports19- Working with Nuxt modules and plugins20- Configuring rendering modes (SSR, SSG, SPA, 4.5 experimental SSR streaming)21- Using layouts, named views, and NuxtLink prefetching (Nuxt 4.5 conventions)2223## Rule Categories by Priority2425| Priority | Category | Impact | Prefix |26| -------- | --------------------------- | ----------- | ------------ |27| 1 | Data Fetching | CRITICAL | `data-` |28| 2 | Auto-Imports & Organization | CRITICAL | `imports-` |29| 3 | Server & API Routes | HIGH | `server-` |30| 4 | Rendering Modes | HIGH | `rendering-` |31| 5 | State Management | MEDIUM-HIGH | `state-` |32| 6 | Pages, Layouts & Navigation | MEDIUM | `pages-` |33| 7 | Type Safety | MEDIUM | `types-` |34| 8 | Modules & Plugins | LOW-MEDIUM | `modules-` |35| 9 | Performance & Deployment | LOW | `perf-` |3637## Quick Reference3839### 1. Data Fetching (CRITICAL)4041- `data-use-fetch` - Use useFetch/useAsyncData, never raw fetch in components42- `data-key-unique` - Always provide unique keys for data fetching43- `data-lazy-loading` - Use lazy option for non-critical data44- `data-transform` - Transform data at fetch time, not in template45- `data-error-handling` - Always handle error and pending states46- `data-refresh-patterns` - Use refresh() and clear() appropriately47- `data-conditional-enabled` - Use the `enabled` option for conditional fetching (4.5+)4849### 2. Auto-Imports & Organization (CRITICAL)5051- `imports-no-barrel-autoimport` - Never create barrel exports in auto-imported directories52- `imports-component-naming` - Don't duplicate folder prefix in component names53- `imports-type-locations` - Place types in dedicated directories (app/types, shared/types, server/types)54- `imports-composable-exports` - Composables export functions only, not types55- `imports-direct-composable-imports` - Use direct imports between composables5657### 3. Server & API Routes (HIGH)5859- `server-validated-input` - Use getValidatedQuery/readValidatedBody with Zod60- `server-route-meta` - Always add defineRouteMeta for OpenAPI docs61- `server-runtime-config` - Use useRuntimeConfig, never process.env62- `server-error-handling` - Use createError for consistent error responses63- `server-middleware-order` - Understand middleware execution order6465### 4. Rendering Modes (HIGH)6667- `rendering-route-rules` - Configure rendering per-route with routeRules68- `rendering-hybrid` - Use hybrid rendering for optimal performance69- `rendering-prerender` - Prerender static pages at build time70- `rendering-client-only` - Use ClientOnly for browser-specific components71- `rendering-ssr-streaming` - Understand SSR streaming before enabling it (4.5+, experimental)7273### 5. State Management (MEDIUM-HIGH)7475- `state-use-state` - Use useState for SSR-safe shared state76- `state-pinia-setup` - Set up Pinia correctly with Nuxt77- `state-hydration` - Handle hydration mismatches properly78- `state-computed-over-watch` - Prefer computed over watch for derived state7980### 6. Pages, Layouts & Navigation (MEDIUM)8182- `pages-use-layout` - Use useLayout to read the resolved layout (4.5+)83- `pages-named-views` - Use the name@view.vue convention for named views (4.5+)84- `pages-nuxtlink-custom-prefetch` - Wire prefetch manually in NuxtLink custom slots (4.5+)8586### 7. Type Safety (MEDIUM)8788- `types-no-inline` - Never define types inline in components/composables89- `types-import-paths` - Use correct import paths (#shared, ~/, ~~/)90- `types-no-any` - Never use `any` type91- `types-zod-schemas` - Use Zod for runtime validation with type inference92- `types-strict-emits` - Type emits fully; declare camelCase, listen kebab-case9394### 8. Modules & Plugins (LOW-MEDIUM)9596- `modules-order` - Module order matters in nuxt.config97- `modules-runtime-vs-build` - Understand runtime vs build-time modules98- `plugins-client-server` - Use .client.ts and .server.ts suffixes correctly99- `plugins-provide-inject` - Use provide/inject for cross-cutting concerns100101### 9. Performance & Deployment (LOW)102103- `perf-bundle-analysis` - Analyze and optimize bundle size104- `perf-image-optimization` - Use nuxt/image for optimized images105- `perf-font-loading` - Configure font loading strategy106- `perf-caching-headers` - Set appropriate cache headers107108## How to Use109110Read individual rule files for detailed explanations and code examples:111112```113rules/data-use-fetch.md114rules/imports-no-barrel-autoimport.md115rules/_sections.md116```117118Each rule file contains:119120- Brief explanation of why it matters121- Incorrect code example with explanation122- Correct code example with explanation123- Additional context and Nuxt-specific notes124125## Full Compiled Document126127For the complete guide with all rules expanded: `AGENTS.md`