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...
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.
Trigger this skill when:
nuxt as a dependency in package.json.vue single-file components.ts or .tsx files in Nuxt directories: pages/, server/, composables/, middleware/, layouts/, or utils/nuxt.config.ts, app.vue, or any file in Nuxt convention directoriesFetch up-to-date Nuxt documentation when needed:
https://nuxt.com/llms.txt
Fetch when:
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/ directorycomposables/ directoryserver/utils/ directoryRouting:
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 via definePageMeta({ middleware: 'auth' }))middleware/analytics.global.ts - Global middleware (runs on every route)Development:
nuxt dev - Start development servernuxt dev --host - Expose to networkBuilding:
nuxt build - Production buildnuxt generate - Static site generationnuxt preview - Preview production buildAnalysis:
nuxt analyze - Bundle size analysisnuxt typecheck - Type checkingnuxt info - Environment info for bug reportsImportant: 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.
Check package.json for these before suggesting their features:
State & Utilities:
pinia or @pinia/nuxt - State management → See references/pinia.md@vueuse/core or @vueuse/nuxt - Composition utilities → See references/vueuse.mddrizzle-orm - Database ORM → See references/drizzle-db0.md@nuxthub/core - Full-stack platform (DB, blob, KV, cache) → See references/nuxthub.mdTesting:
@nuxt/test-utils + vitest - Unit and component testing → See references/nuxt-testing.mdCore Nuxt Modules (Dedicated References):
@nuxt/ui - UI component library → See references/nuxt-ui.md@nuxt/image - Image optimization → See references/nuxt-image.md@nuxt/content - File-based CMS → See references/nuxt-content.md@nuxtjs/i18n - Internationalization → See references/nuxt-i18n.md@nuxtjs/tailwindcss - Tailwind CSS → See references/tailwind.mdOther Nuxt Modules:
@nuxt/icon, @nuxtjs/seo, @nuxtjs/color-mode → See references/nuxt-modules.md@nuxt/eslint, @nuxt/fonts, @nuxt/scripts, nuxt-security → See references/nuxt-modules.mdThis skill includes detailed reference documentation for specific topics. Load these files as needed when working with specific features:
references/vue-best-practices.md - Vue component patterns and conventions
references/nuxt-patterns.md - Common Nuxt patterns and recipes
references/nuxt-ui.md - Nuxt UI component library (Last updated: 2025-01)
@nuxt/ui is installedreferences/tailwind.md - Tailwind CSS in Nuxt (Last updated: 2025-01)
@nuxtjs/tailwindcss is installedreferences/nuxt-image.md - Image optimization (Last updated: 2025-01)
@nuxt/image is installedreferences/nuxt-content.md - File-based CMS (Last updated: 2025-01)
@nuxt/content is installedreferences/nuxt-i18n.md - Internationalization (Last updated: 2025-01)
@nuxtjs/i18n is installedreferences/pinia.md - Pinia state management
pinia or @pinia/nuxt is installedreferences/vueuse.md - VueUse composables
@vueuse/core or @vueuse/nuxt is installedreferences/drizzle-db0.md - Database with Drizzle ORM
drizzle-orm is installed (without NuxtHub)references/nuxthub.md - NuxtHub Full-Stack Platform (Last updated: 2025-12)
@nuxthub/core is installedhub:db imports - different from standalone Drizzle setupreferences/nuxt-testing.md - Nuxt Test Utils with Vitest (Last updated: 2025-12)
@nuxt/test-utils and vitest are installedreferences/nuxt-modules.md - Other official Nuxt modules
package.json first to know what libraries are availablevue-best-practices.md to all component code<script setup lang="ts"> syntax<template> section first, before <script> and <style>defineProps(), defineEmits(), and defineModel()v-for="item of items" with :keyref() over reactive()/types directory (or /app/types in Nuxt 4)types/user.ts, types/post.ts, types/auth.tsimport type { User } from '~/types/user'ButtonProps, CardPropsAuthState, UserStateCreateUserRequest, CreateUserResponseas any - prefer type guards, type narrowing, or as unknown as Type when absolutely necessary/app directory for app-specific code/components or /app/components/composables or /app/composables/types or /app/types/app directory structures are supportedstatus property (not deprecated pending)'idle' | 'pending' | 'success' | 'error'const { data, status, error } = await useFetch(...)<div v-if="status === 'pending'">Loading...</div>
<div v-else-if="status === 'error'">Error: {{ error }}</div>
<div v-else>{{ data }}</div>
package.json for @nuxtjs/tailwindcss dependency[&::-webkit-scrollbar]:w-1.5@theme directive for custom animations and CSS variablesbefore:content-['★']<style scoped> for component styles<style> only for: Very complex keyframes, cross-browser scrollbars, or unreadable utility expressions<button>, <nav>, <main>, etc.)useFetch for API calls instead of manual fetchserver/api/ with .get.ts, .post.ts naminguseState for shared state across componentsdefinePageMeta for page-specific config (middleware, layout, etc.)When encountering custom utility implementations for common patterns, check if VueUse provides an equivalent solution:
useAsyncData, useToggle, useCounter, useLocalStorage, useSessionStorageuseMouse, useScroll, useElementVisibility, useIntersectionObserver, useResizeObserveruseClipboard, useMediaQuery, useDark, usePreferredDark, useGeolocationrefDebounced, useDebounceFn, refThrottled, useThrottleFn, useInterval, useTimeoutWhen to suggest VueUse:
Only suggest if:
@vueuse/core or @vueuse/nuxt is in package.json, ORAvoid: