13 KiB
name, description
| name | description |
|---|---|
| nuxt | This skill should be used when working on Nuxt projects (v3+). Use it for building Vue applications with Nuxt's file-based routing, server-side rendering, and auto-import features. Trigger when working with .vue or .ts files in Nuxt directories (pages/, server/, composables/, middleware/), nuxt.config.ts, or when the project contains a nuxt dependency in package.json. Also trigger for questions about Nuxt concepts like composables, auto-imports, server routes, SSR/SSG patterns, or file-based routing. |
Nuxt Development
Overview
This skill provides specialized guidance for developing Nuxt applications (v3+), including Vue best practices, Nuxt-specific conventions, ecosystem library knowledge, and access to up-to-date documentation.
When to Use This Skill
Trigger this skill when:
- Working in a project with
nuxtas a dependency in package.json - Creating or editing
.vuesingle-file components - Working with
.tsor.tsxfiles in Nuxt directories:pages/,server/,composables/,middleware/,layouts/, orutils/ - Working with Nuxt-specific files:
nuxt.config.ts,app.vue, or any file in Nuxt convention directories - Questions about Nuxt architecture, routing, or SSR/SSG patterns
- User mentions Nuxt-specific concepts: composables, auto-imports, server routes, server API, middleware, file-based routing
- Debugging Nuxt-specific issues or errors
Documentation Access
Official Nuxt Documentation
Fetch up-to-date Nuxt documentation when needed:
https://nuxt.com/llms.txt
Fetch when:
- Uncertain about current Nuxt API syntax or conventions
- User asks about specific Nuxt features or modules
- Working with recently released Nuxt features
- Encountering Nuxt-specific errors or configuration issues
- Need to verify patterns work with the specific Nuxt version in use
Quick Reference
Auto-Imported APIs (No Import Needed)
Nuxt automatically imports these without explicit import statements:
Vue APIs: ref, reactive, computed, watch, onMounted, defineProps, defineEmits, defineModel
Nuxt Composables: useState, useFetch, useAsyncData, useRoute, useRouter, navigateTo, useCookie, useHead, useSeoMeta, useRuntimeConfig, showError, clearError
Auto-imports:
- Components from
components/directory - Composables from
composables/directory - Server utilities from
server/utils/directory
File-Based Conventions
Routing:
pages/index.vue→/pages/about.vue→/aboutpages/users/[id].vue→/users/:id(dynamic route)
Server API:
server/api/users.get.ts→/api/users(GET endpoint)server/api/users.post.ts→/api/users(POST endpoint)server/routes/healthz.ts→/healthz(custom route)
Layouts & Middleware:
layouts/default.vue- Default layoutmiddleware/auth.ts- Named middleware (use viadefinePageMeta({ middleware: 'auth' }))middleware/analytics.global.ts- Global middleware (runs on every route)
Nuxt CLI Commands
Development:
nuxt dev- Start development servernuxt dev --host- Expose to network
Building:
nuxt build- Production buildnuxt generate- Static site generationnuxt preview- Preview production build
Analysis:
nuxt analyze- Bundle size analysisnuxt typecheck- Type checkingnuxt info- Environment info for bug reports
Project Dependency Detection
Important: Before providing library-specific guidance, check if the library is installed by examining package.json. Only include library-specific advice for dependencies that exist in the project.
Core Libraries (Always Available)
- Vue - Component framework (auto-imported)
- Vue Router - Routing (file-based, managed by Nuxt)
- Nitro - Server engine (built into Nuxt)
Optional Libraries to Check
Check package.json for these before suggesting their features:
State & Utilities:
piniaor@pinia/nuxt- State management → Seereferences/pinia.md@vueuse/coreor@vueuse/nuxt- Composition utilities → Seereferences/vueuse.mddrizzle-orm- Database ORM → Seereferences/drizzle-db0.md
Core Nuxt Modules (Dedicated References):
@nuxt/ui- UI component library → Seereferences/nuxt-ui.md@nuxt/image- Image optimization → Seereferences/nuxt-image.md@nuxt/content- File-based CMS → Seereferences/nuxt-content.md@nuxtjs/i18n- Internationalization → Seereferences/nuxt-i18n.md@nuxtjs/tailwindcss- Tailwind CSS → Seereferences/tailwind.md
Other Nuxt Modules:
@nuxt/icon,@nuxtjs/seo,@nuxtjs/color-mode→ Seereferences/nuxt-modules.md@nuxt/eslint,@nuxt/fonts,@nuxt/scripts,nuxt-security→ Seereferences/nuxt-modules.md
References
This skill includes detailed reference documentation for specific topics. Load these files as needed when working with specific features:
Core Best Practices
references/vue-best-practices.md - Vue component patterns and conventions
- Use when writing or reviewing Vue components
- Covers: Script setup syntax, props/emits/v-model, component structure, template directives, reactivity patterns
references/nuxt-patterns.md - Common Nuxt patterns and recipes
- Use when implementing features or solving common tasks
- Covers: Data fetching, SEO/meta tags, error handling, environment config, server API routes, middleware, state management, composables, layouts, plugins
Core Nuxt Modules (Comprehensive Documentation)
references/nuxt-ui.md - Nuxt UI component library (Last updated: 2025-01)
- Only use if
@nuxt/uiis installed - Covers: v3/v4 setup and migration, components (forms, buttons, modals, tables), Tailwind v4 integration, theming, validation, troubleshooting
- Important: Includes version-specific breaking changes and setup requirements
references/tailwind.md - Tailwind CSS in Nuxt (Last updated: 2025-01)
- Only use if
@nuxtjs/tailwindcssis installed - Covers: v3/v4 setup, configuration, responsive design, dark mode, custom utilities, plugins, JIT mode, performance optimization
references/nuxt-image.md - Image optimization (Last updated: 2025-01)
- Only use if
@nuxt/imageis installed - Covers: NuxtImg/NuxtPicture components, image providers, lazy loading, responsive images, performance optimization
references/nuxt-content.md - File-based CMS (Last updated: 2025-01)
- Only use if
@nuxt/contentis installed - Covers: Markdown/YAML content, queryContent API, components (ContentDoc, ContentList), navigation, search, pagination, syntax highlighting
references/nuxt-i18n.md - Internationalization (Last updated: 2025-01)
- Only use if
@nuxtjs/i18nis installed - Covers: Multi-language routing, translations, locale switching, SEO, number/date formatting, pluralization, composables
State Management & Utilities
references/pinia.md - Pinia state management
- Only use if
piniaor@pinia/nuxtis installed - Covers: Store definition, component usage, SSR, persistence, testing
references/vueuse.md - VueUse composables
- Only use if
@vueuse/coreor@vueuse/nuxtis installed - Covers: State management composables, browser APIs, element interaction, utilities, common patterns
references/drizzle-db0.md - Database with Drizzle ORM
- Only use if
drizzle-ormis installed - Covers: Setup, schema definition, CRUD operations, queries, joins, filtering, transactions, migrations, type safety
Other Modules
references/nuxt-modules.md - Other official Nuxt modules
- Brief overview of: @nuxt/icon, @nuxtjs/seo, @nuxtjs/color-mode, @nuxt/eslint, @nuxt/fonts, @nuxt/scripts, nuxt-security
- For detailed guidance on @nuxt/ui, @nuxt/image, @nuxt/content, @nuxtjs/i18n, or @nuxtjs/tailwindcss, use their dedicated reference files instead
How to Use This Skill
- Check dependencies - Always examine
package.jsonfirst to know what libraries are available - Follow Vue best practices - Apply patterns from
vue-best-practices.mdto all component code - Leverage auto-imports - Never manually import Nuxt/Vue composables that are auto-imported
- Use file-based conventions - Follow Nuxt's directory structure for routing, APIs, and middleware
- Reference library docs - When a library is installed, consult its reference file for specific patterns
- Verify version-specific features - Reference files include "Last updated" dates; always verify with official docs for version-specific details
- Fetch official docs - For recent features or uncertainty, fetch from https://nuxt.com/llms.txt or module-specific documentation URLs
Version-Specific Information
- Reference files with dates (marked "Last updated: YYYY-MM") contain version-specific info
- Always verify with official docs when:
- Working with modules not documented in references
- Module version differs significantly from documentation date
- Encountering breaking changes or migration scenarios
- Uncertain about syntax or API for current version
- Fallback principle: If reference documentation doesn't match project needs, fetch official docs rather than guessing
Important Conventions
Component Files Must:
- Use
<script setup lang="ts">syntax - Place
<template>section first, before<script>and<style> - Use type-based
defineProps(),defineEmits(), anddefineModel() - Use multi-word component names (except pages/layouts)
- Use
v-for="item of items"with:key - Prefer
ref()overreactive()
TypeScript Organization:
- Place all types/interfaces in
/typesdirectory (or/app/typesin Nuxt 4) - Organize by domain:
types/user.ts,types/post.ts,types/auth.ts - NO barrel exports - import directly from specific files:
import type { User } from '~/types/user' - Use PascalCase naming conventions:
- Props interfaces:
ButtonProps,CardProps - State interfaces:
AuthState,UserState - API types:
CreateUserRequest,CreateUserResponse
- Props interfaces:
- Never use
as any- prefer type guards, type narrowing, oras unknown as Typewhen absolutely necessary
File Structure (Nuxt 4):
- Nuxt 4 supports optional
/appdirectory for app-specific code - Components can live in
/componentsor/app/components - Composables can live in
/composablesor/app/composables - Types can live in
/typesor/app/types - Both root-level and
/appdirectory structures are supported
Data Fetching State Handling:
- Always use
statusproperty (not deprecatedpending) - Status values:
'idle' | 'pending' | 'success' | 'error' - Always destructure:
const { data, status, error } = await useFetch(...) - Handle all states in templates:
<div v-if="status === 'pending'">Loading...</div> <div v-else-if="status === 'error'">Error: {{ error }}</div> <div v-else>{{ data }}</div>
Styling Strategy:
- Check
package.jsonfor@nuxtjs/tailwindcssdependency - If Tailwind is installed: Prefer Tailwind utility classes in templates
- Use arbitrary variants for scrollbars:
[&::-webkit-scrollbar]:w-1.5 - Use
@themedirective for custom animations and CSS variables - Use arbitrary variants for pseudo-elements:
before:content-['★']
- Use arbitrary variants for scrollbars:
- If Tailwind is NOT installed: Use
<style scoped>for component styles - Use
<style>only for: Very complex keyframes, cross-browser scrollbars, or unreadable utility expressions
Accessibility:
- Add appropriate ARIA attributes to interactive elements
- Ensure keyboard navigation support (tab order, enter/space handlers)
- Use semantic HTML elements (
<button>,<nav>,<main>, etc.)
Nuxt Projects Should:
- Never manually import auto-imported composables
- Use
useFetchfor API calls instead of manual fetch - Define server routes in
server/api/with.get.ts,.post.tsnaming - Use
useStatefor shared state across components - Use
definePageMetafor page-specific config (middleware, layout, etc.)
When Libraries Are Installed:
- Pinia - Use for complex state management across many components
- VueUse - Prefer VueUse composables over custom implementations for common patterns
- Drizzle - Use for type-safe database operations with full TypeScript inference
VueUse Integration Guidelines:
When encountering custom utility implementations for common patterns, check if VueUse provides an equivalent solution:
- State patterns:
useAsyncData,useToggle,useCounter,useLocalStorage,useSessionStorage - DOM interactions:
useMouse,useScroll,useElementVisibility,useIntersectionObserver,useResizeObserver - Browser APIs:
useClipboard,useMediaQuery,useDark,usePreferredDark,useGeolocation - Utilities:
refDebounced,useDebounceFn,refThrottled,useThrottleFn,useInterval,useTimeout
When to suggest VueUse:
- Detecting bespoke implementations of the above patterns
- User asks about utilities for common tasks (debouncing, throttling, etc.)
- Building features that require browser API abstractions
Only suggest if:
@vueuse/coreor@vueuse/nuxtis in package.json, OR- User explicitly asks about VueUse or requests suggestions for utility libraries
Never:
- Force VueUse if not installed
- Suggest VueUse for simple one-off logic that doesn't need a composable