--- name: nuxt-best-practices description: Nuxt 3/4 performance optimization and architecture guidelines 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, or Nuxt-specific features. license: MIT metadata: author: vinayakkulkarni version: "1.0.0" --- # Nuxt Best Practices Comprehensive performance optimization guide for Nuxt 3/4 applications. Contains 40+ rules across 8 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) - Creating server routes and API endpoints - Organizing types, composables, and auto-imports - Working with Nuxt modules and plugins - Configuring rendering modes (SSR, SSG, SPA) ## 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 | Type Safety | MEDIUM | `types-` | | 7 | Modules & Plugins | LOW-MEDIUM | `modules-` | | 8 | 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 ### 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 ### 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. 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` - Use kebab-case emits with full type definitions ### 7. 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 ### 8. 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`