[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f30r277ag21rfj":3,"-docs-3-x-getting-started-upgrade":2735,"versions":8821},[4,1298,1908,2479],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":106},"Docs","i-lucide-book-marked","\u002Fdocs\u002F3.x","1.getting-started\u002F01.introduction",[10,107,248,458,1048,1154,1191,1241,1294],{"title":11,"titleTemplate":12,"icon":13,"path":14,"stem":8,"children":15,"page":106},"Get Started","%s · Get Started with Nuxt","i-lucide-rocket","\u002Fdocs\u002F3.x\u002Fgetting-started",[16,21,26,31,36,41,46,51,56,61,66,71,76,81,86,91,96,101],{"title":17,"description":18,"path":19,"stem":8,"icon":20},"Introduction","Nuxt's goal is to make web development intuitive and performant with a great Developer Experience in mind.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fintroduction","i-lucide-info",{"title":22,"description":23,"path":24,"stem":25},"Installation","Get started with Nuxt quickly with our online starters or start locally with your terminal.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Finstallation","1.getting-started\u002F02.installation",{"title":27,"description":28,"path":29,"stem":30},"Configuration","Nuxt is configured with sensible defaults to make you productive.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F03.configuration",{"title":32,"description":33,"path":34,"stem":35},"Views","Nuxt provides several component layers to implement the user interface of your application.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fviews","1.getting-started\u002F04.views",{"title":37,"description":38,"path":39,"stem":40},"Assets","Nuxt offers two options for your assets.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fassets","1.getting-started\u002F05.assets",{"title":42,"description":43,"path":44,"stem":45},"Styling","Learn how to style your Nuxt application.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fstyling","1.getting-started\u002F06.styling",{"title":47,"description":48,"path":49,"stem":50},"Routing","Nuxt file-system routing creates a route for every file in the pages\u002F directory.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Frouting","1.getting-started\u002F07.routing",{"title":52,"description":53,"path":54,"stem":55},"SEO and Meta","Improve your Nuxt app's SEO with powerful head config, composables and components.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fseo-meta","1.getting-started\u002F08.seo-meta",{"title":57,"description":58,"path":59,"stem":60},"Transitions","Apply transitions between pages and layouts with Vue or native browser View Transitions.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ftransitions","1.getting-started\u002F09.transitions",{"title":62,"description":63,"path":64,"stem":65},"Data Fetching","Nuxt provides composables to handle data fetching within your application.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fdata-fetching","1.getting-started\u002F10.data-fetching",{"title":67,"description":68,"path":69,"stem":70},"State Management","Nuxt provides powerful state management libraries and the useState composable to create a reactive and SSR-friendly shared state.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fstate-management","1.getting-started\u002F11.state-management",{"title":72,"description":73,"path":74,"stem":75},"Error Handling","Learn how to catch and handle errors in Nuxt.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ferror-handling","1.getting-started\u002F12.error-handling",{"title":77,"description":78,"path":79,"stem":80},"Server","Build full-stack applications with Nuxt's server framework. You can fetch data from your database or another server, create APIs, or even generate static server-side content like a sitemap or a RSS feed - all from a single codebase.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fserver","1.getting-started\u002F13.server",{"title":82,"description":83,"path":84,"stem":85},"Layers","Nuxt provides a powerful system that allows you to extend the default files, configs, and much more.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Flayers","1.getting-started\u002F14.layers",{"title":87,"description":88,"path":89,"stem":90},"Prerendering","Nuxt allows pages to be statically rendered at build time to improve certain performance or SEO metrics","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fprerendering","1.getting-started\u002F15.prerendering",{"title":92,"description":93,"path":94,"stem":95},"Deployment","Learn how to deploy your Nuxt application to any hosting provider.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fdeployment","1.getting-started\u002F16.deployment",{"title":97,"description":98,"path":99,"stem":100},"Testing","How to test your Nuxt application.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Ftesting","1.getting-started\u002F17.testing",{"title":102,"description":103,"path":104,"stem":105},"Upgrade Guide","Learn how to upgrade to the latest Nuxt version.","\u002Fdocs\u002F3.x\u002Fgetting-started\u002Fupgrade","1.getting-started\u002F18.upgrade",false,{"title":108,"titleTemplate":109,"icon":110,"path":111,"stem":112,"children":113,"page":106},"Directory Structure","%s · Nuxt Directory Structure","i-vscode-icons-default-folder","\u002Fdocs\u002F3.x\u002Fdirectory-structure","2.directory-structure\u002F0.nuxt",[114,118,123,128,133,138,143,148,153,158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233,238,243],{"title":115,"description":116,"path":117,"stem":112},".nuxt","Nuxt uses the .nuxt\u002F directory in development to generate your Vue application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxt",{"title":119,"description":120,"path":121,"stem":122},".output","Nuxt creates the .output\u002F directory when building your application for production.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Foutput","2.directory-structure\u002F0.output",{"title":124,"description":125,"path":126,"stem":127},"assets","The assets\u002F directory is used to add all the website's assets that the build tool will process.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fassets","2.directory-structure\u002F1.assets",{"title":129,"description":130,"path":131,"stem":132},"components","The components\u002F directory is where you put all your Vue components.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcomponents","2.directory-structure\u002F1.components",{"title":134,"description":135,"path":136,"stem":137},"composables","Use the composables\u002F directory to auto-import your Vue composables into your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcomposables","2.directory-structure\u002F1.composables",{"title":139,"description":140,"path":141,"stem":142},"content","Use the content\u002F directory to create a file-based CMS for your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fcontent","2.directory-structure\u002F1.content",{"title":144,"description":145,"path":146,"stem":147},"layers","Use the layers\u002F directory to organize and auto-register local layers within your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Flayers","2.directory-structure\u002F1.layers",{"title":149,"description":150,"path":151,"stem":152},"layouts","Nuxt provides a layouts framework to extract common UI patterns into reusable layouts.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Flayouts","2.directory-structure\u002F1.layouts",{"title":154,"description":155,"path":156,"stem":157},"middleware","Nuxt provides middleware to run code before navigating to a particular route.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fmiddleware","2.directory-structure\u002F1.middleware",{"title":159,"description":160,"path":161,"stem":162},"modules","Use the modules\u002F directory to automatically register local modules within your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fmodules","2.directory-structure\u002F1.modules",{"title":164,"description":165,"path":166,"stem":167},"node_modules","The package manager stores the dependencies of your project in the node_modules\u002F directory.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnode_modules","2.directory-structure\u002F1.node_modules",{"title":169,"description":170,"path":171,"stem":172},"pages","Nuxt provides file-based routing to create routes within your web application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpages","2.directory-structure\u002F1.pages",{"title":174,"description":175,"path":176,"stem":177},"plugins","Nuxt has a plugins system to use Vue plugins and more at the creation of your Vue application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fplugins","2.directory-structure\u002F1.plugins",{"title":179,"description":180,"path":181,"stem":182},"public","The public\u002F directory is used to serve your website's static assets.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpublic","2.directory-structure\u002F1.public",{"title":184,"description":185,"path":186,"stem":187},"server","The server\u002F directory is used to register API and server handlers to your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fserver","2.directory-structure\u002F1.server",{"title":189,"description":190,"path":191,"stem":192},"shared","Use the shared\u002F directory to share functionality between the Vue app and the Nitro server.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fshared","2.directory-structure\u002F1.shared",{"title":194,"description":195,"path":196,"stem":197},"utils","Use the utils\u002F directory to auto-import your utility functions throughout your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Futils","2.directory-structure\u002F1.utils",{"title":199,"description":200,"path":201,"stem":202},".env","A .env file specifies your build\u002Fdev-time environment variables.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fenv","2.directory-structure\u002F2.env",{"title":204,"description":205,"path":206,"stem":207},".gitignore","A .gitignore file specifies intentionally untracked files that git should ignore.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fgitignore","2.directory-structure\u002F2.gitignore",{"title":209,"description":210,"path":211,"stem":212},".nuxtignore","The .nuxtignore file lets Nuxt ignore files in your project’s root directory during the build phase.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxtignore","2.directory-structure\u002F2.nuxtignore",{"title":214,"description":215,"path":216,"stem":217},".nuxtrc","The .nuxtrc file allows you to define nuxt configurations in a flat syntax.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxtrc","2.directory-structure\u002F2.nuxtrc",{"title":219,"description":220,"path":221,"stem":222},"app.vue","The app.vue file is the main component of your Nuxt application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fapp","2.directory-structure\u002F3.app",{"title":224,"description":225,"path":226,"stem":227},"app.config.ts","Expose reactive configuration within your application with the App Config file.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fapp-config","2.directory-structure\u002F3.app-config",{"title":229,"description":230,"path":231,"stem":232},"error.vue","The error.vue file is the error page in your Nuxt application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Ferror","2.directory-structure\u002F3.error",{"title":234,"description":235,"path":236,"stem":237},"nuxt.config.ts","Nuxt can be easily configured with a single nuxt.config file.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fnuxt-config","2.directory-structure\u002F3.nuxt-config",{"title":239,"description":240,"path":241,"stem":242},"package.json","The package.json file contains all the dependencies and scripts for your application.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Fpackage","2.directory-structure\u002F3.package",{"title":244,"description":245,"path":246,"stem":247},"tsconfig.json","Learn how Nuxt manages TypeScript configuration across different parts of your project.","\u002Fdocs\u002F3.x\u002Fdirectory-structure\u002Ftsconfig","2.directory-structure\u002F3.tsconfig",{"title":249,"icon":250,"path":251,"stem":252,"children":253,"page":106},"Guide","i-lucide-book-open","\u002Fdocs\u002F3.x\u002Fguide","3.guide\u002F1.concepts\u002F1.rendering",[254,294,315,331,377,403],{"title":255,"titleTemplate":256,"icon":257,"path":258,"stem":252,"children":259,"page":106},"Key Concepts","%s · Nuxt Concepts","i-lucide-medal","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts",[260,264,269,274,279,284,289],{"title":261,"description":262,"path":263,"stem":252},"Rendering Modes","Learn about the different rendering modes available in Nuxt.","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":265,"description":266,"path":267,"stem":268},"Nuxt Lifecycle","Understanding the lifecycle of Nuxt applications can help you gain deeper insights into how the framework operates, especially for both server-side and client-side rendering.","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","3.guide\u002F1.concepts\u002F2.nuxt-lifecycle",{"title":270,"description":271,"path":272,"stem":273},"Auto-imports","Nuxt auto-imports components, composables, helper functions and Vue APIs.","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fauto-imports","3.guide\u002F1.concepts\u002F3.auto-imports",{"title":275,"description":276,"path":277,"stem":278},"Server Engine","Nuxt is powered by a new server engine: Nitro.","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fserver-engine","3.guide\u002F1.concepts\u002F4.server-engine",{"title":280,"description":281,"path":282,"stem":283},"Modules","Nuxt provides a module system to extend the framework core and simplify integrations.","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fmodules","3.guide\u002F1.concepts\u002F5.modules",{"title":285,"description":286,"path":287,"stem":288},"TypeScript","Nuxt is fully typed and provides helpful shortcuts to ensure you have access to accurate type information when you are coding.","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Ftypescript","3.guide\u002F1.concepts\u002F8.typescript",{"title":290,"description":291,"path":292,"stem":293},"Code Style","Nuxt supports ESLint out of the box","\u002Fdocs\u002F3.x\u002Fguide\u002Fconcepts\u002Fcode-style","3.guide\u002F1.concepts\u002F9.code-style",{"title":295,"titleTemplate":296,"icon":297,"path":298,"stem":299,"children":300,"page":106},"Best Practices","%s · Best Practices","i-lucide-square-check","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices","3.guide\u002F2.best-practices\u002Fhydration",[301,305,310],{"title":302,"description":303,"path":304,"stem":299},"Nuxt and hydration","Why fixing hydration issues is important","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fhydration",{"title":306,"description":307,"path":308,"stem":309},"Nuxt performance","Best practices for improving performance of Nuxt apps.","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fperformance","3.guide\u002F2.best-practices\u002Fperformance",{"title":311,"description":312,"path":313,"stem":314},"Nuxt Plugins","Best practices when using Nuxt plugins.","\u002Fdocs\u002F3.x\u002Fguide\u002Fbest-practices\u002Fplugins","3.guide\u002F2.best-practices\u002Fplugins",{"title":316,"titleTemplate":317,"icon":318,"path":319,"stem":320,"children":321,"page":106},"Working with AI","Working with AI: %s","i-lucide-bot","\u002Fdocs\u002F3.x\u002Fguide\u002Fai","3.guide\u002F3.ai\u002F1.mcp",[322,326],{"title":323,"description":324,"path":325,"stem":320},"Nuxt MCP Server","Use Nuxt documentation in your AI assistants with Model Context Protocol support.","\u002Fdocs\u002F3.x\u002Fguide\u002Fai\u002Fmcp",{"title":327,"description":328,"path":329,"stem":330},"Nuxt LLMs.txt","How to get AI tools like Cursor, Windsurf, GitHub Copilot, ChatGPT, and Claude to understand Nuxt concepts, APIs, and best practices.","\u002Fdocs\u002F3.x\u002Fguide\u002Fai\u002Fllms-txt","3.guide\u002F3.ai\u002F2.llms-txt",{"title":332,"titleTemplate":333,"icon":334,"path":335,"stem":336,"children":337,"page":106},"Module Author Guide","%s · Nuxt Modules Author Guide","i-lucide-box","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules","3.guide\u002F4.modules\u002F1.getting-started",[338,342,347,352,357,362,367,372],{"title":339,"description":340,"path":341,"stem":336},"Create Your First Module","Learn how to create your first Nuxt module using the official starter template.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fgetting-started",{"title":343,"description":344,"path":345,"stem":346},"Understand Module Structure","Learn how Nuxt modules are structured and how to define them.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy","3.guide\u002F4.modules\u002F2.module-anatomy",{"title":348,"description":349,"path":350,"stem":351},"Add Plugins, Components & More","Learn how to inject plugins, components, composables and server routes from your module.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Frecipes-basics","3.guide\u002F4.modules\u002F3.recipes-basics",{"title":353,"description":354,"path":355,"stem":356},"Module Dependencies","Declare dependencies on other modules with version constraints and configuration merging.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies","3.guide\u002F4.modules\u002F4.module-dependencies",{"title":358,"description":359,"path":360,"stem":361},"Use Hooks & Extend Types","Master lifecycle hooks, virtual files and TypeScript declarations in your modules.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Frecipes-advanced","3.guide\u002F4.modules\u002F5.recipes-advanced",{"title":363,"description":364,"path":365,"stem":366},"Test Your Module","Learn how to test your Nuxt module with unit, integration and E2E tests.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Ftesting","3.guide\u002F4.modules\u002F6.testing",{"title":368,"description":369,"path":370,"stem":371},"Follow Best Practices","Build performant and maintainable Nuxt modules with these guidelines.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fbest-practices","3.guide\u002F4.modules\u002F7.best-practices",{"title":373,"description":374,"path":375,"stem":376},"Publish & Share Your Module","Join the Nuxt module ecosystem and publish your module to npm.","\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules\u002Fecosystem","3.guide\u002F4.modules\u002F8.ecosystem",{"title":378,"titleTemplate":379,"icon":380,"path":381,"stem":382,"children":383,"page":106},"Recipes","%s · Recipes","i-lucide-cooking-pot","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes","3.guide\u002F5.recipes\u002F1.custom-routing",[384,388,393,398],{"title":385,"description":386,"path":387,"stem":382},"Custom Routing","In Nuxt, your routing is defined by the structure of your files inside the pages directory. However, since it uses vue-router under the hood, Nuxt offers you several ways to add custom routes in your project.","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fcustom-routing",{"title":389,"description":390,"path":391,"stem":392},"Using Vite Plugins in Nuxt","Learn how to integrate Vite plugins into your Nuxt project.","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fvite-plugin","3.guide\u002F5.recipes\u002F2.vite-plugin",{"title":394,"description":395,"path":396,"stem":397},"Custom useFetch in Nuxt","How to create a custom fetcher for calling your external API in Nuxt.","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch","3.guide\u002F5.recipes\u002F3.custom-usefetch",{"title":399,"description":400,"path":401,"stem":402},"Sessions and Authentication","Authentication is an extremely common requirement in web apps. This recipe will show you how to implement basic user registration and authentication in your Nuxt app.","\u002Fdocs\u002F3.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication","3.guide\u002F5.recipes\u002F4.sessions-and-authentication",{"title":404,"titleTemplate":405,"icon":406,"path":407,"stem":408,"children":409,"page":106},"Going Further","%s · Nuxt Advanced","i-lucide-star","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further","3.guide\u002F6.going-further\u002F1.events",[410,414,419,424,429,434,439,443,448,453],{"title":411,"description":412,"path":413,"stem":408},"Creating Custom Events","Nuxt provides a powerful event system powered by hookable.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fevents",{"title":415,"description":416,"path":417,"stem":418},"Experimental Features","Enable Nuxt experimental features to unlock new possibilities.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features","3.guide\u002F6.going-further\u002F1.experimental-features",{"title":420,"description":421,"path":422,"stem":423},"Features","Enable or disable optional Nuxt features to unlock new possibilities.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Ffeatures","3.guide\u002F6.going-further\u002F1.features",{"title":425,"description":426,"path":427,"stem":428},"Lifecycle Hooks","Nuxt provides a powerful hooking system to expand almost every aspect using hooks.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fhooks","3.guide\u002F6.going-further\u002F2.hooks",{"title":430,"description":431,"path":432,"stem":433},"Nuxt Kit","@nuxt\u002Fkit provides features for module authors.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fkit","3.guide\u002F6.going-further\u002F4.kit",{"title":435,"description":436,"path":437,"stem":438},"NuxtApp","In Nuxt, you can access runtime app context within composables, components and plugins.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app","3.guide\u002F6.going-further\u002F6.nuxt-app",{"title":440,"description":83,"path":441,"stem":442},"Authoring Nuxt Layers","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Flayers","3.guide\u002F6.going-further\u002F7.layers",{"title":444,"description":445,"path":446,"stem":447},"Debugging","In Nuxt, you can get started with debugging your application directly in the browser as well as in your IDE.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fdebugging","3.guide\u002F6.going-further\u002F9.debugging",{"title":449,"description":450,"path":451,"stem":452},"Runtime Config","Nuxt provides a runtime config API to expose configuration and secrets within your application.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fruntime-config","3.guide\u002F6.going-further\u002F10.runtime-config",{"title":454,"description":455,"path":456,"stem":457},"Nightly Release Channel","The nightly release channel allows using Nuxt built directly from the latest commits to the repository.","\u002Fdocs\u002F3.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel","3.guide\u002F6.going-further\u002F11.nightly-release-channel",{"title":459,"titleTemplate":460,"icon":461,"path":462,"stem":463,"children":464,"page":106},"API","%s · Nuxt API","i-lucide-code-xml","\u002Fdocs\u002F3.x\u002Fapi","4.api\u002F1.components\u002F1.client-only",[465,544,695,845,941,1030,1043],{"title":466,"titleTemplate":467,"icon":334,"path":468,"stem":463,"children":469,"page":106},"Components","%s · Nuxt Components","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents",[470,474,479,484,489,494,499,504,509,514,519,524,529,534,539],{"title":471,"description":472,"path":473,"stem":463},"\u003CClientOnly>","Render components only in client-side with the \u003CClientOnly> component.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fclient-only",{"title":475,"description":476,"path":477,"stem":478},"\u003CDevOnly>","Render components only during development with the \u003CDevOnly> component.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fdev-only","4.api\u002F1.components\u002F1.dev-only",{"title":480,"description":481,"path":482,"stem":483},"\u003CNuxtClientFallback>","Nuxt provides the \u003CNuxtClientFallback> component to render its content on the client if any of its children trigger an error in SSR","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","4.api\u002F1.components\u002F1.nuxt-client-fallback",{"title":485,"description":486,"path":487,"stem":488},"\u003CNuxtPage>","The \u003CNuxtPage> component is required to display pages located in the pages\u002F directory.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-page","4.api\u002F1.components\u002F2.nuxt-page",{"title":490,"description":491,"path":492,"stem":493},"\u003CNuxtLayout>","Nuxt provides the \u003CNuxtLayout> component to show layouts on pages and error pages.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout","4.api\u002F1.components\u002F3.nuxt-layout",{"title":495,"description":496,"path":497,"stem":498},"\u003CNuxtLink>","Nuxt provides \u003CNuxtLink> component to handle any kind of links within your application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-link","4.api\u002F1.components\u002F4.nuxt-link",{"title":500,"description":501,"path":502,"stem":503},"\u003CNuxtLoadingIndicator>","Display a progress bar between page navigations.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","4.api\u002F1.components\u002F5.nuxt-loading-indicator",{"title":505,"description":506,"path":507,"stem":508},"\u003CNuxtErrorBoundary>","The \u003CNuxtErrorBoundary> component handles client-side errors happening in its default slot.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","4.api\u002F1.components\u002F6.nuxt-error-boundary",{"title":510,"description":511,"path":512,"stem":513},"\u003CNuxtWelcome>","The \u003CNuxtWelcome> component greets users in new projects made from the starter template.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","4.api\u002F1.components\u002F7.nuxt-welcome",{"title":515,"description":516,"path":517,"stem":518},"\u003CNuxtIsland>","Nuxt provides the \u003CNuxtIsland> component to render a non-interactive component without any client JS.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-island","4.api\u002F1.components\u002F8.nuxt-island",{"title":520,"description":521,"path":522,"stem":523},"\u003CNuxtImg>","Nuxt provides a \u003CNuxtImg> component to handle automatic image optimization.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-img","4.api\u002F1.components\u002F9.nuxt-img",{"title":525,"description":526,"path":527,"stem":528},"\u003CNuxtPicture>","Nuxt provides a \u003CNuxtPicture> component to handle automatic image optimization.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture","4.api\u002F1.components\u002F10.nuxt-picture",{"title":530,"description":531,"path":532,"stem":533},"\u003CTeleport>","The \u003CTeleport> component teleports a component to a different location in the DOM.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fteleports","4.api\u002F1.components\u002F11.teleports",{"title":535,"description":536,"path":537,"stem":538},"\u003CNuxtRouteAnnouncer>","The \u003CNuxtRouteAnnouncer> component adds a hidden element with the page title to announce route changes to assistive technologies.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","4.api\u002F1.components\u002F12.nuxt-route-announcer",{"title":540,"description":541,"path":542,"stem":543},"\u003CNuxtTime>","The \u003CNuxtTime> component displays time in a locale-friendly format with server-client consistency.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomponents\u002Fnuxt-time","4.api\u002F1.components\u002F13.nuxt-time",{"title":545,"titleTemplate":546,"icon":547,"path":548,"stem":549,"children":550,"page":106},"Composables","%s · Nuxt Composables","i-lucide-arrow-left-right","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables","4.api\u002F2.composables\u002Fon-prehydrate",[551,555,560,565,570,575,580,585,590,595,600,605,610,615,620,625,630,635,640,645,650,655,660,665,670,675,680,685,690],{"title":552,"description":553,"path":554,"stem":549},"onPrehydrate","Use onPrehydrate to run a callback on the client immediately before Nuxt hydrates the page.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate",{"title":556,"description":557,"path":558,"stem":559},"useAppConfig","Access the reactive app config defined in the project.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-app-config","4.api\u002F2.composables\u002Fuse-app-config",{"title":561,"description":562,"path":563,"stem":564},"useAsyncData","useAsyncData provides access to data that resolves asynchronously in an SSR-friendly composable.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-async-data","4.api\u002F2.composables\u002Fuse-async-data",{"title":566,"description":567,"path":568,"stem":569},"useCookie","useCookie is an SSR-friendly composable to read and write cookies.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-cookie","4.api\u002F2.composables\u002Fuse-cookie",{"title":571,"description":572,"path":573,"stem":574},"useError","useError composable returns the global Nuxt error that is being handled.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-error","4.api\u002F2.composables\u002Fuse-error",{"title":576,"description":577,"path":578,"stem":579},"useFetch","Fetch data from an API endpoint with an SSR-friendly composable.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-fetch","4.api\u002F2.composables\u002Fuse-fetch",{"title":581,"description":582,"path":583,"stem":584},"useHead","useHead customizes the head properties of individual pages of your Nuxt app.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-head","4.api\u002F2.composables\u002Fuse-head",{"title":586,"description":587,"path":588,"stem":589},"useHeadSafe","The recommended way to provide head data with user input.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe","4.api\u002F2.composables\u002Fuse-head-safe",{"title":591,"description":592,"path":593,"stem":594},"useHydration","Allows full control of the hydration cycle to set and receive data from the server.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-hydration","4.api\u002F2.composables\u002Fuse-hydration",{"title":596,"description":597,"path":598,"stem":599},"useLazyAsyncData","This wrapper around useAsyncData triggers navigation immediately.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data","4.api\u002F2.composables\u002Fuse-lazy-async-data",{"title":601,"description":602,"path":603,"stem":604},"useLazyFetch","This wrapper around useFetch triggers navigation immediately.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","4.api\u002F2.composables\u002Fuse-lazy-fetch",{"title":606,"description":607,"path":608,"stem":609},"useLoadingIndicator","This composable gives you access to the loading state of the app page.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","4.api\u002F2.composables\u002Fuse-loading-indicator",{"title":611,"description":612,"path":613,"stem":614},"useNuxtApp","Access the shared runtime context of the Nuxt Application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","4.api\u002F2.composables\u002Fuse-nuxt-app",{"title":616,"description":617,"path":618,"stem":619},"useNuxtData","Access the current cached value of data fetching composables.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","4.api\u002F2.composables\u002Fuse-nuxt-data",{"title":621,"description":622,"path":623,"stem":624},"usePreviewMode","Use usePreviewMode to check and control preview mode in Nuxt","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","4.api\u002F2.composables\u002Fuse-preview-mode",{"title":626,"description":627,"path":628,"stem":629},"useRequestEvent","Access the incoming request event with the useRequestEvent composable.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-event","4.api\u002F2.composables\u002Fuse-request-event",{"title":631,"description":632,"path":633,"stem":634},"useRequestFetch","Forward the request context and headers for server-side fetch requests with the useRequestFetch composable.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","4.api\u002F2.composables\u002Fuse-request-fetch",{"title":636,"description":637,"path":638,"stem":639},"useRequestHeader","Use useRequestHeader to access a certain incoming request header.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-header","4.api\u002F2.composables\u002Fuse-request-header",{"title":641,"description":642,"path":643,"stem":644},"useRequestHeaders","Use useRequestHeaders to access the incoming request headers.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers","4.api\u002F2.composables\u002Fuse-request-headers",{"title":646,"description":647,"path":648,"stem":649},"useRequestURL","Access the incoming request URL with the useRequestURL composable.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-request-url","4.api\u002F2.composables\u002Fuse-request-url",{"title":651,"description":652,"path":653,"stem":654},"useResponseHeader","Use useResponseHeader to set a server response header.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-response-header","4.api\u002F2.composables\u002Fuse-response-header",{"title":656,"description":657,"path":658,"stem":659},"useRoute","The useRoute composable returns the current route.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-route","4.api\u002F2.composables\u002Fuse-route",{"title":661,"description":662,"path":663,"stem":664},"useRouteAnnouncer","This composable observes the page title changes and updates the announcer message accordingly.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","4.api\u002F2.composables\u002Fuse-route-announcer",{"title":666,"description":667,"path":668,"stem":669},"useRouter","The useRouter composable returns the router instance.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-router","4.api\u002F2.composables\u002Fuse-router",{"title":671,"description":672,"path":673,"stem":674},"useRuntimeConfig","Access runtime config variables with the useRuntimeConfig composable.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","4.api\u002F2.composables\u002Fuse-runtime-config",{"title":676,"description":677,"path":678,"stem":679},"useRuntimeHook","Registers a runtime hook in a Nuxt application and ensures it is properly disposed of when the scope is destroyed.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","4.api\u002F2.composables\u002Fuse-runtime-hook",{"title":681,"description":682,"path":683,"stem":684},"useSeoMeta","The useSeoMeta composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","4.api\u002F2.composables\u002Fuse-seo-meta",{"title":686,"description":687,"path":688,"stem":689},"useServerSeoMeta","The useServerSeoMeta composable lets you define your site's SEO meta tags as a flat object with full TypeScript support.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta","4.api\u002F2.composables\u002Fuse-server-seo-meta",{"title":691,"description":692,"path":693,"stem":694},"useState","The useState composable creates a reactive and SSR-friendly shared state.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcomposables\u002Fuse-state","4.api\u002F2.composables\u002Fuse-state",{"title":696,"titleTemplate":697,"path":698,"stem":699,"children":700,"page":106},"Utils","%s · Nuxt Utils","\u002Fdocs\u002F3.x\u002Fapi\u002Futils","4.api\u002F3.utils\u002F$fetch",[701,705,710,715,720,725,730,735,740,745,750,755,760,765,770,775,780,785,790,795,800,805,810,815,820,825,830,835,840],{"title":702,"description":703,"path":704,"stem":699},"$fetch","Nuxt uses ofetch to expose globally the $fetch helper for making HTTP requests.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdollarfetch",{"title":706,"description":707,"path":708,"stem":709},"abortNavigation","abortNavigation is a helper function that prevents navigation from taking place and throws an error if one is set as a parameter.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fabort-navigation","4.api\u002F3.utils\u002Fabort-navigation",{"title":711,"description":712,"path":713,"stem":714},"addRouteMiddleware","addRouteMiddleware() is a helper function to dynamically add middleware in your application.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fadd-route-middleware","4.api\u002F3.utils\u002Fadd-route-middleware",{"title":716,"description":717,"path":718,"stem":719},"callOnce","Run a given function or block of code once during SSR or CSR.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fcall-once","4.api\u002F3.utils\u002Fcall-once",{"title":721,"description":722,"path":723,"stem":724},"clearError","The clearError composable clears all handled errors.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-error","4.api\u002F3.utils\u002Fclear-error",{"title":726,"description":727,"path":728,"stem":729},"clearNuxtData","Delete cached data, error status and pending promises of useAsyncData and useFetch.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-nuxt-data","4.api\u002F3.utils\u002Fclear-nuxt-data",{"title":731,"description":732,"path":733,"stem":734},"clearNuxtState","Delete the cached state of useState.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fclear-nuxt-state","4.api\u002F3.utils\u002Fclear-nuxt-state",{"title":736,"description":737,"path":738,"stem":739},"createError","Create an error object with additional metadata.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fcreate-error","4.api\u002F3.utils\u002Fcreate-error",{"title":741,"description":742,"path":743,"stem":744},"defineLazyHydrationComponent","Define a lazy hydration component with a specific strategy.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component","4.api\u002F3.utils\u002Fdefine-lazy-hydration-component",{"title":746,"description":747,"path":748,"stem":749},"defineNuxtComponent","defineNuxtComponent() is a helper function for defining type safe components with Options API.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component","4.api\u002F3.utils\u002Fdefine-nuxt-component",{"title":751,"description":752,"path":753,"stem":754},"defineNuxtPlugin","defineNuxtPlugin() is a helper function for creating Nuxt plugins.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","4.api\u002F3.utils\u002Fdefine-nuxt-plugin",{"title":756,"description":757,"path":758,"stem":759},"defineNuxtRouteMiddleware","Create named route middleware using defineNuxtRouteMiddleware helper function.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware","4.api\u002F3.utils\u002Fdefine-nuxt-route-middleware",{"title":761,"description":762,"path":763,"stem":764},"definePageMeta","Define metadata for your page components.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-page-meta","4.api\u002F3.utils\u002Fdefine-page-meta",{"title":766,"description":767,"path":768,"stem":769},"defineRouteRules","Define route rules for hybrid rendering at the page level.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fdefine-route-rules","4.api\u002F3.utils\u002Fdefine-route-rules",{"title":771,"description":772,"path":773,"stem":774},"navigateTo","navigateTo is a helper function that programmatically navigates users.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fnavigate-to","4.api\u002F3.utils\u002Fnavigate-to",{"title":776,"description":777,"path":778,"stem":779},"onBeforeRouteLeave","The onBeforeRouteLeave composable allows registering a route guard within a component.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-before-route-leave","4.api\u002F3.utils\u002Fon-before-route-leave",{"title":781,"description":782,"path":783,"stem":784},"onBeforeRouteUpdate","The onBeforeRouteUpdate composable allows registering a route guard within a component.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-before-route-update","4.api\u002F3.utils\u002Fon-before-route-update",{"title":786,"description":787,"path":788,"stem":789},"onNuxtReady","The onNuxtReady composable allows running a callback after your app has finished initializing.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fon-nuxt-ready","4.api\u002F3.utils\u002Fon-nuxt-ready",{"title":791,"description":792,"path":793,"stem":794},"prefetchComponents","Nuxt provides utilities to give you control over prefetching components.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fprefetch-components","4.api\u002F3.utils\u002Fprefetch-components",{"title":796,"description":797,"path":798,"stem":799},"preloadComponents","Nuxt provides utilities to give you control over preloading components.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fpreload-components","4.api\u002F3.utils\u002Fpreload-components",{"title":801,"description":802,"path":803,"stem":804},"preloadRouteComponents","preloadRouteComponents allows you to manually preload individual pages in your Nuxt app.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fpreload-route-components","4.api\u002F3.utils\u002Fpreload-route-components",{"title":806,"description":807,"path":808,"stem":809},"prerenderRoutes","prerenderRoutes hints to Nitro to prerender an additional route.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fprerender-routes","4.api\u002F3.utils\u002Fprerender-routes",{"title":811,"description":812,"path":813,"stem":814},"refreshCookie","Refresh useCookie values manually when a cookie has changed","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Frefresh-cookie","4.api\u002F3.utils\u002Frefresh-cookie",{"title":816,"description":817,"path":818,"stem":819},"refreshNuxtData","Refresh all or specific asyncData instances in Nuxt","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data","4.api\u002F3.utils\u002Frefresh-nuxt-data",{"title":821,"description":822,"path":823,"stem":824},"reloadNuxtApp","reloadNuxtApp will perform a hard reload of the page.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Freload-nuxt-app","4.api\u002F3.utils\u002Freload-nuxt-app",{"title":826,"description":827,"path":828,"stem":829},"setPageLayout","setPageLayout allows you to dynamically change the layout of a page.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fset-page-layout","4.api\u002F3.utils\u002Fset-page-layout",{"title":831,"description":832,"path":833,"stem":834},"setResponseStatus","setResponseStatus sets the status (and optionally the statusText) of the response.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fset-response-status","4.api\u002F3.utils\u002Fset-response-status",{"title":836,"description":837,"path":838,"stem":839},"showError","Nuxt provides a quick and simple way to show a full screen error page if needed.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fshow-error","4.api\u002F3.utils\u002Fshow-error",{"title":841,"description":842,"path":843,"stem":844},"updateAppConfig","Update the App Config at runtime.","\u002Fdocs\u002F3.x\u002Fapi\u002Futils\u002Fupdate-app-config","4.api\u002F3.utils\u002Fupdate-app-config",{"title":846,"titleTemplate":847,"icon":848,"path":849,"stem":850,"children":851,"page":106},"CLI","%s · Nuxt CLI","i-lucide-square-terminal","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands","1.overview",[852,856,861,866,871,876,881,886,891,896,901,906,911,916,921,926,931,936],{"title":853,"description":854,"path":855,"stem":850},"Nuxt CLI","The Nuxt CLI runs, builds and inspects your Nuxt application from the command line.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Foverview",{"title":857,"description":858,"path":859,"stem":860},"nuxt add","Add modules to your Nuxt application with the command line.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fadd","add",{"title":862,"description":863,"path":864,"stem":865},"nuxt add-template","Scaffold an entity into your Nuxt application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fadd-template","add-template",{"title":867,"description":868,"path":869,"stem":870},"nuxt analyze","Analyze the production bundle or your Nuxt application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fanalyze","analyze",{"title":872,"description":873,"path":874,"stem":875},"nuxt build","Build your Nuxt application.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fbuild","build",{"title":877,"description":878,"path":879,"stem":880},"nuxt build-module","Nuxt command to build your Nuxt module before publishing.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fbuild-module","build-module",{"title":882,"description":883,"path":884,"stem":885},"nuxt cleanup","Remove common generated Nuxt files and caches.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fcleanup","cleanup",{"title":887,"description":888,"path":889,"stem":890},"nuxt dev","The dev command starts a development server with hot module replacement at http:\u002F\u002Flocalhost:3000","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fdev","dev",{"title":892,"description":893,"path":894,"stem":895},"nuxt devtools","The devtools command allows you to enable or disable Nuxt DevTools on a per-project basis.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fdevtools","devtools",{"title":897,"description":898,"path":899,"stem":900},"nuxt generate","Pre-renders every route of the application and stores the result in plain HTML files.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fgenerate","generate",{"title":902,"description":903,"path":904,"stem":905},"nuxt info","The info command logs information about the current or specified Nuxt project.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Finfo","info",{"title":907,"description":908,"path":909,"stem":910},"create nuxt","The init command initializes a fresh Nuxt project.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Finit","init",{"title":912,"description":913,"path":914,"stem":915},"nuxt module","Search and remove modules in your Nuxt application with the command line.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fmodule","module",{"title":917,"description":918,"path":919,"stem":920},"nuxt prepare","The prepare command creates a .nuxt directory in your application and generates types.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fprepare","prepare",{"title":922,"description":923,"path":924,"stem":925},"nuxt preview","The preview command starts a server to preview your application after the build command.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fpreview","preview",{"title":927,"description":928,"path":929,"stem":930},"nuxt test","The test command runs tests using @nuxt\u002Ftest-utils.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Ftest","test",{"title":932,"description":933,"path":934,"stem":935},"nuxt typecheck","The typecheck command runs vue-tsc or Golar to check types throughout your app.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Ftypecheck","typecheck",{"title":937,"description":938,"path":939,"stem":940},"nuxt upgrade","The upgrade command upgrades Nuxt to the latest version.","\u002Fdocs\u002F3.x\u002Fapi\u002Fcommands\u002Fupgrade","upgrade",{"title":430,"titleTemplate":942,"path":943,"stem":944,"children":945,"page":106},"%s · Nuxt Kit","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit","4.api\u002F5.kit\u002F1.modules",[946,949,954,959,963,967,972,977,982,987,992,996,1001,1006,1011,1016,1021,1026],{"title":280,"description":947,"path":948,"stem":944},"Nuxt Kit provides a set of utilities to help you create and use modules. You can use these utilities to create your own modules or to reuse existing modules.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fmodules",{"title":950,"description":951,"path":952,"stem":953},"Programmatic Usage","Nuxt Kit provides a set of utilities to help you work with Nuxt programmatically. These functions allow you to load Nuxt, build Nuxt, and load Nuxt configuration.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fprogrammatic","4.api\u002F5.kit\u002F2.programmatic",{"title":955,"description":956,"path":957,"stem":958},"Compatibility","Nuxt Kit provides a set of utilities to help you check the compatibility of your modules with different Nuxt versions.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcompatibility","4.api\u002F5.kit\u002F3.compatibility",{"title":270,"description":960,"path":961,"stem":962},"Nuxt Kit provides a set of utilities to help you work with auto-imports. These functions allow you to register your own utils, composables and Vue APIs.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fautoimports","4.api\u002F5.kit\u002F4.autoimports",{"title":466,"description":964,"path":965,"stem":966},"Nuxt Kit provides a set of utilities to help you work with components. You can register components globally or locally, and also add directories to be scanned for components.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcomponents","4.api\u002F5.kit\u002F5.components",{"title":968,"description":969,"path":970,"stem":971},"Context","Nuxt Kit provides a set of utilities to help you work with context.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fcontext","4.api\u002F5.kit\u002F6.context",{"title":973,"description":974,"path":975,"stem":976},"Pages","Nuxt Kit provides a set of utilities to help you create and use pages. You can use these utilities to manipulate the pages configuration or to define route rules.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fpages","4.api\u002F5.kit\u002F7.pages",{"title":978,"description":979,"path":980,"stem":981},"Layout","Nuxt Kit provides a set of utilities to help you work with layouts.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flayout","4.api\u002F5.kit\u002F8.layout",{"title":983,"description":984,"path":985,"stem":986},"Head","Nuxt Kit provides utilities to help you manage head configuration in modules.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fhead","4.api\u002F5.kit\u002F9.head",{"title":988,"description":989,"path":990,"stem":991},"Plugins","Nuxt Kit provides a set of utilities to help you create and use plugins. You can add plugins or plugin templates to your module using these functions.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fplugins","4.api\u002F5.kit\u002F9.plugins",{"title":449,"description":993,"path":994,"stem":995},"Nuxt Kit provides a set of utilities to help you access and modify Nuxt runtime configuration.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fruntime-config","4.api\u002F5.kit\u002F10.runtime-config",{"title":997,"description":998,"path":999,"stem":1000},"Templates","Nuxt Kit provides a set of utilities to help you work with templates. These functions allow you to generate extra files during development and build time.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Ftemplates","4.api\u002F5.kit\u002F10.templates",{"title":1002,"description":1003,"path":1004,"stem":1005},"Nitro","Nuxt Kit provides a set of utilities to help you work with Nitro. These functions allow you to add server handlers, plugins, and prerender routes.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fnitro","4.api\u002F5.kit\u002F11.nitro",{"title":1007,"description":1008,"path":1009,"stem":1010},"Resolving","Nuxt Kit provides a set of utilities to help you resolve paths. These functions allow you to resolve paths relative to the current module, with unknown name or extension.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fresolving","4.api\u002F5.kit\u002F12.resolving",{"title":1012,"description":1013,"path":1014,"stem":1015},"Logging","Nuxt Kit provides a set of utilities to help you work with logging. These functions allow you to log messages with extra features.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flogging","4.api\u002F5.kit\u002F13.logging",{"title":1017,"description":1018,"path":1019,"stem":1020},"Builder","Nuxt Kit provides a set of utilities to help you work with the builder. These functions allow you to extend the Vite and webpack configurations.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fbuilder","4.api\u002F5.kit\u002F14.builder",{"title":1022,"description":1023,"path":1024,"stem":1025},"Examples","Examples of Nuxt Kit utilities in use.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Fexamples","4.api\u002F5.kit\u002F15.examples",{"title":82,"description":1027,"path":1028,"stem":1029},"Nuxt Kit provides utilities to help you work with layers and their directory structures.","\u002Fdocs\u002F3.x\u002Fapi\u002Fkit\u002Flayers","4.api\u002F5.kit\u002F16.layers",{"icon":1031,"title":1032,"path":1033,"stem":1034,"children":1035,"page":106},"i-lucide-brain","Advanced","\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced","4.api\u002F6.advanced\u002F1.hooks",[1036,1038],{"title":425,"description":426,"path":1037,"stem":1034},"\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced\u002Fhooks",{"title":1039,"description":1040,"path":1041,"stem":1042},"Import meta","Understand where your code is running using `import.meta`.","\u002Fdocs\u002F3.x\u002Fapi\u002Fadvanced\u002Fimport-meta","4.api\u002F6.advanced\u002F2.import-meta",{"title":1044,"description":1045,"path":1046,"stem":1047},"Nuxt Configuration","Discover all the options you can use in your nuxt.config.ts file.","\u002Fdocs\u002F3.x\u002Fapi\u002Fnuxt-config","4.api\u002F6.nuxt-config",{"title":1022,"titleTemplate":1049,"icon":1050,"path":1051,"stem":1052,"children":1053,"page":106},"%s · Nuxt Examples","i-lucide-app-window-mac","\u002Fdocs\u002Fexamples","0.hello-world",[1054,1058,1084,1101,1145],{"title":1055,"description":1056,"path":1057,"stem":1052},"Hello World","A minimal Nuxt application only requires the `app.vue` and `nuxt.config.js` files.","\u002Fdocs\u002Fexamples\u002Fhello-world",{"title":420,"path":1059,"stem":1060,"children":1061,"page":106},"\u002Fdocs\u002Fexamples\u002Ffeatures","1.features\u002F1.auto-imports",[1062,1066,1070,1074,1079],{"title":1063,"description":1064,"path":1065,"stem":1060},"Auto Imports","This example demonstrates the auto-imports feature in Nuxt.","\u002Fdocs\u002Fexamples\u002Ffeatures\u002Fauto-imports",{"title":62,"description":1067,"path":1068,"stem":1069},"This example demonstrates data fetching with Nuxt using built-in composables and API routes.","\u002Fdocs\u002Fexamples\u002Ffeatures\u002Fdata-fetching","1.features\u002F2.data-fetching",{"title":67,"description":1071,"path":1072,"stem":1073},"This example shows how to use the `useState` composable to create a reactive and SSR-friendly shared state across components.","\u002Fdocs\u002Fexamples\u002Ffeatures\u002Fstate-management","1.features\u002F3.state-management",{"title":1075,"description":1076,"path":1077,"stem":1078},"Meta Tags","This example shows how to use the Nuxt helpers and composables for SEO and meta management.","\u002Fdocs\u002Fexamples\u002Ffeatures\u002Fmeta-tags","1.features\u002F4.meta-tags",{"title":1080,"description":1081,"path":1082,"stem":1083},"Layouts","This example shows how to define default and custom layouts.","\u002Fdocs\u002Fexamples\u002Ffeatures\u002Flayouts","1.features\u002F5.layouts",{"title":47,"path":1085,"stem":1086,"children":1087,"page":106},"\u002Fdocs\u002Fexamples\u002Frouting","2.routing\u002Fmiddleware",[1088,1092,1096],{"title":1089,"description":1090,"path":1091,"stem":1086},"Middleware","This example shows how to add route middleware with the middleware\u002F directory or with a plugin, and how to use them globally or per page.","\u002Fdocs\u002Fexamples\u002Frouting\u002Fmiddleware",{"title":973,"description":1093,"path":1094,"stem":1095},"This example shows how to use the pages\u002F directory to create application routes.","\u002Fdocs\u002Fexamples\u002Frouting\u002Fpages","2.routing\u002Fpages",{"title":1097,"description":1098,"path":1099,"stem":1100},"Universal Router","This example demonstrates Nuxt universal routing utilities without depending on `pages\u002F` and `vue-router`.","\u002Fdocs\u002Fexamples\u002Frouting\u002Funiversal-router","2.routing\u002Funiversal-router",{"title":1032,"path":1102,"stem":1103,"children":1104,"page":106},"\u002Fdocs\u002Fexamples\u002Fadvanced","4.advanced\u002Fconfig-extends",[1105,1108,1112,1117,1122,1127,1132,1136,1140],{"title":82,"description":1106,"path":1107,"stem":1103},"This example shows how to use the extends key in `nuxt.config.ts`.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Fconfig-extends",{"title":72,"description":1109,"path":1110,"stem":1111},"This example shows how to handle errors in different contexts: pages, plugins, components and middleware.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Ferror-handling","4.advanced\u002Ferror-handling",{"title":1113,"description":1114,"path":1115,"stem":1116},"JSX \u002F TSX","This example shows how to use JSX syntax with typescript in Nuxt pages and components.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Fjsx","4.advanced\u002Fjsx",{"title":1118,"description":1119,"path":1120,"stem":1121},"Locale","This example shows how to define a locale composable to handle the application's locale, both server and client side.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Flocale","4.advanced\u002Flocale",{"title":1123,"description":1124,"path":1125,"stem":1126},"Module Extend Pages","This example defines a new `test` page using `extendPages` within a module.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Fmodule-extend-pages","4.advanced\u002Fmodule-extend-pages",{"title":1128,"description":1129,"path":1130,"stem":1131},"Teleport","This example shows how to use the \u003CTeleport> with client-side and server-side rendering.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Fteleport","4.advanced\u002Fteleport",{"title":97,"description":1133,"path":1134,"stem":1135},"This example shows how to test your Nuxt application.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Ftesting","4.advanced\u002Ftesting",{"title":566,"description":1137,"path":1138,"stem":1139},"This example shows how to use the useCookie API to persist small amounts of data that both client and server can use.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Fuse-cookie","4.advanced\u002Fuse-cookie",{"title":1141,"description":1142,"path":1143,"stem":1144},"Use Custom Fetch Composable","This example shows a convenient wrapper for the useFetch composable from nuxt. It allows you to customize the fetch request with default values and user authentication token.","\u002Fdocs\u002Fexamples\u002Fadvanced\u002Fuse-custom-fetch-composable","4.advanced\u002Fuse-custom-fetch-composable",{"title":1146,"path":1147,"stem":1148,"children":1149,"page":106},"Experimental","\u002Fdocs\u002Fexamples\u002Fexperimental","7.experimental\u002Fwasm",[1150],{"title":1151,"description":1152,"path":1153,"stem":1148},"WASM","This example demonstrates the server-side support of WebAssembly in Nuxt.","\u002Fdocs\u002Fexamples\u002Fexperimental\u002Fwasm",{"title":1155,"titleTemplate":1156,"icon":1157,"path":1158,"stem":1159,"children":1160,"page":106},"Community","%s · Nuxt Community","i-lucide-messages-square","\u002Fdocs\u002F3.x\u002Fcommunity","5.community\u002F2.getting-help",[1161,1166,1171,1176,1181,1186],{"title":1162,"description":1163,"path":1164,"stem":1159,"icon":1165},"Getting Help","We're a friendly community of developers and we'd love to help.","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fgetting-help","i-lucide-life-buoy",{"title":1167,"description":1168,"path":1169,"stem":1170},"Reporting Bugs","One of the most valuable roles in open source is taking the time to report bugs helpfully.","\u002Fdocs\u002F3.x\u002Fcommunity\u002Freporting-bugs","5.community\u002F3.reporting-bugs",{"title":1172,"description":1173,"path":1174,"stem":1175},"Contribution","Nuxt is a community project - and so we love contributions of all kinds! ❤️","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fcontribution","5.community\u002F4.contribution",{"title":1177,"description":1178,"path":1179,"stem":1180},"Framework","Some specific points about contributions to the framework repository.","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fframework-contribution","5.community\u002F5.framework-contribution",{"title":1182,"description":1183,"path":1184,"stem":1185},"Roadmap","Nuxt is constantly evolving, with new features and modules being added all the time.","\u002Fdocs\u002F3.x\u002Fcommunity\u002Froadmap","5.community\u002F6.roadmap",{"title":1187,"description":1188,"path":1189,"stem":1190},"Releases","Discover the latest releases of Nuxt & Nuxt official modules.","\u002Fdocs\u002F3.x\u002Fcommunity\u002Fchangelog","5.community\u002F7.changelog",{"title":1192,"titleTemplate":1193,"icon":1194,"path":1195,"stem":1196,"children":1197,"page":106},"Migrate to Nuxt Bridge","Migrate to Nuxt Bridge: %s","i-lucide-ship","\u002Fdocs\u002F3.x\u002Fbridge","6.bridge\u002F1.overview",[1198,1202,1206,1211,1216,1221,1225,1228,1232,1237],{"title":1199,"description":1200,"path":1201,"stem":1196},"Overview","Reduce the differences with Nuxt 3 and reduce the burden of migration to Nuxt 3.","\u002Fdocs\u002F3.x\u002Fbridge\u002Foverview",{"title":285,"description":1203,"path":1204,"stem":1205},"Learn how to use TypeScript with Nuxt Bridge.","\u002Fdocs\u002F3.x\u002Fbridge\u002Ftypescript","6.bridge\u002F2.typescript",{"title":1207,"description":1208,"path":1209,"stem":1210},"Legacy Composition API","Learn how to migrate to Composition API with Nuxt Bridge.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fbridge-composition-api","6.bridge\u002F3.bridge-composition-api",{"title":1212,"description":1213,"path":1214,"stem":1215},"Plugins and Middleware","Learn how to migrate from Nuxt 2 to Nuxt Bridge new plugins and middleware.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fplugins-and-middleware","6.bridge\u002F4.plugins-and-middleware",{"title":1217,"description":1218,"path":1219,"stem":1220},"New Composition API","Nuxt Bridge implements composables compatible with Nuxt 3.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fnuxt3-compatible-api","6.bridge\u002F5.nuxt3-compatible-api",{"title":1075,"description":1222,"path":1223,"stem":1224},"Learn how to migrate from Nuxt 2 to Nuxt Bridge new meta tags.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fmeta","6.bridge\u002F6.meta",{"title":449,"description":450,"path":1226,"stem":1227},"\u002Fdocs\u002F3.x\u002Fbridge\u002Fruntime-config","6.bridge\u002F7.runtime-config",{"title":1002,"description":1229,"path":1230,"stem":1231},"Activate Nitro to your Nuxt 2 application with Nuxt Bridge.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fnitro","6.bridge\u002F8.nitro",{"title":1233,"description":1234,"path":1235,"stem":1236},"Vite","Activate Vite to your Nuxt 2 application with Nuxt Bridge.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fvite","6.bridge\u002F9.vite",{"title":27,"description":1238,"path":1239,"stem":1240},"Learn how to configure Nuxt Bridge to your own needs.","\u002Fdocs\u002F3.x\u002Fbridge\u002Fconfiguration","6.bridge\u002F10.configuration",{"title":1242,"titleTemplate":1243,"icon":1244,"path":1245,"stem":1246,"children":1247,"page":106},"Migrate to Nuxt 3","Migrate to Nuxt 3: %s","i-lucide-circle-arrow-up","\u002Fdocs\u002F3.x\u002Fmigration","7.migration\u002F1.overview",[1248,1251,1255,1259,1263,1267,1272,1277,1281,1286,1290],{"title":1199,"description":1249,"path":1250,"stem":1246},"Nuxt 3 is a complete rewrite of Nuxt 2, and also based on a new set of underlying technologies.","\u002Fdocs\u002F3.x\u002Fmigration\u002Foverview",{"title":27,"description":1252,"path":1253,"stem":1254},"Learn how to migrate from Nuxt 2 to Nuxt 3 new configuration.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fconfiguration","7.migration\u002F2.configuration",{"title":1063,"description":1256,"path":1257,"stem":1258},"Nuxt 3 adopts a minimal friction approach, meaning wherever possible components and composables are auto-imported.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fauto-imports","7.migration\u002F3.auto-imports",{"title":1075,"description":1260,"path":1261,"stem":1262},"Manage your meta tags, from Nuxt 2 to Nuxt 3.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fmeta","7.migration\u002F4.meta",{"title":1212,"description":1264,"path":1265,"stem":1266},"Learn how to migrate from Nuxt 2 to Nuxt 3 plugins and middleware.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fplugins-and-middleware","7.migration\u002F5.plugins-and-middleware",{"title":1268,"description":1269,"path":1270,"stem":1271},"Pages and Layouts","Learn how to migrate from Nuxt 2 to Nuxt 3 pages and layouts.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fpages-and-layouts","7.migration\u002F6.pages-and-layouts",{"title":1273,"description":1274,"path":1275,"stem":1276},"Component Options","Learn how to migrate from Nuxt 2 components options to Nuxt 3 composables.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fcomponent-options","7.migration\u002F7.component-options",{"title":449,"description":1278,"path":1279,"stem":1280},"Learn how to migrate from Nuxt 2 to Nuxt 3 runtime config.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fruntime-config","7.migration\u002F8.runtime-config",{"title":1282,"description":1283,"path":1284,"stem":1285},"Build Tooling","Learn how to migrate from Nuxt 2 to Nuxt 3 build tooling.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fbundling","7.migration\u002F10.bundling",{"title":77,"description":1287,"path":1288,"stem":1289},"Learn how to migrate from Nuxt 2 to Nuxt 3 server.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fserver","7.migration\u002F11.server",{"title":280,"description":1291,"path":1292,"stem":1293},"Learn how to migrate from Nuxt 2 to Nuxt 3 modules.","\u002Fdocs\u002F3.x\u002Fmigration\u002Fmodule-authors","7.migration\u002F20.module-authors",{"description":1295,"path":1296,"stem":1297},"Documentation for Nuxt in raw markdown","\u002Fdocs\u002F3.x\u002Fpackage","package",{"title":5,"icon":6,"path":1299,"stem":8,"children":1300,"page":106},"\u002Fdocs\u002F4.x",[1301,1340,1417,1532,1814,1843,1858,1881,1906],{"title":11,"titleTemplate":12,"icon":13,"path":1302,"stem":8,"children":1303,"page":106},"\u002Fdocs\u002F4.x\u002Fgetting-started",[1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338],{"title":17,"description":18,"path":1305,"stem":8,"icon":20},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fintroduction",{"title":22,"description":23,"path":1307,"stem":25},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Finstallation",{"title":27,"description":28,"path":1309,"stem":30},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fconfiguration",{"title":32,"description":33,"path":1311,"stem":35},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fviews",{"title":37,"description":38,"path":1313,"stem":40},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fassets",{"title":42,"description":43,"path":1315,"stem":45},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fstyling",{"title":47,"description":48,"path":1317,"stem":50},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Frouting",{"title":52,"description":53,"path":1319,"stem":55},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fseo-meta",{"title":57,"description":58,"path":1321,"stem":60},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ftransitions",{"title":62,"description":63,"path":1323,"stem":65},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching",{"title":67,"description":68,"path":1325,"stem":70},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fstate-management",{"title":72,"description":73,"path":1327,"stem":75},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ferror-handling",{"title":77,"description":78,"path":1329,"stem":80},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fserver",{"title":82,"description":83,"path":1331,"stem":85},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Flayers",{"title":87,"description":88,"path":1333,"stem":90},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fprerendering",{"title":92,"description":93,"path":1335,"stem":95},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdeployment",{"title":97,"description":98,"path":1337,"stem":100},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Ftesting",{"title":102,"description":103,"path":1339,"stem":105},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade",{"title":108,"titleTemplate":109,"icon":110,"path":1341,"stem":112,"children":1342,"page":106},"\u002Fdocs\u002F4.x\u002Fdirectory-structure",[1343,1345,1347,1385,1387,1389,1391,1393,1395,1397,1399,1403,1405,1407,1409,1411,1413,1415],{"title":115,"description":116,"path":1344,"stem":112},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxt",{"title":119,"description":120,"path":1346,"stem":122},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Foutput",{"title":1348,"titleTemplate":109,"icon":1349,"path":1350,"stem":1351,"children":1352,"page":106},"app","i-vscode-icons-folder-type-app","\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp","2.directory-structure\u002F1.app\u002F1.assets",[1353,1355,1358,1361,1364,1367,1370,1373,1376,1379,1382],{"title":124,"description":125,"path":1354,"stem":1351},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fassets",{"title":129,"description":130,"path":1356,"stem":1357},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents","2.directory-structure\u002F1.app\u002F1.components",{"title":134,"description":135,"path":1359,"stem":1360},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables","2.directory-structure\u002F1.app\u002F1.composables",{"title":149,"description":150,"path":1362,"stem":1363},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Flayouts","2.directory-structure\u002F1.app\u002F1.layouts",{"title":154,"description":155,"path":1365,"stem":1366},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","2.directory-structure\u002F1.app\u002F1.middleware",{"title":169,"description":170,"path":1368,"stem":1369},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fpages","2.directory-structure\u002F1.app\u002F1.pages",{"title":174,"description":175,"path":1371,"stem":1372},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fplugins","2.directory-structure\u002F1.app\u002F1.plugins",{"title":194,"description":195,"path":1374,"stem":1375},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Futils","2.directory-structure\u002F1.app\u002F1.utils",{"title":219,"description":220,"path":1377,"stem":1378},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fapp","2.directory-structure\u002F1.app\u002F3.app",{"title":224,"description":225,"path":1380,"stem":1381},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Fapp-config","2.directory-structure\u002F1.app\u002F3.app-config",{"title":229,"description":230,"path":1383,"stem":1384},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fapp\u002Ferror","2.directory-structure\u002F1.app\u002F3.error",{"title":139,"description":140,"path":1386,"stem":142},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fcontent",{"title":144,"description":145,"path":1388,"stem":147},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Flayers",{"title":159,"description":160,"path":1390,"stem":162},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fmodules",{"title":164,"description":165,"path":1392,"stem":167},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnode_modules",{"title":179,"description":180,"path":1394,"stem":182},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fpublic",{"title":184,"description":185,"path":1396,"stem":187},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fserver",{"title":189,"description":190,"path":1398,"stem":192},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fshared",{"title":930,"description":1400,"path":1401,"stem":1402},"Use the test\u002F directory to organize unit, Nuxt, and end-to-end tests for your application.","\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Ftest","2.directory-structure\u002F1.test",{"title":199,"description":200,"path":1404,"stem":202},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fenv",{"title":204,"description":205,"path":1406,"stem":207},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fgitignore",{"title":209,"description":210,"path":1408,"stem":212},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxtignore",{"title":214,"description":215,"path":1410,"stem":217},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxtrc",{"title":234,"description":235,"path":1412,"stem":237},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fnuxt-config",{"title":239,"description":240,"path":1414,"stem":242},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Fpackage",{"title":244,"description":245,"path":1416,"stem":247},"\u002Fdocs\u002F4.x\u002Fdirectory-structure\u002Ftsconfig",{"title":249,"icon":250,"path":1418,"stem":252,"children":1419,"page":106},"\u002Fdocs\u002F4.x\u002Fguide",[1420,1442,1462,1469,1488,1504],{"title":255,"titleTemplate":256,"icon":257,"path":1421,"stem":252,"children":1422,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts",[1423,1425,1427,1429,1431,1433,1438,1440],{"title":261,"description":262,"path":1424,"stem":252},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":265,"description":266,"path":1426,"stem":268},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle",{"title":270,"description":271,"path":1428,"stem":273},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fauto-imports",{"title":275,"description":276,"path":1430,"stem":278},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fserver-engine",{"title":280,"description":281,"path":1432,"stem":283},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fmodules",{"title":1434,"description":1435,"path":1436,"stem":1437},"Server Components","Render individual components on the server only, keeping their JavaScript out of your client bundle.","\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fserver-components","3.guide\u002F1.concepts\u002F6.server-components",{"title":285,"description":286,"path":1439,"stem":288},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Ftypescript",{"title":290,"description":291,"path":1441,"stem":293},"\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Fcode-style",{"title":295,"titleTemplate":296,"icon":297,"path":1443,"stem":1444,"children":1445,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices","3.guide\u002F2.best-practices\u002Faccessibility",[1446,1450,1455,1458,1460],{"title":1447,"description":1448,"path":1449,"stem":1444},"Nuxt accessibility","Best practices for accessibility in Nuxt apps.","\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Faccessibility",{"title":1451,"description":1452,"path":1453,"stem":1454},"Dev Containers","Set up or open a Nuxt project in a dev container for a consistent development environment.","\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fdevcontainers","3.guide\u002F2.best-practices\u002Fdevcontainers",{"title":1456,"description":303,"path":1457,"stem":299},"Nuxt and Hydration","\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fhydration",{"title":306,"description":307,"path":1459,"stem":309},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fperformance",{"title":311,"description":312,"path":1461,"stem":314},"\u002Fdocs\u002F4.x\u002Fguide\u002Fbest-practices\u002Fplugins",{"title":316,"titleTemplate":317,"icon":318,"path":1463,"stem":320,"children":1464,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai",[1465,1467],{"title":323,"description":324,"path":1466,"stem":320},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fmcp",{"title":327,"description":328,"path":1468,"stem":330},"\u002Fdocs\u002F4.x\u002Fguide\u002Fai\u002Fllms-txt",{"title":332,"titleTemplate":333,"icon":334,"path":1470,"stem":336,"children":1471,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules",[1472,1474,1476,1478,1480,1482,1484,1486],{"title":339,"description":340,"path":1473,"stem":336},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fgetting-started",{"title":343,"description":344,"path":1475,"stem":346},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy",{"title":348,"description":349,"path":1477,"stem":351},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-basics",{"title":353,"description":354,"path":1479,"stem":356},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies",{"title":358,"description":359,"path":1481,"stem":361},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Frecipes-advanced",{"title":363,"description":364,"path":1483,"stem":366},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Ftesting",{"title":368,"description":369,"path":1485,"stem":371},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fbest-practices",{"title":373,"description":374,"path":1487,"stem":376},"\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fecosystem",{"title":378,"titleTemplate":379,"icon":380,"path":1489,"stem":382,"children":1490,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes",[1491,1493,1495,1497,1499],{"title":385,"description":386,"path":1492,"stem":382},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-routing",{"title":389,"description":390,"path":1494,"stem":392},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fvite-plugin",{"title":394,"description":395,"path":1496,"stem":397},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch",{"title":399,"description":400,"path":1498,"stem":402},"\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication",{"title":1500,"description":1501,"path":1502,"stem":1503},"Mostly-Static Sites","Ship near-zero JavaScript for content and marketing sites while keeping islands of interactivity.","\u002Fdocs\u002F4.x\u002Fguide\u002Frecipes\u002Fmostly-static-sites","3.guide\u002F5.recipes\u002F5.mostly-static-sites",{"title":404,"titleTemplate":405,"icon":406,"path":1505,"stem":408,"children":1506,"page":106},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further",[1507,1509,1511,1513,1515,1517,1519,1521,1526,1528,1530],{"title":411,"description":412,"path":1508,"stem":408},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fevents",{"title":415,"description":416,"path":1510,"stem":418},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":420,"description":421,"path":1512,"stem":423},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Ffeatures",{"title":425,"description":426,"path":1514,"stem":428},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fhooks",{"title":430,"description":431,"path":1516,"stem":433},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fkit",{"title":435,"description":436,"path":1518,"stem":438},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app",{"title":440,"description":83,"path":1520,"stem":442},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Flayers",{"title":1522,"description":1523,"path":1524,"stem":1525},"Creating a Builder","Learn how Nuxt builders work and how to author your own.","\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fbuilders","3.guide\u002F6.going-further\u002F8.builders",{"title":444,"description":445,"path":1527,"stem":447},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fdebugging",{"title":449,"description":450,"path":1529,"stem":452},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fruntime-config",{"title":454,"description":455,"path":1531,"stem":457},"\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel",{"title":459,"titleTemplate":460,"icon":461,"path":1533,"stem":463,"children":1534,"page":106},"\u002Fdocs\u002F4.x\u002Fapi",[1535,1573,1654,1715,1754,1805,1812],{"title":466,"titleTemplate":467,"icon":334,"path":1536,"stem":463,"children":1537,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents",[1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568],{"title":471,"description":472,"path":1539,"stem":463},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fclient-only",{"title":475,"description":476,"path":1541,"stem":478},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fdev-only",{"title":480,"description":481,"path":1543,"stem":483},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback",{"title":485,"description":486,"path":1545,"stem":488},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-page",{"title":490,"description":491,"path":1547,"stem":493},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout",{"title":495,"description":496,"path":1549,"stem":498},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-link",{"title":500,"description":501,"path":1551,"stem":503},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator",{"title":505,"description":506,"path":1553,"stem":508},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary",{"title":510,"description":511,"path":1555,"stem":513},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome",{"title":515,"description":516,"path":1557,"stem":518},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-island",{"title":520,"description":521,"path":1559,"stem":523},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-img",{"title":525,"description":526,"path":1561,"stem":528},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture",{"title":530,"description":531,"path":1563,"stem":533},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fteleports",{"title":535,"description":536,"path":1565,"stem":538},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer",{"title":540,"description":541,"path":1567,"stem":543},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-time",{"title":1569,"description":1570,"path":1571,"stem":1572},"\u003CNuxtAnnouncer>","The \u003CNuxtAnnouncer> component adds a hidden element to announce dynamic content changes to assistive technologies.","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","4.api\u002F1.components\u002F14.nuxt-announcer",{"title":545,"titleTemplate":546,"icon":547,"path":1574,"stem":1575,"children":1576,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables","4.api\u002F2.composables\u002Fcreate-use-async-data",[1577,1581,1586,1588,1593,1595,1597,1599,1601,1603,1605,1607,1609,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652],{"title":1578,"description":1579,"path":1580,"stem":1575},"createUseAsyncData","A factory function to create a custom useAsyncData composable with pre-defined default options.","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data",{"title":1582,"description":1583,"path":1584,"stem":1585},"createUseFetch","A factory function to create a custom useFetch composable with pre-defined default options.","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","4.api\u002F2.composables\u002Fcreate-use-fetch",{"title":552,"description":553,"path":1587,"stem":549},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate",{"title":1589,"description":1590,"path":1591,"stem":1592},"useAnnouncer","A composable for announcing messages to screen readers.","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-announcer","4.api\u002F2.composables\u002Fuse-announcer",{"title":556,"description":557,"path":1594,"stem":559},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-app-config",{"title":561,"description":562,"path":1596,"stem":564},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-async-data",{"title":566,"description":567,"path":1598,"stem":569},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-cookie",{"title":571,"description":572,"path":1600,"stem":574},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-error",{"title":576,"description":577,"path":1602,"stem":579},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-fetch",{"title":581,"description":582,"path":1604,"stem":584},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head",{"title":586,"description":587,"path":1606,"stem":589},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe",{"title":591,"description":592,"path":1608,"stem":594},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-hydration",{"title":1610,"description":1611,"path":1612,"stem":1613},"useLayout","useLayout returns the layout resolved for the current route.","\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-layout","4.api\u002F2.composables\u002Fuse-layout",{"title":596,"description":597,"path":1615,"stem":599},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data",{"title":601,"description":602,"path":1617,"stem":604},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch",{"title":606,"description":607,"path":1619,"stem":609},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator",{"title":611,"description":612,"path":1621,"stem":614},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app",{"title":616,"description":617,"path":1623,"stem":619},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data",{"title":621,"description":622,"path":1625,"stem":624},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode",{"title":626,"description":627,"path":1627,"stem":629},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-event",{"title":631,"description":632,"path":1629,"stem":634},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch",{"title":636,"description":637,"path":1631,"stem":639},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-header",{"title":641,"description":642,"path":1633,"stem":644},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers",{"title":646,"description":647,"path":1635,"stem":649},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-request-url",{"title":651,"description":652,"path":1637,"stem":654},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-response-header",{"title":656,"description":657,"path":1639,"stem":659},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route",{"title":661,"description":662,"path":1641,"stem":664},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer",{"title":666,"description":667,"path":1643,"stem":669},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-router",{"title":671,"description":672,"path":1645,"stem":674},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config",{"title":676,"description":677,"path":1647,"stem":679},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook",{"title":681,"description":682,"path":1649,"stem":684},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta",{"title":686,"description":687,"path":1651,"stem":689},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta",{"title":691,"description":692,"path":1653,"stem":694},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcomposables\u002Fuse-state",{"title":696,"titleTemplate":697,"path":1655,"stem":699,"children":1656,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils",[1657,1659,1661,1663,1665,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1687,1689,1691,1693,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713],{"title":702,"description":703,"path":1658,"stem":699},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdollarfetch",{"title":706,"description":707,"path":1660,"stem":709},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fabort-navigation",{"title":711,"description":712,"path":1662,"stem":714},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fadd-route-middleware",{"title":716,"description":717,"path":1664,"stem":719},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcall-once",{"title":721,"description":722,"path":1666,"stem":724},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-error",{"title":726,"description":727,"path":1668,"stem":729},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-data",{"title":731,"description":732,"path":1670,"stem":734},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fclear-nuxt-state",{"title":736,"description":737,"path":1672,"stem":739},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fcreate-error",{"title":741,"description":742,"path":1674,"stem":744},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component",{"title":746,"description":747,"path":1676,"stem":749},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component",{"title":751,"description":752,"path":1678,"stem":754},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin",{"title":756,"description":757,"path":1680,"stem":759},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware",{"title":761,"description":762,"path":1682,"stem":764},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-page-meta",{"title":766,"description":767,"path":1684,"stem":769},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fdefine-route-rules",{"title":771,"description":772,"path":1686,"stem":774},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fnavigate-to",{"title":776,"description":777,"path":1688,"stem":779},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-before-route-leave",{"title":781,"description":782,"path":1690,"stem":784},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-before-route-update",{"title":786,"description":787,"path":1692,"stem":789},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fon-nuxt-ready",{"title":791,"description":792,"path":1694,"stem":794},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprefetch-components",{"title":796,"description":797,"path":1696,"stem":799},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-components",{"title":801,"description":802,"path":1698,"stem":804},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fpreload-route-components",{"title":806,"description":807,"path":1700,"stem":809},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fprerender-routes",{"title":811,"description":812,"path":1702,"stem":814},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-cookie",{"title":816,"description":817,"path":1704,"stem":819},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data",{"title":821,"description":822,"path":1706,"stem":824},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Freload-nuxt-app",{"title":826,"description":827,"path":1708,"stem":829},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-page-layout",{"title":831,"description":832,"path":1710,"stem":834},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fset-response-status",{"title":836,"description":837,"path":1712,"stem":839},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fshow-error",{"title":841,"description":842,"path":1714,"stem":844},"\u002Fdocs\u002F4.x\u002Fapi\u002Futils\u002Fupdate-app-config",{"title":846,"titleTemplate":847,"icon":848,"path":1716,"stem":850,"children":1717,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands",[1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752],{"title":853,"description":854,"path":1719,"stem":850},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Foverview",{"title":857,"description":858,"path":1721,"stem":860},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fadd",{"title":862,"description":863,"path":1723,"stem":865},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fadd-template",{"title":867,"description":868,"path":1725,"stem":870},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fanalyze",{"title":872,"description":873,"path":1727,"stem":875},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fbuild",{"title":877,"description":878,"path":1729,"stem":880},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fbuild-module",{"title":882,"description":883,"path":1731,"stem":885},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fcleanup",{"title":887,"description":888,"path":1733,"stem":890},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fdev",{"title":892,"description":893,"path":1735,"stem":895},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fdevtools",{"title":897,"description":898,"path":1737,"stem":900},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fgenerate",{"title":902,"description":903,"path":1739,"stem":905},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Finfo",{"title":907,"description":908,"path":1741,"stem":910},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Finit",{"title":912,"description":913,"path":1743,"stem":915},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fmodule",{"title":917,"description":918,"path":1745,"stem":920},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fprepare",{"title":922,"description":923,"path":1747,"stem":925},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fpreview",{"title":927,"description":928,"path":1749,"stem":930},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Ftest",{"title":932,"description":933,"path":1751,"stem":935},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Ftypecheck",{"title":937,"description":938,"path":1753,"stem":940},"\u002Fdocs\u002F4.x\u002Fapi\u002Fcommands\u002Fupgrade",{"title":430,"titleTemplate":942,"path":1755,"stem":944,"children":1756,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit",[1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1786,1789,1793,1796,1799,1802],{"title":280,"description":947,"path":1758,"stem":944},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fmodules",{"title":950,"description":951,"path":1760,"stem":953},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fprogrammatic",{"title":955,"description":956,"path":1762,"stem":958},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcompatibility",{"title":270,"description":960,"path":1764,"stem":962},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fautoimports",{"title":466,"description":964,"path":1766,"stem":966},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcomponents",{"title":968,"description":969,"path":1768,"stem":971},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fcontext",{"title":973,"description":974,"path":1770,"stem":976},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fpages",{"title":978,"description":979,"path":1772,"stem":981},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayout",{"title":983,"description":984,"path":1774,"stem":986},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fhead",{"title":988,"description":989,"path":1776,"stem":991},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fplugins",{"title":449,"description":993,"path":1778,"stem":995},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fruntime-config",{"title":997,"description":998,"path":1780,"stem":1000},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Ftemplates",{"title":1782,"description":1783,"path":1784,"stem":1785},"App Config","Nuxt Kit provides a set of utilities to help you access and modify Nuxt app configuration.","\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fapp-config","4.api\u002F5.kit\u002F11.app-config",{"title":1002,"description":1003,"path":1787,"stem":1788},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fnitro","4.api\u002F5.kit\u002F12.nitro",{"title":1007,"description":1790,"path":1791,"stem":1792},"Nuxt Kit provides utilities to resolve paths from the Nuxt root directory or a custom base.","\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fresolving","4.api\u002F5.kit\u002F13.resolving",{"title":1012,"description":1013,"path":1794,"stem":1795},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flogging","4.api\u002F5.kit\u002F14.logging",{"title":1017,"description":1018,"path":1797,"stem":1798},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fbuilder","4.api\u002F5.kit\u002F15.builder",{"title":1022,"description":1023,"path":1800,"stem":1801},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Fexamples","4.api\u002F5.kit\u002F16.examples",{"title":82,"description":1027,"path":1803,"stem":1804},"\u002Fdocs\u002F4.x\u002Fapi\u002Fkit\u002Flayers","4.api\u002F5.kit\u002F17.layers",{"icon":1031,"title":1032,"path":1806,"stem":1034,"children":1807,"page":106},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced",[1808,1810],{"title":425,"description":426,"path":1809,"stem":1034},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fhooks",{"title":1039,"description":1040,"path":1811,"stem":1042},"\u002Fdocs\u002F4.x\u002Fapi\u002Fadvanced\u002Fimport-meta",{"title":1044,"description":1045,"path":1813,"stem":1047},"\u002Fdocs\u002F4.x\u002Fapi\u002Fnuxt-config",{"title":1022,"titleTemplate":1049,"icon":1050,"path":1051,"stem":1052,"children":1815,"page":106},[1816,1817,1824,1829,1840],{"title":1055,"description":1056,"path":1057,"stem":1052},{"title":420,"path":1059,"stem":1060,"children":1818,"page":106},[1819,1820,1821,1822,1823],{"title":1063,"description":1064,"path":1065,"stem":1060},{"title":62,"description":1067,"path":1068,"stem":1069},{"title":67,"description":1071,"path":1072,"stem":1073},{"title":1075,"description":1076,"path":1077,"stem":1078},{"title":1080,"description":1081,"path":1082,"stem":1083},{"title":47,"path":1085,"stem":1086,"children":1825,"page":106},[1826,1827,1828],{"title":1089,"description":1090,"path":1091,"stem":1086},{"title":973,"description":1093,"path":1094,"stem":1095},{"title":1097,"description":1098,"path":1099,"stem":1100},{"title":1032,"path":1102,"stem":1103,"children":1830,"page":106},[1831,1832,1833,1834,1835,1836,1837,1838,1839],{"title":82,"description":1106,"path":1107,"stem":1103},{"title":72,"description":1109,"path":1110,"stem":1111},{"title":1113,"description":1114,"path":1115,"stem":1116},{"title":1118,"description":1119,"path":1120,"stem":1121},{"title":1123,"description":1124,"path":1125,"stem":1126},{"title":1128,"description":1129,"path":1130,"stem":1131},{"title":97,"description":1133,"path":1134,"stem":1135},{"title":566,"description":1137,"path":1138,"stem":1139},{"title":1141,"description":1142,"path":1143,"stem":1144},{"title":1146,"path":1147,"stem":1148,"children":1841,"page":106},[1842],{"title":1151,"description":1152,"path":1153,"stem":1148},{"title":1155,"titleTemplate":1156,"icon":1157,"path":1844,"stem":1159,"children":1845,"page":106},"\u002Fdocs\u002F4.x\u002Fcommunity",[1846,1848,1850,1852,1854,1856],{"title":1162,"description":1163,"path":1847,"stem":1159,"icon":1165},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fgetting-help",{"title":1167,"description":1168,"path":1849,"stem":1170},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Freporting-bugs",{"title":1172,"description":1173,"path":1851,"stem":1175},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fcontribution",{"title":1177,"description":1178,"path":1853,"stem":1180},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fframework-contribution",{"title":1182,"description":1183,"path":1855,"stem":1185},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Froadmap",{"title":1187,"description":1188,"path":1857,"stem":1190},"\u002Fdocs\u002F4.x\u002Fcommunity\u002Fchangelog",{"title":1192,"titleTemplate":1193,"icon":1194,"path":1859,"stem":1196,"children":1860,"page":106},"\u002Fdocs\u002F4.x\u002Fbridge",[1861,1863,1865,1867,1869,1871,1873,1875,1877,1879],{"title":1199,"description":1200,"path":1862,"stem":1196},"\u002Fdocs\u002F4.x\u002Fbridge\u002Foverview",{"title":285,"description":1203,"path":1864,"stem":1205},"\u002Fdocs\u002F4.x\u002Fbridge\u002Ftypescript",{"title":1207,"description":1208,"path":1866,"stem":1210},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fbridge-composition-api",{"title":1212,"description":1213,"path":1868,"stem":1215},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fplugins-and-middleware",{"title":1217,"description":1218,"path":1870,"stem":1220},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnuxt3-compatible-api",{"title":1075,"description":1222,"path":1872,"stem":1224},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fmeta",{"title":449,"description":450,"path":1874,"stem":1227},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fruntime-config",{"title":1002,"description":1229,"path":1876,"stem":1231},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fnitro",{"title":1233,"description":1234,"path":1878,"stem":1236},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fvite",{"title":27,"description":1238,"path":1880,"stem":1240},"\u002Fdocs\u002F4.x\u002Fbridge\u002Fconfiguration",{"title":1242,"titleTemplate":1243,"icon":1244,"path":1882,"stem":1246,"children":1883,"page":106},"\u002Fdocs\u002F4.x\u002Fmigration",[1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904],{"title":1199,"description":1249,"path":1885,"stem":1246},"\u002Fdocs\u002F4.x\u002Fmigration\u002Foverview",{"title":27,"description":1252,"path":1887,"stem":1254},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fconfiguration",{"title":1063,"description":1256,"path":1889,"stem":1258},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fauto-imports",{"title":1075,"description":1260,"path":1891,"stem":1262},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmeta",{"title":1212,"description":1264,"path":1893,"stem":1266},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fplugins-and-middleware",{"title":1268,"description":1269,"path":1895,"stem":1271},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fpages-and-layouts",{"title":1273,"description":1274,"path":1897,"stem":1276},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fcomponent-options",{"title":449,"description":1278,"path":1899,"stem":1280},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fruntime-config",{"title":1282,"description":1283,"path":1901,"stem":1285},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fbundling",{"title":77,"description":1287,"path":1903,"stem":1289},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fserver",{"title":280,"description":1291,"path":1905,"stem":1293},"\u002Fdocs\u002F4.x\u002Fmigration\u002Fmodule-authors",{"description":1295,"path":1907,"stem":1297},"\u002Fdocs\u002F4.x\u002Fpackage",{"title":5,"icon":6,"path":1909,"stem":8,"children":1910,"page":106},"\u002Fdocs\u002F5.x",[1911,1950,2012,2111,2385,2414,2429,2452,2477],{"title":11,"titleTemplate":12,"icon":13,"path":1912,"stem":8,"children":1913,"page":106},"\u002Fdocs\u002F5.x\u002Fgetting-started",[1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948],{"title":17,"description":18,"path":1915,"stem":8,"icon":20},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fintroduction",{"title":22,"description":23,"path":1917,"stem":25},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Finstallation",{"title":27,"description":28,"path":1919,"stem":30},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fconfiguration",{"title":32,"description":33,"path":1921,"stem":35},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fviews",{"title":37,"description":38,"path":1923,"stem":40},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fassets",{"title":42,"description":43,"path":1925,"stem":45},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstyling",{"title":47,"description":48,"path":1927,"stem":50},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Frouting",{"title":52,"description":53,"path":1929,"stem":55},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fseo-meta",{"title":57,"description":58,"path":1931,"stem":60},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftransitions",{"title":62,"description":63,"path":1933,"stem":65},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdata-fetching",{"title":67,"description":68,"path":1935,"stem":70},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fstate-management",{"title":72,"description":73,"path":1937,"stem":75},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ferror-handling",{"title":77,"description":78,"path":1939,"stem":80},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fserver",{"title":82,"description":83,"path":1941,"stem":85},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Flayers",{"title":87,"description":88,"path":1943,"stem":90},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fprerendering",{"title":92,"description":93,"path":1945,"stem":95},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fdeployment",{"title":97,"description":98,"path":1947,"stem":100},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Ftesting",{"title":102,"description":103,"path":1949,"stem":105},"\u002Fdocs\u002F5.x\u002Fgetting-started\u002Fupgrade",{"title":108,"titleTemplate":109,"icon":110,"path":1951,"stem":112,"children":1952,"page":106},"\u002Fdocs\u002F5.x\u002Fdirectory-structure",[1953,1955,1957,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010],{"title":115,"description":116,"path":1954,"stem":112},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt",{"title":119,"description":120,"path":1956,"stem":122},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Foutput",{"title":1348,"titleTemplate":109,"icon":1349,"path":1958,"stem":1351,"children":1959,"page":106},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp",[1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980],{"title":124,"description":125,"path":1961,"stem":1351},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fassets",{"title":129,"description":130,"path":1963,"stem":1357},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomponents",{"title":134,"description":135,"path":1965,"stem":1360},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fcomposables",{"title":149,"description":150,"path":1967,"stem":1363},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Flayouts",{"title":154,"description":155,"path":1969,"stem":1366},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fmiddleware",{"title":169,"description":170,"path":1971,"stem":1369},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fpages",{"title":174,"description":175,"path":1973,"stem":1372},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fplugins",{"title":194,"description":195,"path":1975,"stem":1375},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Futils",{"title":219,"description":220,"path":1977,"stem":1378},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp",{"title":224,"description":225,"path":1979,"stem":1381},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Fapp-config",{"title":229,"description":230,"path":1981,"stem":1384},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fapp\u002Ferror",{"title":139,"description":140,"path":1983,"stem":142},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fcontent",{"title":144,"description":145,"path":1985,"stem":147},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Flayers",{"title":159,"description":160,"path":1987,"stem":162},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fmodules",{"title":164,"description":165,"path":1989,"stem":167},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnode_modules",{"title":179,"description":180,"path":1991,"stem":182},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpublic",{"title":184,"description":185,"path":1993,"stem":187},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fserver",{"title":189,"description":190,"path":1995,"stem":192},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fshared",{"title":930,"description":1400,"path":1997,"stem":1402},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Ftest",{"title":199,"description":200,"path":1999,"stem":202},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fenv",{"title":204,"description":205,"path":2001,"stem":207},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fgitignore",{"title":209,"description":210,"path":2003,"stem":212},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtignore",{"title":214,"description":215,"path":2005,"stem":217},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxtrc",{"title":234,"description":235,"path":2007,"stem":237},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fnuxt-config",{"title":239,"description":240,"path":2009,"stem":242},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Fpackage",{"title":244,"description":245,"path":2011,"stem":247},"\u002Fdocs\u002F5.x\u002Fdirectory-structure\u002Ftsconfig",{"title":249,"icon":250,"path":2013,"stem":252,"children":2014,"page":106},"\u002Fdocs\u002F5.x\u002Fguide",[2015,2034,2047,2054,2073,2086],{"title":255,"titleTemplate":256,"icon":257,"path":2016,"stem":252,"children":2017,"page":106},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts",[2018,2020,2022,2024,2026,2028,2030,2032],{"title":261,"description":262,"path":2019,"stem":252},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":265,"description":266,"path":2021,"stem":268},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle",{"title":270,"description":271,"path":2023,"stem":273},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fauto-imports",{"title":275,"description":276,"path":2025,"stem":278},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fserver-engine",{"title":280,"description":281,"path":2027,"stem":283},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fmodules",{"title":1434,"description":1435,"path":2029,"stem":1437},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fserver-components",{"title":285,"description":286,"path":2031,"stem":288},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Ftypescript",{"title":290,"description":291,"path":2033,"stem":293},"\u002Fdocs\u002F5.x\u002Fguide\u002Fconcepts\u002Fcode-style",{"title":295,"titleTemplate":296,"icon":297,"path":2035,"stem":1444,"children":2036,"page":106},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices",[2037,2039,2041,2043,2045],{"title":1447,"description":1448,"path":2038,"stem":1444},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Faccessibility",{"title":1451,"description":1452,"path":2040,"stem":1454},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fdevcontainers",{"title":1456,"description":303,"path":2042,"stem":299},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fhydration",{"title":306,"description":307,"path":2044,"stem":309},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fperformance",{"title":311,"description":312,"path":2046,"stem":314},"\u002Fdocs\u002F5.x\u002Fguide\u002Fbest-practices\u002Fplugins",{"title":316,"titleTemplate":317,"icon":318,"path":2048,"stem":320,"children":2049,"page":106},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai",[2050,2052],{"title":323,"description":324,"path":2051,"stem":320},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fmcp",{"title":327,"description":328,"path":2053,"stem":330},"\u002Fdocs\u002F5.x\u002Fguide\u002Fai\u002Fllms-txt",{"title":332,"titleTemplate":333,"icon":334,"path":2055,"stem":336,"children":2056,"page":106},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules",[2057,2059,2061,2063,2065,2067,2069,2071],{"title":339,"description":340,"path":2058,"stem":336},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fgetting-started",{"title":343,"description":344,"path":2060,"stem":346},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy",{"title":348,"description":349,"path":2062,"stem":351},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-basics",{"title":353,"description":354,"path":2064,"stem":356},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fmodule-dependencies",{"title":358,"description":359,"path":2066,"stem":361},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Frecipes-advanced",{"title":363,"description":364,"path":2068,"stem":366},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Ftesting",{"title":368,"description":369,"path":2070,"stem":371},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fbest-practices",{"title":373,"description":374,"path":2072,"stem":376},"\u002Fdocs\u002F5.x\u002Fguide\u002Fmodules\u002Fecosystem",{"title":378,"titleTemplate":379,"icon":380,"path":2074,"stem":382,"children":2075,"page":106},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes",[2076,2078,2080,2082,2084],{"title":385,"description":386,"path":2077,"stem":382},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-routing",{"title":389,"description":390,"path":2079,"stem":392},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fvite-plugin",{"title":394,"description":395,"path":2081,"stem":397},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fcustom-usefetch",{"title":399,"description":400,"path":2083,"stem":402},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fsessions-and-authentication",{"title":1500,"description":1501,"path":2085,"stem":1503},"\u002Fdocs\u002F5.x\u002Fguide\u002Frecipes\u002Fmostly-static-sites",{"title":404,"titleTemplate":405,"icon":406,"path":2087,"stem":408,"children":2088,"page":106},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further",[2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109],{"title":411,"description":412,"path":2090,"stem":408},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fevents",{"title":415,"description":416,"path":2092,"stem":418},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":420,"description":421,"path":2094,"stem":423},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Ffeatures",{"title":425,"description":426,"path":2096,"stem":428},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fhooks",{"title":430,"description":431,"path":2098,"stem":433},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fkit",{"title":435,"description":436,"path":2100,"stem":438},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnuxt-app",{"title":440,"description":83,"path":2102,"stem":442},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Flayers",{"title":1522,"description":1523,"path":2104,"stem":1525},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fbuilders",{"title":444,"description":445,"path":2106,"stem":447},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fdebugging",{"title":449,"description":450,"path":2108,"stem":452},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fruntime-config",{"title":454,"description":455,"path":2110,"stem":457},"\u002Fdocs\u002F5.x\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel",{"title":459,"titleTemplate":460,"icon":461,"path":2112,"stem":463,"children":2113,"page":106},"\u002Fdocs\u002F5.x\u002Fapi",[2114,2149,2218,2279,2335,2376,2383],{"title":466,"titleTemplate":467,"icon":334,"path":2115,"stem":463,"children":2116,"page":106},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents",[2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139,2141,2143,2145,2147],{"title":471,"description":472,"path":2118,"stem":463},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fclient-only",{"title":475,"description":476,"path":2120,"stem":478},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fdev-only",{"title":480,"description":481,"path":2122,"stem":483},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback",{"title":485,"description":486,"path":2124,"stem":488},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-page",{"title":490,"description":491,"path":2126,"stem":493},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-layout",{"title":495,"description":496,"path":2128,"stem":498},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-link",{"title":500,"description":501,"path":2130,"stem":503},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator",{"title":505,"description":506,"path":2132,"stem":508},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary",{"title":510,"description":511,"path":2134,"stem":513},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-welcome",{"title":515,"description":516,"path":2136,"stem":518},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-island",{"title":520,"description":521,"path":2138,"stem":523},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-img",{"title":525,"description":526,"path":2140,"stem":528},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-picture",{"title":530,"description":531,"path":2142,"stem":533},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fteleports",{"title":535,"description":536,"path":2144,"stem":538},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer",{"title":540,"description":541,"path":2146,"stem":543},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-time",{"title":1569,"description":1570,"path":2148,"stem":1572},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomponents\u002Fnuxt-announcer",{"title":545,"titleTemplate":546,"icon":547,"path":2150,"stem":1575,"children":2151,"page":106},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables",[2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216],{"title":1578,"description":1579,"path":2153,"stem":1575},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data",{"title":1582,"description":1583,"path":2155,"stem":1585},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch",{"title":552,"description":553,"path":2157,"stem":549},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fon-prehydrate",{"title":1589,"description":1590,"path":2159,"stem":1592},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-announcer",{"title":556,"description":557,"path":2161,"stem":559},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-app-config",{"title":561,"description":562,"path":2163,"stem":564},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-async-data",{"title":566,"description":567,"path":2165,"stem":569},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-cookie",{"title":571,"description":572,"path":2167,"stem":574},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-error",{"title":576,"description":577,"path":2169,"stem":579},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-fetch",{"title":581,"description":582,"path":2171,"stem":584},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head",{"title":586,"description":587,"path":2173,"stem":589},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-head-safe",{"title":591,"description":592,"path":2175,"stem":594},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-hydration",{"title":1610,"description":1611,"path":2177,"stem":1613},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-layout",{"title":596,"description":597,"path":2179,"stem":599},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data",{"title":601,"description":602,"path":2181,"stem":604},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch",{"title":606,"description":607,"path":2183,"stem":609},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator",{"title":611,"description":612,"path":2185,"stem":614},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app",{"title":616,"description":617,"path":2187,"stem":619},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data",{"title":621,"description":622,"path":2189,"stem":624},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-preview-mode",{"title":626,"description":627,"path":2191,"stem":629},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-event",{"title":631,"description":632,"path":2193,"stem":634},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-fetch",{"title":636,"description":637,"path":2195,"stem":639},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-header",{"title":641,"description":642,"path":2197,"stem":644},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-headers",{"title":646,"description":647,"path":2199,"stem":649},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-request-url",{"title":651,"description":652,"path":2201,"stem":654},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-response-header",{"title":656,"description":657,"path":2203,"stem":659},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route",{"title":661,"description":662,"path":2205,"stem":664},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-route-announcer",{"title":666,"description":667,"path":2207,"stem":669},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-router",{"title":671,"description":672,"path":2209,"stem":674},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-config",{"title":676,"description":677,"path":2211,"stem":679},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook",{"title":681,"description":682,"path":2213,"stem":684},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-seo-meta",{"title":686,"description":687,"path":2215,"stem":689},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta",{"title":691,"description":692,"path":2217,"stem":694},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcomposables\u002Fuse-state",{"title":696,"titleTemplate":697,"path":2219,"stem":699,"children":2220,"page":106},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils",[2221,2223,2225,2227,2229,2231,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267,2269,2271,2273,2275,2277],{"title":702,"description":703,"path":2222,"stem":699},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdollarfetch",{"title":706,"description":707,"path":2224,"stem":709},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fabort-navigation",{"title":711,"description":712,"path":2226,"stem":714},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fadd-route-middleware",{"title":716,"description":717,"path":2228,"stem":719},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcall-once",{"title":721,"description":722,"path":2230,"stem":724},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-error",{"title":726,"description":727,"path":2232,"stem":729},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-data",{"title":731,"description":732,"path":2234,"stem":734},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fclear-nuxt-state",{"title":736,"description":737,"path":2236,"stem":739},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fcreate-error",{"title":741,"description":742,"path":2238,"stem":744},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component",{"title":746,"description":747,"path":2240,"stem":749},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-component",{"title":751,"description":752,"path":2242,"stem":754},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin",{"title":756,"description":757,"path":2244,"stem":759},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware",{"title":761,"description":762,"path":2246,"stem":764},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-page-meta",{"title":766,"description":767,"path":2248,"stem":769},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fdefine-route-rules",{"title":771,"description":772,"path":2250,"stem":774},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fnavigate-to",{"title":776,"description":777,"path":2252,"stem":779},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-before-route-leave",{"title":781,"description":782,"path":2254,"stem":784},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-before-route-update",{"title":786,"description":787,"path":2256,"stem":789},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fon-nuxt-ready",{"title":791,"description":792,"path":2258,"stem":794},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprefetch-components",{"title":796,"description":797,"path":2260,"stem":799},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-components",{"title":801,"description":802,"path":2262,"stem":804},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fpreload-route-components",{"title":806,"description":807,"path":2264,"stem":809},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fprerender-routes",{"title":811,"description":812,"path":2266,"stem":814},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-cookie",{"title":816,"description":817,"path":2268,"stem":819},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Frefresh-nuxt-data",{"title":821,"description":822,"path":2270,"stem":824},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Freload-nuxt-app",{"title":826,"description":827,"path":2272,"stem":829},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-page-layout",{"title":831,"description":832,"path":2274,"stem":834},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fset-response-status",{"title":836,"description":837,"path":2276,"stem":839},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fshow-error",{"title":841,"description":842,"path":2278,"stem":844},"\u002Fdocs\u002F5.x\u002Fapi\u002Futils\u002Fupdate-app-config",{"title":846,"titleTemplate":847,"icon":848,"path":2280,"stem":850,"children":2281,"page":106},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands",[2282,2284,2287,2289,2291,2293,2295,2297,2302,2304,2306,2311,2313,2315,2317,2320,2322,2324,2329,2331,2333],{"title":853,"description":854,"path":2283,"stem":850},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Foverview",{"title":857,"description":2285,"path":2286,"stem":860},"Add Nuxt modules and layers to your application.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fadd",{"title":862,"description":863,"path":2288,"stem":865},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fadd-template",{"title":867,"description":868,"path":2290,"stem":870},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fanalyze",{"title":872,"description":873,"path":2292,"stem":875},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fbuild",{"title":877,"description":878,"path":2294,"stem":880},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fbuild-module",{"title":882,"description":883,"path":2296,"stem":885},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fcleanup",{"title":2298,"description":2299,"path":2300,"stem":2301},"nuxt curl","The curl command sends an HTTP request to your running Nuxt dev server.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fcurl","curl",{"title":887,"description":888,"path":2303,"stem":890},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdev",{"title":892,"description":893,"path":2305,"stem":895},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdevtools",{"title":2307,"description":2308,"path":2309,"stem":2310},"nuxt docs","The docs command searches the Nuxt documentation for the version your project uses.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fdocs","docs",{"title":897,"description":898,"path":2312,"stem":900},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fgenerate",{"title":902,"description":903,"path":2314,"stem":905},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Finfo",{"title":907,"description":908,"path":2316,"stem":910},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Finit",{"title":912,"description":2318,"path":2319,"stem":915},"Search, add and remove modules in your Nuxt application with the command line.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fmodule",{"title":917,"description":918,"path":2321,"stem":920},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fprepare",{"title":922,"description":923,"path":2323,"stem":925},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fpreview",{"title":2325,"description":2326,"path":2327,"stem":2328},"nuxt task","List and run Nitro tasks on your dev server.","\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftask","task",{"title":927,"description":928,"path":2330,"stem":930},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftest",{"title":932,"description":933,"path":2332,"stem":935},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Ftypecheck",{"title":937,"description":938,"path":2334,"stem":940},"\u002Fdocs\u002F5.x\u002Fapi\u002Fcommands\u002Fupgrade",{"title":430,"titleTemplate":942,"path":2336,"stem":944,"children":2337,"page":106},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit",[2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374],{"title":280,"description":947,"path":2339,"stem":944},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fmodules",{"title":950,"description":951,"path":2341,"stem":953},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fprogrammatic",{"title":955,"description":956,"path":2343,"stem":958},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcompatibility",{"title":270,"description":960,"path":2345,"stem":962},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fautoimports",{"title":466,"description":964,"path":2347,"stem":966},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcomponents",{"title":968,"description":969,"path":2349,"stem":971},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fcontext",{"title":973,"description":974,"path":2351,"stem":976},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fpages",{"title":978,"description":979,"path":2353,"stem":981},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayout",{"title":983,"description":984,"path":2355,"stem":986},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fhead",{"title":988,"description":989,"path":2357,"stem":991},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fplugins",{"title":449,"description":993,"path":2359,"stem":995},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fruntime-config",{"title":997,"description":998,"path":2361,"stem":1000},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Ftemplates",{"title":1782,"description":1783,"path":2363,"stem":1785},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fapp-config",{"title":1002,"description":1003,"path":2365,"stem":1788},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fnitro",{"title":1007,"description":1790,"path":2367,"stem":1792},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fresolving",{"title":1012,"description":1013,"path":2369,"stem":1795},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flogging",{"title":1017,"description":1018,"path":2371,"stem":1798},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fbuilder",{"title":1022,"description":1023,"path":2373,"stem":1801},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Fexamples",{"title":82,"description":1027,"path":2375,"stem":1804},"\u002Fdocs\u002F5.x\u002Fapi\u002Fkit\u002Flayers",{"icon":1031,"title":1032,"path":2377,"stem":1034,"children":2378,"page":106},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced",[2379,2381],{"title":425,"description":426,"path":2380,"stem":1034},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fhooks",{"title":1039,"description":1040,"path":2382,"stem":1042},"\u002Fdocs\u002F5.x\u002Fapi\u002Fadvanced\u002Fimport-meta",{"title":1044,"description":1045,"path":2384,"stem":1047},"\u002Fdocs\u002F5.x\u002Fapi\u002Fnuxt-config",{"title":1022,"titleTemplate":1049,"icon":1050,"path":1051,"stem":1052,"children":2386,"page":106},[2387,2388,2395,2400,2411],{"title":1055,"description":1056,"path":1057,"stem":1052},{"title":420,"path":1059,"stem":1060,"children":2389,"page":106},[2390,2391,2392,2393,2394],{"title":1063,"description":1064,"path":1065,"stem":1060},{"title":62,"description":1067,"path":1068,"stem":1069},{"title":67,"description":1071,"path":1072,"stem":1073},{"title":1075,"description":1076,"path":1077,"stem":1078},{"title":1080,"description":1081,"path":1082,"stem":1083},{"title":47,"path":1085,"stem":1086,"children":2396,"page":106},[2397,2398,2399],{"title":1089,"description":1090,"path":1091,"stem":1086},{"title":973,"description":1093,"path":1094,"stem":1095},{"title":1097,"description":1098,"path":1099,"stem":1100},{"title":1032,"path":1102,"stem":1103,"children":2401,"page":106},[2402,2403,2404,2405,2406,2407,2408,2409,2410],{"title":82,"description":1106,"path":1107,"stem":1103},{"title":72,"description":1109,"path":1110,"stem":1111},{"title":1113,"description":1114,"path":1115,"stem":1116},{"title":1118,"description":1119,"path":1120,"stem":1121},{"title":1123,"description":1124,"path":1125,"stem":1126},{"title":1128,"description":1129,"path":1130,"stem":1131},{"title":97,"description":1133,"path":1134,"stem":1135},{"title":566,"description":1137,"path":1138,"stem":1139},{"title":1141,"description":1142,"path":1143,"stem":1144},{"title":1146,"path":1147,"stem":1148,"children":2412,"page":106},[2413],{"title":1151,"description":1152,"path":1153,"stem":1148},{"title":1155,"titleTemplate":1156,"icon":1157,"path":2415,"stem":1159,"children":2416,"page":106},"\u002Fdocs\u002F5.x\u002Fcommunity",[2417,2419,2421,2423,2425,2427],{"title":1162,"description":1163,"path":2418,"stem":1159,"icon":1165},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fgetting-help",{"title":1167,"description":1168,"path":2420,"stem":1170},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Freporting-bugs",{"title":1172,"description":1173,"path":2422,"stem":1175},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fcontribution",{"title":1177,"description":1178,"path":2424,"stem":1180},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fframework-contribution",{"title":1182,"description":1183,"path":2426,"stem":1185},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Froadmap",{"title":1187,"description":1188,"path":2428,"stem":1190},"\u002Fdocs\u002F5.x\u002Fcommunity\u002Fchangelog",{"title":1192,"titleTemplate":1193,"icon":1194,"path":2430,"stem":1196,"children":2431,"page":106},"\u002Fdocs\u002F5.x\u002Fbridge",[2432,2434,2436,2438,2440,2442,2444,2446,2448,2450],{"title":1199,"description":1200,"path":2433,"stem":1196},"\u002Fdocs\u002F5.x\u002Fbridge\u002Foverview",{"title":285,"description":1203,"path":2435,"stem":1205},"\u002Fdocs\u002F5.x\u002Fbridge\u002Ftypescript",{"title":1207,"description":1208,"path":2437,"stem":1210},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fbridge-composition-api",{"title":1212,"description":1213,"path":2439,"stem":1215},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fplugins-and-middleware",{"title":1217,"description":1218,"path":2441,"stem":1220},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fnuxt3-compatible-api",{"title":1075,"description":1222,"path":2443,"stem":1224},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fmeta",{"title":449,"description":450,"path":2445,"stem":1227},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fruntime-config",{"title":1002,"description":1229,"path":2447,"stem":1231},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fnitro",{"title":1233,"description":1234,"path":2449,"stem":1236},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fvite",{"title":27,"description":1238,"path":2451,"stem":1240},"\u002Fdocs\u002F5.x\u002Fbridge\u002Fconfiguration",{"title":1242,"titleTemplate":1243,"icon":1244,"path":2453,"stem":1246,"children":2454,"page":106},"\u002Fdocs\u002F5.x\u002Fmigration",[2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475],{"title":1199,"description":1249,"path":2456,"stem":1246},"\u002Fdocs\u002F5.x\u002Fmigration\u002Foverview",{"title":27,"description":1252,"path":2458,"stem":1254},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fconfiguration",{"title":1063,"description":1256,"path":2460,"stem":1258},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fauto-imports",{"title":1075,"description":1260,"path":2462,"stem":1262},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fmeta",{"title":1212,"description":1264,"path":2464,"stem":1266},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fplugins-and-middleware",{"title":1268,"description":1269,"path":2466,"stem":1271},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fpages-and-layouts",{"title":1273,"description":1274,"path":2468,"stem":1276},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fcomponent-options",{"title":449,"description":1278,"path":2470,"stem":1280},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fruntime-config",{"title":1282,"description":1283,"path":2472,"stem":1285},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fbundling",{"title":77,"description":1287,"path":2474,"stem":1289},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fserver",{"title":280,"description":1291,"path":2476,"stem":1293},"\u002Fdocs\u002F5.x\u002Fmigration\u002Fmodule-authors",{"description":1295,"path":2478,"stem":1297},"\u002Fdocs\u002F5.x\u002Fpackage",{"title":2480,"description":2481,"path":2482,"stem":2483,"children":2484},"The Nuxt Blog","Read the latest news about all Nuxt solutions, from framework announcements to integration tutorials.","\u002Fblog","blog",[2485,2490,2495,2500,2505,2510,2515,2520,2525,2530,2535,2540,2545,2550,2555,2560,2565,2570,2575,2580,2585,2590,2595,2600,2605,2610,2615,2620,2625,2630,2635,2640,2645,2650,2655,2660,2665,2670,2675,2680,2685,2690,2695,2700,2705,2710,2715,2720,2725,2730],{"title":2486,"description":2487,"path":2488,"stem":2489},"Announcing 3.0","We are thrilled to announce the first stable version of Nuxt 3.0.0","\u002Fblog\u002Fv3","blog\u002F1.v3",{"title":2491,"description":2492,"path":2493,"stem":2494},"Nuxt: A vision for 2023","This past year has been an exciting one. Looking into the new year, there is a lot we have planned as a team and we'd love to share it with you.","\u002Fblog\u002Fvision-2023","blog\u002F2.vision-2023",{"title":2496,"description":2497,"path":2498,"stem":2499},"Introducing Nuxt DevTools","Unleash the Developer Experience with Nuxt and understand your app better than ever.","\u002Fblog\u002Fintroducing-nuxt-devtools","blog\u002F3.introducing-nuxt-devtools",{"title":2501,"description":2502,"path":2503,"stem":2504},"Announcing Nuxt 3 Release Candidate","Nuxt 3 beta was announced on October 12, 2021 after 16 months of work, introducing a new foundation based on Vue 3, Vite and Nitro. Six months later, we are happy to announce the first release candidate of Nuxt 3, code named “Mount Hope“ 🚀","\u002Fblog\u002Fnuxt3-rc","blog\u002F3.nuxt3-rc",{"title":2506,"description":2507,"path":2508,"stem":2509},"Nuxt 2 End-of-Life (EOL)","Nuxt 2 will reach End of Life (EOL) on June 30th, 2024. We've partnered with HeroDevs on offering Never-Ending Support (NES).","\u002Fblog\u002Fnuxt2-eol","blog\u002F4.nuxt2-eol",{"title":2511,"description":2512,"path":2513,"stem":2514},"Introducing Nuxt 3 Beta","468 days after the first commit, the Nuxt 3 beta has finally arrived. Discover what's inside and what to expect from it. Yes, it includes Vue 3 and Vite ⚡️","\u002Fblog\u002Fnuxt3-beta","blog\u002F4.nuxt3-beta",{"title":2516,"description":2517,"path":2518,"stem":2519},"Going Full Static","Long awaited features for JAMstack fans has been shipped in v2.13: full static export, improved smart prefetching, integrated crawler, faster re-deploy, built-in web server and new target option for config ⚡️","\u002Fblog\u002Fgoing-full-static","blog\u002F5.going-full-static",{"title":2521,"description":2522,"path":2523,"stem":2524},"Introducing Smart Prefetching","Starting from Nuxt v2.4.0, Nuxt will automagically prefetch the code-split pages linked with a nuxt-link when visible in the viewport by default.","\u002Fblog\u002Fintroducing-smart-prefetching","blog\u002F6.introducing-smart-prefetching",{"title":2526,"description":2527,"path":2528,"stem":2529},"Understanding how fetch works in Nuxt 2.12","Explore different features of the fetch hook and learn a brand new way to bring data into Nuxt applications.","\u002Fblog\u002Funderstanding-how-fetch-works-in-nuxt-2-12","blog\u002F7.understanding-how-fetch-works-in-nuxt-2-12",{"title":2531,"description":2532,"path":2533,"stem":2534},"Nuxt 2 Static Improvements","With Nuxt version 2.13, the full-static mode has been introduced. In addition, a new command nuxt export was added to pre-render your pages without triggering a webpack build with the goal to separate the rendering and build process. The only issue was that most Nuxt users weren't able to unleash the full potential of the separation... until now.","\u002Fblog\u002Fnuxt-static-improvements","blog\u002F8.nuxt-static-improvements",{"title":2536,"description":2537,"path":2538,"stem":2539},"Nuxt 2: From Terminal to Browser","How we changed the developer experience to stop switching between the terminal and browser.","\u002Fblog\u002Fnuxtjs-from-terminal-to-browser","blog\u002F9.nuxtjs-from-terminal-to-browser",{"title":2541,"description":2542,"path":2543,"stem":2544},"Nuxt 3.3","The 3.3.0 is a minor (feature) release with lots of performance and DX improvements, bug fixes and new features to play with.","\u002Fblog\u002Fv3-3","blog\u002F10.v3-3",{"title":2546,"description":2547,"path":2548,"stem":2549},"Nuxt 3.4","Nuxt 3.4.0 is the latest release of Nuxt 3, bringing exciting new features, including support for the View Transitions API, transferring rich JavaScript payloads from server to client - and much more.","\u002Fblog\u002Fv3-4","blog\u002F11.v3-4",{"title":2551,"description":2552,"path":2553,"stem":2554},"Nuxt 3.5","Nuxt 3.5.0 is out, bringing Vue 3.3, new defaults, interactive server components, typed pages, environment config - and much more.","\u002Fblog\u002Fv3-5","blog\u002F12.v3-5",{"title":2556,"description":2557,"path":2558,"stem":2559},"Nuxt 3.6","Nuxt 3.6 is out, bringing performance improvements, fully static server components, better style inlining, static presets, increased type safety - and much more.","\u002Fblog\u002Fv3-6","blog\u002F13.v3-6",{"title":2561,"description":2562,"path":2563,"stem":2564},"Nuxt on the Edge","Learn how we made Nuxt 3 capable of running on edge runtimes to run with server-side rendering close to your users.","\u002Fblog\u002Fnuxt-on-the-edge","blog\u002F14.nuxt-on-the-edge",{"title":2566,"description":2567,"path":2568,"stem":2569},"Nuxt 3.7","Nuxt 3.7 is out, bringing a new CLI, native web streams and response, rendering optimisations, async context support - and much more.","\u002Fblog\u002Fv3-7","blog\u002F15.v3-7",{"title":2571,"description":2572,"path":2573,"stem":2574},"A New Website","We are thrilled to release the new nuxt.com, powered by Nuxt UI and now open source.","\u002Fblog\u002Fnew-website","blog\u002F16.new-website",{"title":2576,"description":2577,"path":2578,"stem":2579},"Nuxt 3.8","Nuxt 3.8 is out, bringing built-in DevTools, automatic Nuxt Image install, a new app manifest and much more.","\u002Fblog\u002Fv3-8","blog\u002F17.v3-8",{"title":2581,"description":2582,"path":2583,"stem":2584},"Nuxt DevTools v1.0","Nuxt DevTools v1.0 is out, generally available to all Nuxt projects!","\u002Fblog\u002Fnuxt-devtools-v1-0","blog\u002F18.nuxt-devtools-v1-0",{"title":2586,"description":2587,"path":2588,"stem":2589},"Nuxt 3.9","Nuxt 3.9 is out - a Christmas gift from the Nuxt team bringing Vite 5, interactive server components, new composables, a new loading API and more.","\u002Fblog\u002Fv3-9","blog\u002F19.v3-9",{"title":2591,"description":2592,"path":2593,"stem":2594},"Nuxt 3.10","Nuxt 3.10 is out - packed with features and fixes. Here are a few highlights.","\u002Fblog\u002Fv3-10","blog\u002F20.v3-10",{"title":2596,"description":2597,"path":2598,"stem":2599},"The Evolution of Shiki v1.0","Shiki v1.0 came with many improvements and features - see how Nuxt drives the evolution of Shiki!","\u002Fblog\u002Fshiki-v1","blog\u002F21.shiki-v1",{"title":2601,"description":2602,"path":2603,"stem":2604},"Nuxt 3.11","Nuxt 3.11 is out - with better logging, preview mode, server pages and much more!","\u002Fblog\u002Fv3-11","blog\u002F22.v3-11",{"title":2606,"description":2607,"path":2608,"stem":2609},"Nuxt: Looking forward","A lot of things have happened for Nuxt over the last year. Sébastien and Daniel share their thoughts on what we've achieved, and where we're going next.","\u002Fblog\u002Flooking-forward-2024","blog\u002F23.looking-forward-2024",{"title":2611,"description":2612,"path":2613,"stem":2614},"Refreshed Nuxt ESLint Integrations","We revamped our ESLint integrations to support ESLint v9 with the flat config, as well as a new module with many more capabilities.","\u002Fblog\u002Feslint-module","blog\u002F24.eslint-module",{"title":2616,"description":2617,"path":2618,"stem":2619},"Nuxt 3.12","Nuxt 3.12 is out - full of improvements and preparing the way for Nuxt 4!","\u002Fblog\u002Fv3-12","blog\u002F25.v3-12",{"title":2621,"description":2622,"path":2623,"stem":2624},"Introducing Nuxt Scripts","Nuxt Scripts provides better performance, privacy, security, and developer experience for third-party scripts.","\u002Fblog\u002Fnuxt-scripts","blog\u002F26.nuxt-scripts",{"title":2626,"description":2627,"path":2628,"stem":2629},"Nuxt 3.13","Nuxt 3.13 is out - porting back some of the new features we're building for Nuxt 4!","\u002Fblog\u002Fv3-13","blog\u002F27.v3-13",{"title":2631,"description":2632,"path":2633,"stem":2634},"Nuxt 3.14","Nuxt 3.14 is out - with a new rspack builder, shared folder, and performance enhancements!","\u002Fblog\u002Fv3-14","blog\u002F27.v3-14",{"title":2636,"description":2637,"path":2638,"stem":2639},"Introducing Nuxt Icon v1","Discover Nuxt Icon v1 - a modern, versatile, and customizable icon solution for your Nuxt projects.","\u002Fblog\u002Fnuxt-icon-v1-0","blog\u002F29.nuxt-icon-v1-0",{"title":2641,"description":2642,"path":2643,"stem":2644},"Nuxt 3.15","Nuxt 3.15 is out - with Vite 6, better HMR and faster performance","\u002Fblog\u002Fv3-15","blog\u002F30.v3-15",{"title":2646,"description":2647,"path":2648,"stem":2649},"Nuxt 3.16","Nuxt 3.16 is out - packed with features and performance improvements","\u002Fblog\u002Fv3-16","blog\u002F31.v3-16",{"title":2651,"description":2652,"path":2653,"stem":2654},"Nuxt UI v3","Nuxt UI v3 is out! After 1500+ commits, this major redesign brings improved accessibility, Tailwind CSS v4 support, and full Vue compatibility","\u002Fblog\u002Fnuxt-ui-v3","blog\u002F32.nuxt-ui-v3",{"title":2656,"description":2657,"path":2658,"stem":2659},"Nuxt 3.17","Nuxt 3.17 is out - bringing a major reworking of the async data layer, a new built-in component, better warnings, and performance improvements!","\u002Fblog\u002Fv3-17","blog\u002F33.v3-17",{"title":2661,"description":2662,"path":2663,"stem":2664},"Roadmap to v4","We have some exciting news about the roadmap to Nuxt 4, including a new timeline and what to expect in the next few weeks.","\u002Fblog\u002Froadmap-v4","blog\u002F34.roadmap-v4",{"title":2666,"description":2667,"path":2668,"stem":2669},"Building a Privacy-First Feedback Widget","A lightweight, privacy-focused widget to gather your feedback on Nuxt documentation, built with Drizzle, NuxtHub database and Motion Vue.","\u002Fblog\u002Fbuilding-a-feedback-widget","blog\u002F35.building-a-feedback-widget",{"title":2671,"description":2672,"path":2673,"stem":2674},"Announcing Nuxt 4.0","Nuxt 4.0 is here! A thoughtful evolution focused on developer experience, with better project organization, smarter data fetching, and improved type safety.","\u002Fblog\u002Fv4","blog\u002F36.v4",{"title":2676,"description":2677,"path":2678,"stem":2679},"Nuxt 3.18","Nuxt 3.18 is out - bringing v4 features to v3, improved accessibility, better browser dev tooling integration, and performance enhancements!","\u002Fblog\u002Fv3-18","blog\u002F37.v3-18",{"title":2681,"description":2682,"path":2683,"stem":2684},"Nuxt 4.1","Nuxt 4.1 is out - bringing enhanced build stability, better development experience, and powerful new features for module authors!","\u002Fblog\u002Fv4-1","blog\u002F38.v4-1",{"title":2686,"description":2687,"path":2688,"stem":2689},"Nuxt UI v4","Nuxt UI v4 unifies Nuxt UI and Nuxt UI Pro into one powerful, completely free library. With over 110 components, 12 templates, and a comprehensive Figma kit, all of this is available for free.","\u002Fblog\u002Fnuxt-ui-v4","blog\u002F39.nuxt-ui-v4",{"title":2691,"description":2692,"path":2693,"stem":2694},"Building an MCP Server for Nuxt","How we built the Nuxt MCP server to enable AI assistants to access our documentation through structured data and composable tools.","\u002Fblog\u002Fbuilding-nuxt-mcp","blog\u002F40.building-nuxt-mcp",{"title":2696,"description":2697,"path":2698,"stem":2699},"Nuxt 4.2","Nuxt 4.2 is out - with experimental TypeScript plugin support, better error handling in development, abort control for data fetching, and more!","\u002Fblog\u002Fv4-2","blog\u002F40.v4-2",{"title":2701,"description":2702,"path":2703,"stem":2704},"Nuxt Image v2","Nuxt Image v2 is out - with full TypeScript support, IPX v3, and new providers!","\u002Fblog\u002Fnuxt-image-v2","blog\u002F41.nuxt-image-v2",{"title":2706,"description":2707,"path":2708,"stem":2709},"Nuxt 4.3","Nuxt 4.3 is out – route rule layouts, ISR payload extraction, draggable error overlay, and more!","\u002Fblog\u002Fv4-3","blog\u002F42.v4-3",{"title":2711,"description":2712,"path":2713,"stem":2714},"Nuxt 4.4","Nuxt 4.4 brings custom useFetch\u002FuseAsyncData factories, vue-router v5, a new accessibility announcer, typed layout props, build profiling, smarter payload handling, and much more.","\u002Fblog\u002Fv4-4","blog\u002F43.v4-4",{"title":2716,"description":2717,"path":2718,"stem":2719},"Introducing the Nuxt Agent","Our own AI agent on nuxt.com, grounded in the official docs and the Nuxt ecosystem. We built it internally using the AI SDK, our MCP server, and Nuxt UI components.","\u002Fblog\u002Fintroducing-nuxt-agent","blog\u002F44.introducing-nuxt-agent",{"title":2721,"description":2722,"path":2723,"stem":2724},"Meet Nuxi","Today, we're announcing the new Nuxt Agent: Nuxi. We want to make your Nuxt experience less generic and more personalized, with the care that characterizes the Nuxt community.","\u002Fblog\u002Fmeet-nuxi","blog\u002F45.meet-nuxi",{"title":2726,"description":2727,"path":2728,"stem":2729},"Nuxt 4.5","Nuxt 4.5 is our biggest release in a while. Vite 8, Rspack 2 powered by Rsbuild, experimental SSR streaming, a stable error code system, a new useLayout composable, named views, and a lot of groundwork for Nuxt 5.","\u002Fblog\u002Fv4-5","blog\u002F46.v4-5",{"title":2731,"description":2732,"path":2733,"stem":2734},"Nuxt Security Patch Releases","Nuxt 4.5.1 and 3.21.10 are out now, fixing several security issues, alongside a critical fix in @nuxt\u002Fdevtools 3.3.1. We recommend upgrading as soon as possible.","\u002Fblog\u002Fv4-5-security","blog\u002F47.v4-5-security",{"path":104,"data":2736,"meta":2737,"nodes":3022},{"title":102,"description":103,"navigation.icon":1244},{"toc":2738,"key":3018,"source":2310,"stem":105,"extension":3019,"kind":3020,"type":3021,"partial":106},{"title":2739,"searchDepth":2740,"depth":2741,"links":2742},"",2,3,[2743,2755,3009,3012,3015],{"id":2744,"depth":2740,"text":2745,"children":2746},"upgrading-nuxt","Upgrading Nuxt",[2747,2750,2753],{"id":2748,"depth":2741,"text":2749},"upgrading-nuxt-latest-nuxt-3-release","Latest Nuxt 3 release",{"id":2751,"depth":2741,"text":2752},"upgrading-nuxt-latest-release","Latest release",{"id":2754,"depth":2741,"text":454},"upgrading-nuxt-nightly-release-channel",{"id":2756,"depth":2740,"text":2757,"children":2758},"testing-nuxt-4","Testing Nuxt 4",[2759,2762,2765,2779,2789,2799,2809,2817,2825,2835,2841,2849,2859,2869,2879,2889,2899,2909,2919,2929,2939,2949,2959,2969,2979,2989,2999],{"id":2760,"depth":2741,"text":2761},"testing-nuxt-4-opting-in-to-nuxt-4","Opting in to Nuxt 4",{"id":2763,"depth":2741,"text":2764},"testing-nuxt-4-migrating-using-codemods","Migrating Using Codemods",{"id":2766,"depth":2741,"text":2767,"children":2768},"testing-nuxt-4-new-directory-structure","New Directory Structure",[2769,2773,2776],{"id":2770,"depth":2771,"text":2772},"testing-nuxt-4-new-directory-structure-what-changed",4,"What Changed",{"id":2774,"depth":2771,"text":2775},"testing-nuxt-4-new-directory-structure-reasons-for-change","Reasons for Change",{"id":2777,"depth":2771,"text":2778},"testing-nuxt-4-new-directory-structure-migration-steps","Migration Steps",{"id":2780,"depth":2741,"text":2781,"children":2782},"testing-nuxt-4-singleton-data-fetching-layer","Singleton Data Fetching Layer",[2783,2785,2787],{"id":2784,"depth":2771,"text":2772},"testing-nuxt-4-singleton-data-fetching-layer-what-changed",{"id":2786,"depth":2771,"text":2775},"testing-nuxt-4-singleton-data-fetching-layer-reasons-for-change",{"id":2788,"depth":2771,"text":2778},"testing-nuxt-4-singleton-data-fetching-layer-migration-steps",{"id":2790,"depth":2741,"text":2791,"children":2792},"testing-nuxt-4-corrected-module-loading-order-in-layers","Corrected Module Loading Order in Layers",[2793,2795,2797],{"id":2794,"depth":2771,"text":2772},"testing-nuxt-4-corrected-module-loading-order-in-layers-what-changed",{"id":2796,"depth":2771,"text":2775},"testing-nuxt-4-corrected-module-loading-order-in-layers-reasons-for-change",{"id":2798,"depth":2771,"text":2778},"testing-nuxt-4-corrected-module-loading-order-in-layers-migration-steps",{"id":2800,"depth":2741,"text":2801,"children":2802},"testing-nuxt-4-deduplication-of-route-metadata","Deduplication of Route Metadata",[2803,2805,2807],{"id":2804,"depth":2771,"text":2772},"testing-nuxt-4-deduplication-of-route-metadata-what-changed",{"id":2806,"depth":2771,"text":2775},"testing-nuxt-4-deduplication-of-route-metadata-reasons-for-change",{"id":2808,"depth":2771,"text":2778},"testing-nuxt-4-deduplication-of-route-metadata-migration-steps",{"id":2810,"depth":2741,"text":2811,"children":2812},"testing-nuxt-4-normalized-component-names","Normalized Component Names",[2813,2815],{"id":2814,"depth":2771,"text":2772},"testing-nuxt-4-normalized-component-names-what-changed",{"id":2816,"depth":2771,"text":2778},"testing-nuxt-4-normalized-component-names-migration-steps",{"id":2818,"depth":2741,"text":2819,"children":2820},"testing-nuxt-4-unhead-v2","Unhead v2",[2821,2823],{"id":2822,"depth":2771,"text":2772},"testing-nuxt-4-unhead-v2-what-changed",{"id":2824,"depth":2771,"text":2778},"testing-nuxt-4-unhead-v2-migration-steps",{"id":2826,"depth":2741,"text":2827,"children":2828},"testing-nuxt-4-new-dom-location-for-spa-loading-screen","New DOM Location for SPA Loading Screen",[2829,2831,2833],{"id":2830,"depth":2771,"text":2772},"testing-nuxt-4-new-dom-location-for-spa-loading-screen-what-changed",{"id":2832,"depth":2771,"text":2775},"testing-nuxt-4-new-dom-location-for-spa-loading-screen-reasons-for-change",{"id":2834,"depth":2771,"text":2778},"testing-nuxt-4-new-dom-location-for-spa-loading-screen-migration-steps",{"id":2836,"depth":2741,"text":2837,"children":2838},"testing-nuxt-4-parsed-errordata","Parsed error.data",[2839],{"id":2840,"depth":2771,"text":2778},"testing-nuxt-4-parsed-errordata-migration-steps",{"id":2842,"depth":2741,"text":2843,"children":2844},"testing-nuxt-4-more-granular-inline-styles","More Granular Inline Styles",[2845,2847],{"id":2846,"depth":2771,"text":2772},"testing-nuxt-4-more-granular-inline-styles-what-changed",{"id":2848,"depth":2771,"text":2778},"testing-nuxt-4-more-granular-inline-styles-migration-steps",{"id":2850,"depth":2741,"text":2851,"children":2852},"testing-nuxt-4-scan-page-meta-after-resolution","Scan Page Meta After Resolution",[2853,2855,2857],{"id":2854,"depth":2771,"text":2772},"testing-nuxt-4-scan-page-meta-after-resolution-what-changed",{"id":2856,"depth":2771,"text":2775},"testing-nuxt-4-scan-page-meta-after-resolution-reasons-for-change",{"id":2858,"depth":2771,"text":2778},"testing-nuxt-4-scan-page-meta-after-resolution-migration-steps",{"id":2860,"depth":2741,"text":2861,"children":2862},"testing-nuxt-4-shared-prerender-data","Shared Prerender Data",[2863,2865,2867],{"id":2864,"depth":2771,"text":2772},"testing-nuxt-4-shared-prerender-data-what-changed",{"id":2866,"depth":2771,"text":2775},"testing-nuxt-4-shared-prerender-data-reasons-for-change",{"id":2868,"depth":2771,"text":2778},"testing-nuxt-4-shared-prerender-data-migration-steps",{"id":2870,"depth":2741,"text":2871,"children":2872},"testing-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch","Default data and error values in useAsyncData and useFetch",[2873,2875,2877],{"id":2874,"depth":2771,"text":2772},"testing-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch-what-changed",{"id":2876,"depth":2771,"text":2775},"testing-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2878,"depth":2771,"text":2778},"testing-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch-migration-steps",{"id":2880,"depth":2741,"text":2881,"children":2882},"testing-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch","Removal of deprecated boolean values for dedupe option when calling refresh in useAsyncData and useFetch",[2883,2885,2887],{"id":2884,"depth":2771,"text":2772},"testing-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch-what-changed",{"id":2886,"depth":2771,"text":2775},"testing-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2888,"depth":2771,"text":2778},"testing-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch-migration-steps",{"id":2890,"depth":2741,"text":2891,"children":2892},"testing-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch","Respect defaults when clearing data in useAsyncData and useFetch",[2893,2895,2897],{"id":2894,"depth":2771,"text":2772},"testing-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch-what-changed",{"id":2896,"depth":2771,"text":2775},"testing-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2898,"depth":2771,"text":2778},"testing-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch-migration-steps",{"id":2900,"depth":2741,"text":2901,"children":2902},"testing-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch","Alignment of pending value in useAsyncData and useFetch",[2903,2905,2907],{"id":2904,"depth":2771,"text":2772},"testing-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch-what-changed",{"id":2906,"depth":2771,"text":2775},"testing-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2908,"depth":2771,"text":2778},"testing-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch-migration-steps",{"id":2910,"depth":2741,"text":2911,"children":2912},"testing-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch","Key Change Behavior in useAsyncData and useFetch",[2913,2915,2917],{"id":2914,"depth":2771,"text":2772},"testing-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch-what-changed",{"id":2916,"depth":2771,"text":2775},"testing-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2918,"depth":2771,"text":2778},"testing-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch-migration-steps",{"id":2920,"depth":2741,"text":2921,"children":2922},"testing-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch","Shallow Data Reactivity in useAsyncData and useFetch",[2923,2925,2927],{"id":2924,"depth":2771,"text":2772},"testing-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch-what-changed",{"id":2926,"depth":2771,"text":2775},"testing-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2928,"depth":2771,"text":2778},"testing-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch-migration-steps",{"id":2930,"depth":2741,"text":2931,"children":2932},"testing-nuxt-4-absolute-watch-paths-in-builderwatch","Absolute Watch Paths in builder:watch",[2933,2935,2937],{"id":2934,"depth":2771,"text":2772},"testing-nuxt-4-absolute-watch-paths-in-builderwatch-what-changed",{"id":2936,"depth":2771,"text":2775},"testing-nuxt-4-absolute-watch-paths-in-builderwatch-reasons-for-change",{"id":2938,"depth":2771,"text":2778},"testing-nuxt-4-absolute-watch-paths-in-builderwatch-migration-steps",{"id":2940,"depth":2741,"text":2941,"children":2942},"testing-nuxt-4-removal-of-window__nuxt__-object","Removal of window.__NUXT__ object",[2943,2945,2947],{"id":2944,"depth":2771,"text":2772},"testing-nuxt-4-removal-of-window__nuxt__-object-what-changed",{"id":2946,"depth":2771,"text":2775},"testing-nuxt-4-removal-of-window__nuxt__-object-reasons-for-change",{"id":2948,"depth":2771,"text":2778},"testing-nuxt-4-removal-of-window__nuxt__-object-migration-steps",{"id":2950,"depth":2741,"text":2951,"children":2952},"testing-nuxt-4-directory-index-scanning","Directory index scanning",[2953,2955,2957],{"id":2954,"depth":2771,"text":2772},"testing-nuxt-4-directory-index-scanning-what-changed",{"id":2956,"depth":2771,"text":2775},"testing-nuxt-4-directory-index-scanning-reasons-for-change",{"id":2958,"depth":2771,"text":2778},"testing-nuxt-4-directory-index-scanning-migration-steps",{"id":2960,"depth":2741,"text":2961,"children":2962},"testing-nuxt-4-template-compilation-changes","Template Compilation Changes",[2963,2965,2967],{"id":2964,"depth":2771,"text":2772},"testing-nuxt-4-template-compilation-changes-what-changed",{"id":2966,"depth":2771,"text":2775},"testing-nuxt-4-template-compilation-changes-reasons-for-change",{"id":2968,"depth":2771,"text":2778},"testing-nuxt-4-template-compilation-changes-migration-steps",{"id":2970,"depth":2741,"text":2971,"children":2972},"testing-nuxt-4-default-typescript-configuration-changes","Default TypeScript Configuration Changes",[2973,2975,2977],{"id":2974,"depth":2771,"text":2772},"testing-nuxt-4-default-typescript-configuration-changes-what-changed",{"id":2976,"depth":2771,"text":2775},"testing-nuxt-4-default-typescript-configuration-changes-reasons-for-change",{"id":2978,"depth":2771,"text":2778},"testing-nuxt-4-default-typescript-configuration-changes-migration-steps",{"id":2980,"depth":2741,"text":2981,"children":2982},"testing-nuxt-4-typescript-configuration-splitting","TypeScript Configuration Splitting",[2983,2985,2987],{"id":2984,"depth":2771,"text":2772},"testing-nuxt-4-typescript-configuration-splitting-what-changed",{"id":2986,"depth":2771,"text":2775},"testing-nuxt-4-typescript-configuration-splitting-reasons-for-change",{"id":2988,"depth":2771,"text":2778},"testing-nuxt-4-typescript-configuration-splitting-migration-steps",{"id":2990,"depth":2741,"text":2991,"children":2992},"testing-nuxt-4-removal-of-experimental-features","Removal of Experimental Features",[2993,2995,2997],{"id":2994,"depth":2771,"text":2772},"testing-nuxt-4-removal-of-experimental-features-what-changed",{"id":2996,"depth":2771,"text":2775},"testing-nuxt-4-removal-of-experimental-features-reasons-for-change",{"id":2998,"depth":2771,"text":2778},"testing-nuxt-4-removal-of-experimental-features-migration-steps",{"id":3000,"depth":2741,"text":3001,"children":3002},"testing-nuxt-4-removal-of-top-level-generate-configuration","Removal of Top-Level generate Configuration",[3003,3005,3007],{"id":3004,"depth":2771,"text":2772},"testing-nuxt-4-removal-of-top-level-generate-configuration-what-changed",{"id":3006,"depth":2771,"text":2775},"testing-nuxt-4-removal-of-top-level-generate-configuration-reasons-for-change",{"id":3008,"depth":2771,"text":2778},"testing-nuxt-4-removal-of-top-level-generate-configuration-migration-steps",{"id":3010,"depth":2740,"text":3011},"nuxt-2-vs-nuxt-3","Nuxt 2 vs. Nuxt 3+",{"id":3013,"depth":2740,"text":3014},"nuxt-2-to-nuxt-3","Nuxt 2 to Nuxt 3+",{"id":3016,"depth":2740,"text":3017},"nuxt-2-to-nuxt-bridge","Nuxt 2 to Nuxt Bridge","docs\u002F1.getting-started\u002F18.upgrade.md",".md","document","text\u002Fmarkdown",[3023,3026,3029,3047,3111,3135,3137,3145,3190,3192,3199,3211,3213,3224,3227,3232,3234,3239,3246,3470,3473,3482,3485,3487,3495,3502,3509,3516,3605,3608,3610,3617,3624,3631,3634,3724,3729,3734,3822,3848,3855,3857,3888,3893,3895,3981,3988,4027,4030,4097,4099,4104,4106,4114,4181,4183,4188,4190,4533,4536,4589,4591,4596,4598,4605,4608,4622,4625,4641,4643,4646,4657,4659,4665,4668,4688,4691,4823,4834,4846,4848,4852,4854,4874,4877,4879,4886,4888,4891,4910,4912,4916,4919,4921,4924,4938,4949,4955,4958,4960,4974,4976,5019,5021,5025,5027,5038,5061,5063,5066,5069,5074,5105,5119,5223,5235,5249,5256,5300,5302,5306,5308,5323,5364,5367,5395,5397,5400,5402,5416,5419,5463,5469,5473,5482,5484,5492,5528,5531,5574,5576,5580,5583,5585,5596,5598,5605,5649,5651,5655,5657,5671,5673,5683,5685,5693,5730,5732,5775,5777,5782,5784,5796,5798,5809,5815,5817,5826,5984,5987,6030,6042,6046,6048,6061,6063,6083,6085,6101,6107,6110,6190,6193,6212,6216,6218,6239,6336,6338,6341,6353,6382,6384,6386,6426,6431,6440,6444,6446,6461,6463,6472,6474,6477,6520,6523,6534,6538,6559,6561,6580,6582,6594,6596,6608,6657,6660,6703,6710,6714,6716,6730,6736,6744,6746,6767,6769,6775,6798,6801,6849,6856,6860,6880,6882,6892,6894,6904,6906,6909,7002,7008,7014,7018,7020,7028,7030,7036,7038,7045,7051,7076,7081,7088,7090,7096,7098,7109,7111,7117,7131,7133,7137,7139,7149,7151,7158,7166,7168,7171,7281,7283,7287,7289,7300,7313,7315,7322,7332,7340,7342,7345,7369,7421,7434,7765,7770,7772,7776,7778,7789,7791,7803,7805,7808,7894,7896,7900,7902,7905,7981,7983,7986,8011,8023,8025,8031,8034,8387,8390,8392,8396,8398,8401,8443,8445,8448,8450,8472,8478,8482,8484,8490,8504,8506,8516,8518,8527,8586,8591,8593,8596,8800,8802,8805,8811,8813,8816],[3024,3025,2745],"h2",{"id":2744},[3027,3028,2749],"h3",{"id":2748},[3030,3031,3032,3033,3038,3039,3042,3043,3046],"p",{},"To upgrade Nuxt to the ",[3034,3035,3037],"a",{"href":3036},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases","latest v3 release",", use the ",[3040,3041,937],"code",{}," command with ",[3040,3044,3045],{},"--channel=v3"," flag.",[3048,3049,3051,3077,3088,3099],"code-group",{"sync":3050},"pm",[3052,3053,3057],"pre",{"language":3054,"filename":3055,"class":3056},"bash","npm","shj shiki shj-lang-bash",[3040,3058,3060],{"class":3059},"language-bash",[3061,3062,3065,3070,3071,3076],"span",{"class":3063,"style":3064},"line","display: inline",[3061,3066,3069],{"class":3067,"style":3068},"shj-syn-func shj-func","color:#6182B8;--shiki-dark:#82AAFF","npx"," nuxt upgrade --dedupe --channel",[3061,3072,3075],{"class":3073,"style":3074},"shj-syn-oper shj-oper","color:#39ADB5;--shiki-dark:#89DDFF","=","v3",[3052,3078,3080],{"language":3054,"filename":3079,"class":3056},"yarn",[3040,3081,3082],{"class":3059},[3061,3083,3084,3070,3086,3076],{"class":3063,"style":3064},[3061,3085,3079],{"class":3067,"style":3068},[3061,3087,3075],{"class":3073,"style":3074},[3052,3089,3091],{"language":3054,"filename":3090,"class":3056},"pnpm",[3040,3092,3093],{"class":3059},[3061,3094,3095,3070,3097,3076],{"class":3063,"style":3064},[3061,3096,3090],{"class":3067,"style":3068},[3061,3098,3075],{"class":3073,"style":3074},[3052,3100,3102],{"language":3054,"filename":3101,"class":3056},"bun",[3040,3103,3104],{"class":3059},[3061,3105,3106,3108,3109,3076],{"class":3063,"style":3064},[3061,3107,3101],{"class":3067,"style":3068}," x nuxt upgrade --dedupe --channel",[3061,3110,3075],{"class":3073,"style":3074},[3112,3113,3114,3115,3119,3120,3123,3124,3127,3128,3131,3132],"note",{},"This will only work if you ",[3116,3117,3118],"em",{},"already have"," a version of ",[3040,3121,3122],{},"@nuxt\u002Fcli"," which has the ",[3040,3125,3126],{},"--channel"," flag implemented. If this does not work, you can instead use ",[3040,3129,3130],{},"nuxi@latest"," for the initial upgrade.\nE.g. ",[3040,3133,3134],{},"npx nuxi@latest upgrade --dedupe --channel=v3",[3027,3136,2752],{"id":2751},[3030,3138,3032,3139,3038,3142,3144],{},[3034,3140,3141],{"href":3036},"latest release",[3040,3143,937],{}," command.",[3048,3146,3147,3156,3164,3172,3181],{"sync":3050},[3052,3148,3149],{"language":3054,"filename":3055,"class":3056},[3040,3150,3151],{"class":3059},[3061,3152,3153,3155],{"class":3063,"style":3064},[3061,3154,3069],{"class":3067,"style":3068}," nuxt upgrade",[3052,3157,3158],{"language":3054,"filename":3079,"class":3056},[3040,3159,3160],{"class":3059},[3061,3161,3162,3155],{"class":3063,"style":3064},[3061,3163,3079],{"class":3067,"style":3068},[3052,3165,3166],{"language":3054,"filename":3090,"class":3056},[3040,3167,3168],{"class":3059},[3061,3169,3170,3155],{"class":3063,"style":3064},[3061,3171,3090],{"class":3067,"style":3068},[3052,3173,3174],{"language":3054,"filename":3101,"class":3056},[3040,3175,3176],{"class":3059},[3061,3177,3178,3180],{"class":3063,"style":3064},[3061,3179,3101],{"class":3067,"style":3068}," x nuxt upgrade",[3052,3182,3184],{"language":3054,"filename":3183,"class":3056},"deno",[3040,3185,3186],{"class":3059},[3061,3187,3188,3180],{"class":3063,"style":3064},[3061,3189,3183],{"class":3067,"style":3068},[3027,3191,454],{"id":2754},[3030,3193,3194,3195,3198],{},"To use the latest Nuxt build and test features before their release, read about the ",[3034,3196,3197],{"href":456},"nightly release channel"," guide.",[3200,3201,3202,3203,3206,3207,3210],"warning",{},"The nightly release channel ",[3040,3204,3205],{},"latest"," tag is currently tracking the Nuxt v4 branch, meaning that it is particularly likely to have breaking changes right now — be careful! You can opt in to the 3.x branch nightly releases with ",[3040,3208,3209],{},"\"nuxt\": \"npm:nuxt-nightly@3x\"",".",[3024,3212,2757],{"id":2756},[3030,3214,3215,3216,3220,3221,3210],{},"Nuxt 4 is ",[3217,3218,3219],"strong",{},"scheduled for release in Q2 2025",". It will include all the features currently available through ",[3040,3222,3223],{},"compatibilityVersion: 4",[3030,3225,3226],{},"Until the release, it is possible to test many of Nuxt 4's breaking changes from Nuxt version 3.12+.",[3228,3229],"video-accordion",{"title":3230,"videoId":3231},"Watch a video from Alexander Lichter showing how to opt in to Nuxt 4's breaking changes already","r4wFKlcJK6c",[3027,3233,2761],{"id":2760},[3030,3235,3236,3237,3210],{},"First, upgrade Nuxt to the ",[3034,3238,3141],{"href":3036},[3030,3240,3241,3242,3245],{},"Then you can set your ",[3040,3243,3244],{},"compatibilityVersion"," to match Nuxt 4 behavior:",[3247,3248,3249],"code-collapse",{},[3052,3250,3254],{"language":3251,"meta":3252,"class":3253},"ts","twoslash [nuxt.config.ts]","shj shiki shj-lang-ts",[3040,3255,3257,3279,3280,3279,3288,3279,3301,3279,3309,3279,3316,3279,3321,3279,3326,3279,3331,3279,3336,3279,3341,3279,3346,3279,3351,3279,3356,3279,3361,3279,3366,3279,3371,3279,3376,3279,3381,3279,3386,3279,3391,3279,3396,3279,3401,3279,3406,3279,3411,3279,3416,3279,3421,3279,3425,3279,3430,3279,3435,3279,3439,3279,3444,3279,3449,3279,3454,3279,3458,3279,3463],{"class":3256},"language-ts",[3061,3258,3259,3264,3265,3264,3268,3271,3276],{"class":3063,"style":3064},[3061,3260,3263],{"class":3261,"style":3262},"shj-syn-kwd shj-kwd","color:#9C3EDA;--shiki-dark:#C792EA","export"," ",[3061,3266,3267],{"class":3261,"style":3262},"default",[3061,3269,3270],{"class":3067,"style":3068},"defineNuxtConfig",[3061,3272,3275],{"class":3273,"style":3274},"shj-syn-bracket shj-bracket","color:#90A4AE;--shiki-dark:#babed8","(",[3061,3277,3278],{"class":3273,"style":3274},"{","\n",[3061,3281,3282,3283,3264,3286],{"class":3063,"style":3064},"  future",[3061,3284,3285],{"class":3073,"style":3074},":",[3061,3287,3278],{"class":3273,"style":3274},[3061,3289,3290,3291,3264,3293,3298],{"class":3063,"style":3064},"    compatibilityVersion",[3061,3292,3285],{"class":3073,"style":3074},[3061,3294,3297],{"class":3295,"style":3296},"shj-syn-num shj-num","color:#F76D47;--shiki-dark:#F78C6C","4",[3061,3299,3300],{"class":3073,"style":3074},",",[3061,3302,3303,3304,3307],{"class":3063,"style":3064},"  ",[3061,3305,3306],{"class":3273,"style":3274},"}",[3061,3308,3300],{"class":3073,"style":3074},[3061,3310,3303,3311],{"class":3063,"style":3064},[3061,3312,3315],{"class":3313,"style":3314},"shj-syn-cmnt shj-cmnt","color:#90A4AE;--shiki-dark:#676E95","\u002F\u002F To re-enable _all_ Nuxt v3 behavior, set the following options:",[3061,3317,3303,3318],{"class":3063,"style":3064},[3061,3319,3320],{"class":3313,"style":3314},"\u002F\u002F srcDir: '.',",[3061,3322,3303,3323],{"class":3063,"style":3064},[3061,3324,3325],{"class":3313,"style":3314},"\u002F\u002F dir: {",[3061,3327,3303,3328],{"class":3063,"style":3064},[3061,3329,3330],{"class":3313,"style":3314},"\u002F\u002F   app: 'app'",[3061,3332,3303,3333],{"class":3063,"style":3064},[3061,3334,3335],{"class":3313,"style":3314},"\u002F\u002F },",[3061,3337,3303,3338],{"class":3063,"style":3064},[3061,3339,3340],{"class":3313,"style":3314},"\u002F\u002F experimental: {",[3061,3342,3303,3343],{"class":3063,"style":3064},[3061,3344,3345],{"class":3313,"style":3314},"\u002F\u002F   scanPageMeta: 'after-resolve',",[3061,3347,3303,3348],{"class":3063,"style":3064},[3061,3349,3350],{"class":3313,"style":3314},"\u002F\u002F   sharedPrerenderData: false,",[3061,3352,3303,3353],{"class":3063,"style":3064},[3061,3354,3355],{"class":3313,"style":3314},"\u002F\u002F   compileTemplate: true,",[3061,3357,3303,3358],{"class":3063,"style":3064},[3061,3359,3360],{"class":3313,"style":3314},"\u002F\u002F   resetAsyncDataToUndefined: true,",[3061,3362,3303,3363],{"class":3063,"style":3064},[3061,3364,3365],{"class":3313,"style":3314},"\u002F\u002F   templateUtils: true,",[3061,3367,3303,3368],{"class":3063,"style":3064},[3061,3369,3370],{"class":3313,"style":3314},"\u002F\u002F   relativeWatchPaths: true,",[3061,3372,3303,3373],{"class":3063,"style":3064},[3061,3374,3375],{"class":3313,"style":3314},"\u002F\u002F   normalizeComponentNames: false,",[3061,3377,3303,3378],{"class":3063,"style":3064},[3061,3379,3380],{"class":3313,"style":3314},"\u002F\u002F   spaLoadingTemplateLocation: 'within',",[3061,3382,3303,3383],{"class":3063,"style":3064},[3061,3384,3385],{"class":3313,"style":3314},"\u002F\u002F   parseErrorData: false,",[3061,3387,3303,3388],{"class":3063,"style":3064},[3061,3389,3390],{"class":3313,"style":3314},"\u002F\u002F   pendingWhenIdle: true,",[3061,3392,3303,3393],{"class":3063,"style":3064},[3061,3394,3395],{"class":3313,"style":3314},"\u002F\u002F   alwaysRunFetchOnKeyChange: true,",[3061,3397,3303,3398],{"class":3063,"style":3064},[3061,3399,3400],{"class":3313,"style":3314},"\u002F\u002F   defaults: {",[3061,3402,3303,3403],{"class":3063,"style":3064},[3061,3404,3405],{"class":3313,"style":3314},"\u002F\u002F     useAsyncData: {",[3061,3407,3303,3408],{"class":3063,"style":3064},[3061,3409,3410],{"class":3313,"style":3314},"\u002F\u002F       deep: true",[3061,3412,3303,3413],{"class":3063,"style":3064},[3061,3414,3415],{"class":3313,"style":3314},"\u002F\u002F     }",[3061,3417,3303,3418],{"class":3063,"style":3064},[3061,3419,3420],{"class":3313,"style":3314},"\u002F\u002F   }",[3061,3422,3303,3423],{"class":3063,"style":3064},[3061,3424,3335],{"class":3313,"style":3314},[3061,3426,3303,3427],{"class":3063,"style":3064},[3061,3428,3429],{"class":3313,"style":3314},"\u002F\u002F features: {",[3061,3431,3303,3432],{"class":3063,"style":3064},[3061,3433,3434],{"class":3313,"style":3314},"\u002F\u002F   inlineStyles: true",[3061,3436,3303,3437],{"class":3063,"style":3064},[3061,3438,3335],{"class":3313,"style":3314},[3061,3440,3303,3441],{"class":3063,"style":3064},[3061,3442,3443],{"class":3313,"style":3314},"\u002F\u002F unhead: {",[3061,3445,3303,3446],{"class":3063,"style":3064},[3061,3447,3448],{"class":3313,"style":3314},"\u002F\u002F   renderSSRHeadOptions: {",[3061,3450,3303,3451],{"class":3063,"style":3064},[3061,3452,3453],{"class":3313,"style":3314},"\u002F\u002F     omitLineBreaks: false",[3061,3455,3303,3456],{"class":3063,"style":3064},[3061,3457,3420],{"class":3313,"style":3314},[3061,3459,3303,3460],{"class":3063,"style":3064},[3061,3461,3462],{"class":3313,"style":3314},"\u002F\u002F }",[3061,3464,3465,3467],{"class":3063,"style":3064},[3061,3466,3306],{"class":3273,"style":3274},[3061,3468,3469],{"class":3273,"style":3274},")",[3112,3471,3472],{},"For now, you need to define the compatibility version in each layer that opts into Nuxt 4 behavior. This will not be required after Nuxt 4 is released.",[3030,3474,3475,3476,3478,3479,3481],{},"When you set your ",[3040,3477,3244],{}," to ",[3040,3480,3297],{},", defaults throughout your Nuxt configuration will change to opt in to Nuxt v4 behavior, but you can granularly re-enable Nuxt v3 behavior when testing, following the commented out lines above. Please file issues if so, so that we can address them in Nuxt or in the ecosystem.",[3030,3483,3484],{},"Breaking or significant changes are documented below along with migration steps and available configuration options.",[3027,3486,2764],{"id":2763},[3030,3488,3489,3490,3494],{},"To facilitate the upgrade process, we have collaborated with the ",[3034,3491,3493],{"href":3492},"https:\u002F\u002Fgithub.com\u002Fcodemod\u002Fcodemod","Codemod"," team to automate many migration steps with some open-source codemods.",[3112,3496,3497,3498,3501],{},"If you encounter any issues, please report them to the Codemod team with ",[3040,3499,3500],{},"npx codemod feedback"," 🙏",[3030,3503,3504,3505,3210],{},"For a complete list of Nuxt 4 codemods, detailed information on each, their source, and various ways to run them, visit the ",[3034,3506,3508],{"href":3507},"https:\u002F\u002Fapp.codemod.com\u002Fregistry","Codemod Registry",[3030,3510,3511,3512,3515],{},"You can run all the codemods mentioned in this guide using the following ",[3040,3513,3514],{},"codemod"," recipe:",[3048,3517,3518,3539,3556,3572,3589],{},[3052,3519,3520],{"language":3054,"filename":3055,"class":3056},[3040,3521,3522,3279,3527],{"class":3059},[3061,3523,3524],{"class":3063,"style":3064},[3061,3525,3526],{"class":3313,"style":3314},"# Using pinned version due to https:\u002F\u002Fgithub.com\u002Fcodemod\u002Fcodemod\u002Fissues\u002F1710",[3061,3528,3529,3531,3532,3535,3536,3538],{"class":3063,"style":3064},[3061,3530,3069],{"class":3067,"style":3068}," codemod@",[3061,3533,3534],{"class":3295,"style":3296},"0.18.7"," nuxt\u002F",[3061,3537,3297],{"class":3295,"style":3296},"\u002Fmigration-recipe",[3052,3540,3541],{"language":3054,"filename":3079,"class":3056},[3040,3542,3543,3279,3547],{"class":3059},[3061,3544,3545],{"class":3063,"style":3064},[3061,3546,3526],{"class":3313,"style":3314},[3061,3548,3549,3551,3552,3535,3554,3538],{"class":3063,"style":3064},[3061,3550,3079],{"class":3067,"style":3068}," dlx codemod@",[3061,3553,3534],{"class":3295,"style":3296},[3061,3555,3297],{"class":3295,"style":3296},[3052,3557,3558],{"language":3054,"filename":3090,"class":3056},[3040,3559,3560,3279,3564],{"class":3059},[3061,3561,3562],{"class":3063,"style":3064},[3061,3563,3526],{"class":3313,"style":3314},[3061,3565,3566,3551,3568,3535,3570,3538],{"class":3063,"style":3064},[3061,3567,3090],{"class":3067,"style":3068},[3061,3569,3534],{"class":3295,"style":3296},[3061,3571,3297],{"class":3295,"style":3296},[3052,3573,3574],{"language":3054,"filename":3101,"class":3056},[3040,3575,3576,3279,3580],{"class":3059},[3061,3577,3578],{"class":3063,"style":3064},[3061,3579,3526],{"class":3313,"style":3314},[3061,3581,3582,3584,3585,3535,3587,3538],{"class":3063,"style":3064},[3061,3583,3101],{"class":3067,"style":3068}," x codemod@",[3061,3586,3534],{"class":3295,"style":3296},[3061,3588,3297],{"class":3295,"style":3296},[3052,3590,3591],{"language":3054,"filename":3183,"class":3056},[3040,3592,3593,3279,3597],{"class":3059},[3061,3594,3595],{"class":3063,"style":3064},[3061,3596,3526],{"class":3313,"style":3314},[3061,3598,3599,3584,3601,3535,3603,3538],{"class":3063,"style":3064},[3061,3600,3183],{"class":3067,"style":3068},[3061,3602,3534],{"class":3295,"style":3296},[3061,3604,3297],{"class":3295,"style":3296},[3030,3606,3607],{},"This command will execute all codemods in sequence, with the option to deselect any that you do not wish to run. Each codemod is also listed below alongside its respective change and can be executed independently.",[3027,3609,2767],{"id":2766},[3030,3611,3612,3613,3616],{},"🚦 ",[3217,3614,3615],{},"Impact Level",": Significant",[3030,3618,3619,3620,3623],{},"Nuxt now defaults to a new directory structure, with backwards compatibility (so if Nuxt detects you are using the old structure, such as with a top-level ",[3040,3621,3622],{},"pages\u002F"," directory, this new structure will not apply).",[3030,3625,3626,3627],{},"👉 ",[3034,3628,3630],{"href":3629},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F26444","See full RFC",[3632,3633,2772],"h4",{"id":2770},[3635,3636,3637,3649,3662,3680,3693,3710],"ul",{},[3638,3639,3640,3641,3644,3645,3648],"li",{},"the new Nuxt default ",[3040,3642,3643],{},"srcDir"," is ",[3040,3646,3647],{},"app\u002F"," by default, and most things are resolved from there.",[3638,3650,3651,3654,3655,3658,3659],{},[3040,3652,3653],{},"serverDir"," now defaults to ",[3040,3656,3657],{},"\u003CrootDir>\u002Fserver"," rather than ",[3040,3660,3661],{},"\u003CsrcDir>\u002Fserver",[3638,3663,3664,3667,3668,3671,3672,3675,3676,3679],{},[3040,3665,3666],{},"layers\u002F",", ",[3040,3669,3670],{},"modules\u002F"," and ",[3040,3673,3674],{},"public\u002F"," are resolved relative to ",[3040,3677,3678],{},"\u003CrootDir>"," by default",[3638,3681,3682,3683,3667,3687,3690,3691],{},"if using ",[3034,3684,3686],{"href":3685},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fcontent\u002Fpull\u002F2649","Nuxt Content v2.13+",[3040,3688,3689],{},"content\u002F"," is resolved relative to ",[3040,3692,3678],{},[3638,3694,3695,3696,3699,3700,3671,3703,3706,3707],{},"a new ",[3040,3697,3698],{},"dir.app"," is added, which is the directory we look for ",[3040,3701,3702],{},"router.options.ts",[3040,3704,3705],{},"spa-loading-template.html"," - this defaults to ",[3040,3708,3709],{},"\u003CsrcDir>\u002F",[3638,3711,3695,3712,3717,3718,3671,3721],{},[3034,3713,3714],{"href":191},[3040,3715,3716],{},"shared\u002F"," directory is available for code shared between the Vue app and the Nitro server, with auto-imports for ",[3040,3719,3720],{},"shared\u002Futils\u002F",[3040,3722,3723],{},"shared\u002Ftypes\u002F",[3725,3726],"details",{"$":3727},{"html":3728,"block":3728},1,[3730,3731,3733],"summary",{"$":3732},{"html":3728,"block":3728},"An example v4 folder structure.",[3052,3735,3738],{"language":3736,"class":3737},"sh","shj shiki shj-lang-sh",[3040,3739,3741,3279,3744,3279,3747,3279,3749,3279,3752,3279,3755,3279,3758,3279,3761,3279,3764,3279,3767,3279,3770,3279,3773,3279,3777,3279,3781,3279,3785,3279,3787,3279,3789,3279,3791,3279,3794,3279,3796,3279,3798,3279,3801,3279,3803,3279,3806,3279,3809,3279,3811,3279,3813,3279,3816,3279,3818],{"class":3740},"language-sh",[3061,3742,3743],{"class":3063,"style":3064},".output\u002F",[3061,3745,3746],{"class":3063,"style":3064},".nuxt\u002F",[3061,3748,3647],{"class":3063,"style":3064},[3061,3750,3751],{"class":3063,"style":3064},"  assets\u002F",[3061,3753,3754],{"class":3063,"style":3064},"  components\u002F",[3061,3756,3757],{"class":3063,"style":3064},"  composables\u002F",[3061,3759,3760],{"class":3063,"style":3064},"  layouts\u002F",[3061,3762,3763],{"class":3063,"style":3064},"  middleware\u002F",[3061,3765,3766],{"class":3063,"style":3064},"  pages\u002F",[3061,3768,3769],{"class":3063,"style":3064},"  plugins\u002F",[3061,3771,3772],{"class":3063,"style":3064},"  utils\u002F",[3061,3774,3303,3775],{"class":3063,"style":3064},[3061,3776,224],{"class":3067,"style":3068},[3061,3778,3303,3779],{"class":3063,"style":3064},[3061,3780,219],{"class":3067,"style":3068},[3061,3782,3303,3783],{"class":3063,"style":3064},[3061,3784,3702],{"class":3067,"style":3068},[3061,3786,3689],{"class":3063,"style":3064},[3061,3788,3666],{"class":3063,"style":3064},[3061,3790,3670],{"class":3063,"style":3064},[3061,3792,3793],{"class":3063,"style":3064},"node_modules\u002F",[3061,3795,3674],{"class":3063,"style":3064},[3061,3797,3716],{"class":3063,"style":3064},[3061,3799,3800],{"class":3063,"style":3064},"  types\u002F",[3061,3802,3772],{"class":3063,"style":3064},[3061,3804,3805],{"class":3063,"style":3064},"server\u002F",[3061,3807,3808],{"class":3063,"style":3064},"  api\u002F",[3061,3810,3763],{"class":3063,"style":3064},[3061,3812,3769],{"class":3063,"style":3064},[3061,3814,3815],{"class":3063,"style":3064},"  routes\u002F",[3061,3817,3772],{"class":3063,"style":3064},[3061,3819,3820],{"class":3063,"style":3064},[3061,3821,234],{"class":3067,"style":3068},[3112,3823,3824,3825,3828,3829,3831,3832,3834,3835,3838,3839,3667,3842,3478,3845,3847],{},"With this new structure, the ",[3040,3826,3827],{},"~"," alias now points to the ",[3040,3830,3647],{}," directory by default (your ",[3040,3833,3643],{},"). This means ",[3040,3836,3837],{},"~\u002Fcomponents"," resolves to ",[3040,3840,3841],{},"components\u002F",[3040,3843,3844],{},"~\u002Fpages",[3040,3846,3622],{},", etc.",[3030,3849,3850,3851,3210],{},"👉 For more details, see the ",[3034,3852,3854],{"href":3853},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F27029","PR implementing this change",[3632,3856,2775],{"id":2774},[3858,3859,3860,3872],"ol",{},[3638,3861,3862,3865,3866,3671,3869,3871],{},[3217,3863,3864],{},"Performance"," - placing all your code in the root of your repo causes issues with ",[3040,3867,3868],{},".git\u002F",[3040,3870,3793],{}," folders being scanned\u002Fincluded by FS watchers which can significantly delay startup on non-Mac OSes.",[3638,3873,3874,3877,3878,3880,3881,3883,3884,3887],{},[3217,3875,3876],{},"IDE type-safety"," - ",[3040,3879,3805],{}," and the rest of your app are running in two entirely different contexts with different global imports available, and making sure ",[3040,3882,3805],{}," isn't ",[3116,3885,3886],{},"inside"," the same folder as the rest of your app is a big first step to ensuring you get good auto-completes in your IDE.",[3228,3889],{"title":3890,"videoId":3891,"platform":3892},"Watch a video from Vue School on the new directory structure","1031028378","vimeo",[3632,3894,2778],{"id":2777},[3858,3896,3897,3902,3943,3964],{},[3638,3898,3899,3900,3210],{},"Create a new directory called ",[3040,3901,3647],{},[3638,3903,3904,3905,3667,3908,3667,3910,3667,3913,3667,3916,3667,3919,3667,3921,3671,3924,3927,3928,3667,3930,3667,3932,3934,3935,3938,3939,3942],{},"Move your ",[3040,3906,3907],{},"assets\u002F",[3040,3909,3841],{},[3040,3911,3912],{},"composables\u002F",[3040,3914,3915],{},"layouts\u002F",[3040,3917,3918],{},"middleware\u002F",[3040,3920,3622],{},[3040,3922,3923],{},"plugins\u002F",[3040,3925,3926],{},"utils\u002F"," folders under it, as well as ",[3040,3929,219],{},[3040,3931,229],{},[3040,3933,224],{},". If you have an ",[3040,3936,3937],{},"app\u002Frouter-options.ts"," or ",[3040,3940,3941],{},"app\u002Fspa-loading-template.html",", these paths remain the same.",[3638,3944,3945,3946,3667,3948,3667,3950,3667,3952,3667,3954,3667,3956,3671,3958,3960,3961,3963],{},"Make sure your ",[3040,3947,234],{},[3040,3949,3689],{},[3040,3951,3666],{},[3040,3953,3670],{},[3040,3955,3674],{},[3040,3957,3716],{},[3040,3959,3805],{}," folders remain outside the ",[3040,3962,3647],{}," folder, in the root of your project.",[3638,3965,3966,3967,3938,3970,3973,3974,3977,3978,3980],{},"Remember to update any third-party configuration files to work with the new directory structure, such as your ",[3040,3968,3969],{},"tailwindcss",[3040,3971,3972],{},"eslint"," configuration (if required - ",[3040,3975,3976],{},"@nuxtjs\u002Ftailwindcss"," should automatically configure ",[3040,3979,3969],{}," correctly).",[3982,3983,3984,3985],"tip",{},"You can automate this migration by running ",[3040,3986,3987],{},"npx codemod@latest nuxt\u002F4\u002Ffile-structure",[3030,3989,3990,3991,3994,3995,3998,3999,4001,4002,3667,4004,3667,4006,3671,4008,4010,4011,4014,4015,4017,4018,3667,4021,3671,4024,4026],{},"However, migration is ",[3116,3992,3993],{},"not required",". If you wish to keep your current folder structure, Nuxt should auto-detect it. (If it does not, please raise an issue.) The one exception is that if you ",[3116,3996,3997],{},"already"," have a custom ",[3040,4000,3643],{},". In this case, you should be aware that your ",[3040,4003,3670],{},[3040,4005,3674],{},[3040,4007,3716],{},[3040,4009,3805],{}," folders will be resolved from your ",[3040,4012,4013],{},"rootDir"," rather than from your custom ",[3040,4016,3643],{},". You can override this by configuring ",[3040,4019,4020],{},"dir.modules",[3040,4022,4023],{},"dir.public",[3040,4025,3653],{}," if you need to.",[3030,4028,4029],{},"You can also force a v3 folder structure with the following configuration:",[3052,4031,4032],{"language":3251,"filename":234,"class":3253},[3040,4033,4034,3279,4046,3279,4051,3279,4063,3279,4068,3279,4075,3279,4085,3279,4091],{"class":3256},[3061,4035,4036,3264,4038,3264,4040,4042,4044],{"class":3063,"style":3064},[3061,4037,3263],{"class":3261,"style":3262},[3061,4039,3267],{"class":3261,"style":3262},[3061,4041,3270],{"class":3067,"style":3068},[3061,4043,3275],{"class":3273,"style":3274},[3061,4045,3278],{"class":3273,"style":3274},[3061,4047,3303,4048],{"class":3063,"style":3064},[3061,4049,4050],{"class":3313,"style":3314},"\u002F\u002F This reverts the new srcDir default from `app` back to your root directory",[3061,4052,4053,4054,3264,4056,4061],{"class":3063,"style":3064},"  srcDir",[3061,4055,3285],{"class":3073,"style":3074},[3061,4057,4060],{"class":4058,"style":4059},"shj-syn-str shj-str","color:#91B859;--shiki-dark:#C3E88D","'.'",[3061,4062,3300],{"class":3073,"style":3074},[3061,4064,3303,4065],{"class":3063,"style":3064},[3061,4066,4067],{"class":3313,"style":3314},"\u002F\u002F This specifies the directory prefix for `app\u002Frouter.options.ts` and `app\u002Fspa-loading-template.html`",[3061,4069,4070,4071,3264,4073],{"class":3063,"style":3064},"  dir",[3061,4072,3285],{"class":3073,"style":3074},[3061,4074,3278],{"class":3273,"style":3274},[3061,4076,4077,4078,3264,4080,4083],{"class":3063,"style":3064},"    app",[3061,4079,3285],{"class":3073,"style":3074},[3061,4081,4082],{"class":4058,"style":4059},"'app'",[3061,4084,3300],{"class":3073,"style":3074},[3061,4086,3303,4087,4089],{"class":3063,"style":3064},[3061,4088,3306],{"class":3273,"style":3274},[3061,4090,3300],{"class":3073,"style":3074},[3061,4092,4093,4095],{"class":3063,"style":3064},[3061,4094,3306],{"class":3273,"style":3274},[3061,4096,3469],{"class":3273,"style":3274},[3027,4098,2781],{"id":2780},[3030,4100,3612,4101,4103],{},[3217,4102,3615],{},": Moderate",[3632,4105,2772],{"id":2784},[3030,4107,4108,4109,3671,4111,4113],{},"Nuxt's data fetching system (",[3040,4110,561],{},[3040,4112,576],{},") has been significantly reorganized for better performance and consistency:",[3858,4115,4116,4152,4166,4172],{},[3638,4117,4118,4121,4122,3938,4124,4126,4127,3667,4130,3671,4133,4136,4137,3667,4140,3667,4143,3667,4146,3938,4149,4151],{},[3217,4119,4120],{},"Shared refs for the same key",": All calls to ",[3040,4123,561],{},[3040,4125,576],{}," with the same key now share the same ",[3040,4128,4129],{},"data",[3040,4131,4132],{},"error",[3040,4134,4135],{},"status"," refs. This means that it is important that all calls with an explicit key must not have conflicting ",[3040,4138,4139],{},"deep",[3040,4141,4142],{},"transform",[3040,4144,4145],{},"pick",[3040,4147,4148],{},"getCachedData",[3040,4150,3267],{}," options.",[3638,4153,4154,4159,4160,4162,4163,4165],{},[3217,4155,4156,4157],{},"More control over ",[3040,4158,4148],{},": The ",[3040,4161,4148],{}," function is now called every time data is fetched, even if this is caused by a watcher or calling ",[3040,4164,816],{},". (Previously, new data was always fetched and this function was not called in these cases.) To allow more control over when to use cached data and when to refetch, the function now receives a context object with the cause of the request.",[3638,4167,4168,4171],{},[3217,4169,4170],{},"Reactive key support",": You can now use computed refs, plain refs or getter functions as keys, which enables automatic data refetching (and stores data separately).",[3638,4173,4174,4177,4178,4180],{},[3217,4175,4176],{},"Data cleanup",": When the last component using data fetched with ",[3040,4179,561],{}," is unmounted, Nuxt will remove that data to avoid ever-growing memory usage.",[3632,4182,2775],{"id":2786},[3030,4184,4185,4186,3210],{},"These changes have been made to improve memory usage and increase consistency with loading states across calls of ",[3040,4187,561],{},[3632,4189,2778],{"id":2788},[3858,4191,4192,4453],{},[3638,4193,4194,4200,4313,4319],{},[3030,4195,4196,4199],{},[3217,4197,4198],{},"Check for inconsistent options",": Review any components using the same key with different options or fetch functions.",[3052,4201,4202],{"language":3251,"class":3253},[3040,4203,4204,3279,4209,3279,4265],{"class":3256},[3061,4205,4206],{"class":3063,"style":3064},[3061,4207,4208],{"class":3313,"style":3314},"\u002F\u002F This will now trigger a warning",[3061,4210,4211,3264,4214,4216,4217,4219,4220,3264,4222,3264,4224,4226,4228,4231,3264,4233,4235,3264,4237,3264,4240,4242,4244,4247,4249,3264,4251,4253,4254,3264,4256,3264,4261,4263],{"class":3063,"style":3064},[3061,4212,4213],{"class":3261,"style":3262},"const",[3061,4215,3278],{"class":3273,"style":3274}," data",[3061,4218,3285],{"class":3073,"style":3074}," users1 ",[3061,4221,3306],{"class":3273,"style":3274},[3061,4223,3075],{"class":3073,"style":3074},[3061,4225,561],{"class":3067,"style":3068},[3061,4227,3275],{"class":3273,"style":3274},[3061,4229,4230],{"class":4058,"style":4059},"'users'",[3061,4232,3300],{"class":3073,"style":3074},[3061,4234,3275],{"class":3273,"style":3274},[3061,4236,3469],{"class":3273,"style":3274},[3061,4238,4239],{"class":3261,"style":3262},"=>",[3061,4241,702],{"class":3067,"style":3068},[3061,4243,3275],{"class":3273,"style":3274},[3061,4245,4246],{"class":4058,"style":4059},"'\u002Fapi\u002Fusers'",[3061,4248,3469],{"class":3273,"style":3274},[3061,4250,3300],{"class":3073,"style":3074},[3061,4252,3278],{"class":3273,"style":3274}," deep",[3061,4255,3285],{"class":3073,"style":3074},[3061,4257,4260],{"class":4258,"style":4259},"shj-syn-bool shj-bool","color:#FF5370;--shiki-dark:#ff9cac","false",[3061,4262,3306],{"class":3273,"style":3274},[3061,4264,3469],{"class":3273,"style":3274},[3061,4266,4267,3264,4269,4216,4271,4273,4274,3264,4276,3264,4278,4280,4282,4284,3264,4286,4288,3264,4290,3264,4292,4294,4296,4298,4300,3264,4302,4253,4304,3264,4306,3264,4309,4311],{"class":3063,"style":3064},[3061,4268,4213],{"class":3261,"style":3262},[3061,4270,3278],{"class":3273,"style":3274},[3061,4272,3285],{"class":3073,"style":3074}," users2 ",[3061,4275,3306],{"class":3273,"style":3274},[3061,4277,3075],{"class":3073,"style":3074},[3061,4279,561],{"class":3067,"style":3068},[3061,4281,3275],{"class":3273,"style":3274},[3061,4283,4230],{"class":4058,"style":4059},[3061,4285,3300],{"class":3073,"style":3074},[3061,4287,3275],{"class":3273,"style":3274},[3061,4289,3469],{"class":3273,"style":3274},[3061,4291,4239],{"class":3261,"style":3262},[3061,4293,702],{"class":3067,"style":3068},[3061,4295,3275],{"class":3273,"style":3274},[3061,4297,4246],{"class":4058,"style":4059},[3061,4299,3469],{"class":3273,"style":3274},[3061,4301,3300],{"class":3073,"style":3074},[3061,4303,3278],{"class":3273,"style":3274},[3061,4305,3285],{"class":3073,"style":3074},[3061,4307,4308],{"class":4258,"style":4259},"true",[3061,4310,3306],{"class":3273,"style":3274},[3061,4312,3469],{"class":3273,"style":3274},[3030,4314,4315,4316,4318],{},"It may be beneficial to extract any calls to ",[3040,4317,561],{}," that share an explicit key (and have custom options) into their own composable:",[3052,4320,4322],{"language":3251,"filename":4321,"class":3253},"composables\u002FuseUserData.ts",[3040,4323,4324,3279,4346,3279,4355,3279,4371,3279,4388,3279,4392,3279,4401,3279,4439,3279,4445,3279,4449],{"class":3256},[3061,4325,4326,3264,4328,3264,4331,3264,4334,4336,4337,4342,3264,4344],{"class":3063,"style":3064},[3061,4327,3263],{"class":3261,"style":3262},[3061,4329,4330],{"class":3261,"style":3262},"function",[3061,4332,4333],{"class":3067,"style":3068},"useUserData",[3061,4335,3275],{"class":3273,"style":3274},"userId",[3061,4338,4341],{"class":4339,"style":4340},"shj-syn-type shj-type","color:#E2931D;--shiki-dark:#FFCB6B",": string",[3061,4343,3469],{"class":3273,"style":3274},[3061,4345,3278],{"class":3273,"style":3274},[3061,4347,3303,4348,3264,4351,4353],{"class":3063,"style":3064},[3061,4349,4350],{"class":3261,"style":3262},"return",[3061,4352,561],{"class":3067,"style":3068},[3061,4354,3275],{"class":3273,"style":3274},[3061,4356,4357,4358,4361,4336,4364,4366,4369],{"class":3063,"style":3064},"    ",[3061,4359,4360],{"class":4058,"style":4059},"`user-",[3061,4362,4363],{"class":3261,"style":3262},"${",[3061,4365,3306],{"class":3261,"style":3262},[3061,4367,4368],{"class":4058,"style":4059},"`",[3061,4370,3300],{"class":3073,"style":3074},[3061,4372,4357,4373,4375,3264,4377,3264,4379,4382,4336,4384,4386],{"class":3063,"style":3064},[3061,4374,3275],{"class":3273,"style":3274},[3061,4376,3469],{"class":3273,"style":3274},[3061,4378,4239],{"class":3261,"style":3262},[3061,4380,4381],{"class":3067,"style":3068},"fetchUser",[3061,4383,3275],{"class":3273,"style":3274},[3061,4385,3469],{"class":3273,"style":3274},[3061,4387,3300],{"class":3073,"style":3074},[3061,4389,4357,4390],{"class":3063,"style":3064},[3061,4391,3278],{"class":3273,"style":3274},[3061,4393,4394,4395,3264,4397,4399],{"class":3063,"style":3064},"      deep",[3061,4396,3285],{"class":3073,"style":3074},[3061,4398,4308],{"class":4258,"style":4259},[3061,4400,3300],{"class":3073,"style":3074},[3061,4402,4403,4404,4406,4407,3264,4409,4411,3264,4413,4416,4417,4419,4420,3264,4422,3264,4425,4429,4431,3264,4433,4435,4437],{"class":3063,"style":3064},"      transform",[3061,4405,3285],{"class":3073,"style":3074}," user ",[3061,4408,4239],{"class":3261,"style":3262},[3061,4410,3275],{"class":3273,"style":3274},[3061,4412,3278],{"class":3273,"style":3274},[3061,4414,4415],{"class":3073,"style":3074},"...","user",[3061,4418,3300],{"class":3073,"style":3074}," lastAccessed",[3061,4421,3285],{"class":3073,"style":3074},[3061,4423,4424],{"class":3261,"style":3262},"new",[3061,4426,4428],{"class":4427,"style":4340},"shj-syn-class shj-class","Date",[3061,4430,3275],{"class":3273,"style":3274},[3061,4432,3469],{"class":3273,"style":3274},[3061,4434,3306],{"class":3273,"style":3274},[3061,4436,3469],{"class":3273,"style":3274},[3061,4438,3300],{"class":3073,"style":3074},[3061,4440,4357,4441,4443],{"class":3063,"style":3064},[3061,4442,3306],{"class":3273,"style":3274},[3061,4444,3300],{"class":3073,"style":3074},[3061,4446,3303,4447],{"class":3063,"style":3064},[3061,4448,3469],{"class":3273,"style":3274},[3061,4450,4451],{"class":3063,"style":3064},[3061,4452,3306],{"class":3273,"style":3274},[3638,4454,4455,4463],{},[3030,4456,4457,3285],{},[3217,4458,4459,4460,4462],{},"Update ",[3040,4461,4148],{}," implementations",[3052,4464,4467],{"language":4465,"class":4466},"diff","shj shiki shj-lang-diff",[3040,4468,4470,3279,4473,3279,4480,3279,4485,3279,4490,3279,4496,3279,4501,3279,4506,3279,4511,3279,4516,3279,4520,3279,4525,3279,4530],{"class":4469},"language-diff",[3061,4471,4472],{"class":3063,"style":3064},"useAsyncData('key', fetchFunction, {",[3061,4474,4475],{"class":3063,"style":3064},[3061,4476,4479],{"class":4477,"style":4478},"shj-syn-deleted shj-deleted","color:#E53935;--shiki-dark:#f07178","-  getCachedData: (key, nuxtApp) => {",[3061,4481,4482],{"class":3063,"style":3064},[3061,4483,4484],{"class":4477,"style":4478},"-    return cachedData[key]",[3061,4486,4487],{"class":3063,"style":3064},[3061,4488,4489],{"class":4477,"style":4478},"-  }",[3061,4491,4492],{"class":3063,"style":3064},[3061,4493,4495],{"class":4494,"style":4059},"shj-syn-insert shj-insert","+  getCachedData: (key, nuxtApp, ctx) => {",[3061,4497,4498],{"class":3063,"style":3064},[3061,4499,4500],{"class":4494,"style":4059},"+    \u002F\u002F ctx.cause - can be 'initial' | 'refresh:hook' | 'refresh:manual' | 'watch'",[3061,4502,4503],{"class":3063,"style":3064},[3061,4504,4505],{"class":4494,"style":4059},"+    ",[3061,4507,4508],{"class":3063,"style":3064},[3061,4509,4510],{"class":4494,"style":4059},"+    \u002F\u002F Example: Don't use cache on manual refresh",[3061,4512,4513],{"class":3063,"style":3064},[3061,4514,4515],{"class":4494,"style":4059},"+    if (ctx.cause === 'refresh:manual') return undefined",[3061,4517,4518],{"class":3063,"style":3064},[3061,4519,4505],{"class":4494,"style":4059},[3061,4521,4522],{"class":3063,"style":3064},[3061,4523,4524],{"class":4494,"style":4059},"+    return cachedData[key]",[3061,4526,4527],{"class":3063,"style":3064},[3061,4528,4529],{"class":4494,"style":4059},"+  }",[3061,4531,4532],{"class":3063,"style":3064},"})",[3030,4534,4535],{},"Alternatively, for now, you can disable this behaviour with:",[3052,4537,4538],{"language":3251,"meta":3252,"class":3253},[3040,4539,4540,3279,4552,3279,4559,3279,4568,3279,4577,3279,4583],{"class":3256},[3061,4541,4542,3264,4544,3264,4546,4548,4550],{"class":3063,"style":3064},[3061,4543,3263],{"class":3261,"style":3262},[3061,4545,3267],{"class":3261,"style":3262},[3061,4547,3270],{"class":3067,"style":3068},[3061,4549,3275],{"class":3273,"style":3274},[3061,4551,3278],{"class":3273,"style":3274},[3061,4553,4554,4555,3264,4557],{"class":3063,"style":3064},"  experimental",[3061,4556,3285],{"class":3073,"style":3074},[3061,4558,3278],{"class":3273,"style":3274},[3061,4560,4561,4562,3264,4564,4566],{"class":3063,"style":3064},"    granularCachedData",[3061,4563,3285],{"class":3073,"style":3074},[3061,4565,4260],{"class":4258,"style":4259},[3061,4567,3300],{"class":3073,"style":3074},[3061,4569,4570,4571,3264,4573,4575],{"class":3063,"style":3064},"    purgeCachedData",[3061,4572,3285],{"class":3073,"style":3074},[3061,4574,4260],{"class":4258,"style":4259},[3061,4576,3300],{"class":3073,"style":3074},[3061,4578,3303,4579,4581],{"class":3063,"style":3064},[3061,4580,3306],{"class":3273,"style":3274},[3061,4582,3300],{"class":3073,"style":3074},[3061,4584,4585,4587],{"class":3063,"style":3064},[3061,4586,3306],{"class":3273,"style":3274},[3061,4588,3469],{"class":3273,"style":3274},[3027,4590,2791],{"id":2790},[3030,4592,3612,4593,4595],{},[3217,4594,3615],{},": Minimal",[3632,4597,2772],{"id":2794},[3030,4599,4600,4601,4604],{},"The order in which modules are loaded when using ",[3034,4602,4603],{"href":441},"Nuxt layers"," has been corrected. Previously, modules from the project root were loaded before modules from extended layers, which was the reverse of the expected behavior.",[3030,4606,4607],{},"Now modules are loaded in the correct order:",[3858,4609,4610,4616],{},[3638,4611,4612,4615],{},[3217,4613,4614],{},"Layer modules first"," (in extend order - deeper layers first)",[3638,4617,4618,4621],{},[3217,4619,4620],{},"Project modules last"," (highest priority)",[3030,4623,4624],{},"This affects both:",[3635,4626,4627,4635],{},[3638,4628,4629,4630,4632,4633],{},"Modules defined in the ",[3040,4631,159],{}," array in ",[3040,4634,234],{},[3638,4636,4637,4638,4640],{},"Auto-discovered modules from the ",[3040,4639,3670],{}," directory",[3632,4642,2775],{"id":2796},[3030,4644,4645],{},"This change ensures that:",[3635,4647,4648,4651,4654],{},[3638,4649,4650],{},"Extended layers have lower priority than the consuming project",[3638,4652,4653],{},"Module execution order matches the intuitive layer inheritance pattern",[3638,4655,4656],{},"Module configuration and hooks work as expected in multi-layer setups",[3632,4658,2778],{"id":2798},[3030,4660,4661,4664],{},[3217,4662,4663],{},"Most projects will not need changes",", as this corrects the loading order to match expected behavior.",[3030,4666,4667],{},"However, if your project was relying on the previous incorrect order, you may need to:",[3858,4669,4670,4676,4682],{},[3638,4671,4672,4675],{},[3217,4673,4674],{},"Review module dependencies",": Check if any modules depend on specific loading order",[3638,4677,4678,4681],{},[3217,4679,4680],{},"Adjust module configuration",": If modules were configured to work around the incorrect order",[3638,4683,4684,4687],{},[3217,4685,4686],{},"Test thoroughly",": Ensure all functionality works as expected with the corrected order",[3030,4689,4690],{},"Example of the new correct order:",[3052,4692,4693],{"language":3251,"class":3253},[3040,4694,4695,3279,4700,3279,4712,3279,4733,3279,4739,3279,4741,3279,4746,3279,4758,3279,4772,3279,4790,3279,4796,3279,4798,3279,4803,3279,4808,3279,4813,3279,4818],{"class":3256},[3061,4696,4697],{"class":3063,"style":3064},[3061,4698,4699],{"class":3313,"style":3314},"\u002F\u002F Layer: my-layer\u002Fnuxt.config.ts",[3061,4701,4702,3264,4704,3264,4706,4708,4710],{"class":3063,"style":3064},[3061,4703,3263],{"class":3261,"style":3262},[3061,4705,3267],{"class":3261,"style":3262},[3061,4707,3270],{"class":3067,"style":3068},[3061,4709,3275],{"class":3273,"style":3274},[3061,4711,3278],{"class":3273,"style":3274},[3061,4713,4714,4715,3264,4717,4720,4723,3264,4725,4728,4731],{"class":3063,"style":3064},"  modules",[3061,4716,3285],{"class":3073,"style":3074},[3061,4718,4719],{"class":3273,"style":3274},"[",[3061,4721,4722],{"class":4058,"style":4059},"'layer-module-1'",[3061,4724,3300],{"class":3073,"style":3074},[3061,4726,4727],{"class":4058,"style":4059},"'layer-module-2'",[3061,4729,4730],{"class":3273,"style":3274},"]",[3061,4732,3300],{"class":3073,"style":3074},[3061,4734,4735,4737],{"class":3063,"style":3064},[3061,4736,3306],{"class":3273,"style":3274},[3061,4738,3469],{"class":3273,"style":3274},[3061,4740],{"class":3063,"style":3064},[3061,4742,4743],{"class":3063,"style":3064},[3061,4744,4745],{"class":3313,"style":3314},"\u002F\u002F Project: nuxt.config.ts",[3061,4747,4748,3264,4750,3264,4752,4754,4756],{"class":3063,"style":3064},[3061,4749,3263],{"class":3261,"style":3262},[3061,4751,3267],{"class":3261,"style":3262},[3061,4753,3270],{"class":3067,"style":3068},[3061,4755,3275],{"class":3273,"style":3274},[3061,4757,3278],{"class":3273,"style":3274},[3061,4759,4760,4761,3264,4763,4765,4768,4770],{"class":3063,"style":3064},"  extends",[3061,4762,3285],{"class":3073,"style":3074},[3061,4764,4719],{"class":3273,"style":3274},[3061,4766,4767],{"class":4058,"style":4059},"'.\u002Fmy-layer'",[3061,4769,4730],{"class":3273,"style":3274},[3061,4771,3300],{"class":3073,"style":3074},[3061,4773,4714,4774,3264,4776,4778,4781,3264,4783,4786,4788],{"class":3063,"style":3064},[3061,4775,3285],{"class":3073,"style":3074},[3061,4777,4719],{"class":3273,"style":3274},[3061,4779,4780],{"class":4058,"style":4059},"'project-module-1'",[3061,4782,3300],{"class":3073,"style":3074},[3061,4784,4785],{"class":4058,"style":4059},"'project-module-2'",[3061,4787,4730],{"class":3273,"style":3274},[3061,4789,3300],{"class":3073,"style":3074},[3061,4791,4792,4794],{"class":3063,"style":3064},[3061,4793,3306],{"class":3273,"style":3274},[3061,4795,3469],{"class":3273,"style":3274},[3061,4797],{"class":3063,"style":3064},[3061,4799,4800],{"class":3063,"style":3064},[3061,4801,4802],{"class":3313,"style":3314},"\u002F\u002F Loading order (corrected):",[3061,4804,4805],{"class":3063,"style":3064},[3061,4806,4807],{"class":3313,"style":3314},"\u002F\u002F 1. layer-module-1",[3061,4809,4810],{"class":3063,"style":3064},[3061,4811,4812],{"class":3313,"style":3314},"\u002F\u002F 2. layer-module-2",[3061,4814,4815],{"class":3063,"style":3064},[3061,4816,4817],{"class":3313,"style":3314},"\u002F\u002F 3. project-module-1 (can override layer modules)",[3061,4819,4820],{"class":3063,"style":3064},[3061,4821,4822],{"class":3313,"style":3314},"\u002F\u002F 4. project-module-2 (can override layer modules)",[3030,4824,4825,4826,4833],{},"If you encounter issues with module order dependencies due to needing to register a hook, consider using the ",[3034,4827,4829,4832],{"href":4828},"\u002Fdocs\u002F3.x\u002Fguide\u002Fmodules#custom-hooks",[3040,4830,4831],{},"modules:done"," hook"," for modules that need to call a hook. This is run after all other modules have been loaded, which means it is safe to use.",[3030,4835,4836,4837,3671,4841,4845],{},"👉 See ",[3034,4838,4840],{"href":4839},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F31507","PR #31507",[3034,4842,4844],{"href":4843},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F25719","issue #25719"," for more details.",[3027,4847,2801],{"id":2800},[3030,4849,3612,4850,4595],{},[3217,4851,3615],{},[3632,4853,2772],{"id":2804},[3030,4855,4856,4857,4859,4860,3667,4863,4866,4867,3671,4870,4873],{},"It's possible to set some route metadata using ",[3040,4858,761],{},", such as the ",[3040,4861,4862],{},"name",[3040,4864,4865],{},"path",", and so on. Previously these were available both on the route and on route metadata (for example, ",[3040,4868,4869],{},"route.name",[3040,4871,4872],{},"route.meta.name",").",[3030,4875,4876],{},"Now, they are only accessible on the route object.",[3632,4878,2775],{"id":2806},[3030,4880,4881,4882,4885],{},"This is a result of enabling ",[3040,4883,4884],{},"experimental.scanPageMeta"," by default, and is a performance optimization.",[3632,4887,2778],{"id":2808},[3030,4889,4890],{},"The migration should be straightforward:",[3052,4892,4893],{"language":4465,"class":4466},[3040,4894,4895,3279,4898,3279,4900,3279,4905],{"class":4469},[3061,4896,4897],{"class":3063,"style":3064},"  const route = useRoute()",[3061,4899,3303],{"class":3063,"style":3064},[3061,4901,4902],{"class":3063,"style":3064},[3061,4903,4904],{"class":4477,"style":4478},"- console.log(route.meta.name)",[3061,4906,4907],{"class":3063,"style":3064},[3061,4908,4909],{"class":4494,"style":4059},"+ console.log(route.name)",[3027,4911,2811],{"id":2810},[3030,4913,3612,4914,4103],{},[3217,4915,3615],{},[3030,4917,4918],{},"Vue will now generate component names that match the Nuxt pattern for component naming.",[3632,4920,2772],{"id":2814},[3030,4922,4923],{},"By default, if you haven't set it manually, Vue will assign a component name that matches\nthe filename of the component.",[3052,4925,4927],{"language":3054,"filename":4926,"class":3056},"Directory structure",[3040,4928,4929,3279,4932,3279,4935],{"class":3059},[3061,4930,4931],{"class":3063,"style":3064},"├─ components\u002F",[3061,4933,4934],{"class":3063,"style":3064},"├─── SomeFolder\u002F",[3061,4936,4937],{"class":3063,"style":3064},"├───── MyComponent.vue",[3030,4939,4940,4941,4944,4945,4948],{},"In this case, the component name would be ",[3040,4942,4943],{},"MyComponent",", as far as Vue is concerned. If you wanted to use ",[3040,4946,4947],{},"\u003CKeepAlive>"," with it, or identify it in the Vue DevTools, you would need to use this name.",[3030,4950,4951,4952,3210],{},"But in order to auto-import it, you would need to use ",[3040,4953,4954],{},"SomeFolderMyComponent",[3030,4956,4957],{},"With this change, these two values will match, and Vue will generate a component name that matches the Nuxt pattern for component naming.",[3632,4959,2778],{"id":2816},[3030,4961,4962,4963,4966,4967,4970,4971,4973],{},"Ensure that you use the updated name in any tests which use ",[3040,4964,4965],{},"findComponent"," from ",[3040,4968,4969],{},"@vue\u002Ftest-utils"," and in any ",[3040,4972,4947],{}," which depends on the name of your component.",[3030,4975,4535],{},[3052,4977,4978],{"language":3251,"meta":3252,"class":3253},[3040,4979,4980,3279,4992,3279,4998,3279,5007,3279,5013],{"class":3256},[3061,4981,4982,3264,4984,3264,4986,4988,4990],{"class":3063,"style":3064},[3061,4983,3263],{"class":3261,"style":3262},[3061,4985,3267],{"class":3261,"style":3262},[3061,4987,3270],{"class":3067,"style":3068},[3061,4989,3275],{"class":3273,"style":3274},[3061,4991,3278],{"class":3273,"style":3274},[3061,4993,4554,4994,3264,4996],{"class":3063,"style":3064},[3061,4995,3285],{"class":3073,"style":3074},[3061,4997,3278],{"class":3273,"style":3274},[3061,4999,5000,5001,3264,5003,5005],{"class":3063,"style":3064},"    normalizeComponentNames",[3061,5002,3285],{"class":3073,"style":3074},[3061,5004,4260],{"class":4258,"style":4259},[3061,5006,3300],{"class":3073,"style":3074},[3061,5008,3303,5009,5011],{"class":3063,"style":3064},[3061,5010,3306],{"class":3273,"style":3274},[3061,5012,3300],{"class":3073,"style":3074},[3061,5014,5015,5017],{"class":3063,"style":3064},[3061,5016,3306],{"class":3273,"style":3274},[3061,5018,3469],{"class":3273,"style":3274},[3027,5020,2819],{"id":2818},[3030,5022,3612,5023,4595],{},[3217,5024,3615],{},[3632,5026,2772],{"id":2822},[3030,5028,5029,5033,5034,5037],{},[3034,5030,5032],{"href":5031},"https:\u002F\u002Funhead.unjs.io\u002F","Unhead",", used to generate ",[3040,5035,5036],{},"\u003Chead>"," tags, has been updated to version 2. While mostly compatible it includes several breaking changes\nfor lower-level APIs.",[3635,5039,5040,5055,5058],{},[3638,5041,5042,5043,3667,5046,3667,5049,3667,5052,3210],{},"Removed props: ",[3040,5044,5045],{},"vmid",[3040,5047,5048],{},"hid",[3040,5050,5051],{},"children",[3040,5053,5054],{},"body",[3638,5056,5057],{},"Promise input no longer supported.",[3638,5059,5060],{},"Tags are now sorted using Capo.js by default.",[3632,5062,2778],{"id":2824},[3030,5064,5065],{},"The above changes should have minimal impact on your app.",[3030,5067,5068],{},"If you have issues you should verify:",[3635,5070,5071],{},[3638,5072,5073],{},"You're not using any of the removed props.",[3052,5075,5076],{"language":4465,"class":4466},[3040,5077,5078,3279,5081,3279,5084,3279,5087,3279,5090,3279,5095,3279,5100,3279,5103],{"class":4469},[3061,5079,5080],{"class":3063,"style":3064},"useHead({",[3061,5082,5083],{"class":3063,"style":3064},"  meta: [{ ",[3061,5085,5086],{"class":3063,"style":3064},"    name: 'description', ",[3061,5088,5089],{"class":3063,"style":3064},"    \u002F\u002F meta tags don't need a vmid, or a key    ",[3061,5091,5092],{"class":3063,"style":3064},[3061,5093,5094],{"class":4477,"style":4478},"-   vmid: 'description' ",[3061,5096,5097],{"class":3063,"style":3064},[3061,5098,5099],{"class":4477,"style":4478},"-   hid: 'description'",[3061,5101,5102],{"class":3063,"style":3064},"  }]",[3061,5104,4532],{"class":3063,"style":3064},[3635,5106,5107],{},[3638,5108,5109,5110,3938,5114,5118],{},"If you're using ",[3034,5111,5113],{"href":5112},"https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fhead\u002Fguides\u002Fplugins\u002Ftemplate-params","Template Params",[3034,5115,5117],{"href":5116},"https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fhead\u002Fguides\u002Fplugins\u002Falias-sorting","Alias Tag Sorting",", you will need to explicitly opt in to these features now.",[3052,5120,5121],{"language":3251,"class":3253},[3040,5122,5123,3279,5146,3279,5148,3279,5160,3279,5171,3279,5185,3279,5199,3279,5211,3279,5217],{"class":3256},[3061,5124,5125,3264,5128,3264,5130,5133,3264,5135,3264,5138,3264,5140,3264,5143],{"class":3063,"style":3064},[3061,5126,5127],{"class":3261,"style":3262},"import",[3061,5129,3278],{"class":3273,"style":3274},[3061,5131,5132],{"class":4427,"style":4340},"AliasSortingPlugin",[3061,5134,3300],{"class":3073,"style":3074},[3061,5136,5137],{"class":4427,"style":4340},"TemplateParamsPlugin",[3061,5139,3306],{"class":3273,"style":3274},[3061,5141,5142],{"class":3261,"style":3262},"from",[3061,5144,5145],{"class":4058,"style":4059},"'@unhead\u002Fvue\u002Fplugins'",[3061,5147],{"class":3063,"style":3064},[3061,5149,5150,3264,5152,3264,5154,5156,5158],{"class":3063,"style":3064},[3061,5151,3263],{"class":3261,"style":3262},[3061,5153,3267],{"class":3261,"style":3262},[3061,5155,751],{"class":3067,"style":3068},[3061,5157,3275],{"class":3273,"style":3274},[3061,5159,3278],{"class":3273,"style":3274},[3061,5161,3303,5162,3264,5165,5167,3264,5169],{"class":3063,"style":3064},[3061,5163,5164],{"class":3067,"style":3068},"setup",[3061,5166,3275],{"class":3273,"style":3274},[3061,5168,3469],{"class":3273,"style":3274},[3061,5170,3278],{"class":3273,"style":3274},[3061,5172,4357,5173,5175,5176,3264,5178,5181,5183],{"class":3063,"style":3064},[3061,5174,4213],{"class":3261,"style":3262}," unhead ",[3061,5177,3075],{"class":3073,"style":3074},[3061,5179,5180],{"class":3067,"style":3068},"injectHead",[3061,5182,3275],{"class":3273,"style":3274},[3061,5184,3469],{"class":3273,"style":3274},[3061,5186,5187,5188,5190,5193,5195,5197],{"class":3063,"style":3064},"    unhead",[3061,5189,3210],{"class":3073,"style":3074},[3061,5191,5192],{"class":3067,"style":3068},"use",[3061,5194,3275],{"class":3273,"style":3274},[3061,5196,5137],{"class":4427,"style":4340},[3061,5198,3469],{"class":3273,"style":3274},[3061,5200,5187,5201,5203,5205,5207,5209],{"class":3063,"style":3064},[3061,5202,3210],{"class":3073,"style":3074},[3061,5204,5192],{"class":3067,"style":3068},[3061,5206,3275],{"class":3273,"style":3274},[3061,5208,5132],{"class":4427,"style":4340},[3061,5210,3469],{"class":3273,"style":3274},[3061,5212,3303,5213,5215],{"class":3063,"style":3064},[3061,5214,3306],{"class":3273,"style":3274},[3061,5216,3300],{"class":3073,"style":3074},[3061,5218,5219,5221],{"class":3063,"style":3064},[3061,5220,3306],{"class":3273,"style":3274},[3061,5222,3469],{"class":3273,"style":3274},[3030,5224,5225,5226,3478,5229,3938,5232,3210],{},"While not required it's recommended to update any imports from ",[3040,5227,5228],{},"@unhead\u002Fvue",[3040,5230,5231],{},"#imports",[3040,5233,5234],{},"nuxt\u002Fapp",[3052,5236,5237],{"language":4465,"class":4466},[3040,5238,5239,3279,5244],{"class":4469},[3061,5240,5241],{"class":3063,"style":3064},[3061,5242,5243],{"class":4477,"style":4478},"-import { useHead } from '@unhead\u002Fvue'",[3061,5245,5246],{"class":3063,"style":3064},[3061,5247,5248],{"class":4494,"style":4059},"+import { useHead } from '#imports'",[3030,5250,5251,5252,5255],{},"If you still have issues you may revert to the v1 behavior by enabling the ",[3040,5253,5254],{},"head.legacy"," config.",[3052,5257,5258],{"language":3251,"class":3253},[3040,5259,5260,3279,5272,3279,5279,3279,5288,3279,5294],{"class":3256},[3061,5261,5262,3264,5264,3264,5266,5268,5270],{"class":3063,"style":3064},[3061,5263,3263],{"class":3261,"style":3262},[3061,5265,3267],{"class":3261,"style":3262},[3061,5267,3270],{"class":3067,"style":3068},[3061,5269,3275],{"class":3273,"style":3274},[3061,5271,3278],{"class":3273,"style":3274},[3061,5273,5274,5275,3264,5277],{"class":3063,"style":3064},"  unhead",[3061,5276,3285],{"class":3073,"style":3074},[3061,5278,3278],{"class":3273,"style":3274},[3061,5280,5281,5282,3264,5284,5286],{"class":3063,"style":3064},"    legacy",[3061,5283,3285],{"class":3073,"style":3074},[3061,5285,4308],{"class":4258,"style":4259},[3061,5287,3300],{"class":3073,"style":3074},[3061,5289,3303,5290,5292],{"class":3063,"style":3064},[3061,5291,3306],{"class":3273,"style":3274},[3061,5293,3300],{"class":3073,"style":3074},[3061,5295,5296,5298],{"class":3063,"style":3064},[3061,5297,3306],{"class":3273,"style":3274},[3061,5299,3469],{"class":3273,"style":3274},[3027,5301,2827],{"id":2826},[3030,5303,3612,5304,4595],{},[3217,5305,3615],{},[3632,5307,2772],{"id":2830},[3030,5309,5310,5311,5314,5315,5318,5319,5322],{},"When rendering a client-only page (with ",[3040,5312,5313],{},"ssr: false","), we optionally render a loading screen (from ",[3040,5316,5317],{},"~\u002Fapp\u002Fspa-loading-template.html"," - note that this has also changed to ",[3040,5320,5321],{},"~\u002Fspa-loading-template.html"," in Nuxt 4), within the Nuxt app root:",[3052,5324,5327],{"language":5325,"class":5326},"html","shj shiki shj-lang-html",[3040,5328,5330,3279,5350,3279,5355],{"class":5329},"language-html",[3061,5331,5332,5335,3264,5339,5342,5344,5347],{"class":3063,"style":3064},[3061,5333,5334],{"class":3073,"style":3074},"\u003C",[3061,5336,5338],{"class":5337,"style":4478},"shj-syn-var shj-var","div",[3061,5340,5341],{"class":4427,"style":4340},"id",[3061,5343,3075],{"class":3073,"style":3074},[3061,5345,5346],{"class":4058,"style":4059},"\"__nuxt\"",[3061,5348,5349],{"class":3073,"style":3074},">",[3061,5351,3303,5352],{"class":3063,"style":3064},[3061,5353,5354],{"class":3313,"style":3314},"\u003C!-- spa loading template -->",[3061,5356,5357,5360,5362],{"class":3063,"style":3064},[3061,5358,5359],{"class":3073,"style":3074},"\u003C\u002F",[3061,5361,5338],{"class":5337,"style":4478},[3061,5363,5349],{"class":3073,"style":3074},[3030,5365,5366],{},"Now, we default to rendering the template alongside the Nuxt app root:",[3052,5368,5369],{"language":5325,"class":5326},[3040,5370,5371,3279,5391],{"class":5329},[3061,5372,5373,5375,3264,5377,5379,5381,5383,5385,5387,5389],{"class":3063,"style":3064},[3061,5374,5334],{"class":3073,"style":3074},[3061,5376,5338],{"class":5337,"style":4478},[3061,5378,5341],{"class":4427,"style":4340},[3061,5380,3075],{"class":3073,"style":3074},[3061,5382,5346],{"class":4058,"style":4059},[3061,5384,5349],{"class":3073,"style":3074},[3061,5386,5359],{"class":3073,"style":3074},[3061,5388,5338],{"class":5337,"style":4478},[3061,5390,5349],{"class":3073,"style":3074},[3061,5392,5393],{"class":3063,"style":3064},[3061,5394,5354],{"class":3313,"style":3314},[3632,5396,2775],{"id":2832},[3030,5398,5399],{},"This allows the spa loading template to remain in the DOM until the Vue app suspense resolves, preventing a flash of white.",[3632,5401,2778],{"id":2834},[3030,5403,5404,5405,5408,5409,3671,5412,5415],{},"If you were targeting the spa loading template with CSS or ",[3040,5406,5407],{},"document.queryElement"," you will need to update your selectors. For this purpose you can use the new ",[3040,5410,5411],{},"app.spaLoaderTag",[3040,5413,5414],{},"app.spaLoaderAttrs"," configuration options.",[3030,5417,5418],{},"Alternatively, you can revert to the previous behaviour with:",[3052,5420,5421],{"language":3251,"meta":3252,"class":3253},[3040,5422,5423,3279,5435,3279,5441,3279,5451,3279,5457],{"class":3256},[3061,5424,5425,3264,5427,3264,5429,5431,5433],{"class":3063,"style":3064},[3061,5426,3263],{"class":3261,"style":3262},[3061,5428,3267],{"class":3261,"style":3262},[3061,5430,3270],{"class":3067,"style":3068},[3061,5432,3275],{"class":3273,"style":3274},[3061,5434,3278],{"class":3273,"style":3274},[3061,5436,4554,5437,3264,5439],{"class":3063,"style":3064},[3061,5438,3285],{"class":3073,"style":3074},[3061,5440,3278],{"class":3273,"style":3274},[3061,5442,5443,5444,3264,5446,5449],{"class":3063,"style":3064},"    spaLoadingTemplateLocation",[3061,5445,3285],{"class":3073,"style":3074},[3061,5447,5448],{"class":4058,"style":4059},"'within'",[3061,5450,3300],{"class":3073,"style":3074},[3061,5452,3303,5453,5455],{"class":3063,"style":3064},[3061,5454,3306],{"class":3273,"style":3274},[3061,5456,3300],{"class":3073,"style":3074},[3061,5458,5459,5461],{"class":3063,"style":3064},[3061,5460,3306],{"class":3273,"style":3274},[3061,5462,3469],{"class":3273,"style":3274},[3027,5464,5465,5466],{"id":2836},"Parsed ",[3040,5467,5468],{},"error.data",[3030,5470,3612,5471,4595],{},[3217,5472,3615],{},[3030,5474,5475,5476,5478,5479,5481],{},"It was possible to throw an error with a ",[3040,5477,4129],{}," property, but this was not parsed. Now, it is parsed and made available in the ",[3040,5480,4132],{}," object. Although a fix, this is technically a breaking change if you were relying on the previous behavior and parsing it manually.",[3632,5483,2778],{"id":2840},[3030,5485,5486,5487,5489,5490,3285],{},"Update your custom ",[3040,5488,229],{}," to remove any additional parsing of ",[3040,5491,5468],{},[3052,5493,5494],{"language":4465,"class":4466},[3040,5495,5496,3279,5499,3279,5502,3279,5504,3279,5507,3279,5510,3279,5513,3279,5515,3279,5520,3279,5525],{"class":4469},[3061,5497,5498],{"class":3063,"style":3064},"  \u003Cscript setup lang=\"ts\">",[3061,5500,5501],{"class":3063,"style":3064},"  import type { NuxtError } from '#app'",[3061,5503],{"class":3063,"style":3064},[3061,5505,5506],{"class":3063,"style":3064},"  const props = defineProps({",[3061,5508,5509],{"class":3063,"style":3064},"    error: Object as () => NuxtError",[3061,5511,5512],{"class":3063,"style":3064},"  })",[3061,5514],{"class":3063,"style":3064},[3061,5516,5517],{"class":3063,"style":3064},[3061,5518,5519],{"class":4477,"style":4478},"- const data = JSON.parse(error.data)",[3061,5521,5522],{"class":3063,"style":3064},[3061,5523,5524],{"class":4494,"style":4059},"+ const data = error.data",[3061,5526,5527],{"class":3063,"style":3064},"  \u003C\u002Fscript>",[3030,5529,5530],{},"Alternatively, you can disable this change:",[3052,5532,5533],{"language":3251,"meta":3252,"class":3253},[3040,5534,5535,3279,5547,3279,5553,3279,5562,3279,5568],{"class":3256},[3061,5536,5537,3264,5539,3264,5541,5543,5545],{"class":3063,"style":3064},[3061,5538,3263],{"class":3261,"style":3262},[3061,5540,3267],{"class":3261,"style":3262},[3061,5542,3270],{"class":3067,"style":3068},[3061,5544,3275],{"class":3273,"style":3274},[3061,5546,3278],{"class":3273,"style":3274},[3061,5548,4554,5549,3264,5551],{"class":3063,"style":3064},[3061,5550,3285],{"class":3073,"style":3074},[3061,5552,3278],{"class":3273,"style":3274},[3061,5554,5555,5556,3264,5558,5560],{"class":3063,"style":3064},"    parseErrorData",[3061,5557,3285],{"class":3073,"style":3074},[3061,5559,4260],{"class":4258,"style":4259},[3061,5561,3300],{"class":3073,"style":3074},[3061,5563,3303,5564,5566],{"class":3063,"style":3064},[3061,5565,3306],{"class":3273,"style":3274},[3061,5567,3300],{"class":3073,"style":3074},[3061,5569,5570,5572],{"class":3063,"style":3064},[3061,5571,3306],{"class":3273,"style":3274},[3061,5573,3469],{"class":3273,"style":3274},[3027,5575,2843],{"id":2842},[3030,5577,3612,5578,4103],{},[3217,5579,3615],{},[3030,5581,5582],{},"Nuxt will now only inline styles for Vue components, not global CSS.",[3632,5584,2772],{"id":2846},[3030,5586,5587,5588,5591,5592,5595],{},"Previously, Nuxt would inline all CSS, including global styles, and remove ",[3040,5589,5590],{},"\u003Clink>"," elements to separate CSS files. Now, Nuxt will only do this for Vue components (which previously produced separate chunks of CSS). We think this is a better balance of reducing separate network requests (just as before, there will not be separate requests for individual ",[3040,5593,5594],{},".css"," files per-page or per-component on the initial load), as well as allowing caching of a single global CSS file and reducing the document download size of the initial request.",[3632,5597,2778],{"id":2848},[3030,5599,5600,5601,5604],{},"This feature is fully configurable and you can revert to the previous behavior by setting ",[3040,5602,5603],{},"inlineStyles: true"," to inline global CSS as well as per-component CSS.",[3052,5606,5607],{"language":3251,"meta":3252,"class":3253},[3040,5608,5609,3279,5621,3279,5628,3279,5637,3279,5643],{"class":3256},[3061,5610,5611,3264,5613,3264,5615,5617,5619],{"class":3063,"style":3064},[3061,5612,3263],{"class":3261,"style":3262},[3061,5614,3267],{"class":3261,"style":3262},[3061,5616,3270],{"class":3067,"style":3068},[3061,5618,3275],{"class":3273,"style":3274},[3061,5620,3278],{"class":3273,"style":3274},[3061,5622,5623,5624,3264,5626],{"class":3063,"style":3064},"  features",[3061,5625,3285],{"class":3073,"style":3074},[3061,5627,3278],{"class":3273,"style":3274},[3061,5629,5630,5631,3264,5633,5635],{"class":3063,"style":3064},"    inlineStyles",[3061,5632,3285],{"class":3073,"style":3074},[3061,5634,4308],{"class":4258,"style":4259},[3061,5636,3300],{"class":3073,"style":3074},[3061,5638,3303,5639,5641],{"class":3063,"style":3064},[3061,5640,3306],{"class":3273,"style":3274},[3061,5642,3300],{"class":3073,"style":3074},[3061,5644,5645,5647],{"class":3063,"style":3064},[3061,5646,3306],{"class":3273,"style":3274},[3061,5648,3469],{"class":3273,"style":3274},[3027,5650,2851],{"id":2850},[3030,5652,3612,5653,4595],{},[3217,5654,3615],{},[3632,5656,2772],{"id":2854},[3030,5658,5659,5660,5662,5663,5666,5667,5670],{},"We now scan page metadata (defined in ",[3040,5661,761],{},") ",[3116,5664,5665],{},"after"," calling the ",[3040,5668,5669],{},"pages:extend"," hook rather than before.",[3632,5672,2775],{"id":2856},[3030,5674,5675,5676,5678,5679,5682],{},"This was to allow scanning metadata for pages that users wanted to add in ",[3040,5677,5669],{},". We still offer an opportunity to change or override page metadata in a new ",[3040,5680,5681],{},"pages:resolved"," hook.",[3632,5684,2778],{"id":2858},[3030,5686,5687,5688,5690,5691,3210],{},"If you want to override page metadata, do that in ",[3040,5689,5681],{}," rather than in ",[3040,5692,5669],{},[3052,5694,5695],{"language":4465,"class":4466},[3040,5696,5697,3279,5700,3279,5703,3279,5708,3279,5713,3279,5716,3279,5719,3279,5722,3279,5725,3279,5728],{"class":4469},[3061,5698,5699],{"class":3063,"style":3064},"  export default defineNuxtConfig({",[3061,5701,5702],{"class":3063,"style":3064},"    hooks: {",[3061,5704,5705],{"class":3063,"style":3064},[3061,5706,5707],{"class":4477,"style":4478},"-     'pages:extend'(pages) {",[3061,5709,5710],{"class":3063,"style":3064},[3061,5711,5712],{"class":4494,"style":4059},"+     'pages:resolved'(pages) {",[3061,5714,5715],{"class":3063,"style":3064},"        const myPage = pages.find(page => page.path === '\u002F')",[3061,5717,5718],{"class":3063,"style":3064},"        myPage.meta ||= {}",[3061,5720,5721],{"class":3063,"style":3064},"        myPage.meta.layout = 'overridden-layout'",[3061,5723,5724],{"class":3063,"style":3064},"      }",[3061,5726,5727],{"class":3063,"style":3064},"    }",[3061,5729,5512],{"class":3063,"style":3064},[3030,5731,5418],{},[3052,5733,5734],{"language":3251,"meta":3252,"class":3253},[3040,5735,5736,3279,5748,3279,5754,3279,5763,3279,5769],{"class":3256},[3061,5737,5738,3264,5740,3264,5742,5744,5746],{"class":3063,"style":3064},[3061,5739,3263],{"class":3261,"style":3262},[3061,5741,3267],{"class":3261,"style":3262},[3061,5743,3270],{"class":3067,"style":3068},[3061,5745,3275],{"class":3273,"style":3274},[3061,5747,3278],{"class":3273,"style":3274},[3061,5749,4554,5750,3264,5752],{"class":3063,"style":3064},[3061,5751,3285],{"class":3073,"style":3074},[3061,5753,3278],{"class":3273,"style":3274},[3061,5755,5756,5757,3264,5759,5761],{"class":3063,"style":3064},"    scanPageMeta",[3061,5758,3285],{"class":3073,"style":3074},[3061,5760,4308],{"class":4258,"style":4259},[3061,5762,3300],{"class":3073,"style":3074},[3061,5764,3303,5765,5767],{"class":3063,"style":3064},[3061,5766,3306],{"class":3273,"style":3274},[3061,5768,3300],{"class":3073,"style":3074},[3061,5770,5771,5773],{"class":3063,"style":3064},[3061,5772,3306],{"class":3273,"style":3274},[3061,5774,3469],{"class":3273,"style":3274},[3027,5776,2861],{"id":2860},[3030,5778,3612,5779,5781],{},[3217,5780,3615],{},": Medium",[3632,5783,2772],{"id":2864},[3030,5785,5786,5787,3671,5789,5791,5792,3210],{},"We enabled a previously experimental feature to share data from ",[3040,5788,561],{},[3040,5790,576],{}," calls, across different pages. See ",[3034,5793,5795],{"href":5794},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F24894","original PR",[3632,5797,2775],{"id":2866},[3030,5799,5800,5801,5803,5804,3938,5806,5808],{},"This feature automatically shares payload ",[3116,5802,4129],{}," between pages that are prerendered. This can result in a significant performance improvement when prerendering sites that use ",[3040,5805,561],{},[3040,5807,576],{}," and fetch the same data in different pages.",[3030,5810,5811,5812,5814],{},"For example, if your site requires a ",[3040,5813,576],{}," call for every page (for example, to get navigation data for a menu, or site settings from a CMS), this data would only be fetched once when prerendering the first page that uses it, and then cached for use when prerendering other pages.",[3632,5816,2778],{"id":2868},[3030,5818,5819,5820,5822,5823,5825],{},"Make sure that any unique key of your data is always resolvable to the same data. For example, if you are using ",[3040,5821,561],{}," to fetch data related to a particular page, you should provide a key that uniquely matches that data. (",[3040,5824,576],{}," should do this automatically for you.)",[3052,5827,5829],{"language":3251,"filename":5828,"class":3253},"pages\u002Ftest\u002F[slug].vue",[3040,5830,5831,3279,5836,3279,5841,3279,5854,3279,5883,3279,5911,3279,5917,3279,5922,3279,5954,3279,5978],{"class":3256},[3061,5832,5833],{"class":3063,"style":3064},[3061,5834,5835],{"class":3313,"style":3314},"\u002F\u002F This would be unsafe in a dynamic page (e.g. `[slug].vue`) because the route slug makes a difference",[3061,5837,5838],{"class":3063,"style":3064},[3061,5839,5840],{"class":3313,"style":3314},"\u002F\u002F to the data fetched, but Nuxt can't know that because it's not reflected in the key.",[3061,5842,5843,5845,5846,3264,5848,5850,5852],{"class":3063,"style":3064},[3061,5844,4213],{"class":3261,"style":3262}," route ",[3061,5847,3075],{"class":3073,"style":3074},[3061,5849,656],{"class":3067,"style":3068},[3061,5851,3275],{"class":3273,"style":3274},[3061,5853,3469],{"class":3273,"style":3274},[3061,5855,5856,3264,5858,5860,5861,3264,5863,3264,5865,3264,5868,5870,5872,3264,5875,5877,3264,5879,3264,5881],{"class":3063,"style":3064},[3061,5857,4213],{"class":3261,"style":3262},[3061,5859,3278],{"class":3273,"style":3274}," data ",[3061,5862,3306],{"class":3273,"style":3274},[3061,5864,3075],{"class":3073,"style":3074},[3061,5866,5867],{"class":3261,"style":3262},"await",[3061,5869,561],{"class":3067,"style":3068},[3061,5871,3275],{"class":3273,"style":3274},[3061,5873,5874],{"class":3261,"style":3262},"async",[3061,5876,3275],{"class":3273,"style":3274},[3061,5878,3469],{"class":3273,"style":3274},[3061,5880,4239],{"class":3261,"style":3262},[3061,5882,3278],{"class":3273,"style":3274},[3061,5884,3303,5885,3264,5887,3264,5889,5891,5893,5896,5898,5899,5901,5902,5904,5905,5907,5909],{"class":3063,"style":3064},[3061,5886,4350],{"class":3261,"style":3262},[3061,5888,5867],{"class":3261,"style":3262},[3061,5890,702],{"class":3067,"style":3068},[3061,5892,3275],{"class":3273,"style":3274},[3061,5894,5895],{"class":4058,"style":4059},"`\u002Fapi\u002Fmy-page\u002F",[3061,5897,4363],{"class":3261,"style":3262},"route",[3061,5900,3210],{"class":3073,"style":3074},"params",[3061,5903,3210],{"class":3073,"style":3074},"slug",[3061,5906,3306],{"class":3261,"style":3262},[3061,5908,4368],{"class":4058,"style":4059},[3061,5910,3469],{"class":3273,"style":3274},[3061,5912,5913,5915],{"class":3063,"style":3064},[3061,5914,3306],{"class":3273,"style":3274},[3061,5916,3469],{"class":3273,"style":3274},[3061,5918,5919],{"class":3063,"style":3064},[3061,5920,5921],{"class":3313,"style":3314},"\u002F\u002F Instead, you should use a key that uniquely identifies the data fetched.",[3061,5923,5924,3264,5926,5860,5928,3264,5930,3264,5932,3264,5934,5936,5898,5938,5901,5940,5904,5942,3264,5944,3264,5946,5948,3264,5950,3264,5952],{"class":3063,"style":3064},[3061,5925,4213],{"class":3261,"style":3262},[3061,5927,3278],{"class":3273,"style":3274},[3061,5929,3306],{"class":3273,"style":3274},[3061,5931,3075],{"class":3073,"style":3074},[3061,5933,5867],{"class":3261,"style":3262},[3061,5935,561],{"class":3067,"style":3068},[3061,5937,3275],{"class":3273,"style":3274},[3061,5939,3210],{"class":3073,"style":3074},[3061,5941,3210],{"class":3073,"style":3074},[3061,5943,3300],{"class":3073,"style":3074},[3061,5945,5874],{"class":3261,"style":3262},[3061,5947,3275],{"class":3273,"style":3274},[3061,5949,3469],{"class":3273,"style":3274},[3061,5951,4239],{"class":3261,"style":3262},[3061,5953,3278],{"class":3273,"style":3274},[3061,5955,3303,5956,3264,5958,3264,5960,5962,5964,5966,5898,5968,5901,5970,5904,5972,5974,5976],{"class":3063,"style":3064},[3061,5957,4350],{"class":3261,"style":3262},[3061,5959,5867],{"class":3261,"style":3262},[3061,5961,702],{"class":3067,"style":3068},[3061,5963,3275],{"class":3273,"style":3274},[3061,5965,5895],{"class":4058,"style":4059},[3061,5967,4363],{"class":3261,"style":3262},[3061,5969,3210],{"class":3073,"style":3074},[3061,5971,3210],{"class":3073,"style":3074},[3061,5973,3306],{"class":3261,"style":3262},[3061,5975,4368],{"class":4058,"style":4059},[3061,5977,3469],{"class":3273,"style":3274},[3061,5979,5980,5982],{"class":3063,"style":3064},[3061,5981,3306],{"class":3273,"style":3274},[3061,5983,3469],{"class":3273,"style":3274},[3030,5985,5986],{},"Alternatively, you can disable this feature with:",[3052,5988,5989],{"language":3251,"meta":3252,"class":3253},[3040,5990,5991,3279,6003,3279,6009,3279,6018,3279,6024],{"class":3256},[3061,5992,5993,3264,5995,3264,5997,5999,6001],{"class":3063,"style":3064},[3061,5994,3263],{"class":3261,"style":3262},[3061,5996,3267],{"class":3261,"style":3262},[3061,5998,3270],{"class":3067,"style":3068},[3061,6000,3275],{"class":3273,"style":3274},[3061,6002,3278],{"class":3273,"style":3274},[3061,6004,4554,6005,3264,6007],{"class":3063,"style":3064},[3061,6006,3285],{"class":3073,"style":3074},[3061,6008,3278],{"class":3273,"style":3274},[3061,6010,6011,6012,3264,6014,6016],{"class":3063,"style":3064},"    sharedPrerenderData",[3061,6013,3285],{"class":3073,"style":3074},[3061,6015,4260],{"class":4258,"style":4259},[3061,6017,3300],{"class":3073,"style":3074},[3061,6019,3303,6020,6022],{"class":3063,"style":3064},[3061,6021,3306],{"class":3273,"style":3274},[3061,6023,3300],{"class":3073,"style":3074},[3061,6025,6026,6028],{"class":3063,"style":3064},[3061,6027,3306],{"class":3273,"style":3274},[3061,6029,3469],{"class":3273,"style":3274},[3027,6031,6032,6033,3671,6035,6037,6038,3671,6040],{"id":2870},"Default ",[3040,6034,4129],{},[3040,6036,4132],{}," values in ",[3040,6039,561],{},[3040,6041,576],{},[3030,6043,3612,6044,4595],{},[3217,6045,3615],{},[3632,6047,2772],{"id":2874},[3030,6049,6050,3671,6052,6054,6055,6057,6058,3210],{},[3040,6051,4129],{},[3040,6053,4132],{}," objects returned from ",[3040,6056,561],{}," will now default to ",[3040,6059,6060],{},"undefined",[3632,6062,2775],{"id":2876},[3030,6064,6065,6066,6068,6069,6072,6073,3478,6075,6077,6078,6068,6080,6082],{},"Previously ",[3040,6067,4129],{}," was initialized to ",[3040,6070,6071],{},"null"," but reset in ",[3040,6074,726],{},[3040,6076,6060],{},". ",[3040,6079,4132],{},[3040,6081,6071],{},". This change is to bring greater consistency.",[3632,6084,2778],{"id":2878},[3030,6086,6087,6088,3938,6091,6094,6095,6097,6098,6100],{},"If you were checking if ",[3040,6089,6090],{},"data.value",[3040,6092,6093],{},"error.value"," were ",[3040,6096,6071],{},", you can update these checks to check for ",[3040,6099,6060],{}," instead.",[3982,6102,6103,6104],{},"You can automate this step by running ",[3040,6105,6106],{},"npx codemod@latest nuxt\u002F4\u002Fdefault-data-error-value",[3030,6108,6109],{},"If you encounter any issues you can revert back to the previous behavior with:",[3052,6111,6112],{"language":3251,"meta":3252,"class":3253},[3040,6113,6114,3279,6126,3279,6132,3279,6139,3279,6146,3279,6156,3279,6165,3279,6172,3279,6178,3279,6184],{"class":3256},[3061,6115,6116,3264,6118,3264,6120,6122,6124],{"class":3063,"style":3064},[3061,6117,3263],{"class":3261,"style":3262},[3061,6119,3267],{"class":3261,"style":3262},[3061,6121,3270],{"class":3067,"style":3068},[3061,6123,3275],{"class":3273,"style":3274},[3061,6125,3278],{"class":3273,"style":3274},[3061,6127,4554,6128,3264,6130],{"class":3063,"style":3064},[3061,6129,3285],{"class":3073,"style":3074},[3061,6131,3278],{"class":3273,"style":3274},[3061,6133,6134,6135,3264,6137],{"class":3063,"style":3064},"    defaults",[3061,6136,3285],{"class":3073,"style":3074},[3061,6138,3278],{"class":3273,"style":3274},[3061,6140,6141,6142,3264,6144],{"class":3063,"style":3064},"      useAsyncData",[3061,6143,3285],{"class":3073,"style":3074},[3061,6145,3278],{"class":3273,"style":3274},[3061,6147,6148,6149,3264,6151,6154],{"class":3063,"style":3064},"        value",[3061,6150,3285],{"class":3073,"style":3074},[3061,6152,6153],{"class":4058,"style":4059},"'null'",[3061,6155,3300],{"class":3073,"style":3074},[3061,6157,6158,6159,3264,6161,6163],{"class":3063,"style":3064},"        errorValue",[3061,6160,3285],{"class":3073,"style":3074},[3061,6162,6153],{"class":4058,"style":4059},[3061,6164,3300],{"class":3073,"style":3074},[3061,6166,6167,6168,6170],{"class":3063,"style":3064},"      ",[3061,6169,3306],{"class":3273,"style":3274},[3061,6171,3300],{"class":3073,"style":3074},[3061,6173,4357,6174,6176],{"class":3063,"style":3064},[3061,6175,3306],{"class":3273,"style":3274},[3061,6177,3300],{"class":3073,"style":3074},[3061,6179,3303,6180,6182],{"class":3063,"style":3064},[3061,6181,3306],{"class":3273,"style":3274},[3061,6183,3300],{"class":3073,"style":3074},[3061,6185,6186,6188],{"class":3063,"style":3064},[3061,6187,3306],{"class":3273,"style":3274},[3061,6189,3469],{"class":3273,"style":3274},[3030,6191,6192],{},"Please report an issue if you are doing this, as we do not plan to keep this as configurable.",[3027,6194,6195,6196,6199,6200,6203,6204,6207,6208,3671,6210],{"id":2880},"Removal of deprecated ",[3040,6197,6198],{},"boolean"," values for ",[3040,6201,6202],{},"dedupe"," option when calling ",[3040,6205,6206],{},"refresh"," in ",[3040,6209,561],{},[3040,6211,576],{},[3030,6213,3612,6214,4595],{},[3217,6215,3615],{},[3632,6217,2772],{"id":2884},[3030,6219,6220,6221,3478,6224,6226,6227,6230,6231,6233,6234,6230,6237,4873],{},"Previously it was possible to pass ",[3040,6222,6223],{},"dedupe: boolean",[3040,6225,6206],{},". These were aliases of ",[3040,6228,6229],{},"cancel"," (",[3040,6232,4308],{},") and ",[3040,6235,6236],{},"defer",[3040,6238,4260],{},[3052,6240,6242],{"language":3251,"meta":6241,"class":3253},"twoslash [app.vue]",[3040,6243,6244,3279,6249,3279,6296,3279,6298,3279,6313,3279,6332],{"class":3256},[3061,6245,6246],{"class":3063,"style":3064},[3061,6247,6248],{"class":3313,"style":3314},"\u002F\u002F @errors: 2322",[3061,6250,6251,3264,6253,6255,6256,3264,6258,3264,6260,3264,6262,6264,6266,6268,3264,6270,3264,6272,6275,6277,6280,6282,6284,6285,3264,6287,3264,6290,6292,6294],{"class":3063,"style":3064},[3061,6252,4213],{"class":3261,"style":3262},[3061,6254,3278],{"class":3273,"style":3274}," refresh ",[3061,6257,3306],{"class":3273,"style":3274},[3061,6259,3075],{"class":3073,"style":3074},[3061,6261,5867],{"class":3261,"style":3262},[3061,6263,561],{"class":3067,"style":3068},[3061,6265,3275],{"class":3273,"style":3274},[3061,6267,3275],{"class":3273,"style":3274},[3061,6269,3469],{"class":3273,"style":3274},[3061,6271,4239],{"class":3261,"style":3262},[3061,6273,6274],{"class":4427,"style":4340},"Promise",[3061,6276,3210],{"class":3073,"style":3074},[3061,6278,6279],{"class":3067,"style":3068},"resolve",[3061,6281,3275],{"class":3273,"style":3274},[3061,6283,3278],{"class":3273,"style":3274}," message",[3061,6286,3285],{"class":3073,"style":3074},[3061,6288,6289],{"class":4058,"style":4059},"'Hello, Nuxt!'",[3061,6291,3306],{"class":3273,"style":3274},[3061,6293,3469],{"class":3273,"style":3274},[3061,6295,3469],{"class":3273,"style":3274},[3061,6297],{"class":3063,"style":3064},[3061,6299,6300,3264,6302,3264,6304,3264,6307,6309,3264,6311],{"class":3063,"style":3064},[3061,6301,5874],{"class":3261,"style":3262},[3061,6303,4330],{"class":3261,"style":3262},[3061,6305,6306],{"class":3067,"style":3068},"refreshData",[3061,6308,3275],{"class":3273,"style":3274},[3061,6310,3469],{"class":3273,"style":3274},[3061,6312,3278],{"class":3273,"style":3274},[3061,6314,3303,6315,3264,6317,6319,6321,6323,6324,3264,6326,3264,6328,6330],{"class":3063,"style":3064},[3061,6316,5867],{"class":3261,"style":3262},[3061,6318,6206],{"class":3067,"style":3068},[3061,6320,3275],{"class":3273,"style":3274},[3061,6322,3278],{"class":3273,"style":3274}," dedupe",[3061,6325,3285],{"class":3073,"style":3074},[3061,6327,4308],{"class":4258,"style":4259},[3061,6329,3306],{"class":3273,"style":3274},[3061,6331,3469],{"class":3273,"style":3274},[3061,6333,6334],{"class":3063,"style":3064},[3061,6335,3306],{"class":3273,"style":3274},[3632,6337,2775],{"id":2886},[3030,6339,6340],{},"These aliases were removed, for greater clarity.",[3030,6342,6343,6344,6346,6347,6349,6350,3210],{},"The issue came up when adding ",[3040,6345,6202],{}," as an option to ",[3040,6348,561],{},", and we removed the boolean values as they ended up being ",[3116,6351,6352],{},"opposites",[3030,6354,6355,6358,6359,6365,6366,6369,6370,6372,6373,6376,6377,6381],{},[3040,6356,6357],{},"refresh({ dedupe: false })"," meant ",[3217,6360,6361,6362,6364],{},"do not ",[3116,6363,6229],{}," existing requests in favour of this new one",". But passing ",[3040,6367,6368],{},"dedupe: true"," within the options of ",[3040,6371,561],{}," means ",[3217,6374,6375],{},"do not make any new requests if there is an existing pending request."," (See ",[3034,6378,6380],{"href":6379},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F24564#pullrequestreview-1764584361","PR",".)",[3632,6383,2778],{"id":2888},[3030,6385,4890],{},[3052,6387,6388],{"language":4465,"class":4466},[3040,6389,6390,3279,6396,3279,6398,3279,6401,3279,6406,3279,6411,3279,6413,3279,6418,3279,6423],{"class":4469},[3061,6391,6392,6393],{"class":3063,"style":3064},"  const { refresh } = await useAsyncData(async () => ({ message: 'Hello, Nuxt 3",[3061,6394,6395],{"class":3261,"style":3262},"!' }))",[3061,6397,3303],{"class":3063,"style":3064},[3061,6399,6400],{"class":3063,"style":3064},"  async function refreshData () {",[3061,6402,6403],{"class":3063,"style":3064},[3061,6404,6405],{"class":4477,"style":4478},"-   await refresh({ dedupe: true })",[3061,6407,6408],{"class":3063,"style":3064},[3061,6409,6410],{"class":4494,"style":4059},"+   await refresh({ dedupe: 'cancel' })",[3061,6412],{"class":3063,"style":3064},[3061,6414,6415],{"class":3063,"style":3064},[3061,6416,6417],{"class":4477,"style":4478},"-   await refresh({ dedupe: false })",[3061,6419,6420],{"class":3063,"style":3064},[3061,6421,6422],{"class":4494,"style":4059},"+   await refresh({ dedupe: 'defer' })",[3061,6424,6425],{"class":3063,"style":3064},"  }",[3982,6427,6103,6428],{},[3040,6429,6430],{},"npx codemod@latest nuxt\u002F4\u002Fdeprecated-dedupe-value",[3027,6432,6433,6434,6207,6436,3671,6438],{"id":2890},"Respect defaults when clearing ",[3040,6435,4129],{},[3040,6437,561],{},[3040,6439,576],{},[3030,6441,3612,6442,4595],{},[3217,6443,3615],{},[3632,6445,2772],{"id":2894},[3030,6447,6448,6449,6451,6452,6454,6455,3938,6458,6460],{},"If you provide a custom ",[3040,6450,3267],{}," value for ",[3040,6453,561],{},", this will now be used when calling ",[3040,6456,6457],{},"clear",[3040,6459,726],{}," and it will be reset to its default value rather than simply unset.",[3632,6462,2775],{"id":2896},[3030,6464,6465,6466,6468,6469,6471],{},"Often users set an appropriately empty value, such as an empty array, to avoid the need to check for ",[3040,6467,6071],{},"\u002F",[3040,6470,6060],{}," when iterating over it. This should be respected when resetting\u002Fclearing the data.",[3632,6473,2778],{"id":2898},[3030,6475,6476],{},"If you encounter any issues you can revert back to the previous behavior, for now, with:",[3052,6478,6479],{"language":3251,"meta":3252,"class":3253},[3040,6480,6481,3279,6493,3279,6499,3279,6508,3279,6514],{"class":3256},[3061,6482,6483,3264,6485,3264,6487,6489,6491],{"class":3063,"style":3064},[3061,6484,3263],{"class":3261,"style":3262},[3061,6486,3267],{"class":3261,"style":3262},[3061,6488,3270],{"class":3067,"style":3068},[3061,6490,3275],{"class":3273,"style":3274},[3061,6492,3278],{"class":3273,"style":3274},[3061,6494,4554,6495,3264,6497],{"class":3063,"style":3064},[3061,6496,3285],{"class":3073,"style":3074},[3061,6498,3278],{"class":3273,"style":3274},[3061,6500,6501,6502,3264,6504,6506],{"class":3063,"style":3064},"    resetAsyncDataToUndefined",[3061,6503,3285],{"class":3073,"style":3074},[3061,6505,4308],{"class":4258,"style":4259},[3061,6507,3300],{"class":3073,"style":3074},[3061,6509,3303,6510,6512],{"class":3063,"style":3064},[3061,6511,3306],{"class":3273,"style":3274},[3061,6513,3300],{"class":3073,"style":3074},[3061,6515,6516,6518],{"class":3063,"style":3064},[3061,6517,3306],{"class":3273,"style":3274},[3061,6519,3469],{"class":3273,"style":3274},[3030,6521,6522],{},"Please report an issue if you are doing so, as we do not plan to keep this as configurable.",[3027,6524,6525,6526,6529,6530,3671,6532],{"id":2900},"Alignment of ",[3040,6527,6528],{},"pending"," value in ",[3040,6531,561],{},[3040,6533,576],{},[3030,6535,3612,6536,5781],{},[3217,6537,3615],{},[3030,6539,6540,6541,6543,6544,3667,6546,3667,6548,3671,6550,6552,6553,6555,6556,6558],{},"The ",[3040,6542,6528],{}," object returned from ",[3040,6545,561],{},[3040,6547,576],{},[3040,6549,596],{},[3040,6551,601],{}," is now a computed property that is ",[3040,6554,4308],{}," only when ",[3040,6557,4135],{}," is also pending.",[3632,6560,2772],{"id":2904},[3030,6562,6563,6564,6567,6568,6570,6571,6573,6574,6576,6577,6579],{},"Now, when ",[3040,6565,6566],{},"immediate: false"," is passed, ",[3040,6569,6528],{}," will be ",[3040,6572,4260],{}," until the first request is made. This is a change from the previous behavior, where ",[3040,6575,6528],{}," was always ",[3040,6578,4308],{}," until the first request was made.",[3632,6581,2775],{"id":2906},[3030,6583,6584,6585,6587,6588,6590,6591,6593],{},"This aligns the meaning of ",[3040,6586,6528],{}," with the ",[3040,6589,4135],{}," property, which is also ",[3040,6592,6528],{}," when the request is in progress.",[3632,6595,2778],{"id":2908},[3030,6597,6598,6599,6601,6602,6604,6605,6607],{},"If you rely on the ",[3040,6600,6528],{}," property, ensure that your logic accounts for the new behavior where ",[3040,6603,6528],{}," will only be ",[3040,6606,4308],{}," when the status is also pending.",[3052,6609,6610],{"language":4465,"class":4466},[3040,6611,6612,3279,6615,3279,6620,3279,6625,3279,6628,3279,6631,3279,6634,3279,6637,3279,6639,3279,6642,3279,6644,3279,6647,3279,6650,3279,6652,3279,6655],{"class":4469},[3061,6613,6614],{"class":3063,"style":3064},"  \u003Ctemplate>",[3061,6616,6617],{"class":3063,"style":3064},[3061,6618,6619],{"class":4477,"style":4478},"-   \u003Cdiv v-if=\"!pending\">",[3061,6621,6622],{"class":3063,"style":3064},[3061,6623,6624],{"class":4494,"style":4059},"+   \u003Cdiv v-if=\"status === 'success'\">",[3061,6626,6627],{"class":3063,"style":3064},"      \u003Cp>Data: {{ data }}\u003C\u002Fp>",[3061,6629,6630],{"class":3063,"style":3064},"    \u003C\u002Fdiv>",[3061,6632,6633],{"class":3063,"style":3064},"    \u003Cdiv v-else>",[3061,6635,6636],{"class":3063,"style":3064},"      \u003Cp>Loading...\u003C\u002Fp>",[3061,6638,6630],{"class":3063,"style":3064},[3061,6640,6641],{"class":3063,"style":3064},"  \u003C\u002Ftemplate>",[3061,6643,5498],{"class":3063,"style":3064},[3061,6645,6646],{"class":3063,"style":3064},"  const { data, pending, execute, status } = await useAsyncData(() => fetch('\u002Fapi\u002Fdata'), {",[3061,6648,6649],{"class":3063,"style":3064},"    immediate: false",[3061,6651,5512],{"class":3063,"style":3064},[3061,6653,6654],{"class":3063,"style":3064},"  onMounted(() => execute())",[3061,6656,5527],{"class":3063,"style":3064},[3030,6658,6659],{},"Alternatively, you can temporarily revert to the previous behavior with:",[3052,6661,6662],{"language":3251,"meta":3252,"class":3253},[3040,6663,6664,3279,6676,3279,6682,3279,6691,3279,6697],{"class":3256},[3061,6665,6666,3264,6668,3264,6670,6672,6674],{"class":3063,"style":3064},[3061,6667,3263],{"class":3261,"style":3262},[3061,6669,3267],{"class":3261,"style":3262},[3061,6671,3270],{"class":3067,"style":3068},[3061,6673,3275],{"class":3273,"style":3274},[3061,6675,3278],{"class":3273,"style":3274},[3061,6677,4554,6678,3264,6680],{"class":3063,"style":3064},[3061,6679,3285],{"class":3073,"style":3074},[3061,6681,3278],{"class":3273,"style":3274},[3061,6683,6684,6685,3264,6687,6689],{"class":3063,"style":3064},"    pendingWhenIdle",[3061,6686,3285],{"class":3073,"style":3074},[3061,6688,4308],{"class":4258,"style":4259},[3061,6690,3300],{"class":3073,"style":3074},[3061,6692,3303,6693,6695],{"class":3063,"style":3064},[3061,6694,3306],{"class":3273,"style":3274},[3061,6696,3300],{"class":3073,"style":3074},[3061,6698,6699,6701],{"class":3063,"style":3064},[3061,6700,3306],{"class":3273,"style":3274},[3061,6702,3469],{"class":3273,"style":3274},[3027,6704,6705,6706,3671,6708],{"id":2910},"Key Change Behavior in ",[3040,6707,561],{},[3040,6709,576],{},[3030,6711,3612,6712,5781],{},[3217,6713,3615],{},[3632,6715,2772],{"id":2914},[3030,6717,6718,6719,3938,6721,6723,6724,6726,6727,6729],{},"When using reactive keys in ",[3040,6720,561],{},[3040,6722,576],{},", Nuxt automatically refetches data when the key changes. When ",[3040,6725,6566],{}," is set, ",[3040,6728,561],{}," will only fetch data when the key changes if the data has already been fetched once.",[3030,6731,6732,6733,6735],{},"Previously, ",[3040,6734,576],{}," had slightly different behavior. It would always fetch data when the key changed.",[3030,6737,6738,6739,3671,6741,6743],{},"Now, ",[3040,6740,576],{},[3040,6742,561],{}," behave consistently - by only fetch data when the key changes if the data has already been fetched once.",[3632,6745,2775],{"id":2916},[3030,6747,6748,6749,3671,6751,6753,6754,6756,6757,3938,6759,6762,6763,3938,6765,3210],{},"This ensures consistent behavior between ",[3040,6750,561],{},[3040,6752,576],{},", and prevents unexpected fetches. If you have set ",[3040,6755,6566],{},", then you must call ",[3040,6758,6206],{},[3040,6760,6761],{},"execute"," or data will never be fetched in ",[3040,6764,576],{},[3040,6766,561],{},[3632,6768,2778],{"id":2918},[3030,6770,6771,6772,6774],{},"This change should generally improve the expected behavior, but if you were expecting changing the key or options of a non-immediate ",[3040,6773,576],{},", you now will need to trigger it manually the first time.",[3052,6776,6777],{"language":4465,"class":4466},[3040,6778,6779,3279,6782,3279,6785,3279,6788,3279,6790,3279,6793],{"class":4469},[3061,6780,6781],{"class":3063,"style":3064},"  const id = ref('123')",[3061,6783,6784],{"class":3063,"style":3064},"  const { data, execute } = await useFetch('\u002Fapi\u002Ftest', {",[3061,6786,6787],{"class":3063,"style":3064},"    query: { id },",[3061,6789,6649],{"class":3063,"style":3064},[3061,6791,6792],{"class":3063,"style":3064},"  )",[3061,6794,6795],{"class":3063,"style":3064},[3061,6796,6797],{"class":4494,"style":4059},"+ watch(id, () => execute(), { once: true })",[3030,6799,6800],{},"To opt out of this behavior:",[3052,6802,6803],{"language":3251,"class":3253},[3040,6804,6805,3279,6810,3279,6822,3279,6828,3279,6837,3279,6843],{"class":3256},[3061,6806,6807],{"class":3063,"style":3064},[3061,6808,6809],{"class":3313,"style":3314},"\u002F\u002F Or globally in your Nuxt config",[3061,6811,6812,3264,6814,3264,6816,6818,6820],{"class":3063,"style":3064},[3061,6813,3263],{"class":3261,"style":3262},[3061,6815,3267],{"class":3261,"style":3262},[3061,6817,3270],{"class":3067,"style":3068},[3061,6819,3275],{"class":3273,"style":3274},[3061,6821,3278],{"class":3273,"style":3274},[3061,6823,4554,6824,3264,6826],{"class":3063,"style":3064},[3061,6825,3285],{"class":3073,"style":3074},[3061,6827,3278],{"class":3273,"style":3274},[3061,6829,6830,6831,3264,6833,6835],{"class":3063,"style":3064},"    alwaysRunFetchOnKeyChange",[3061,6832,3285],{"class":3073,"style":3074},[3061,6834,4308],{"class":4258,"style":4259},[3061,6836,3300],{"class":3073,"style":3074},[3061,6838,3303,6839,6841],{"class":3063,"style":3064},[3061,6840,3306],{"class":3273,"style":3274},[3061,6842,3300],{"class":3073,"style":3074},[3061,6844,6845,6847],{"class":3063,"style":3064},[3061,6846,3306],{"class":3273,"style":3274},[3061,6848,3469],{"class":3273,"style":3274},[3027,6850,6851,6852,3671,6854],{"id":2920},"Shallow Data Reactivity in ",[3040,6853,561],{},[3040,6855,576],{},[3030,6857,3612,6858,4595],{},[3217,6859,3615],{},[3030,6861,6540,6862,6543,6864,3667,6866,3667,6868,3671,6870,6872,6873,6876,6877,3210],{},[3040,6863,4129],{},[3040,6865,561],{},[3040,6867,576],{},[3040,6869,596],{},[3040,6871,601],{}," is now a ",[3040,6874,6875],{},"shallowRef"," rather than a ",[3040,6878,6879],{},"ref",[3632,6881,2772],{"id":2924},[3030,6883,6884,6885,6887,6888,6891],{},"When new data is fetched, anything depending on ",[3040,6886,4129],{}," will still be reactive because the entire object is replaced. But if your code changes a property ",[3116,6889,6890],{},"within"," that data structure, this will not trigger any reactivity in your app.",[3632,6893,2775],{"id":2926},[3030,6895,6896,6897,6900,6901,6903],{},"This brings a ",[3217,6898,6899],{},"significant"," performance improvement for deeply nested objects and arrays because Vue does not need to watch every single property\u002Farray for modification. In most cases, ",[3040,6902,4129],{}," should also be immutable.",[3632,6905,2778],{"id":2928},[3030,6907,6908],{},"In most cases, no migration steps are required, but if you rely on the reactivity of the data object then you have two options:",[3858,6910,6911,6930],{},[3638,6912,6913,6916],{},[3030,6914,6915],{},"You can granularly opt in to deep reactivity on a per-composable basis:",[3052,6917,6918],{"language":4465,"class":4466},[3040,6919,6920,3279,6925],{"class":4469},[3061,6921,6922],{"class":3063,"style":3064},[3061,6923,6924],{"class":4477,"style":4478},"- const { data } = useFetch('\u002Fapi\u002Ftest')",[3061,6926,6927],{"class":3063,"style":3064},[3061,6928,6929],{"class":4494,"style":4059},"+ const { data } = useFetch('\u002Fapi\u002Ftest', { deep: true })",[3638,6931,6932,6935],{},[3030,6933,6934],{},"You can change the default behavior on a project-wide basis (not recommended):",[3052,6936,6937],{"language":3251,"meta":3252,"class":3253},[3040,6938,6939,3279,6951,3279,6957,3279,6963,3279,6969,3279,6978,3279,6984,3279,6990,3279,6996],{"class":3256},[3061,6940,6941,3264,6943,3264,6945,6947,6949],{"class":3063,"style":3064},[3061,6942,3263],{"class":3261,"style":3262},[3061,6944,3267],{"class":3261,"style":3262},[3061,6946,3270],{"class":3067,"style":3068},[3061,6948,3275],{"class":3273,"style":3274},[3061,6950,3278],{"class":3273,"style":3274},[3061,6952,4554,6953,3264,6955],{"class":3063,"style":3064},[3061,6954,3285],{"class":3073,"style":3074},[3061,6956,3278],{"class":3273,"style":3274},[3061,6958,6134,6959,3264,6961],{"class":3063,"style":3064},[3061,6960,3285],{"class":3073,"style":3074},[3061,6962,3278],{"class":3273,"style":3274},[3061,6964,6141,6965,3264,6967],{"class":3063,"style":3064},[3061,6966,3285],{"class":3073,"style":3074},[3061,6968,3278],{"class":3273,"style":3274},[3061,6970,6971,6972,3264,6974,6976],{"class":3063,"style":3064},"        deep",[3061,6973,3285],{"class":3073,"style":3074},[3061,6975,4308],{"class":4258,"style":4259},[3061,6977,3300],{"class":3073,"style":3074},[3061,6979,6167,6980,6982],{"class":3063,"style":3064},[3061,6981,3306],{"class":3273,"style":3274},[3061,6983,3300],{"class":3073,"style":3074},[3061,6985,4357,6986,6988],{"class":3063,"style":3064},[3061,6987,3306],{"class":3273,"style":3274},[3061,6989,3300],{"class":3073,"style":3074},[3061,6991,3303,6992,6994],{"class":3063,"style":3064},[3061,6993,3306],{"class":3273,"style":3274},[3061,6995,3300],{"class":3073,"style":3074},[3061,6997,6998,7000],{"class":3063,"style":3064},[3061,6999,3306],{"class":3273,"style":3274},[3061,7001,3469],{"class":3273,"style":3274},[3982,7003,7004,7005],{},"If you need to, you can automate this step by running ",[3040,7006,7007],{},"npx codemod@latest nuxt\u002F4\u002Fshallow-function-reactivity",[3027,7009,7010,7011],{"id":2930},"Absolute Watch Paths in ",[3040,7012,7013],{},"builder:watch",[3030,7015,3612,7016,4595],{},[3217,7017,3615],{},[3632,7019,2772],{"id":2934},[3030,7021,7022,7023,7025,7026,3210],{},"The Nuxt ",[3040,7024,7013],{}," hook now emits a path which is absolute rather than relative to your project ",[3040,7027,3643],{},[3632,7029,2775],{"id":2936},[3030,7031,7032,7033,7035],{},"This allows us to support watching paths which are outside your ",[3040,7034,3643],{},", and offers better support for layers and other more complex patterns.",[3632,7037,2778],{"id":2938},[3030,7039,7040,7041,3210],{},"We have already proactively migrated the public Nuxt modules which we are aware use this hook. See ",[3034,7042,7044],{"href":7043},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F25339","issue #25339",[3030,7046,7047,7048,7050],{},"However, if you are a module author using the ",[3040,7049,7013],{}," hook and wishing to remain backwards\u002Fforwards compatible, you can use the following code to ensure that your code works the same in both Nuxt v3 and Nuxt v4:",[3052,7052,7053],{"language":4465,"class":4466},[3040,7054,7055,3279,7060,3279,7063,3279,7066,3279,7071,3279,7074],{"class":4469},[3061,7056,7057],{"class":3063,"style":3064},[3061,7058,7059],{"class":4494,"style":4059},"+ import { relative, resolve } from 'node:fs'",[3061,7061,7062],{"class":3063,"style":3064},"  \u002F\u002F ...",[3061,7064,7065],{"class":3063,"style":3064},"  nuxt.hook('builder:watch', async (event, path) => {",[3061,7067,7068],{"class":3063,"style":3064},[3061,7069,7070],{"class":4494,"style":4059},"+   path = relative(nuxt.options.srcDir, resolve(nuxt.options.srcDir, path))",[3061,7072,7073],{"class":3063,"style":3064},"    \u002F\u002F ...",[3061,7075,5512],{"class":3063,"style":3064},[3982,7077,6103,7078],{},[3040,7079,7080],{},"npx codemod@latest nuxt\u002F4\u002Fabsolute-watch-path",[3027,7082,7083,7084,7087],{"id":2940},"Removal of ",[3040,7085,7086],{},"window.__NUXT__"," object",[3632,7089,2772],{"id":2944},[3030,7091,7092,7093,7095],{},"We are removing the global ",[3040,7094,7086],{}," object after the app finishes hydration.",[3632,7097,2775],{"id":2946},[3030,7099,7100,7101,7105,7106,3210],{},"This opens the way to multi-app patterns (",[3034,7102,7104],{"href":7103},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F21635","#21635",") and enables us to focus on a single way to access Nuxt app data - ",[3040,7107,7108],{},"useNuxtApp()",[3632,7110,2778],{"id":2948},[3030,7112,7113,7114,3285],{},"The data is still available, but can be accessed with ",[3040,7115,7116],{},"useNuxtApp().payload",[3052,7118,7119],{"language":4465,"class":4466},[3040,7120,7121,3279,7126],{"class":4469},[3061,7122,7123],{"class":3063,"style":3064},[3061,7124,7125],{"class":4477,"style":4478},"- console.log(window.__NUXT__)",[3061,7127,7128],{"class":3063,"style":3064},[3061,7129,7130],{"class":4494,"style":4059},"+ console.log(useNuxtApp().payload)",[3027,7132,2951],{"id":2950},[3030,7134,3612,7135,5781],{},[3217,7136,3615],{},[3632,7138,2772],{"id":2954},[3030,7140,7141,7142,7144,7145,7148],{},"Child folders in your ",[3040,7143,3918],{}," folder are also scanned for ",[3040,7146,7147],{},"index"," files and these are now also registered as middleware in your project.",[3632,7150,2775],{"id":2956},[3030,7152,7153,7154,3671,7156,3210],{},"Nuxt scans a number of folders automatically, including ",[3040,7155,3918],{},[3040,7157,3923],{},[3030,7159,7141,7160,7162,7163,7165],{},[3040,7161,3923],{}," folder are scanned for ",[3040,7164,7147],{}," files and we wanted to make this behavior consistent between scanned directories.",[3632,7167,2778],{"id":2958},[3030,7169,7170],{},"Probably no migration is necessary but if you wish to revert to previous behavior you can add a hook to filter out these middleware:",[3052,7172,7173],{"language":3251,"class":3253},[3040,7174,7175,3279,7187,3279,7194,3279,7205,3279,7263,3279,7269,3279,7275],{"class":3256},[3061,7176,7177,3264,7179,3264,7181,7183,7185],{"class":3063,"style":3064},[3061,7178,3263],{"class":3261,"style":3262},[3061,7180,3267],{"class":3261,"style":3262},[3061,7182,3270],{"class":3067,"style":3068},[3061,7184,3275],{"class":3273,"style":3274},[3061,7186,3278],{"class":3273,"style":3274},[3061,7188,7189,7190,3264,7192],{"class":3063,"style":3064},"  hooks",[3061,7191,3285],{"class":3073,"style":3074},[3061,7193,3278],{"class":3273,"style":3274},[3061,7195,4357,7196,3264,7199,1348,7201,3264,7203],{"class":3063,"style":3064},[3061,7197,7198],{"class":4058,"style":4059},"'app:resolve'",[3061,7200,3275],{"class":3273,"style":3274},[3061,7202,3469],{"class":3273,"style":3274},[3061,7204,3278],{"class":3273,"style":3274},[3061,7206,7207,7208,7210,7211,7213,7214,154,7216,7218,7221,7223,7224,3264,7226,7229,7230,7233,7236,7238,7241,7243,7245,7248,7249,7252,7254,7256,7257,4865,7259,7261],{"class":3063,"style":3064},"      app",[3061,7209,3210],{"class":3073,"style":3074},"middleware ",[3061,7212,3075],{"class":3073,"style":3074}," app",[3061,7215,3210],{"class":3073,"style":3074},[3061,7217,3210],{"class":3073,"style":3074},[3061,7219,7220],{"class":3067,"style":3068},"filter",[3061,7222,3275],{"class":3273,"style":3274},"mw ",[3061,7225,4239],{"class":3261,"style":3262},[3061,7227,7228],{"class":3073,"style":3074},"!\u002F","\\",[3061,7231,7232],{"class":3073,"style":3074},"\u002Findex",[3061,7234,7235],{"class":3261,"style":3262},"\\.",[3061,7237,4719],{"class":3073,"style":3074},[3061,7239,7240],{"class":3261,"style":3262},"^",[3061,7242,6468],{"class":3073,"style":3074},[3061,7244,4730],{"class":3273,"style":3274},[3061,7246,7247],{"class":3073,"style":3074},"+","$",[3061,7250,7251],{"class":3073,"style":3074},"\u002F.",[3061,7253,930],{"class":3067,"style":3068},[3061,7255,3275],{"class":3273,"style":3274},"mw",[3061,7258,3210],{"class":3073,"style":3074},[3061,7260,3469],{"class":3273,"style":3274},[3061,7262,3469],{"class":3273,"style":3274},[3061,7264,4357,7265,7267],{"class":3063,"style":3064},[3061,7266,3306],{"class":3273,"style":3274},[3061,7268,3300],{"class":3073,"style":3074},[3061,7270,3303,7271,7273],{"class":3063,"style":3064},[3061,7272,3306],{"class":3273,"style":3274},[3061,7274,3300],{"class":3073,"style":3074},[3061,7276,7277,7279],{"class":3063,"style":3064},[3061,7278,3306],{"class":3273,"style":3274},[3061,7280,3469],{"class":3273,"style":3274},[3027,7282,2961],{"id":2960},[3030,7284,3612,7285,4595],{},[3217,7286,3615],{},[3632,7288,2772],{"id":2964},[3030,7290,7291,7292,7295,7296,7299],{},"Previously, Nuxt used ",[3040,7293,7294],{},"lodash\u002Ftemplate"," to compile templates located on the file system using the ",[3040,7297,7298],{},".ejs"," file format\u002Fsyntax.",[3030,7301,7302,7303,3667,7306,3667,7309,7312],{},"In addition, we provided some template utilities (",[3040,7304,7305],{},"serialize",[3040,7307,7308],{},"importName",[3040,7310,7311],{},"importSources",") which could be used for code-generation within these templates, which are now being removed.",[3632,7314,2775],{"id":2966},[3030,7316,7317,7318,7321],{},"In Nuxt v3 we moved to a 'virtual' syntax with a ",[3040,7319,7320],{},"getContents()"," function which is much more flexible and performant.",[3030,7323,7324,7325,7327,7328,7331],{},"In addition, ",[3040,7326,7294],{}," has had a succession of security issues. These do not really apply to Nuxt projects because it is being used at build-time, not runtime, and by trusted code. However, they still appear in security audits. Moreover, ",[3040,7329,7330],{},"lodash"," is a hefty dependency and is unused by most projects.",[3030,7333,7334,7335,7339],{},"Finally, providing code serialization functions directly within Nuxt is not ideal. Instead, we maintain projects like ",[3034,7336,7338],{"href":7337},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fknitwork","unjs\u002Fknitwork"," which can be dependencies of your project, and where security issues can be reported\u002Fresolved directly without requiring an upgrade of Nuxt itself.",[3632,7341,2778],{"id":2968},[3030,7343,7344],{},"We have raised PRs to update modules using EJS syntax, but if you need to do this yourself, you have three backwards\u002Fforwards-compatible alternatives:",[3635,7346,7347,7352,7358],{},[3638,7348,7349,7350,3210],{},"Moving your string interpolation logic directly into ",[3040,7351,7320],{},[3638,7353,7354,7355,3210],{},"Using a custom function to handle the replacement, such as in ",[3034,7356,7357],{"href":7357},"https:\u002F\u002Fgithub.com\u002Fnuxt-modules\u002Fcolor-mode\u002Fpull\u002F240",[3638,7359,7360,7361,7364,7365,7368],{},"Use ",[3040,7362,7363],{},"es-toolkit\u002Fcompat"," (a drop-in replacement for lodash template), as a dependency of ",[3116,7366,7367],{},"your"," project rather than Nuxt:",[3052,7370,7371],{"language":4465,"class":4466},[3040,7372,7373,3279,7378,3279,7383,3279,7385,3279,7388,3279,7391,3279,7394,3279,7399,3279,7404,3279,7409,3279,7414,3279,7419],{"class":4469},[3061,7374,7375],{"class":3063,"style":3064},[3061,7376,7377],{"class":4494,"style":4059},"+ import { readFileSync } from 'node:fs'",[3061,7379,7380],{"class":3063,"style":3064},[3061,7381,7382],{"class":4494,"style":4059},"+ import { template } from 'es-toolkit\u002Fcompat'",[3061,7384,7062],{"class":3063,"style":3064},[3061,7386,7387],{"class":3063,"style":3064},"  addTemplate({",[3061,7389,7390],{"class":3063,"style":3064},"    fileName: 'appinsights-vue.js'",[3061,7392,7393],{"class":3063,"style":3064},"    options: { \u002F* some options *\u002F },",[3061,7395,7396],{"class":3063,"style":3064},[3061,7397,7398],{"class":4477,"style":4478},"-   src: resolver.resolve('.\u002Fruntime\u002Fplugin.ejs'),",[3061,7400,7401],{"class":3063,"style":3064},[3061,7402,7403],{"class":4494,"style":4059},"+   getContents({ options }) {",[3061,7405,7406],{"class":3063,"style":3064},[3061,7407,7408],{"class":4494,"style":4059},"+     const contents = readFileSync(resolver.resolve('.\u002Fruntime\u002Fplugin.ejs'), 'utf-8')",[3061,7410,7411],{"class":3063,"style":3064},[3061,7412,7413],{"class":4494,"style":4059},"+     return template(contents)({ options })",[3061,7415,7416],{"class":3063,"style":3064},[3061,7417,7418],{"class":4494,"style":4059},"+   },",[3061,7420,5512],{"class":3063,"style":3064},[3030,7422,7423,7424,3667,7426,3667,7428,7430,7431,3285],{},"Finally, if you are using the template utilities (",[3040,7425,7305],{},[3040,7427,7308],{},[3040,7429,7311],{},"), you can replace them as follows with utilities from ",[3040,7432,7433],{},"knitwork",[3052,7435,7436],{"language":3251,"class":3253},[3040,7437,7438,3279,7458,3279,7460,3279,7582,3279,7584,3279,7627,3279,7654,3279,7666,3279,7710,3279,7714,3279,7733,3279,7751,3279,7755,3279,7757],{"class":3256},[3061,7439,7440,3264,7442,7444,7445,7447,7448,7450,7451,3264,7453,3264,7455],{"class":3063,"style":3064},[3061,7441,5127],{"class":3261,"style":3262},[3061,7443,3278],{"class":3273,"style":3274}," genDynamicImport",[3061,7446,3300],{"class":3073,"style":3074}," genImport",[3061,7449,3300],{"class":3073,"style":3074}," genSafeVariableName ",[3061,7452,3306],{"class":3273,"style":3274},[3061,7454,5142],{"class":3261,"style":3262},[3061,7456,7457],{"class":4058,"style":4059},"'knitwork'",[3061,7459],{"class":3063,"style":3064},[3061,7461,7462,7464,7465,3264,7467,4129,7469,7472,3264,7474,3264,7476,7479,7481,7484,4129,7486,3264,7488,7490,3264,7492,7495,7497,7499,7502,7504,7507,7510,7513,7515,7517,7520,7523,7525,7528,7531,7533,7534,3264,7536,7538,7540,7543,7545,7546,7548,7550,7552,7554,7556,7558,7560,7562,7565,7567,7569,7571,7573,3264,7575,7578,7580],{"class":3063,"style":3064},[3061,7463,4213],{"class":3261,"style":3262}," serialize ",[3061,7466,3075],{"class":3073,"style":3074},[3061,7468,3275],{"class":3273,"style":3274},[3061,7470,7471],{"class":4339,"style":4340},": any",[3061,7473,3469],{"class":3273,"style":3274},[3061,7475,4239],{"class":3261,"style":3262},[3061,7477,7478],{"class":3295,"style":3296},"JSON",[3061,7480,3210],{"class":3073,"style":3074},[3061,7482,7483],{"class":3067,"style":3068},"stringify",[3061,7485,3275],{"class":3273,"style":3274},[3061,7487,3300],{"class":3073,"style":3074},[3061,7489,6071],{"class":3295,"style":3296},[3061,7491,3300],{"class":3073,"style":3074},[3061,7493,7494],{"class":3295,"style":3296},"2",[3061,7496,3469],{"class":3273,"style":3274},[3061,7498,3210],{"class":3073,"style":3074},[3061,7500,7501],{"class":3067,"style":3068},"replace",[3061,7503,3275],{"class":3273,"style":3274},[3061,7505,7506],{"class":3073,"style":3074},"\u002F\"",[3061,7508,7509],{"class":3261,"style":3262},"\\{",[3061,7511,7512],{"class":3073,"style":3074},"(.",[3061,7514,7247],{"class":5337,"style":4478},[3061,7516,3469],{"class":3073,"style":3074},[3061,7518,7519],{"class":3261,"style":3262},"\\}",[3061,7521,7522],{"class":3073,"style":3074},"\"(?=,?",[3061,7524,7248],{"class":3261,"style":3262},[3061,7526,7527],{"class":3073,"style":3074},")\u002F",[3061,7529,7530],{"class":3261,"style":3262},"gm",[3061,7532,3300],{"class":3073,"style":3074}," r ",[3061,7535,4239],{"class":3261,"style":3262},[3061,7537,7478],{"class":3295,"style":3296},[3061,7539,3210],{"class":3073,"style":3074},[3061,7541,7542],{"class":3067,"style":3068},"parse",[3061,7544,3275],{"class":3273,"style":3274},"r",[3061,7547,3469],{"class":3273,"style":3274},[3061,7549,3210],{"class":3073,"style":3074},[3061,7551,7501],{"class":3067,"style":3068},[3061,7553,3275],{"class":3273,"style":3274},[3061,7555,6468],{"class":3073,"style":3074},[3061,7557,7240],{"class":3261,"style":3262},[3061,7559,7509],{"class":3261,"style":3262},[3061,7561,7512],{"class":3073,"style":3074},[3061,7563,7564],{"class":5337,"style":4478},"*",[3061,7566,3469],{"class":3073,"style":3074},[3061,7568,7519],{"class":3261,"style":3262},[3061,7570,7248],{"class":3261,"style":3262},[3061,7572,6468],{"class":3073,"style":3074},[3061,7574,3300],{"class":3073,"style":3074},[3061,7576,7577],{"class":4058,"style":4059},"'$1'",[3061,7579,3469],{"class":3273,"style":3274},[3061,7581,3469],{"class":3273,"style":3274},[3061,7583],{"class":3063,"style":3064},[3061,7585,7586,7588,7589,3264,7591,7593,7594,3264,7596,7599,7600,7602,7604,3264,7606,7608,7609,3264,7611,3264,7613,3264,7615,3264,7617,7619,7621,3264,7623,3264,7625],{"class":3063,"style":3064},[3061,7587,4213],{"class":3261,"style":3262}," importSources ",[3061,7590,3075],{"class":3073,"style":3074},[3061,7592,3275],{"class":3273,"style":3274},"sources",[3061,7595,4341],{"class":4339,"style":4340},[3061,7597,7598],{"class":3073,"style":3074},"|"," string",[3061,7601,4719],{"class":3273,"style":3274},[3061,7603,4730],{"class":3273,"style":3274},[3061,7605,3300],{"class":3073,"style":3074},[3061,7607,3278],{"class":3273,"style":3274}," lazy ",[3061,7610,3075],{"class":3073,"style":3074},[3061,7612,4260],{"class":4258,"style":4259},[3061,7614,3306],{"class":3273,"style":3274},[3061,7616,3075],{"class":3073,"style":3074},[3061,7618,3278],{"class":3273,"style":3274},[3061,7620,3306],{"class":3273,"style":3274},[3061,7622,3469],{"class":3273,"style":3274},[3061,7624,4239],{"class":3261,"style":3262},[3061,7626,3278],{"class":3273,"style":3274},[3061,7628,3303,7629,3264,7631,7634,7593,7636,7638,7640,7643,7645,7647,7648,3264,7650,3264,7652],{"class":3063,"style":3064},[3061,7630,4350],{"class":3261,"style":3262},[3061,7632,7633],{"class":3067,"style":3068},"toArray",[3061,7635,3275],{"class":3273,"style":3274},[3061,7637,3469],{"class":3273,"style":3274},[3061,7639,3210],{"class":3073,"style":3074},[3061,7641,7642],{"class":3067,"style":3068},"map",[3061,7644,3275],{"class":3273,"style":3274},[3061,7646,3275],{"class":3273,"style":3274},"src",[3061,7649,3469],{"class":3273,"style":3274},[3061,7651,4239],{"class":3261,"style":3262},[3061,7653,3278],{"class":3273,"style":3274},[3061,7655,4357,7656,3264,7659,7661,7662,3264,7664],{"class":3063,"style":3064},[3061,7657,7658],{"class":3261,"style":3262},"if",[3061,7660,3275],{"class":3273,"style":3274},"lazy",[3061,7663,3469],{"class":3273,"style":3274},[3061,7665,3278],{"class":3273,"style":3274},[3061,7667,6167,7668,3264,7670,7673,7675,7678,7647,7680,7682,7684,7687,7689,7690,7692,7693,7695,7697,7699,7701,7647,7703,7705,7707],{"class":3063,"style":3064},[3061,7669,4350],{"class":3261,"style":3262},[3061,7671,7672],{"class":4058,"style":4059},"`const ",[3061,7674,4363],{"class":3261,"style":3262},[3061,7676,7677],{"class":3067,"style":3068},"genSafeVariableName",[3061,7679,3275],{"class":3273,"style":3274},[3061,7681,3469],{"class":3273,"style":3274},[3061,7683,3306],{"class":3261,"style":3262},[3061,7685,7686],{"class":4058,"style":4059}," = ",[3061,7688,4363],{"class":3261,"style":3262},"genDynamicImport(src, { comment: `webpackChunkName",[3061,7691,3285],{"class":3073,"style":3074}," $",[3061,7694,3278],{"class":3273,"style":3274},[3061,7696,7478],{"class":3295,"style":3296},[3061,7698,3210],{"class":3073,"style":3074},[3061,7700,7483],{"class":3067,"style":3068},[3061,7702,3275],{"class":3273,"style":3274},[3061,7704,3469],{"class":3273,"style":3274},[3061,7706,3306],{"class":3273,"style":3274},[3061,7708,7709],{"class":4058,"style":4059},"` })}`",[3061,7711,4357,7712],{"class":3063,"style":3064},[3061,7713,3306],{"class":3273,"style":3274},[3061,7715,4357,7716,3264,7718,7721,7647,7723,3264,7725,7727,7647,7729,7731],{"class":3063,"style":3064},[3061,7717,4350],{"class":3261,"style":3262},[3061,7719,7720],{"class":3067,"style":3068},"genImport",[3061,7722,3275],{"class":3273,"style":3274},[3061,7724,3300],{"class":3073,"style":3074},[3061,7726,7677],{"class":3067,"style":3068},[3061,7728,3275],{"class":3273,"style":3274},[3061,7730,3469],{"class":3273,"style":3274},[3061,7732,3469],{"class":3273,"style":3274},[3061,7734,3303,7735,7737,7739,7741,7744,7746,7749],{"class":3063,"style":3064},[3061,7736,3306],{"class":3273,"style":3274},[3061,7738,3469],{"class":3273,"style":3274},[3061,7740,3210],{"class":3073,"style":3074},[3061,7742,7743],{"class":3067,"style":3068},"join",[3061,7745,3275],{"class":3273,"style":3274},[3061,7747,7748],{"class":4058,"style":4059},"'\\n'",[3061,7750,3469],{"class":3273,"style":3274},[3061,7752,7753],{"class":3063,"style":3064},[3061,7754,3306],{"class":3273,"style":3274},[3061,7756],{"class":3063,"style":3064},[3061,7758,7759,7761,7762,7764],{"class":3063,"style":3064},[3061,7760,4213],{"class":3261,"style":3262}," importName ",[3061,7763,3075],{"class":3073,"style":3074}," genSafeVariableName",[3982,7766,6103,7767],{},[3040,7768,7769],{},"npx codemod@latest nuxt\u002F4\u002Ftemplate-compilation-changes",[3027,7771,2971],{"id":2970},[3030,7773,3612,7774,4595],{},[3217,7775,3615],{},[3632,7777,2772],{"id":2974},[3030,7779,7780,7783,7784,7786,7787,3210],{},[3040,7781,7782],{},"compilerOptions.noUncheckedIndexedAccess"," is now ",[3040,7785,4308],{}," instead of ",[3040,7788,4260],{},[3632,7790,2775],{"id":2976},[3030,7792,7793,7794,7798,7799,3210],{},"This change is a follow up to a prior ",[3034,7795,7797],{"href":7796},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F27485","3.12 config update"," where we improved our defaults, mostly adhering to ",[3034,7800,7802],{"href":7801},"https:\u002F\u002Fwww.totaltypescript.com\u002Ftsconfig-cheat-sheet","TotalTypeScript's recommendations",[3632,7804,2778],{"id":2978},[3030,7806,7807],{},"There are two approaches:",[3858,7809,7810,7813],{},[3638,7811,7812],{},"Run a typecheck on your app and fix any new errors (recommended).",[3638,7814,7815,7820,7824],{},[3030,7816,7817,7818,3285],{},"Override the new default in your ",[3040,7819,234],{},[7821,7822,7823],null,{}," @case-police-ignore tsConfig ",[3052,7825,7826],{"language":3251,"class":3253},[3040,7827,7828,3279,7840,3279,7847,3279,7854,3279,7861,3279,7870,3279,7876,3279,7882,3279,7888],{"class":3256},[3061,7829,7830,3264,7832,3264,7834,7836,7838],{"class":3063,"style":3064},[3061,7831,3263],{"class":3261,"style":3262},[3061,7833,3267],{"class":3261,"style":3262},[3061,7835,3270],{"class":3067,"style":3068},[3061,7837,3275],{"class":3273,"style":3274},[3061,7839,3278],{"class":3273,"style":3274},[3061,7841,7842,7843,3264,7845],{"class":3063,"style":3064},"  typescript",[3061,7844,3285],{"class":3073,"style":3074},[3061,7846,3278],{"class":3273,"style":3274},[3061,7848,7849,7850,3264,7852],{"class":3063,"style":3064},"    tsConfig",[3061,7851,3285],{"class":3073,"style":3074},[3061,7853,3278],{"class":3273,"style":3274},[3061,7855,7856,7857,3264,7859],{"class":3063,"style":3064},"      compilerOptions",[3061,7858,3285],{"class":3073,"style":3074},[3061,7860,3278],{"class":3273,"style":3274},[3061,7862,7863,7864,3264,7866,7868],{"class":3063,"style":3064},"        noUncheckedIndexedAccess",[3061,7865,3285],{"class":3073,"style":3074},[3061,7867,4260],{"class":4258,"style":4259},[3061,7869,3300],{"class":3073,"style":3074},[3061,7871,6167,7872,7874],{"class":3063,"style":3064},[3061,7873,3306],{"class":3273,"style":3274},[3061,7875,3300],{"class":3073,"style":3074},[3061,7877,4357,7878,7880],{"class":3063,"style":3064},[3061,7879,3306],{"class":3273,"style":3274},[3061,7881,3300],{"class":3073,"style":3074},[3061,7883,3303,7884,7886],{"class":3063,"style":3064},[3061,7885,3306],{"class":3273,"style":3274},[3061,7887,3300],{"class":3073,"style":3074},[3061,7889,7890,7892],{"class":3063,"style":3064},[3061,7891,3306],{"class":3273,"style":3274},[3061,7893,3469],{"class":3273,"style":3274},[3027,7895,2981],{"id":2980},[3030,7897,3612,7898,4595],{},[3217,7899,3615],{},[3632,7901,2772],{"id":2984},[3030,7903,7904],{},"Nuxt now generates separate TypeScript configurations for different contexts to provide better type-checking experiences:",[3858,7906,7907,7950,7959,7965,7971],{},[3638,7908,7909,7915],{},[3030,7910,7911,7914],{},[3217,7912,7913],{},"New TypeScript configuration files",": Nuxt now generates additional TypeScript configurations:",[3635,7916,7917,7923,7929,7938,7944],{},[3638,7918,7919,7922],{},[3040,7920,7921],{},".nuxt\u002Ftsconfig.app.json"," - For your app code (Vue components, composables, etc.)",[3638,7924,7925,7928],{},[3040,7926,7927],{},".nuxt\u002Ftsconfig.server.json"," - For your server-side code (Nitro\u002Fserver directory)",[3638,7930,7931,7934,7935,7937],{},[3040,7932,7933],{},".nuxt\u002Ftsconfig.node.json"," - For your build-time code (modules, ",[3040,7936,234],{},", etc.)",[3638,7939,7940,7943],{},[3040,7941,7942],{},".nuxt\u002Ftsconfig.shared.json"," - For code shared between app and server contexts (like types and non-environment specific utilities)",[3638,7945,7946,7949],{},[3040,7947,7948],{},".nuxt\u002Ftsconfig.json"," - Legacy configuration for backward compatibility",[3638,7951,7952,7955,7956,7958],{},[3217,7953,7954],{},"Backward compatibility",": Existing projects that extend ",[3040,7957,7948],{}," will continue to work as before.",[3638,7960,7961,7964],{},[3217,7962,7963],{},"Opt-in project references",": New projects or those wanting better type checking can adopt TypeScript's project references feature.",[3638,7966,7967,7970],{},[3217,7968,7969],{},"Context-specific type checking",": Each context now has appropriate compiler options and includes\u002Fexcludes for its specific environment.",[3638,7972,7973,7980],{},[3217,7974,7975,7976,7979],{},"New ",[3040,7977,7978],{},"typescript.nodeTsConfig"," option",": You can now customize the TypeScript configuration for Node.js build-time code.",[3632,7982,2775],{"id":2986},[3030,7984,7985],{},"This change provides several benefits:",[3858,7987,7988,7994,8000,8006],{},[3638,7989,7990,7993],{},[3217,7991,7992],{},"Better type safety",": Each context (app, server, build-time) gets appropriate type checking with context-specific globals and APIs.",[3638,7995,7996,7999],{},[3217,7997,7998],{},"Improved IDE experience",": Better IntelliSense and error reporting for different parts of your codebase.",[3638,8001,8002,8005],{},[3217,8003,8004],{},"Cleaner separation",": Server code won't incorrectly suggest client-side APIs and vice versa.",[3638,8007,8008,8010],{},[3217,8009,3864],{},": TypeScript can more efficiently check code with properly scoped configurations.",[3030,8012,8013,8014,8016,8017,8019,8020,8022],{},"For example, auto-imports are not available in your ",[3040,8015,234],{}," (but previously this was not flagged by TypeScript). And while IDEs recognized the separate context hinted by ",[3040,8018,244],{}," in your ",[3040,8021,3805],{}," directory, this was not reflected in type-checking (requiring a separate step).",[3632,8024,2778],{"id":2988},[3030,8026,8027,8030],{},[3217,8028,8029],{},"No migration is required"," - existing projects will continue to work as before.",[3030,8032,8033],{},"However, to take advantage of improved type checking, you can opt in to the new project references approach:",[3858,8035,8036,8146,8160,8182,8222,8381],{},[3638,8037,8038,8046,8060],{},[3030,8039,8040,8045],{},[3217,8041,8042,8043],{},"Update your root ",[3040,8044,244],{}," to use project references:",[3112,8047,8048,8049,8051,8052,8055,8056,8059],{},"If your ",[3040,8050,244],{}," currently has an ",[3040,8053,8054],{},"\"extends\": \".\u002F.nuxt\u002Ftsconfig.json\""," line, ",[3217,8057,8058],{},"remove it"," before adding the references. Project references and extends are mutually exclusive.",[3052,8061,8064],{"language":8062,"class":8063},"json","shj shiki shj-lang-json",[3040,8065,8067,3279,8071,3279,8076,3279,8086,3279,8093,3279,8105,3279,8116,3279,8127,3279,8138,3279,8142],{"class":8066},"language-json",[3061,8068,8069],{"class":3063,"style":3064},[3061,8070,3278],{"class":3273,"style":3274},[3061,8072,3303,8073],{"class":3063,"style":3064},[3061,8074,8075],{"class":3313,"style":3314},"\u002F\u002F Remove \"extends\": \".\u002F.nuxt\u002Ftsconfig.json\" if present",[3061,8077,3303,8078,8081,8082,8084,3300],{"class":3063,"style":3064},[3061,8079,8080],{"class":5337,"style":4478},"\"files\"",": ",[3061,8083,4719],{"class":3273,"style":3274},[3061,8085,4730],{"class":3273,"style":3274},[3061,8087,3303,8088,8081,8091],{"class":3063,"style":3064},[3061,8089,8090],{"class":5337,"style":4478},"\"references\"",[3061,8092,4719],{"class":3273,"style":3274},[3061,8094,4357,8095,3264,8097,8081,8100,3264,8103,3300],{"class":3063,"style":3064},[3061,8096,3278],{"class":3273,"style":3274},[3061,8098,8099],{"class":5337,"style":4478},"\"path\"",[3061,8101,8102],{"class":4058,"style":4059},"\".\u002F.nuxt\u002Ftsconfig.app.json\"",[3061,8104,3306],{"class":3273,"style":3274},[3061,8106,4357,8107,3264,8109,8081,8111,3264,8114,3300],{"class":3063,"style":3064},[3061,8108,3278],{"class":3273,"style":3274},[3061,8110,8099],{"class":5337,"style":4478},[3061,8112,8113],{"class":4058,"style":4059},"\".\u002F.nuxt\u002Ftsconfig.server.json\"",[3061,8115,3306],{"class":3273,"style":3274},[3061,8117,4357,8118,3264,8120,8081,8122,3264,8125,3300],{"class":3063,"style":3064},[3061,8119,3278],{"class":3273,"style":3274},[3061,8121,8099],{"class":5337,"style":4478},[3061,8123,8124],{"class":4058,"style":4059},"\".\u002F.nuxt\u002Ftsconfig.shared.json\"",[3061,8126,3306],{"class":3273,"style":3274},[3061,8128,4357,8129,3264,8131,8081,8133,3264,8136],{"class":3063,"style":3064},[3061,8130,3278],{"class":3273,"style":3274},[3061,8132,8099],{"class":5337,"style":4478},[3061,8134,8135],{"class":4058,"style":4059},"\".\u002F.nuxt\u002Ftsconfig.node.json\"",[3061,8137,3306],{"class":3273,"style":3274},[3061,8139,3303,8140],{"class":3063,"style":3064},[3061,8141,4730],{"class":3273,"style":3274},[3061,8143,8144],{"class":3063,"style":3064},[3061,8145,3306],{"class":3273,"style":3274},[3638,8147,8148,8153,8154,8157,8158,3210],{},[3217,8149,8150,8151],{},"Remove any manual server ",[3040,8152,244],{}," files (like ",[3040,8155,8156],{},"server\u002Ftsconfig.json",") that extended ",[3040,8159,7927],{},[3638,8161,8162,8168],{},[3030,8163,8164,8167],{},[3217,8165,8166],{},"Update your type checking scripts"," to use the build flag for project references:",[3052,8169,8170],{"language":4465,"class":4466},[3040,8171,8172,3279,8177],{"class":4469},[3061,8173,8174],{"class":3063,"style":3064},[3061,8175,8176],{"class":4477,"style":4478},"- \"typecheck\": \"nuxt prepare && vue-tsc --noEmit\"",[3061,8178,8179],{"class":3063,"style":3064},[3061,8180,8181],{"class":4494,"style":4059},"+ \"typecheck\": \"nuxt prepare && vue-tsc -b --noEmit\"",[3638,8183,8184,8189,8211],{},[3030,8185,8186,3285],{},[3217,8187,8188],{},"Move all type augmentations into their appropriate context",[3635,8190,8191,8197,8202],{},[3638,8192,8193,8194,8196],{},"If you are augmenting types for the app context, move the files to the ",[3040,8195,3647],{}," directory.",[3638,8198,8199,8200,8196],{},"If you are augmenting types for the server context, move the files to the ",[3040,8201,3805],{},[3638,8203,8204,8205,8208,8209,8196],{},"If you are augmenting types that are ",[3217,8206,8207],{},"shared between the app and server",", move the files to the ",[3040,8210,3716],{},[3200,8212,8213,8214,3667,8216,8218,8219,8221],{},"Augmenting types from outside the ",[3040,8215,3647],{},[3040,8217,3805],{},", or ",[3040,8220,3716],{}," directories will not work with the new project references setup.",[3638,8223,8224,8230,8232],{},[3030,8225,8226,8229],{},[3217,8227,8228],{},"Configure TypeScript options"," if needed:",[7821,8231,7823],{},[3052,8233,8234],{"language":3251,"class":3253},[3040,8235,8236,3279,8248,3279,8254,3279,8259,3279,8265,3279,8270,3279,8276,3279,8281,3279,8288,3279,8292,3279,8298,3279,8303,3279,8310,3279,8314,3279,8320,3279,8326,3279,8333,3279,8340,3279,8345,3279,8352,3279,8357,3279,8363,3279,8369,3279,8375],{"class":3256},[3061,8237,8238,3264,8240,3264,8242,8244,8246],{"class":3063,"style":3064},[3061,8239,3263],{"class":3261,"style":3262},[3061,8241,3267],{"class":3261,"style":3262},[3061,8243,3270],{"class":3067,"style":3068},[3061,8245,3275],{"class":3273,"style":3274},[3061,8247,3278],{"class":3273,"style":3274},[3061,8249,7842,8250,3264,8252],{"class":3063,"style":3064},[3061,8251,3285],{"class":3073,"style":3074},[3061,8253,3278],{"class":3273,"style":3274},[3061,8255,4357,8256],{"class":3063,"style":3064},[3061,8257,8258],{"class":3313,"style":3314},"\u002F\u002F customize tsconfig.app.json",[3061,8260,7849,8261,3264,8263],{"class":3063,"style":3064},[3061,8262,3285],{"class":3073,"style":3074},[3061,8264,3278],{"class":3273,"style":3274},[3061,8266,6167,8267],{"class":3063,"style":3064},[3061,8268,8269],{"class":3313,"style":3314},"\u002F\u002F ...",[3061,8271,4357,8272,8274],{"class":3063,"style":3064},[3061,8273,3306],{"class":3273,"style":3274},[3061,8275,3300],{"class":3073,"style":3074},[3061,8277,4357,8278],{"class":3063,"style":3064},[3061,8279,8280],{"class":3313,"style":3314},"\u002F\u002F customize tsconfig.shared.json",[3061,8282,8283,8284,3264,8286],{"class":3063,"style":3064},"    sharedTsConfig",[3061,8285,3285],{"class":3073,"style":3074},[3061,8287,3278],{"class":3273,"style":3274},[3061,8289,6167,8290],{"class":3063,"style":3064},[3061,8291,8269],{"class":3313,"style":3314},[3061,8293,4357,8294,8296],{"class":3063,"style":3064},[3061,8295,3306],{"class":3273,"style":3274},[3061,8297,3300],{"class":3073,"style":3074},[3061,8299,4357,8300],{"class":3063,"style":3064},[3061,8301,8302],{"class":3313,"style":3314},"\u002F\u002F customize tsconfig.node.json",[3061,8304,8305,8306,3264,8308],{"class":3063,"style":3064},"    nodeTsConfig",[3061,8307,3285],{"class":3073,"style":3074},[3061,8309,3278],{"class":3273,"style":3274},[3061,8311,6167,8312],{"class":3063,"style":3064},[3061,8313,8269],{"class":3313,"style":3314},[3061,8315,4357,8316,8318],{"class":3063,"style":3064},[3061,8317,3306],{"class":3273,"style":3274},[3061,8319,3300],{"class":3073,"style":3074},[3061,8321,3303,8322,8324],{"class":3063,"style":3064},[3061,8323,3306],{"class":3273,"style":3274},[3061,8325,3300],{"class":3073,"style":3074},[3061,8327,8328,8329,3264,8331],{"class":3063,"style":3064},"  nitro",[3061,8330,3285],{"class":3073,"style":3074},[3061,8332,3278],{"class":3273,"style":3274},[3061,8334,8335,8336,3264,8338],{"class":3063,"style":3064},"    typescript",[3061,8337,3285],{"class":3073,"style":3074},[3061,8339,3278],{"class":3273,"style":3274},[3061,8341,6167,8342],{"class":3063,"style":3064},[3061,8343,8344],{"class":3313,"style":3314},"\u002F\u002F customize tsconfig.server.json",[3061,8346,8347,8348,3264,8350],{"class":3063,"style":3064},"      tsConfig",[3061,8349,3285],{"class":3073,"style":3074},[3061,8351,3278],{"class":3273,"style":3274},[3061,8353,8354,8355],{"class":3063,"style":3064},"        ",[3061,8356,8269],{"class":3313,"style":3314},[3061,8358,6167,8359,8361],{"class":3063,"style":3064},[3061,8360,3306],{"class":3273,"style":3274},[3061,8362,3300],{"class":3073,"style":3074},[3061,8364,4357,8365,8367],{"class":3063,"style":3064},[3061,8366,3306],{"class":3273,"style":3274},[3061,8368,3300],{"class":3073,"style":3074},[3061,8370,3303,8371,8373],{"class":3063,"style":3064},[3061,8372,3306],{"class":3273,"style":3274},[3061,8374,3300],{"class":3073,"style":3074},[3061,8376,8377,8379],{"class":3063,"style":3064},[3061,8378,3306],{"class":3273,"style":3274},[3061,8380,3469],{"class":3273,"style":3274},[3638,8382,8383,8386],{},[3217,8384,8385],{},"Update any CI\u002Fbuild scripts"," that run TypeScript checking to ensure they use the new project references approach.",[3030,8388,8389],{},"The new configuration provides better type safety and IntelliSense for projects that opt in, while maintaining full backward compatibility for existing setups.",[3027,8391,2991],{"id":2990},[3030,8393,3612,8394,4595],{},[3217,8395,3615],{},[3632,8397,2772],{"id":2994},[3030,8399,8400],{},"Four experimental features are no longer configurable in Nuxt 4:",[3635,8402,8403,8411,8419,8427,8434],{},[3638,8404,8405,6570,8408,8410],{},[3040,8406,8407],{},"experimental.treeshakeClientOnly",[3040,8409,4308],{}," (default since v3.0)",[3638,8412,8413,6570,8416,8418],{},[3040,8414,8415],{},"experimental.configSchema",[3040,8417,4308],{}," (default since v3.3)",[3638,8420,8421,6570,8424,8426],{},[3040,8422,8423],{},"experimental.polyfillVueUseHead",[3040,8425,4260],{}," (default since v3.4)",[3638,8428,8429,6570,8432,8426],{},[3040,8430,8431],{},"experimental.respectNoSSRHeader",[3040,8433,4260],{},[3638,8435,8436,8439,8440,3679],{},[3040,8437,8438],{},"vite.devBundler"," is no longer configurable - it will use ",[3040,8441,8442],{},"vite-node",[3632,8444,2775],{"id":2996},[3030,8446,8447],{},"These options have been set to their current values for some time and we do not have a reason to believe that they need to remain configurable.",[3632,8449,2778],{"id":2998},[3635,8451,8452,8462],{},[3638,8453,8454,8457,8458],{},[3040,8455,8456],{},"polyfillVueUseHead"," is implementable in user-land with ",[3034,8459,8461],{"href":8460},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fblob\u002Ff209158352b09d1986aa320e29ff36353b91c358\u002Fpackages\u002Fnuxt\u002Fsrc\u002Fhead\u002Fruntime\u002Fplugins\u002Fvueuse-head-polyfill.ts#L10-L11","this plugin",[3638,8463,8464,8467,8468],{},[3040,8465,8466],{},"respectNoSSRHeader","is implementable in user-land with ",[3034,8469,8471],{"href":8470},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fblob\u002Fc660b39447f0d5b8790c0826092638d321cd6821\u002Fpackages\u002Fnuxt\u002Fsrc\u002Fcore\u002Fruntime\u002Fnitro\u002Fno-ssr.ts#L8-L9","server middleware",[3027,8473,8474,8475,8477],{"id":3000},"Removal of Top-Level ",[3040,8476,900],{}," Configuration",[3030,8479,3612,8480,4595],{},[3217,8481,3615],{},[3632,8483,2772],{"id":3004},[3030,8485,8486,8487,8489],{},"The top-level ",[3040,8488,900],{}," configuration option is no longer available in Nuxt 4. This includes all of its properties:",[3635,8491,8492,8498],{},[3638,8493,8494,8497],{},[3040,8495,8496],{},"generate.exclude"," - for excluding routes from prerendering",[3638,8499,8500,8503],{},[3040,8501,8502],{},"generate.routes"," - for specifying routes to prerender",[3632,8505,2775],{"id":3006},[3030,8507,8508,8509,8511,8512,8515],{},"The top level ",[3040,8510,900],{}," configuration was a holdover from Nuxt 2. We've supported ",[3040,8513,8514],{},"nitro.prerender"," for a while now, and it is the preferred way to configure prerendering in Nuxt 3+.",[3632,8517,2778],{"id":3008},[3030,8519,8520,8521,8523,8524,8526],{},"Replace ",[3040,8522,900],{}," configuration with the corresponding ",[3040,8525,8514],{}," options:",[3052,8528,8529],{"language":4465,"class":4466},[3040,8530,8531,3279,8534,3279,8539,3279,8544,3279,8549,3279,8554,3279,8559,3279,8564,3279,8569,3279,8574,3279,8579,3279,8584],{"class":4469},[3061,8532,8533],{"class":3063,"style":3064},"export default defineNuxtConfig({",[3061,8535,8536],{"class":3063,"style":3064},[3061,8537,8538],{"class":4477,"style":4478},"- generate: {",[3061,8540,8541],{"class":3063,"style":3064},[3061,8542,8543],{"class":4477,"style":4478},"-   exclude: ['\u002Fadmin', '\u002Fprivate'],",[3061,8545,8546],{"class":3063,"style":3064},[3061,8547,8548],{"class":4477,"style":4478},"-   routes: ['\u002Fsitemap.xml', '\u002Frobots.txt']",[3061,8550,8551],{"class":3063,"style":3064},[3061,8552,8553],{"class":4477,"style":4478},"- }",[3061,8555,8556],{"class":3063,"style":3064},[3061,8557,8558],{"class":4494,"style":4059},"+ nitro: {",[3061,8560,8561],{"class":3063,"style":3064},[3061,8562,8563],{"class":4494,"style":4059},"+   prerender: {",[3061,8565,8566],{"class":3063,"style":3064},[3061,8567,8568],{"class":4494,"style":4059},"+     ignore: ['\u002Fadmin', '\u002Fprivate'],",[3061,8570,8571],{"class":3063,"style":3064},[3061,8572,8573],{"class":4494,"style":4059},"+     routes: ['\u002Fsitemap.xml', '\u002Frobots.txt']",[3061,8575,8576],{"class":3063,"style":3064},[3061,8577,8578],{"class":4494,"style":4059},"+   }",[3061,8580,8581],{"class":3063,"style":3064},[3061,8582,8583],{"class":4494,"style":4059},"+ }",[3061,8585,4532],{"class":3063,"style":3064},[8587,8588,8590],"read-more",{"to":8589},"https:\u002F\u002Fnitro.build\u002Fconfig#prerender","Read more about Nitro's prerender configuration options.",[3024,8592,3011],{"id":3010},[3030,8594,8595],{},"In the table below, there is a quick comparison between 3 versions of Nuxt:",[8597,8598,8599,8618],"table",{},[8600,8601,8602],"thead",{},[8603,8604,8605,8609,8612,8615],"tr",{},[8606,8607,8608],"th",{},"Feature \u002F Version",[8606,8610,8611],{},"Nuxt 2",[8606,8613,8614],{},"Nuxt Bridge",[8606,8616,8617],{},"Nuxt 3+",[8619,8620,8621,8634,8646,8659,8672,8685,8697,8708,8719,8730,8744,8754,8766,8777,8789],"tbody",{},[8603,8622,8623,8627,8629,8631],{},[8624,8625,8626],"td",{},"Vue",[8624,8628,7494],{},[8624,8630,7494],{},[8624,8632,8633],{},"3",[8603,8635,8636,8639,8642,8644],{},[8624,8637,8638],{},"Stability",[8624,8640,8641],{},"😊 Stable",[8624,8643,8641],{},[8624,8645,8641],{},[8603,8647,8648,8650,8653,8656],{},[8624,8649,3864],{},[8624,8651,8652],{},"🏎 Fast",[8624,8654,8655],{},"✈️ Faster",[8624,8657,8658],{},"🚀 Fastest",[8603,8660,8661,8664,8667,8670],{},[8624,8662,8663],{},"Nitro Engine",[8624,8665,8666],{},"❌",[8624,8668,8669],{},"✅",[8624,8671,8669],{},[8603,8673,8674,8677,8680,8683],{},[8624,8675,8676],{},"ESM support",[8624,8678,8679],{},"🌙 Partial",[8624,8681,8682],{},"👍 Better",[8624,8684,8669],{},[8603,8686,8687,8689,8692,8695],{},[8624,8688,285],{},[8624,8690,8691],{},"☑️ Opt-in",[8624,8693,8694],{},"🚧 Partial",[8624,8696,8669],{},[8603,8698,8699,8702,8704,8706],{},[8624,8700,8701],{},"Composition API",[8624,8703,8666],{},[8624,8705,8694],{},[8624,8707,8669],{},[8603,8709,8710,8713,8715,8717],{},[8624,8711,8712],{},"Options API",[8624,8714,8669],{},[8624,8716,8669],{},[8624,8718,8669],{},[8603,8720,8721,8724,8726,8728],{},[8624,8722,8723],{},"Components Auto Import",[8624,8725,8669],{},[8624,8727,8669],{},[8624,8729,8669],{},[8603,8731,8732,8738,8740,8742],{},[8624,8733,8734,8737],{},[3040,8735,8736],{},"\u003Cscript setup>"," syntax",[8624,8739,8666],{},[8624,8741,8694],{},[8624,8743,8669],{},[8603,8745,8746,8748,8750,8752],{},[8624,8747,1063],{},[8624,8749,8666],{},[8624,8751,8669],{},[8624,8753,8669],{},[8603,8755,8756,8759,8761,8763],{},[8624,8757,8758],{},"webpack",[8624,8760,3297],{},[8624,8762,3297],{},[8624,8764,8765],{},"5",[8603,8767,8768,8770,8773,8775],{},[8624,8769,1233],{},[8624,8771,8772],{},"⚠️ Partial",[8624,8774,8694],{},[8624,8776,8669],{},[8603,8778,8779,8781,8784,8787],{},[8624,8780,853],{},[8624,8782,8783],{},"❌ Old",[8624,8785,8786],{},"✅ nuxt",[8624,8788,8786],{},[8603,8790,8791,8794,8796,8798],{},[8624,8792,8793],{},"Static sites",[8624,8795,8669],{},[8624,8797,8669],{},[8624,8799,8669],{},[3024,8801,3014],{"id":3013},[3030,8803,8804],{},"The migration guide provides a step-by-step comparison of Nuxt 2 features to Nuxt 3+ features and guidance to adapt your current application.",[8587,8806,8807,8808,3210],{"to":1250},"Check out the ",[3217,8809,8810],{},"guide to migrating from Nuxt 2 to Nuxt 3",[3024,8812,3017],{"id":3016},[3030,8814,8815],{},"If you prefer to progressively migrate your Nuxt 2 application to Nuxt 3, you can use Nuxt Bridge. Nuxt Bridge is a compatibility layer that allows you to use Nuxt 3+ features in Nuxt 2 with an opt-in mechanism.",[8587,8817,8818],{"to":1201},[3217,8819,8820],{},"Migrate from Nuxt 2 to Nuxt Bridge",{"v5":8822,"v4":8823,"v3":8824,"v2":8825},"5 (nightly)","4.5.2","3.21.11","2.18.1"]