[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f30r277ag21rfj":3,"-docs-4-x-getting-started-upgrade":2735,"versions":11335},[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":1339,"data":2736,"meta":2737,"nodes":3139},{"title":102,"description":103,"navigation.icon":1244},{"toc":2738,"key":3135,"source":2310,"stem":105,"extension":3136,"kind":3137,"type":3138,"partial":106},{"title":2739,"searchDepth":2740,"depth":2741,"links":2742},"",2,3,[2743,2752,2861,3126,3129,3132],{"id":2744,"depth":2740,"text":2745,"children":2746},"upgrading-nuxt","Upgrading Nuxt",[2747,2750],{"id":2748,"depth":2741,"text":2749},"upgrading-nuxt-latest-release","Latest release",{"id":2751,"depth":2741,"text":454},"upgrading-nuxt-nightly-release-channel",{"id":2753,"depth":2740,"text":2754,"children":2755},"testing-nuxt-5","Testing Nuxt 5",[2756,2759,2770,2781,2791,2801,2811,2821,2831,2841,2851],{"id":2757,"depth":2741,"text":2758},"testing-nuxt-5-opting-in-to-nuxt-5","Opting in to Nuxt 5",{"id":2760,"depth":2741,"text":2761,"children":2762},"testing-nuxt-5-case-sensitive-routing","Case-Sensitive Routing",[2763,2767],{"id":2764,"depth":2765,"text":2766},"testing-nuxt-5-case-sensitive-routing-what-changed",4,"What Changed",{"id":2768,"depth":2765,"text":2769},"testing-nuxt-5-case-sensitive-routing-migration-steps","Migration Steps",{"id":2771,"depth":2741,"text":2772,"children":2773},"testing-nuxt-5-jiti-is-no-longer-bundled","jiti Is No Longer Bundled",[2774,2776,2779],{"id":2775,"depth":2765,"text":2766},"testing-nuxt-5-jiti-is-no-longer-bundled-what-changed",{"id":2777,"depth":2765,"text":2778},"testing-nuxt-5-jiti-is-no-longer-bundled-reasons-for-change","Reasons for Change",{"id":2780,"depth":2765,"text":2769},"testing-nuxt-5-jiti-is-no-longer-bundled-migration-steps",{"id":2782,"depth":2741,"text":2783,"children":2784},"testing-nuxt-5-migration-to-vite-environment-api","Migration to Vite Environment API",[2785,2787,2789],{"id":2786,"depth":2765,"text":2766},"testing-nuxt-5-migration-to-vite-environment-api-what-changed",{"id":2788,"depth":2765,"text":2778},"testing-nuxt-5-migration-to-vite-environment-api-reasons-for-change",{"id":2790,"depth":2765,"text":2769},"testing-nuxt-5-migration-to-vite-environment-api-migration-steps",{"id":2792,"depth":2741,"text":2793,"children":2794},"testing-nuxt-5-giget-is-now-optional-remote-layers","giget Is Now Optional (Remote Layers)",[2795,2797,2799],{"id":2796,"depth":2765,"text":2766},"testing-nuxt-5-giget-is-now-optional-remote-layers-what-changed",{"id":2798,"depth":2765,"text":2778},"testing-nuxt-5-giget-is-now-optional-remote-layers-reasons-for-change",{"id":2800,"depth":2765,"text":2769},"testing-nuxt-5-giget-is-now-optional-remote-layers-migration-steps",{"id":2802,"depth":2741,"text":2803,"children":2804},"testing-nuxt-5-non-async-callhook","Non-Async callHook",[2805,2807,2809],{"id":2806,"depth":2765,"text":2766},"testing-nuxt-5-non-async-callhook-what-changed",{"id":2808,"depth":2765,"text":2778},"testing-nuxt-5-non-async-callhook-reasons-for-change",{"id":2810,"depth":2765,"text":2769},"testing-nuxt-5-non-async-callhook-migration-steps",{"id":2812,"depth":2741,"text":2813,"children":2814},"testing-nuxt-5-client-only-comment-placeholders","Client-Only Comment Placeholders",[2815,2817,2819],{"id":2816,"depth":2765,"text":2766},"testing-nuxt-5-client-only-comment-placeholders-what-changed",{"id":2818,"depth":2765,"text":2778},"testing-nuxt-5-client-only-comment-placeholders-reasons-for-change",{"id":2820,"depth":2765,"text":2769},"testing-nuxt-5-client-only-comment-placeholders-migration-steps",{"id":2822,"depth":2741,"text":2823,"children":2824},"testing-nuxt-5-stricter-side-effect-imports","Stricter Side-Effect Imports",[2825,2827,2829],{"id":2826,"depth":2765,"text":2766},"testing-nuxt-5-stricter-side-effect-imports-what-changed",{"id":2828,"depth":2765,"text":2778},"testing-nuxt-5-stricter-side-effect-imports-reasons-for-change",{"id":2830,"depth":2765,"text":2769},"testing-nuxt-5-stricter-side-effect-imports-migration-steps",{"id":2832,"depth":2741,"text":2833,"children":2834},"testing-nuxt-5-vue-options-api-disabled-by-default","Vue Options API Disabled by Default",[2835,2837,2839],{"id":2836,"depth":2765,"text":2766},"testing-nuxt-5-vue-options-api-disabled-by-default-what-changed",{"id":2838,"depth":2765,"text":2778},"testing-nuxt-5-vue-options-api-disabled-by-default-reasons-for-change",{"id":2840,"depth":2765,"text":2769},"testing-nuxt-5-vue-options-api-disabled-by-default-migration-steps",{"id":2842,"depth":2741,"text":2843,"children":2844},"testing-nuxt-5-typed-pages-enabled-by-default","Typed Pages Enabled by Default",[2845,2847,2849],{"id":2846,"depth":2765,"text":2766},"testing-nuxt-5-typed-pages-enabled-by-default-what-changed",{"id":2848,"depth":2765,"text":2778},"testing-nuxt-5-typed-pages-enabled-by-default-reasons-for-change",{"id":2850,"depth":2765,"text":2769},"testing-nuxt-5-typed-pages-enabled-by-default-migration-steps",{"id":2852,"depth":2741,"text":2853,"children":2854},"testing-nuxt-5-typescript-baseurl-is-ignored","TypeScript baseUrl Is Ignored",[2855,2857,2859],{"id":2856,"depth":2765,"text":2766},"testing-nuxt-5-typescript-baseurl-is-ignored-what-changed",{"id":2858,"depth":2765,"text":2778},"testing-nuxt-5-typescript-baseurl-is-ignored-reasons-for-change",{"id":2860,"depth":2765,"text":2769},"testing-nuxt-5-typescript-baseurl-is-ignored-migration-steps",{"id":2862,"depth":2740,"text":2863,"children":2864},"migrating-to-nuxt-4","Migrating to Nuxt 4",[2865,2868,2878,2888,2898,2908,2916,2924,2934,2940,2948,2958,2968,2978,2988,2996,3006,3016,3026,3036,3046,3056,3066,3076,3086,3096,3106,3116],{"id":2866,"depth":2741,"text":2867},"migrating-to-nuxt-4-migrating-using-codemods","Migrating Using Codemods",{"id":2869,"depth":2741,"text":2870,"children":2871},"migrating-to-nuxt-4-new-directory-structure","New Directory Structure",[2872,2874,2876],{"id":2873,"depth":2765,"text":2766},"migrating-to-nuxt-4-new-directory-structure-what-changed",{"id":2875,"depth":2765,"text":2778},"migrating-to-nuxt-4-new-directory-structure-reasons-for-change",{"id":2877,"depth":2765,"text":2769},"migrating-to-nuxt-4-new-directory-structure-migration-steps",{"id":2879,"depth":2741,"text":2880,"children":2881},"migrating-to-nuxt-4-singleton-data-fetching-layer","Singleton Data Fetching Layer",[2882,2884,2886],{"id":2883,"depth":2765,"text":2766},"migrating-to-nuxt-4-singleton-data-fetching-layer-what-changed",{"id":2885,"depth":2765,"text":2778},"migrating-to-nuxt-4-singleton-data-fetching-layer-reasons-for-change",{"id":2887,"depth":2765,"text":2769},"migrating-to-nuxt-4-singleton-data-fetching-layer-migration-steps",{"id":2889,"depth":2741,"text":2890,"children":2891},"migrating-to-nuxt-4-corrected-module-loading-order-in-layers","Corrected Module Loading Order in Layers",[2892,2894,2896],{"id":2893,"depth":2765,"text":2766},"migrating-to-nuxt-4-corrected-module-loading-order-in-layers-what-changed",{"id":2895,"depth":2765,"text":2778},"migrating-to-nuxt-4-corrected-module-loading-order-in-layers-reasons-for-change",{"id":2897,"depth":2765,"text":2769},"migrating-to-nuxt-4-corrected-module-loading-order-in-layers-migration-steps",{"id":2899,"depth":2741,"text":2900,"children":2901},"migrating-to-nuxt-4-deduplication-of-route-metadata","Deduplication of Route Metadata",[2902,2904,2906],{"id":2903,"depth":2765,"text":2766},"migrating-to-nuxt-4-deduplication-of-route-metadata-what-changed",{"id":2905,"depth":2765,"text":2778},"migrating-to-nuxt-4-deduplication-of-route-metadata-reasons-for-change",{"id":2907,"depth":2765,"text":2769},"migrating-to-nuxt-4-deduplication-of-route-metadata-migration-steps",{"id":2909,"depth":2741,"text":2910,"children":2911},"migrating-to-nuxt-4-normalized-component-names","Normalized Component Names",[2912,2914],{"id":2913,"depth":2765,"text":2766},"migrating-to-nuxt-4-normalized-component-names-what-changed",{"id":2915,"depth":2765,"text":2769},"migrating-to-nuxt-4-normalized-component-names-migration-steps",{"id":2917,"depth":2741,"text":2918,"children":2919},"migrating-to-nuxt-4-unhead-v2","Unhead v2",[2920,2922],{"id":2921,"depth":2765,"text":2766},"migrating-to-nuxt-4-unhead-v2-what-changed",{"id":2923,"depth":2765,"text":2769},"migrating-to-nuxt-4-unhead-v2-migration-steps",{"id":2925,"depth":2741,"text":2926,"children":2927},"migrating-to-nuxt-4-new-dom-location-for-spa-loading-screen","New DOM Location for SPA Loading Screen",[2928,2930,2932],{"id":2929,"depth":2765,"text":2766},"migrating-to-nuxt-4-new-dom-location-for-spa-loading-screen-what-changed",{"id":2931,"depth":2765,"text":2778},"migrating-to-nuxt-4-new-dom-location-for-spa-loading-screen-reasons-for-change",{"id":2933,"depth":2765,"text":2769},"migrating-to-nuxt-4-new-dom-location-for-spa-loading-screen-migration-steps",{"id":2935,"depth":2741,"text":2936,"children":2937},"migrating-to-nuxt-4-parsed-errordata","Parsed error.data",[2938],{"id":2939,"depth":2765,"text":2769},"migrating-to-nuxt-4-parsed-errordata-migration-steps",{"id":2941,"depth":2741,"text":2942,"children":2943},"migrating-to-nuxt-4-more-granular-inline-styles","More Granular Inline Styles",[2944,2946],{"id":2945,"depth":2765,"text":2766},"migrating-to-nuxt-4-more-granular-inline-styles-what-changed",{"id":2947,"depth":2765,"text":2769},"migrating-to-nuxt-4-more-granular-inline-styles-migration-steps",{"id":2949,"depth":2741,"text":2950,"children":2951},"migrating-to-nuxt-4-scan-page-meta-after-resolution","Scan Page Meta After Resolution",[2952,2954,2956],{"id":2953,"depth":2765,"text":2766},"migrating-to-nuxt-4-scan-page-meta-after-resolution-what-changed",{"id":2955,"depth":2765,"text":2778},"migrating-to-nuxt-4-scan-page-meta-after-resolution-reasons-for-change",{"id":2957,"depth":2765,"text":2769},"migrating-to-nuxt-4-scan-page-meta-after-resolution-migration-steps",{"id":2959,"depth":2741,"text":2960,"children":2961},"migrating-to-nuxt-4-shared-prerender-data","Shared Prerender Data",[2962,2964,2966],{"id":2963,"depth":2765,"text":2766},"migrating-to-nuxt-4-shared-prerender-data-what-changed",{"id":2965,"depth":2765,"text":2778},"migrating-to-nuxt-4-shared-prerender-data-reasons-for-change",{"id":2967,"depth":2765,"text":2769},"migrating-to-nuxt-4-shared-prerender-data-migration-steps",{"id":2969,"depth":2741,"text":2970,"children":2971},"migrating-to-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch","Default data and error values in useAsyncData and useFetch",[2972,2974,2976],{"id":2973,"depth":2765,"text":2766},"migrating-to-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch-what-changed",{"id":2975,"depth":2765,"text":2778},"migrating-to-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2977,"depth":2765,"text":2769},"migrating-to-nuxt-4-default-data-and-error-values-in-useasyncdata-and-usefetch-migration-steps",{"id":2979,"depth":2741,"text":2980,"children":2981},"migrating-to-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",[2982,2984,2986],{"id":2983,"depth":2765,"text":2766},"migrating-to-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch-what-changed",{"id":2985,"depth":2765,"text":2778},"migrating-to-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2987,"depth":2765,"text":2769},"migrating-to-nuxt-4-removal-of-deprecated-boolean-values-for-dedupe-option-when-calling-refresh-in-useasyncdata-and-usefetch-migration-steps",{"id":2989,"depth":2741,"text":2990,"children":2991},"migrating-to-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch","Respect defaults when clearing data in useAsyncData and useFetch",[2992,2994],{"id":2993,"depth":2765,"text":2766},"migrating-to-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch-what-changed",{"id":2995,"depth":2765,"text":2778},"migrating-to-nuxt-4-respect-defaults-when-clearing-data-in-useasyncdata-and-usefetch-reasons-for-change",{"id":2997,"depth":2741,"text":2998,"children":2999},"migrating-to-nuxt-4-respect-defaults-when-clearing-usestate","Respect defaults when clearing useState",[3000,3002,3004],{"id":3001,"depth":2765,"text":2766},"migrating-to-nuxt-4-respect-defaults-when-clearing-usestate-what-changed",{"id":3003,"depth":2765,"text":2778},"migrating-to-nuxt-4-respect-defaults-when-clearing-usestate-reasons-for-change",{"id":3005,"depth":2765,"text":2769},"migrating-to-nuxt-4-respect-defaults-when-clearing-usestate-migration-steps",{"id":3007,"depth":2741,"text":3008,"children":3009},"migrating-to-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch","Alignment of pending value in useAsyncData and useFetch",[3010,3012,3014],{"id":3011,"depth":2765,"text":2766},"migrating-to-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch-what-changed",{"id":3013,"depth":2765,"text":2778},"migrating-to-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch-reasons-for-change",{"id":3015,"depth":2765,"text":2769},"migrating-to-nuxt-4-alignment-of-pending-value-in-useasyncdata-and-usefetch-migration-steps",{"id":3017,"depth":2741,"text":3018,"children":3019},"migrating-to-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch","Key Change Behavior in useAsyncData and useFetch",[3020,3022,3024],{"id":3021,"depth":2765,"text":2766},"migrating-to-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch-what-changed",{"id":3023,"depth":2765,"text":2778},"migrating-to-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch-reasons-for-change",{"id":3025,"depth":2765,"text":2769},"migrating-to-nuxt-4-key-change-behavior-in-useasyncdata-and-usefetch-migration-steps",{"id":3027,"depth":2741,"text":3028,"children":3029},"migrating-to-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch","Shallow Data Reactivity in useAsyncData and useFetch",[3030,3032,3034],{"id":3031,"depth":2765,"text":2766},"migrating-to-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch-what-changed",{"id":3033,"depth":2765,"text":2778},"migrating-to-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch-reasons-for-change",{"id":3035,"depth":2765,"text":2769},"migrating-to-nuxt-4-shallow-data-reactivity-in-useasyncdata-and-usefetch-migration-steps",{"id":3037,"depth":2741,"text":3038,"children":3039},"migrating-to-nuxt-4-absolute-watch-paths-in-builderwatch","Absolute Watch Paths in builder:watch",[3040,3042,3044],{"id":3041,"depth":2765,"text":2766},"migrating-to-nuxt-4-absolute-watch-paths-in-builderwatch-what-changed",{"id":3043,"depth":2765,"text":2778},"migrating-to-nuxt-4-absolute-watch-paths-in-builderwatch-reasons-for-change",{"id":3045,"depth":2765,"text":2769},"migrating-to-nuxt-4-absolute-watch-paths-in-builderwatch-migration-steps",{"id":3047,"depth":2741,"text":3048,"children":3049},"migrating-to-nuxt-4-removal-of-window__nuxt__-object","Removal of window.__NUXT__ object",[3050,3052,3054],{"id":3051,"depth":2765,"text":2766},"migrating-to-nuxt-4-removal-of-window__nuxt__-object-what-changed",{"id":3053,"depth":2765,"text":2778},"migrating-to-nuxt-4-removal-of-window__nuxt__-object-reasons-for-change",{"id":3055,"depth":2765,"text":2769},"migrating-to-nuxt-4-removal-of-window__nuxt__-object-migration-steps",{"id":3057,"depth":2741,"text":3058,"children":3059},"migrating-to-nuxt-4-directory-index-scanning","Directory index scanning",[3060,3062,3064],{"id":3061,"depth":2765,"text":2766},"migrating-to-nuxt-4-directory-index-scanning-what-changed",{"id":3063,"depth":2765,"text":2778},"migrating-to-nuxt-4-directory-index-scanning-reasons-for-change",{"id":3065,"depth":2765,"text":2769},"migrating-to-nuxt-4-directory-index-scanning-migration-steps",{"id":3067,"depth":2741,"text":3068,"children":3069},"migrating-to-nuxt-4-template-compilation-changes","Template Compilation Changes",[3070,3072,3074],{"id":3071,"depth":2765,"text":2766},"migrating-to-nuxt-4-template-compilation-changes-what-changed",{"id":3073,"depth":2765,"text":2778},"migrating-to-nuxt-4-template-compilation-changes-reasons-for-change",{"id":3075,"depth":2765,"text":2769},"migrating-to-nuxt-4-template-compilation-changes-migration-steps",{"id":3077,"depth":2741,"text":3078,"children":3079},"migrating-to-nuxt-4-default-typescript-configuration-changes","Default TypeScript Configuration Changes",[3080,3082,3084],{"id":3081,"depth":2765,"text":2766},"migrating-to-nuxt-4-default-typescript-configuration-changes-what-changed",{"id":3083,"depth":2765,"text":2778},"migrating-to-nuxt-4-default-typescript-configuration-changes-reasons-for-change",{"id":3085,"depth":2765,"text":2769},"migrating-to-nuxt-4-default-typescript-configuration-changes-migration-steps",{"id":3087,"depth":2741,"text":3088,"children":3089},"migrating-to-nuxt-4-typescript-configuration-splitting","TypeScript Configuration Splitting",[3090,3092,3094],{"id":3091,"depth":2765,"text":2766},"migrating-to-nuxt-4-typescript-configuration-splitting-what-changed",{"id":3093,"depth":2765,"text":2778},"migrating-to-nuxt-4-typescript-configuration-splitting-reasons-for-change",{"id":3095,"depth":2765,"text":2769},"migrating-to-nuxt-4-typescript-configuration-splitting-migration-steps",{"id":3097,"depth":2741,"text":3098,"children":3099},"migrating-to-nuxt-4-removal-of-experimental-features","Removal of Experimental Features",[3100,3102,3104],{"id":3101,"depth":2765,"text":2766},"migrating-to-nuxt-4-removal-of-experimental-features-what-changed",{"id":3103,"depth":2765,"text":2778},"migrating-to-nuxt-4-removal-of-experimental-features-reasons-for-change",{"id":3105,"depth":2765,"text":2769},"migrating-to-nuxt-4-removal-of-experimental-features-migration-steps",{"id":3107,"depth":2741,"text":3108,"children":3109},"migrating-to-nuxt-4-removal-of-top-level-generate-configuration","Removal of Top-Level generate Configuration",[3110,3112,3114],{"id":3111,"depth":2765,"text":2766},"migrating-to-nuxt-4-removal-of-top-level-generate-configuration-what-changed",{"id":3113,"depth":2765,"text":2778},"migrating-to-nuxt-4-removal-of-top-level-generate-configuration-reasons-for-change",{"id":3115,"depth":2765,"text":2769},"migrating-to-nuxt-4-removal-of-top-level-generate-configuration-migration-steps",{"id":3117,"depth":2741,"text":3118,"children":3119},"migrating-to-nuxt-4-normalized-page-component-names","Normalized Page Component Names",[3120,3122,3124],{"id":3121,"depth":2765,"text":2766},"migrating-to-nuxt-4-normalized-page-component-names-what-changed",{"id":3123,"depth":2765,"text":2778},"migrating-to-nuxt-4-normalized-page-component-names-reasons-for-change",{"id":3125,"depth":2765,"text":2769},"migrating-to-nuxt-4-normalized-page-component-names-migration-steps",{"id":3127,"depth":2740,"text":3128},"nuxt-2-vs-nuxt-3","Nuxt 2 vs. Nuxt 3+",{"id":3130,"depth":2740,"text":3131},"nuxt-2-to-nuxt-3","Nuxt 2 to Nuxt 3+",{"id":3133,"depth":2740,"text":3134},"nuxt-2-to-nuxt-bridge","Nuxt 2 to Nuxt Bridge","docs\u002F1.getting-started\u002F18.upgrade.md",".md","document","text\u002Fmarkdown",[3140,3143,3146,3160,3221,3223,3230,3232,3240,3242,3248,3255,3324,3333,3487,3494,3497,3499,3506,3509,3523,3525,3528,3589,3595,3600,3602,3618,3634,3659,3673,3766,3768,3773,3775,3780,3788,3808,3823,3830,3835,3838,3869,3875,3880,3895,3902,3910,3915,3966,3976,3987,3989,3993,3995,4003,4010,4024,4029,4086,4088,4091,4105,4107,4112,4122,4465,4469,4483,4748,4753,4759,4763,4765,4778,4814,4821,4823,4826,4828,4836,4871,4874,4909,4924,4935,4987,4996,5001,5005,5007,5027,5050,5053,5055,5064,5066,5079,5093,5107,5116,5125,5170,5172,5176,5178,5198,5200,5210,5212,5231,5270,5279,5285,5328,5330,5334,5336,5349,5359,5361,5364,5366,5373,5391,5470,5472,5476,5478,5493,5495,5502,5504,5513,5557,5573,5575,5579,5581,5602,5604,5611,5613,5623,5632,5635,5678,5683,5687,5689,5699,5701,5711,5713,5719,5790,5792,5795,5798,5863,5866,5869,5872,5874,5882,5889,5896,5903,5993,5996,5998,6003,6010,6017,6019,6103,6108,6113,6201,6227,6234,6236,6267,6273,6275,6361,6367,6406,6409,6474,6476,6481,6483,6491,6557,6559,6564,6566,6896,6899,6951,6953,6957,6959,6966,6969,6983,6986,7002,7004,7007,7018,7020,7026,7029,7049,7052,7181,7191,7203,7205,7209,7211,7230,7233,7235,7242,7244,7247,7266,7268,7272,7275,7277,7280,7294,7304,7310,7313,7315,7329,7331,7374,7376,7380,7382,7393,7416,7418,7421,7424,7429,7460,7474,7578,7590,7604,7611,7655,7657,7661,7663,7678,7718,7721,7749,7751,7754,7756,7770,7773,7817,7823,7827,7836,7838,7846,7881,7883,7887,7890,7892,7903,7905,7912,7956,7958,7962,7964,7978,7980,7990,7992,8000,8036,8038,8081,8083,8087,8089,8101,8103,8114,8120,8122,8131,8288,8291,8334,8346,8350,8352,8364,8366,8386,8388,8404,8410,8429,8433,8435,8456,8552,8554,8557,8569,8598,8600,8602,8642,8647,8656,8660,8662,8677,8679,8688,8692,8696,8698,8720,8722,8737,8739,8751,8765,8768,8837,8842,8908,8919,8923,8944,8946,8965,8967,8979,8981,8993,9042,9045,9088,9095,9099,9101,9115,9121,9129,9131,9152,9154,9160,9183,9186,9234,9241,9245,9265,9267,9277,9279,9289,9291,9294,9388,9394,9400,9404,9406,9414,9416,9422,9424,9431,9437,9462,9467,9473,9475,9481,9483,9494,9496,9502,9516,9518,9522,9524,9534,9536,9543,9551,9553,9556,9665,9667,9671,9673,9684,9697,9699,9706,9716,9724,9726,9729,9753,9805,9818,10148,10153,10155,10159,10161,10172,10174,10186,10188,10191,10272,10274,10278,10280,10283,10359,10361,10364,10389,10401,10403,10409,10412,10761,10764,10766,10770,10772,10775,10817,10819,10822,10824,10846,10852,10856,10858,10864,10878,10880,10890,10892,10901,10960,10964,10966,10970,10972,10993,10995,11019,11021,11031,11061,11064,11107,11109,11112,11314,11316,11319,11325,11327,11330],[3141,3142,2745],"h2",{"id":2744},[3144,3145,2749],"h3",{"id":2748},[3147,3148,3149,3150,3155,3156,3159],"p",{},"To upgrade Nuxt to the ",[3151,3152,3154],"a",{"href":3153},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases","latest release",", use the ",[3157,3158,937],"code",{}," command.",[3161,3162,3164,3184,3193,3202,3212],"code-group",{"sync":3163},"pm",[3165,3166,3170],"pre",{"language":3167,"filename":3168,"class":3169},"bash","npm","shj shiki shj-lang-bash",[3157,3171,3173],{"class":3172},"language-bash",[3174,3175,3178,3183],"span",{"class":3176,"style":3177},"line","display: inline",[3174,3179,3182],{"class":3180,"style":3181},"shj-syn-func shj-func","color:#6182B8;--shiki-dark:#82AAFF","npx"," nuxt upgrade",[3165,3185,3187],{"language":3167,"filename":3186,"class":3169},"yarn",[3157,3188,3189],{"class":3172},[3174,3190,3191,3183],{"class":3176,"style":3177},[3174,3192,3186],{"class":3180,"style":3181},[3165,3194,3196],{"language":3167,"filename":3195,"class":3169},"pnpm",[3157,3197,3198],{"class":3172},[3174,3199,3200,3183],{"class":3176,"style":3177},[3174,3201,3195],{"class":3180,"style":3181},[3165,3203,3205],{"language":3167,"filename":3204,"class":3169},"bun",[3157,3206,3207],{"class":3172},[3174,3208,3209,3211],{"class":3176,"style":3177},[3174,3210,3204],{"class":3180,"style":3181}," x nuxt upgrade",[3165,3213,3215],{"language":3167,"filename":3214,"class":3169},"deno",[3157,3216,3217],{"class":3172},[3174,3218,3219,3211],{"class":3176,"style":3177},[3174,3220,3214],{"class":3180,"style":3181},[3144,3222,454],{"id":2751},[3147,3224,3225,3226,3229],{},"To use the latest Nuxt build and test features before their release, read about the ",[3151,3227,3228],{"href":1531},"nightly release channel"," guide.",[3141,3231,2754],{"id":2753},[3147,3233,3234,3235,3239],{},"Nuxt 5 is ",[3236,3237,3238],"strong",{},"currently in development",". Until the release, it is possible to test many of Nuxt 5's breaking changes from Nuxt version 4.2+.",[3144,3241,2758],{"id":2757},[3147,3243,3244,3245,3247],{},"First, upgrade Nuxt to the ",[3151,3246,3154],{"href":3153},".",[3147,3249,3250,3251,3254],{},"Then you can set your ",[3157,3252,3253],{},"future.compatibilityVersion"," to match Nuxt 5 behavior:",[3165,3256,3260],{"language":3257,"meta":3258,"class":3259},"ts","twoslash [nuxt.config.ts]","shj shiki shj-lang-ts",[3157,3261,3263,3285,3286,3285,3296,3285,3309,3285,3317],{"class":3262},"language-ts",[3174,3264,3265,3270,3271,3270,3274,3277,3282],{"class":3176,"style":3177},[3174,3266,3269],{"class":3267,"style":3268},"shj-syn-kwd shj-kwd","color:#9C3EDA;--shiki-dark:#C792EA","export"," ",[3174,3272,3273],{"class":3267,"style":3268},"default",[3174,3275,3276],{"class":3180,"style":3181},"defineNuxtConfig",[3174,3278,3281],{"class":3279,"style":3280},"shj-syn-bracket shj-bracket","color:#90A4AE;--shiki-dark:#babed8","(",[3174,3283,3284],{"class":3279,"style":3280},"{","\n",[3174,3287,3288,3289,3270,3294],{"class":3176,"style":3177},"  future",[3174,3290,3293],{"class":3291,"style":3292},"shj-syn-oper shj-oper","color:#39ADB5;--shiki-dark:#89DDFF",":",[3174,3295,3284],{"class":3279,"style":3280},[3174,3297,3298,3299,3270,3301,3306],{"class":3176,"style":3177},"    compatibilityVersion",[3174,3300,3293],{"class":3291,"style":3292},[3174,3302,3305],{"class":3303,"style":3304},"shj-syn-num shj-num","color:#F76D47;--shiki-dark:#F78C6C","5",[3174,3307,3308],{"class":3291,"style":3292},",",[3174,3310,3311,3312,3315],{"class":3176,"style":3177},"  ",[3174,3313,3314],{"class":3279,"style":3280},"}",[3174,3316,3308],{"class":3291,"style":3292},[3174,3318,3319,3321],{"class":3176,"style":3177},[3174,3320,3314],{"class":3279,"style":3280},[3174,3322,3323],{"class":3279,"style":3280},")",[3147,3325,3326,3327,3329,3330,3332],{},"When you set your ",[3157,3328,3253],{}," to ",[3157,3331,3305],{},", defaults throughout your Nuxt configuration will change to opt in to Nuxt v5 behavior, including:",[3334,3335,3336,3347,3358,3373,3392,3413,3427,3443,3454,3466,3484],"ul",{},[3337,3338,3339,3342,3343,3346],"li",{},[3236,3340,3341],{},"Vite Environment API",": Automatically enables the new ",[3151,3344,3341],{"href":3345},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#migration-to-vite-environment-api"," for improved build configuration",[3337,3348,3349,3352,3353,3357],{},[3236,3350,3351],{},"Case-sensitive routing",": Page routes ",[3151,3354,3356],{"href":3355},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#case-sensitive-routing","match URL casing exactly",", consistent with Nitro",[3337,3359,3360,3363,3364,3368,3369,3372],{},[3236,3361,3362],{},"Normalized Page Names",": Page component names will ",[3151,3365,3367],{"href":3366},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#normalized-page-component-names","match their route names"," for consistent ",[3157,3370,3371],{},"\u003CKeepAlive>"," behavior",[3337,3374,3375,3380,3381,3383,3384,3388,3389],{},[3236,3376,3377,3379],{},[3157,3378,731],{}," resets to defaults",": ",[3157,3382,731],{}," will ",[3151,3385,3387],{"href":3386},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#respect-defaults-when-clearing-usestate","reset state to its initial value"," instead of setting it to ",[3157,3390,3391],{},"undefined",[3337,3393,3394,3380,3400,3409,3410],{},[3236,3395,3396,3397],{},"Non-async ",[3157,3398,3399],{},"callHook",[3151,3401,3403,3405,3406],{"href":3402},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#non-async-callhook",[3157,3404,3399],{}," may return ",[3157,3407,3408],{},"void"," instead of always returning a ",[3157,3411,3412],{},"Promise",[3337,3414,3415,3418,3419,3426],{},[3236,3416,3417],{},"Comment node placeholders",": Client-only components use ",[3151,3420,3422,3423],{"href":3421},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#client-only-comment-placeholders","comment nodes instead of ",[3157,3424,3425],{},"\u003Cdiv>"," as SSR placeholders, fixing a scoped styles hydration issue",[3337,3428,3429,3432,3433,3435,3436,3442],{},[3236,3430,3431],{},"Stricter side-effect imports",": The generated ",[3157,3434,244],{}," enables ",[3151,3437,3439],{"href":3438},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#stricter-side-effect-imports",[3157,3440,3441],{},"noUncheckedSideEffectImports"," to match the TypeScript 7 default",[3337,3444,3445,3448,3449,3453],{},[3236,3446,3447],{},"Vue Options API disabled",": The ",[3151,3450,3452],{"href":3451},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#vue-options-api-disabled-by-default","Options API is compiled out of the client bundle"," to reduce its size",[3337,3455,3456,3380,3459,3465],{},[3236,3457,3458],{},"Typed pages",[3151,3460,3462],{"href":3461},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#typed-pages-enabled-by-default",[3157,3463,3464],{},"experimental.typedPages"," is enabled by default for type-checked routing",[3337,3467,3468,3475,3476,3483],{},[3236,3469,3470,3471,3474],{},"TypeScript ",[3157,3472,3473],{},"baseUrl"," ignored",": Generated TypeScript configurations ",[3151,3477,3479,3480],{"href":3478},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#typescript-baseurl-is-ignored","no longer use ",[3157,3481,3482],{},"compilerOptions.baseUrl"," to resolve Nuxt aliases",[3337,3485,3486],{},"Other Nuxt 5 improvements and changes as they become available",[3488,3489,3490,3491,3247],"note",{},"This section is subject to change until the final release, so please check back here regularly if you are testing Nuxt 5 using ",[3157,3492,3493],{},"future.compatibilityVersion: 5",[3147,3495,3496],{},"Breaking or significant changes will be noted below along with migration steps for backward\u002Fforward compatibility.",[3144,3498,2761],{"id":2760},[3147,3500,3501,3502,3505],{},"🚦 ",[3236,3503,3504],{},"Impact Level",": Minimal",[3507,3508,2766],"h4",{"id":2764},[3147,3510,3511,3512,3515,3516,3519,3520,3247],{},"With ",[3157,3513,3514],{},"compatibilityVersion: 5",", page routes match URLs case-sensitively, consistent with Nitro. For example, ",[3157,3517,3518],{},"\u002FAbout"," no longer matches ",[3157,3521,3522],{},"pages\u002Fabout.vue",[3507,3524,2769],{"id":2768},[3147,3526,3527],{},"Update links to use the same casing as their page routes. To keep case-insensitive matching:",[3165,3529,3530],{"language":3257,"meta":3258,"class":3259},[3157,3531,3532,3285,3544,3285,3551,3285,3558,3285,3570,3285,3577,3285,3583],{"class":3262},[3174,3533,3534,3270,3536,3270,3538,3540,3542],{"class":3176,"style":3177},[3174,3535,3269],{"class":3267,"style":3268},[3174,3537,3273],{"class":3267,"style":3268},[3174,3539,3276],{"class":3180,"style":3181},[3174,3541,3281],{"class":3279,"style":3280},[3174,3543,3284],{"class":3279,"style":3280},[3174,3545,3546,3547,3270,3549],{"class":3176,"style":3177},"  router",[3174,3548,3293],{"class":3291,"style":3292},[3174,3550,3284],{"class":3279,"style":3280},[3174,3552,3553,3554,3270,3556],{"class":3176,"style":3177},"    options",[3174,3555,3293],{"class":3291,"style":3292},[3174,3557,3284],{"class":3279,"style":3280},[3174,3559,3560,3561,3270,3563,3568],{"class":3176,"style":3177},"      sensitive",[3174,3562,3293],{"class":3291,"style":3292},[3174,3564,3567],{"class":3565,"style":3566},"shj-syn-bool shj-bool","color:#FF5370;--shiki-dark:#ff9cac","false",[3174,3569,3308],{"class":3291,"style":3292},[3174,3571,3572,3573,3575],{"class":3176,"style":3177},"    ",[3174,3574,3314],{"class":3279,"style":3280},[3174,3576,3308],{"class":3291,"style":3292},[3174,3578,3311,3579,3581],{"class":3176,"style":3177},[3174,3580,3314],{"class":3279,"style":3280},[3174,3582,3308],{"class":3291,"style":3292},[3174,3584,3585,3587],{"class":3176,"style":3177},[3174,3586,3314],{"class":3279,"style":3280},[3174,3588,3323],{"class":3279,"style":3280},[3144,3590,3591,3594],{"id":2771},[3157,3592,3593],{},"jiti"," Is No Longer Bundled",[3147,3596,3501,3597,3599],{},[3236,3598,3504],{},": Medium",[3507,3601,2766],{"id":2775},[3147,3603,3604,3605,3610,3611,3613,3614,3617],{},"Nuxt no longer depends on ",[3151,3606,3608],{"href":3607},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fjiti",[3157,3609,3593],{},". Files loaded outside the bundler (",[3157,3612,234],{},", files in ",[3157,3615,3616],{},"modules\u002F",", and layer configs) are now imported by the runtime itself.",[3147,3619,3620,3623,3624,3627,3628,3630,3631,3633],{},[3236,3621,3622],{},"You can still write your config in TypeScript."," Nuxt 5 requires Node ",[3157,3625,3626],{},"22.19"," or later, where type stripping is on by default, so ",[3157,3629,234],{}," and TypeScript modules load natively. Two things the runtime does not do, which ",[3157,3632,3593],{}," used to paper over, are guess file extensions and compile TypeScript syntax that emits code.",[3147,3635,3636,3637,3640,3641,3643,3644,3647,3648,3651,3652,3658],{},"Both would otherwise only surface when Nuxt loads the file, so the generated ",[3157,3638,3639],{},"node"," tsconfig now describes the environment the way the runtime sees it (",[3157,3642,915],{}," and ",[3157,3645,3646],{},"moduleResolution"," set to ",[3157,3649,3650],{},"nodenext",", plus ",[3151,3653,3655],{"href":3654},"https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig\u002F#erasableSyntaxOnly",[3157,3656,3657],{},"erasableSyntaxOnly",") and TypeScript reports both up front.",[3147,3660,3661,3662,3665,3666,3668,3669,3672],{},"That covers ",[3157,3663,3664],{},"nuxt.config",", ",[3157,3667,3616],{}," and layer configs only. Your app and ",[3157,3670,3671],{},"shared\u002F"," code goes through Vite and resolves the way it always has. If you need the previous behaviour, override it:",[3165,3674,3675],{"language":3257,"meta":3258,"class":3259},[3157,3676,3677,3285,3689,3285,3696,3285,3703,3285,3710,3285,3722,3285,3732,3285,3741,3285,3748,3285,3754,3285,3760],{"class":3262},[3174,3678,3679,3270,3681,3270,3683,3685,3687],{"class":3176,"style":3177},[3174,3680,3269],{"class":3267,"style":3268},[3174,3682,3273],{"class":3267,"style":3268},[3174,3684,3276],{"class":3180,"style":3181},[3174,3686,3281],{"class":3279,"style":3280},[3174,3688,3284],{"class":3279,"style":3280},[3174,3690,3691,3692,3270,3694],{"class":3176,"style":3177},"  typescript",[3174,3693,3293],{"class":3291,"style":3292},[3174,3695,3284],{"class":3279,"style":3280},[3174,3697,3698,3699,3270,3701],{"class":3176,"style":3177},"    nodeTsConfig",[3174,3700,3293],{"class":3291,"style":3292},[3174,3702,3284],{"class":3279,"style":3280},[3174,3704,3705,3706,3270,3708],{"class":3176,"style":3177},"      compilerOptions",[3174,3707,3293],{"class":3291,"style":3292},[3174,3709,3284],{"class":3279,"style":3280},[3174,3711,3712,3713,3270,3715,3720],{"class":3176,"style":3177},"        module",[3174,3714,3293],{"class":3291,"style":3292},[3174,3716,3719],{"class":3717,"style":3718},"shj-syn-str shj-str","color:#91B859;--shiki-dark:#C3E88D","'preserve'",[3174,3721,3308],{"class":3291,"style":3292},[3174,3723,3724,3725,3270,3727,3730],{"class":3176,"style":3177},"        moduleResolution",[3174,3726,3293],{"class":3291,"style":3292},[3174,3728,3729],{"class":3717,"style":3718},"'bundler'",[3174,3731,3308],{"class":3291,"style":3292},[3174,3733,3734,3735,3270,3737,3739],{"class":3176,"style":3177},"        erasableSyntaxOnly",[3174,3736,3293],{"class":3291,"style":3292},[3174,3738,3567],{"class":3565,"style":3566},[3174,3740,3308],{"class":3291,"style":3292},[3174,3742,3743,3744,3746],{"class":3176,"style":3177},"      ",[3174,3745,3314],{"class":3279,"style":3280},[3174,3747,3308],{"class":3291,"style":3292},[3174,3749,3572,3750,3752],{"class":3176,"style":3177},[3174,3751,3314],{"class":3279,"style":3280},[3174,3753,3308],{"class":3291,"style":3292},[3174,3755,3311,3756,3758],{"class":3176,"style":3177},[3174,3757,3314],{"class":3279,"style":3280},[3174,3759,3308],{"class":3291,"style":3292},[3174,3761,3762,3764],{"class":3176,"style":3177},[3174,3763,3314],{"class":3279,"style":3280},[3174,3765,3323],{"class":3279,"style":3280},[3507,3767,2778],{"id":2777},[3147,3769,3770,3772],{},[3157,3771,3593],{}," was pulled into every Nuxt install to load a handful of files, most of which the runtime can now load unaided. Removing it makes a default install smaller.",[3507,3774,2769],{"id":2780},[3147,3776,3777],{},[3236,3778,3779],{},"1. Add file extensions to relative imports.",[3147,3781,3782,3783,3665,3785,3787],{},"Relative imports in ",[3157,3784,234],{},[3157,3786,3616],{},", and layer configs need an explicit extension:",[3165,3789,3792],{"language":3790,"filename":234,"class":3791},"diff","shj shiki shj-lang-diff",[3157,3793,3795,3285,3802],{"class":3794},"language-diff",[3174,3796,3797],{"class":3176,"style":3177},[3174,3798,3801],{"class":3799,"style":3800},"shj-syn-deleted shj-deleted","color:#E53935;--shiki-dark:#f07178","- import { myPlugin } from '.\u002Fbuild\u002Fmy-plugin'",[3174,3803,3804],{"class":3176,"style":3177},[3174,3805,3807],{"class":3806,"style":3718},"shj-syn-insert shj-insert","+ import { myPlugin } from '.\u002Fbuild\u002Fmy-plugin.ts'",[3147,3809,3810,3811,3814,3815,3818,3819,3822],{},"TypeScript reports a missing extension as ",[3157,3812,3813],{},"TS2835",". Note that its quick fix suggests ",[3157,3816,3817],{},".\u002Fbuild\u002Fmy-plugin.js","; write the extension the file actually has (",[3157,3820,3821],{},".ts","), which Node resolves directly.",[3147,3824,3825,3826,3829],{},"Bare package imports (",[3157,3827,3828],{},"import { defu } from 'defu'",") are unaffected.",[3147,3831,3832],{},[3236,3833,3834],{},"2. Use erasable TypeScript syntax.",[3147,3836,3837],{},"Type annotations are erased, but syntax that emits runtime code cannot be. In config and module files, replace:",[3334,3839,3840,3850,3859,3866],{},[3337,3841,3842,3845,3846,3849],{},[3157,3843,3844],{},"enum Foo {}"," with a ",[3157,3847,3848],{},"const"," object",[3337,3851,3852,3855,3856,3858],{},[3157,3853,3854],{},"namespace"," \u002F ",[3157,3857,915],{}," blocks with plain exports",[3337,3860,3861,3862,3865],{},"constructor parameter properties (",[3157,3863,3864],{},"constructor(private x: string) {}",") with an explicit assignment",[3337,3867,3868],{},"experimental decorators",[3147,3870,3871,3872,3247],{},"TypeScript reports all of these for you as ",[3157,3873,3874],{},"TS1294",[3147,3876,3877],{},[3236,3878,3879],{},"3. If you publish a layer or module, ship compiled JavaScript.",[3147,3881,3882,3883,3885,3886,3888,3889,3892,3893,3247],{},"This one is specific to packages. The runtime refuses to strip types from any file inside ",[3157,3884,164],{},", whatever the configuration, so a published entrypoint written in TypeScript cannot be loaded natively however new the Node version is. Build to JavaScript before publishing, and if your package ships a ",[3157,3887,3664],{},", emit it as ",[3157,3890,3891],{},"nuxt.config.mjs",". Otherwise every consuming project has to install ",[3157,3894,3593],{},[3147,3896,3897,3898,3901],{},"This does not apply to layers inside your own project: ",[3157,3899,3900],{},"layers\u002F*\u002Fnuxt.config.ts"," loads natively.",[3147,3903,3904],{},[3236,3905,3906,3907,3909],{},"4. Install ",[3157,3908,3593],{}," if you still need it.",[3147,3911,3912,3914],{},[3157,3913,3593],{}," is now an optional peer dependency. Install it and Nuxt will pick it up automatically as a fallback whenever the runtime cannot load a file on its own:",[3161,3916,3917,3930,3942,3954],{"sync":3163},[3165,3918,3919],{"language":3167,"filename":3168,"class":3169},[3157,3920,3921],{"class":3172},[3174,3922,3923,3925,3926,3929],{"class":3176,"style":3177},[3174,3924,3168],{"class":3180,"style":3181}," i",[3174,3927,3928],{"class":3267,"style":3268}," -D"," jiti",[3165,3931,3932],{"language":3167,"filename":3186,"class":3169},[3157,3933,3934],{"class":3172},[3174,3935,3936,3270,3938,3940,3929],{"class":3176,"style":3177},[3174,3937,3186],{"class":3180,"style":3181},[3174,3939,860],{"class":3267,"style":3268},[3174,3941,3928],{"class":3267,"style":3268},[3165,3943,3944],{"language":3167,"filename":3195,"class":3169},[3157,3945,3946],{"class":3172},[3174,3947,3948,3270,3950,3952,3929],{"class":3176,"style":3177},[3174,3949,3195],{"class":3180,"style":3181},[3174,3951,860],{"class":3267,"style":3268},[3174,3953,3928],{"class":3267,"style":3268},[3165,3955,3956],{"language":3167,"filename":3204,"class":3169},[3157,3957,3958],{"class":3172},[3174,3959,3960,3270,3962,3964,3929],{"class":3176,"style":3177},[3174,3961,3204],{"class":3180,"style":3181},[3174,3963,860],{"class":3267,"style":3268},[3174,3965,3928],{"class":3267,"style":3268},[3147,3967,3968,3969,3972,3973,3975],{},"A ",[3157,3970,3971],{},"nuxt.schema"," file always needs ",[3157,3974,3593],{},", whatever Node version you are on: its JSDoc annotations are read by an import-time transform rather than by importing the file.",[3147,3977,3978,3979,3982,3983,3986],{},"One smaller change comes with this: PostCSS plugins named in ",[3157,3980,3981],{},"postcss.plugins"," are now resolved by the runtime, so a plugin name that only resolves through a Nuxt ",[3157,3984,3985],{},"alias"," entry no longer loads. Use the package name, or a path.",[3144,3988,2783],{"id":2782},[3147,3990,3501,3991,3599],{},[3236,3992,3504],{},[3507,3994,2766],{"id":2786},[3147,3996,3997,3998,4002],{},"Nuxt 5 migrates to Vite 6's new ",[3151,3999,4001],{"href":4000},"https:\u002F\u002Fvite.dev\u002Fguide\u002Fapi-environment","Environment API",", which formalizes the concept of environments and provides better control over configuration per environment.",[3147,4004,4005,4006,4009],{},"Previously, Nuxt used separate client and server Vite configurations. Now, Nuxt uses a shared Vite configuration with environment-specific plugins that use the ",[3157,4007,4008],{},"applyToEnvironment()"," method to target specific environments.",[4011,4012,4013,4014,4016,4017,4020,4021,3247],"tip",{},"You can test this feature early by setting ",[3157,4015,3493],{}," (see ",[3151,4018,2754],{"href":4019},"\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fupgrade#testing-nuxt-5",") or by enabling it explicitly with ",[3157,4022,4023],{},"experimental.viteEnvironmentApi: true",[3147,4025,4026],{},[3236,4027,4028],{},"Key changes:",[4030,4031,4032,4049,4074],"ol",{},[3337,4033,4034,3448,4040,3643,4042,4045,4046,4048],{},[3236,4035,4036,4037],{},"Deprecated environment-specific ",[3157,4038,4039],{},"extendViteConfig()",[3157,4041,184],{},[3157,4043,4044],{},"client"," options in ",[3157,4047,4039],{}," are deprecated and will show warnings when used.",[3337,4050,4051,4054,4055,4058,4059,4062,4063,4066,4067,4062,4070,4073],{},[3236,4052,4053],{},"Changed plugin registration",": Vite plugins registered with ",[3157,4056,4057],{},"addVitePlugin()"," and only targeting one environment (by passing ",[3157,4060,4061],{},"server: false"," or ",[3157,4064,4065],{},"client: false",") will not have their ",[3157,4068,4069],{},"config",[3157,4071,4072],{},"configResolved"," hooks called.",[3337,4075,4076,3448,4079,3643,4082,4085],{},[3236,4077,4078],{},"Shared configuration",[3157,4080,4081],{},"vite:extendConfig",[3157,4083,4084],{},"vite:configResolved"," hooks now work with a shared configuration rather than separate client\u002Fserver configs.",[3507,4087,2778],{"id":2788},[3147,4089,4090],{},"The Vite Environment API provides:",[3334,4092,4093,4096,4099,4102],{},[3337,4094,4095],{},"Better consistency between development and production builds",[3337,4097,4098],{},"More granular control over environment-specific configuration",[3337,4100,4101],{},"Improved performance and plugin architecture",[3337,4103,4104],{},"Support for custom environments beyond just client and server",[3507,4106,2769],{"id":2790},[4108,4109,4111],"h5",{"id":4110},"testing-nuxt-5-migration-to-vite-environment-api-migration-steps-_1-migrate-to-use-vite-plugins","1. Migrate to use Vite plugins",[3147,4113,4114,4115,3665,4118,3643,4120,3247],{},"We would recommend you use a Vite plugin instead of ",[3157,4116,4117],{},"extendViteConfig",[3157,4119,4084],{},[3157,4121,4081],{},[3165,4123,4124],{"language":3257,"class":3259},[3157,4125,4126,3285,4133,3285,4148,3285,4169,3285,4186,3285,4188,3285,4221,3285,4233,3285,4250,3285,4254,3285,4260,3285,4262,3285,4267,3285,4284,3285,4294,3285,4304,3285,4309,3285,4315,3285,4325,3285,4330,3285,4336,3285,4351,3285,4356,3285,4373,3285,4386,3285,4401,3285,4417,3285,4421,3285,4427,3285,4439,3285,4451,3285,4457],{"class":3262},[3174,4127,4128],{"class":3176,"style":3177},[3174,4129,4132],{"class":4130,"style":4131},"shj-syn-cmnt shj-cmnt","color:#90A4AE;--shiki-dark:#676E95","\u002F\u002F Before",[3174,4134,4135,4137,4139,4069,4141,3270,4143,3270,4146],{"class":3176,"style":3177},[3174,4136,4117],{"class":3180,"style":3181},[3174,4138,3281],{"class":3279,"style":3280},[3174,4140,3281],{"class":3279,"style":3280},[3174,4142,3323],{"class":3279,"style":3280},[3174,4144,4145],{"class":3267,"style":3268},"=>",[3174,4147,3284],{"class":3279,"style":3280},[3174,4149,4150,4151,4153,4154,4156,4157,4159,4162,4164,4167],{"class":3176,"style":3177},"  config",[3174,4152,3247],{"class":3291,"style":3292},"optimizeDeps",[3174,4155,3247],{"class":3291,"style":3292},"include",[3174,4158,3247],{"class":3291,"style":3292},[3174,4160,4161],{"class":3180,"style":3181},"push",[3174,4163,3281],{"class":3279,"style":3280},[3174,4165,4166],{"class":3717,"style":3718},"'my-package'",[3174,4168,3323],{"class":3279,"style":3280},[3174,4170,4171,4173,3270,4175,4177,4178,3270,4180,3270,4182,4184],{"class":3176,"style":3177},[3174,4172,3314],{"class":3279,"style":3280},[3174,4174,3308],{"class":3291,"style":3292},[3174,4176,3284],{"class":3279,"style":3280}," server",[3174,4179,3293],{"class":3291,"style":3292},[3174,4181,3567],{"class":3565,"style":3566},[3174,4183,3314],{"class":3279,"style":3280},[3174,4185,3323],{"class":3279,"style":3280},[3174,4187],{"class":3176,"style":3177},[3174,4189,4190,4191,4193,4196,4198,3270,4201,4204,3270,4206,4069,4208,3270,4210,4212,4213,4215,3270,4217,3270,4219],{"class":3176,"style":3177},"nuxt",[3174,4192,3247],{"class":3291,"style":3292},[3174,4194,4195],{"class":3180,"style":3181},"hook",[3174,4197,3281],{"class":3279,"style":3280},[3174,4199,4200],{"class":3717,"style":3718},"'vite:extendConfig'",[3174,4202,4203],{"class":4130,"style":4131},"\u002F* or vite:configResolved *\u002F",[3174,4205,3308],{"class":3291,"style":3292},[3174,4207,3281],{"class":3279,"style":3280},[3174,4209,3308],{"class":3291,"style":3292},[3174,4211,3284],{"class":3279,"style":3280}," isClient ",[3174,4214,3314],{"class":3279,"style":3280},[3174,4216,3323],{"class":3279,"style":3280},[3174,4218,4145],{"class":3267,"style":3268},[3174,4220,3284],{"class":3279,"style":3280},[3174,4222,3311,4223,3270,4226,4228,4229,3270,4231],{"class":3176,"style":3177},[3174,4224,4225],{"class":3267,"style":3268},"if",[3174,4227,3281],{"class":3279,"style":3280},"isClient",[3174,4230,3323],{"class":3279,"style":3280},[3174,4232,3284],{"class":3279,"style":3280},[3174,4234,4235,4236,4153,4238,4156,4240,4242,4244,4246,4248],{"class":3176,"style":3177},"    config",[3174,4237,3247],{"class":3291,"style":3292},[3174,4239,3247],{"class":3291,"style":3292},[3174,4241,3247],{"class":3291,"style":3292},[3174,4243,4161],{"class":3180,"style":3181},[3174,4245,3281],{"class":3279,"style":3280},[3174,4247,4166],{"class":3717,"style":3718},[3174,4249,3323],{"class":3279,"style":3280},[3174,4251,3311,4252],{"class":3176,"style":3177},[3174,4253,3314],{"class":3279,"style":3280},[3174,4255,4256,4258],{"class":3176,"style":3177},[3174,4257,3314],{"class":3279,"style":3280},[3174,4259,3323],{"class":3279,"style":3280},[3174,4261],{"class":3176,"style":3177},[3174,4263,4264],{"class":3176,"style":3177},[3174,4265,4266],{"class":4130,"style":4131},"\u002F\u002F After",[3174,4268,4269,4272,4274,4276,3270,4278,3270,4280,4282],{"class":3176,"style":3177},[3174,4270,4271],{"class":3180,"style":3181},"addVitePlugin",[3174,4273,3281],{"class":3279,"style":3280},[3174,4275,3281],{"class":3279,"style":3280},[3174,4277,3323],{"class":3279,"style":3280},[3174,4279,4145],{"class":3267,"style":3268},[3174,4281,3281],{"class":3279,"style":3280},[3174,4283,3284],{"class":3279,"style":3280},[3174,4285,4286,4287,3270,4289,4292],{"class":3176,"style":3177},"  name",[3174,4288,3293],{"class":3291,"style":3292},[3174,4290,4291],{"class":3717,"style":3718},"'my-plugin'",[3174,4293,3308],{"class":3291,"style":3292},[3174,4295,3311,4296,3270,4298,4069,4300,3270,4302],{"class":3176,"style":3177},[3174,4297,4069],{"class":3180,"style":3181},[3174,4299,3281],{"class":3279,"style":3280},[3174,4301,3323],{"class":3279,"style":3280},[3174,4303,3284],{"class":3279,"style":3280},[3174,4305,3572,4306],{"class":3176,"style":3177},[3174,4307,4308],{"class":4130,"style":4131},"\u002F\u002F you can set global vite configuration here",[3174,4310,3311,4311,4313],{"class":3176,"style":3177},[3174,4312,3314],{"class":3279,"style":3280},[3174,4314,3308],{"class":3291,"style":3292},[3174,4316,3311,4317,3270,4319,4069,4321,3270,4323],{"class":3176,"style":3177},[3174,4318,4072],{"class":3180,"style":3181},[3174,4320,3281],{"class":3279,"style":3280},[3174,4322,3323],{"class":3279,"style":3280},[3174,4324,3284],{"class":3279,"style":3280},[3174,4326,3572,4327],{"class":3176,"style":3177},[3174,4328,4329],{"class":4130,"style":4131},"\u002F\u002F you can access the fully resolved vite configuration here",[3174,4331,3311,4332,4334],{"class":3176,"style":3177},[3174,4333,3314],{"class":3279,"style":3280},[3174,4335,3308],{"class":3291,"style":3292},[3174,4337,3311,4338,3270,4341,4343,4344,4346,4347,3270,4349],{"class":3176,"style":3177},[3174,4339,4340],{"class":3180,"style":3181},"configEnvironment",[3174,4342,3281],{"class":3279,"style":3280},"name",[3174,4345,3308],{"class":3291,"style":3292}," config",[3174,4348,3323],{"class":3279,"style":3280},[3174,4350,3284],{"class":3279,"style":3280},[3174,4352,3572,4353],{"class":3176,"style":3177},[3174,4354,4355],{"class":4130,"style":4131},"\u002F\u002F you can set environment-specific vite configuration here",[3174,4357,3572,4358,3270,4360,4362,4363,3270,4366,4369,3270,4371],{"class":3176,"style":3177},[3174,4359,4225],{"class":3267,"style":3268},[3174,4361,3281],{"class":3279,"style":3280},"name ",[3174,4364,4365],{"class":3291,"style":3292},"===",[3174,4367,4368],{"class":3717,"style":3718},"'client'",[3174,4370,3323],{"class":3279,"style":3280},[3174,4372,3284],{"class":3279,"style":3280},[3174,4374,4375,4376,4378,4379,3270,4382,4384],{"class":3176,"style":3177},"      config",[3174,4377,3247],{"class":3291,"style":3292},"optimizeDeps ",[3174,4380,4381],{"class":3291,"style":3292},"||=",[3174,4383,3284],{"class":3279,"style":3280},[3174,4385,3314],{"class":3279,"style":3280},[3174,4387,4375,4388,4153,4390,4392,4393,3270,4395,4398],{"class":3176,"style":3177},[3174,4389,3247],{"class":3291,"style":3292},[3174,4391,3247],{"class":3291,"style":3292},"include ",[3174,4394,4381],{"class":3291,"style":3292},[3174,4396,4397],{"class":3279,"style":3280},"[",[3174,4399,4400],{"class":3279,"style":3280},"]",[3174,4402,4375,4403,4153,4405,4156,4407,4409,4411,4413,4415],{"class":3176,"style":3177},[3174,4404,3247],{"class":3291,"style":3292},[3174,4406,3247],{"class":3291,"style":3292},[3174,4408,3247],{"class":3291,"style":3292},[3174,4410,4161],{"class":3180,"style":3181},[3174,4412,3281],{"class":3279,"style":3280},[3174,4414,4166],{"class":3717,"style":3718},[3174,4416,3323],{"class":3279,"style":3280},[3174,4418,3572,4419],{"class":3176,"style":3177},[3174,4420,3314],{"class":3279,"style":3280},[3174,4422,3311,4423,4425],{"class":3176,"style":3177},[3174,4424,3314],{"class":3279,"style":3280},[3174,4426,3308],{"class":3291,"style":3292},[3174,4428,3311,4429,3270,4432,4434,4435,3270,4437],{"class":3176,"style":3177},[3174,4430,4431],{"class":3180,"style":3181},"applyToEnvironment",[3174,4433,3281],{"class":3279,"style":3280},"environment",[3174,4436,3323],{"class":3279,"style":3280},[3174,4438,3284],{"class":3279,"style":3280},[3174,4440,3572,4441,4444,4445,4362,4447,3270,4449],{"class":3176,"style":3177},[3174,4442,4443],{"class":3267,"style":3268},"return"," environment",[3174,4446,3247],{"class":3291,"style":3292},[3174,4448,4365],{"class":3291,"style":3292},[3174,4450,4368],{"class":3717,"style":3718},[3174,4452,3311,4453,4455],{"class":3176,"style":3177},[3174,4454,3314],{"class":3279,"style":3280},[3174,4456,3308],{"class":3291,"style":3292},[3174,4458,4459,4461,4463],{"class":3176,"style":3177},[3174,4460,3314],{"class":3279,"style":3280},[3174,4462,3323],{"class":3279,"style":3280},[3174,4464,3323],{"class":3279,"style":3280},[4108,4466,4468],{"id":4467},"testing-nuxt-5-migration-to-vite-environment-api-migration-steps-_2-migrate-vite-plugins-to-use-environments","2. Migrate Vite plugins to use environments",[3147,4470,4471,4472,4474,4475,4062,4477,4479,4480,4482],{},"Instead of using ",[3157,4473,4271],{}," with ",[3157,4476,4061],{},[3157,4478,4065],{},", you can instead use the new ",[3157,4481,4431],{}," hook within your plugin.",[3165,4484,4485],{"language":3257,"class":3259},[3157,4486,4487,3285,4491,3285,4507,3285,4515,3285,4525,3285,4541,3285,4547,3285,4566,3285,4568,3285,4572,3285,4588,3285,4596,3285,4606,3285,4610,3285,4616,3285,4626,3285,4630,3285,4636,3285,4648,3285,4652,3285,4666,3285,4676,3285,4688,3285,4704,3285,4708,3285,4714,3285,4724,3285,4734,3285,4740],{"class":3262},[3174,4488,4489],{"class":3176,"style":3177},[3174,4490,4132],{"class":4130,"style":4131},[3174,4492,4493,4495,4497,4499,3270,4501,3270,4503,4505],{"class":3176,"style":3177},[3174,4494,4271],{"class":3180,"style":3181},[3174,4496,3281],{"class":3279,"style":3280},[3174,4498,3281],{"class":3279,"style":3280},[3174,4500,3323],{"class":3279,"style":3280},[3174,4502,4145],{"class":3267,"style":3268},[3174,4504,3281],{"class":3279,"style":3280},[3174,4506,3284],{"class":3279,"style":3280},[3174,4508,4286,4509,3270,4511,4513],{"class":3176,"style":3177},[3174,4510,3293],{"class":3291,"style":3292},[3174,4512,4291],{"class":3717,"style":3718},[3174,4514,3308],{"class":3291,"style":3292},[3174,4516,3311,4517,3270,4519,4069,4521,3270,4523],{"class":3176,"style":3177},[3174,4518,4069],{"class":3180,"style":3181},[3174,4520,3281],{"class":3279,"style":3280},[3174,4522,3323],{"class":3279,"style":3280},[3174,4524,3284],{"class":3279,"style":3280},[3174,4526,4235,4527,4153,4529,4156,4531,4533,4535,4537,4539],{"class":3176,"style":3177},[3174,4528,3247],{"class":3291,"style":3292},[3174,4530,3247],{"class":3291,"style":3292},[3174,4532,3247],{"class":3291,"style":3292},[3174,4534,4161],{"class":3180,"style":3181},[3174,4536,3281],{"class":3279,"style":3280},[3174,4538,4166],{"class":3717,"style":3718},[3174,4540,3323],{"class":3279,"style":3280},[3174,4542,3311,4543,4545],{"class":3176,"style":3177},[3174,4544,3314],{"class":3279,"style":3280},[3174,4546,3308],{"class":3291,"style":3292},[3174,4548,4549,4551,4553,3270,4555,4557,4558,3270,4560,3270,4562,4564],{"class":3176,"style":3177},[3174,4550,3314],{"class":3279,"style":3280},[3174,4552,3323],{"class":3279,"style":3280},[3174,4554,3308],{"class":3291,"style":3292},[3174,4556,3284],{"class":3279,"style":3280}," client",[3174,4559,3293],{"class":3291,"style":3292},[3174,4561,3567],{"class":3565,"style":3566},[3174,4563,3314],{"class":3279,"style":3280},[3174,4565,3323],{"class":3279,"style":3280},[3174,4567],{"class":3176,"style":3177},[3174,4569,4570],{"class":3176,"style":3177},[3174,4571,4266],{"class":4130,"style":4131},[3174,4573,4574,4576,4578,4580,3270,4582,3270,4584,4586],{"class":3176,"style":3177},[3174,4575,4271],{"class":3180,"style":3181},[3174,4577,3281],{"class":3279,"style":3280},[3174,4579,3281],{"class":3279,"style":3280},[3174,4581,3323],{"class":3279,"style":3280},[3174,4583,4145],{"class":3267,"style":3268},[3174,4585,3281],{"class":3279,"style":3280},[3174,4587,3284],{"class":3279,"style":3280},[3174,4589,4286,4590,3270,4592,4594],{"class":3176,"style":3177},[3174,4591,3293],{"class":3291,"style":3292},[3174,4593,4291],{"class":3717,"style":3718},[3174,4595,3308],{"class":3291,"style":3292},[3174,4597,3311,4598,3270,4600,4069,4602,3270,4604],{"class":3176,"style":3177},[3174,4599,4069],{"class":3180,"style":3181},[3174,4601,3281],{"class":3279,"style":3280},[3174,4603,3323],{"class":3279,"style":3280},[3174,4605,3284],{"class":3279,"style":3280},[3174,4607,3572,4608],{"class":3176,"style":3177},[3174,4609,4308],{"class":4130,"style":4131},[3174,4611,3311,4612,4614],{"class":3176,"style":3177},[3174,4613,3314],{"class":3279,"style":3280},[3174,4615,3308],{"class":3291,"style":3292},[3174,4617,3311,4618,3270,4620,4069,4622,3270,4624],{"class":3176,"style":3177},[3174,4619,4072],{"class":3180,"style":3181},[3174,4621,3281],{"class":3279,"style":3280},[3174,4623,3323],{"class":3279,"style":3280},[3174,4625,3284],{"class":3279,"style":3280},[3174,4627,3572,4628],{"class":3176,"style":3177},[3174,4629,4329],{"class":4130,"style":4131},[3174,4631,3311,4632,4634],{"class":3176,"style":3177},[3174,4633,3314],{"class":3279,"style":3280},[3174,4635,3308],{"class":3291,"style":3292},[3174,4637,3311,4638,3270,4640,4343,4642,4346,4644,3270,4646],{"class":3176,"style":3177},[3174,4639,4340],{"class":3180,"style":3181},[3174,4641,3281],{"class":3279,"style":3280},[3174,4643,3308],{"class":3291,"style":3292},[3174,4645,3323],{"class":3279,"style":3280},[3174,4647,3284],{"class":3279,"style":3280},[3174,4649,3572,4650],{"class":3176,"style":3177},[3174,4651,4355],{"class":4130,"style":4131},[3174,4653,3572,4654,3270,4656,4362,4658,3270,4660,4662,3270,4664],{"class":3176,"style":3177},[3174,4655,4225],{"class":3267,"style":3268},[3174,4657,3281],{"class":3279,"style":3280},[3174,4659,4365],{"class":3291,"style":3292},[3174,4661,4368],{"class":3717,"style":3718},[3174,4663,3323],{"class":3279,"style":3280},[3174,4665,3284],{"class":3279,"style":3280},[3174,4667,4375,4668,4378,4670,3270,4672,4674],{"class":3176,"style":3177},[3174,4669,3247],{"class":3291,"style":3292},[3174,4671,4381],{"class":3291,"style":3292},[3174,4673,3284],{"class":3279,"style":3280},[3174,4675,3314],{"class":3279,"style":3280},[3174,4677,4375,4678,4153,4680,4392,4682,3270,4684,4686],{"class":3176,"style":3177},[3174,4679,3247],{"class":3291,"style":3292},[3174,4681,3247],{"class":3291,"style":3292},[3174,4683,4381],{"class":3291,"style":3292},[3174,4685,4397],{"class":3279,"style":3280},[3174,4687,4400],{"class":3279,"style":3280},[3174,4689,4375,4690,4153,4692,4156,4694,4696,4698,4700,4702],{"class":3176,"style":3177},[3174,4691,3247],{"class":3291,"style":3292},[3174,4693,3247],{"class":3291,"style":3292},[3174,4695,3247],{"class":3291,"style":3292},[3174,4697,4161],{"class":3180,"style":3181},[3174,4699,3281],{"class":3279,"style":3280},[3174,4701,4166],{"class":3717,"style":3718},[3174,4703,3323],{"class":3279,"style":3280},[3174,4705,3572,4706],{"class":3176,"style":3177},[3174,4707,3314],{"class":3279,"style":3280},[3174,4709,3311,4710,4712],{"class":3176,"style":3177},[3174,4711,3314],{"class":3279,"style":3280},[3174,4713,3308],{"class":3291,"style":3292},[3174,4715,3311,4716,3270,4718,4434,4720,3270,4722],{"class":3176,"style":3177},[3174,4717,4431],{"class":3180,"style":3181},[3174,4719,3281],{"class":3279,"style":3280},[3174,4721,3323],{"class":3279,"style":3280},[3174,4723,3284],{"class":3279,"style":3280},[3174,4725,3572,4726,4444,4728,4362,4730,3270,4732],{"class":3176,"style":3177},[3174,4727,4443],{"class":3267,"style":3268},[3174,4729,3247],{"class":3291,"style":3292},[3174,4731,4365],{"class":3291,"style":3292},[3174,4733,4368],{"class":3717,"style":3718},[3174,4735,3311,4736,4738],{"class":3176,"style":3177},[3174,4737,3314],{"class":3279,"style":3280},[3174,4739,3308],{"class":3291,"style":3292},[3174,4741,4742,4744,4746],{"class":3176,"style":3177},[3174,4743,3314],{"class":3279,"style":3280},[3174,4745,3323],{"class":3279,"style":3280},[3174,4747,3323],{"class":3279,"style":3280},[4749,4750,4752],"read-more",{"to":4000,"target":4751},"_blank","Learn more about Vite's Environment API",[3144,4754,4755,4758],{"id":2792},[3157,4756,4757],{},"giget"," Is Now Optional (Remote Layers)",[3147,4760,3501,4761,3505],{},[3236,4762,3504],{},[3507,4764,2766],{"id":2796},[3147,4766,4767,4769,4770,4773,4774,4777],{},[3157,4768,4757],{}," is no longer installed by default. It is now an optional peer dependency of ",[3157,4771,4772],{},"@nuxt\u002Fkit",", needed only to download a layer that ",[3157,4775,4776],{},"extends"," names by remote URL:",[3165,4779,4780],{"language":3257,"filename":234,"class":3259},[3157,4781,4782,3285,4794,3285,4808],{"class":3262},[3174,4783,4784,3270,4786,3270,4788,4790,4792],{"class":3176,"style":3177},[3174,4785,3269],{"class":3267,"style":3268},[3174,4787,3273],{"class":3267,"style":3268},[3174,4789,3276],{"class":3180,"style":3181},[3174,4791,3281],{"class":3279,"style":3280},[3174,4793,3284],{"class":3279,"style":3280},[3174,4795,4796,4797,3270,4799,4801,4804,4806],{"class":3176,"style":3177},"  extends",[3174,4798,3293],{"class":3291,"style":3292},[3174,4800,4397],{"class":3279,"style":3280},[3174,4802,4803],{"class":3717,"style":3718},"'github:my-org\u002Fmy-theme'",[3174,4805,4400],{"class":3279,"style":3280},[3174,4807,3308],{"class":3291,"style":3292},[3174,4809,4810,4812],{"class":3176,"style":3177},[3174,4811,3314],{"class":3279,"style":3280},[3174,4813,3323],{"class":3279,"style":3280},[3147,4815,4816,4817,4820],{},"Local layers, layers in ",[3157,4818,4819],{},"~~\u002Flayers\u002F",", and layers installed as packages are unaffected.",[3507,4822,2778],{"id":2798},[3147,4824,4825],{},"Most projects never extend from a remote source, so the downloader was being installed for everyone to serve a small minority. Downloading a layer at config-resolution time is also the least reproducible way to consume one: the fetch happens outside your package manager, so it is not in your lockfile and, unless you pin it yourself, not pinned to a revision.",[3507,4827,2769],{"id":2800},[3147,4829,4830,4835],{},[3236,4831,4832,4833,3247],{},"Preferred: move the layer into ",[3157,4834,239],{}," Every major package manager understands git URLs, so a remote layer can be a normal dependency. This puts it in your lockfile, pins it to an exact commit, and installs it alongside everything else:",[3165,4837,4840],{"language":4838,"filename":239,"class":4839},"json","shj shiki shj-lang-json",[3157,4841,4843,3285,4847,3285,4855,3285,4863,3285,4867],{"class":4842},"language-json",[3174,4844,4845],{"class":3176,"style":3177},[3174,4846,3284],{"class":3279,"style":3280},[3174,4848,3311,4849,3380,4853],{"class":3176,"style":3177},[3174,4850,4852],{"class":4851,"style":3800},"shj-syn-var shj-var","\"devDependencies\"",[3174,4854,3284],{"class":3279,"style":3280},[3174,4856,3572,4857,3380,4860],{"class":3176,"style":3177},[3174,4858,4859],{"class":4851,"style":3800},"\"my-theme\"",[3174,4861,4862],{"class":3717,"style":3718},"\"github:my-org\u002Fmy-theme#4a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b\"",[3174,4864,3311,4865],{"class":3176,"style":3177},[3174,4866,3314],{"class":3279,"style":3280},[3174,4868,4869],{"class":3176,"style":3177},[3174,4870,3314],{"class":3279,"style":3280},[3147,4872,4873],{},"Then extend from it by package name:",[3165,4875,4876],{"language":3257,"filename":234,"class":3259},[3157,4877,4878,3285,4890,3285,4903],{"class":3262},[3174,4879,4880,3270,4882,3270,4884,4886,4888],{"class":3176,"style":3177},[3174,4881,3269],{"class":3267,"style":3268},[3174,4883,3273],{"class":3267,"style":3268},[3174,4885,3276],{"class":3180,"style":3181},[3174,4887,3281],{"class":3279,"style":3280},[3174,4889,3284],{"class":3279,"style":3280},[3174,4891,4796,4892,3270,4894,4896,4899,4901],{"class":3176,"style":3177},[3174,4893,3293],{"class":3291,"style":3292},[3174,4895,4397],{"class":3279,"style":3280},[3174,4897,4898],{"class":3717,"style":3718},"'my-theme'",[3174,4900,4400],{"class":3279,"style":3280},[3174,4902,3308],{"class":3291,"style":3292},[3174,4904,4905,4907],{"class":3176,"style":3177},[3174,4906,3314],{"class":3279,"style":3280},[3174,4908,3323],{"class":3279,"style":3280},[3147,4910,4911,4912,4915,4916,4919,4920,4923],{},"The part after ",[3157,4913,4914],{},"#"," is any commit-ish, so a tag (",[3157,4917,4918],{},"#v1.2.0",") or ",[3157,4921,4922],{},"#semver:^1.2.0"," works too; a full commit SHA is the only form that is genuinely immutable.",[3147,4925,4926,4931,4932,4934],{},[3236,4927,4928,4929],{},"Otherwise, install ",[3157,4930,4757],{}," and keep using a remote ",[3157,4933,4776],{}," entry:",[3161,4936,4937,4951,4963,4975],{"sync":3163},[3165,4938,4939],{"language":3167,"filename":3168,"class":3169},[3157,4940,4941],{"class":3172},[3174,4942,4943,3270,4945,4948,4950],{"class":3176,"style":3177},[3174,4944,3168],{"class":3180,"style":3181},[3174,4946,4947],{"class":3267,"style":3268},"install",[3174,4949,3928],{"class":3267,"style":3268}," giget",[3165,4952,4953],{"language":3167,"filename":3186,"class":3169},[3157,4954,4955],{"class":3172},[3174,4956,4957,3270,4959,4961,4950],{"class":3176,"style":3177},[3174,4958,3186],{"class":3180,"style":3181},[3174,4960,860],{"class":3267,"style":3268},[3174,4962,3928],{"class":3267,"style":3268},[3165,4964,4965],{"language":3167,"filename":3195,"class":3169},[3157,4966,4967],{"class":3172},[3174,4968,4969,3270,4971,4973,4950],{"class":3176,"style":3177},[3174,4970,3195],{"class":3180,"style":3181},[3174,4972,860],{"class":3267,"style":3268},[3174,4974,3928],{"class":3267,"style":3268},[3165,4976,4977],{"language":3167,"filename":3204,"class":3169},[3157,4978,4979],{"class":3172},[3174,4980,4981,3270,4983,4985,4950],{"class":3176,"style":3177},[3174,4982,3204],{"class":3180,"style":3181},[3174,4984,860],{"class":3267,"style":3268},[3174,4986,3928],{"class":3267,"style":3268},[3147,4988,4989,4990,4992,4993,4995],{},"If a remote layer is resolved without ",[3157,4991,4757],{}," present, Nuxt reports which ",[3157,4994,4776],{}," entry needs it.",[3144,4997,4998,4999],{"id":2802},"Non-Async ",[3157,5000,3399],{},[3147,5002,3501,5003,3505],{},[3236,5004,3504],{},[3507,5006,2766],{"id":2806},[3147,5008,5009,5010,3665,5014,5016,5017,5019,5020,5023,5024,5026],{},"With the upgrade to ",[3151,5011,5013],{"href":5012},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fhookable","hookable v6",[3157,5015,3399],{}," may now return ",[3157,5018,3408],{}," instead of always returning ",[3157,5021,5022],{},"Promise\u003Cvoid>",". This is a significant performance improvement that avoids unnecessary ",[3157,5025,3412],{}," allocations when there are no registered hooks or all hooks are synchronous.",[3147,5028,5029,5030,5033,5034,4474,5036,5039,5040,3643,5043,5046,5047,5049],{},"By default (with ",[3157,5031,5032],{},"compatibilityVersion: 4","), Nuxt wraps ",[3157,5035,3399],{},[3157,5037,5038],{},"Promise.resolve()"," so that existing ",[3157,5041,5042],{},".then()",[3157,5044,5045],{},".catch()"," chaining continues to work. With ",[3157,5048,3514],{},", this wrapper is removed.",[4011,5051,5052],{},"This affects both build-time Nuxt hooks (used by Nuxt modules) and runtime Nuxt hooks (which you might use in your application code).",[3507,5054,2778],{"id":2808},[3147,5056,5057,5058,5060,5061,5063],{},"Hookable v6's ",[3157,5059,3399],{}," is 20-40x faster because it avoids creating a ",[3157,5062,3412],{}," when one is not needed. This benefits applications with many hook call sites.",[3507,5065,2769],{"id":2810},[3147,5067,5068,5069,4474,5071,4062,5073,5075,5076,3293],{},"If you or your modules use ",[3157,5070,3399],{},[3157,5072,5042],{},[3157,5074,5045],{}," chaining, switch to ",[3157,5077,5078],{},"await",[3165,5080,5081],{"language":3790,"class":3791},[3157,5082,5083,3285,5088],{"class":3794},[3174,5084,5085],{"class":3176,"style":3177},[3174,5086,5087],{"class":3799,"style":3800},"- nuxtApp.callHook('my:hook', data).then(() => { ... })",[3174,5089,5090],{"class":3176,"style":3177},[3174,5091,5092],{"class":3806,"style":3718},"+ await nuxtApp.callHook('my:hook', data)",[3165,5094,5095],{"language":3790,"class":3791},[3157,5096,5097,3285,5102],{"class":3794},[3174,5098,5099],{"class":3176,"style":3177},[3174,5100,5101],{"class":3799,"style":3800},"- nuxtApp.hooks.callHook('my:hook', data).catch(err => { ... })",[3174,5103,5104],{"class":3176,"style":3177},[3174,5105,5106],{"class":3806,"style":3718},"+ try { await nuxtApp.hooks.callHook('my:hook', data) } catch (err) { ... }",[4011,5108,4013,5109,4016,5111,4020,5113,3247],{},[3157,5110,3493],{},[3151,5112,2754],{"href":4019},[3157,5114,5115],{},"experimental.asyncCallHook: false",[3147,5117,5118,5119,5121,5122,5124],{},"Alternatively, you can ensure ",[3157,5120,3399],{}," always returns a ",[3157,5123,3412],{}," with:",[3165,5126,5127],{"language":3257,"meta":3258,"class":3259},[3157,5128,5129,3285,5141,3285,5148,3285,5158,3285,5164],{"class":3262},[3174,5130,5131,3270,5133,3270,5135,5137,5139],{"class":3176,"style":3177},[3174,5132,3269],{"class":3267,"style":3268},[3174,5134,3273],{"class":3267,"style":3268},[3174,5136,3276],{"class":3180,"style":3181},[3174,5138,3281],{"class":3279,"style":3280},[3174,5140,3284],{"class":3279,"style":3280},[3174,5142,5143,5144,3270,5146],{"class":3176,"style":3177},"  experimental",[3174,5145,3293],{"class":3291,"style":3292},[3174,5147,3284],{"class":3279,"style":3280},[3174,5149,5150,5151,3270,5153,5156],{"class":3176,"style":3177},"    asyncCallHook",[3174,5152,3293],{"class":3291,"style":3292},[3174,5154,5155],{"class":3565,"style":3566},"true",[3174,5157,3308],{"class":3291,"style":3292},[3174,5159,3311,5160,5162],{"class":3176,"style":3177},[3174,5161,3314],{"class":3279,"style":3280},[3174,5163,3308],{"class":3291,"style":3292},[3174,5165,5166,5168],{"class":3176,"style":3177},[3174,5167,3314],{"class":3279,"style":3280},[3174,5169,3323],{"class":3279,"style":3280},[3144,5171,2813],{"id":2812},[3147,5173,3501,5174,3505],{},[3236,5175,3504],{},[3507,5177,2766],{"id":2816},[3147,5179,3511,5180,5182,5183,5186,5187,5190,5191,5194,5195,5197],{},[3157,5181,3514],{},", client-only components (",[3157,5184,5185],{},".client.vue"," files and ",[3157,5188,5189],{},"createClientOnly()"," wrappers) now render an HTML comment (",[3157,5192,5193],{},"\u003C!--placeholder-->",") on the server instead of an empty ",[3157,5196,3425],{}," element.",[3507,5199,2778],{"id":2818},[3147,5201,5202,5203,5205,5206,5209],{},"When the placeholder ",[3157,5204,3425],{}," and the actual component root share the same tag name, Vue's runtime skips re-applying ",[3157,5207,5208],{},"setScopeId"," during hydration. This causes scoped styles to be missing after the component mounts. Using a comment node avoids the tag name collision entirely.",[3507,5211,2769],{"id":2820},[3147,5213,5214,5215,5217,5218,3665,5221,5224,5225,3845,5227,5230],{},"If you rely on the placeholder ",[3157,5216,3425],{}," to inherit attributes (",[3157,5219,5220],{},"class",[3157,5222,5223],{},"style",", etc.) for layout purposes (e.g., reserving space to prevent layout shift), wrap the component in ",[3157,5226,471],{},[3157,5228,5229],{},"#fallback"," slot instead:",[3165,5232,5233],{"language":3790,"class":3791},[3157,5234,5235,3285,5240,3285,5245,3285,5250,3285,5255,3285,5260,3285,5265],{"class":3794},[3174,5236,5237],{"class":3176,"style":3177},[3174,5238,5239],{"class":3799,"style":3800},"- \u003CMyComponent class=\"placeholder\" style=\"min-height: 200px\" \u002F>",[3174,5241,5242],{"class":3176,"style":3177},[3174,5243,5244],{"class":3806,"style":3718},"+ \u003CClientOnly>",[3174,5246,5247],{"class":3176,"style":3177},[3174,5248,5249],{"class":3806,"style":3718},"+   \u003CMyComponent \u002F>",[3174,5251,5252],{"class":3176,"style":3177},[3174,5253,5254],{"class":3806,"style":3718},"+   \u003Ctemplate #fallback>",[3174,5256,5257],{"class":3176,"style":3177},[3174,5258,5259],{"class":3806,"style":3718},"+     \u003Cdiv class=\"placeholder\" style=\"min-height: 200px\">\u003C\u002Fdiv>",[3174,5261,5262],{"class":3176,"style":3177},[3174,5263,5264],{"class":3806,"style":3718},"+   \u003C\u002Ftemplate>",[3174,5266,5267],{"class":3176,"style":3177},[3174,5268,5269],{"class":3806,"style":3718},"+ \u003C\u002FClientOnly>",[4011,5271,4013,5272,4016,5274,4020,5276,3247],{},[3157,5273,3493],{},[3151,5275,2754],{"href":4019},[3157,5277,5278],{},"experimental.clientNodePlaceholder: true",[3147,5280,5281,5282,5284],{},"Alternatively, you can revert to the previous ",[3157,5283,3425],{}," placeholder behavior with:",[3165,5286,5287],{"language":3257,"meta":3258,"class":3259},[3157,5288,5289,3285,5301,3285,5307,3285,5316,3285,5322],{"class":3262},[3174,5290,5291,3270,5293,3270,5295,5297,5299],{"class":3176,"style":3177},[3174,5292,3269],{"class":3267,"style":3268},[3174,5294,3273],{"class":3267,"style":3268},[3174,5296,3276],{"class":3180,"style":3181},[3174,5298,3281],{"class":3279,"style":3280},[3174,5300,3284],{"class":3279,"style":3280},[3174,5302,5143,5303,3270,5305],{"class":3176,"style":3177},[3174,5304,3293],{"class":3291,"style":3292},[3174,5306,3284],{"class":3279,"style":3280},[3174,5308,5309,5310,3270,5312,5314],{"class":3176,"style":3177},"    clientNodePlaceholder",[3174,5311,3293],{"class":3291,"style":3292},[3174,5313,3567],{"class":3565,"style":3566},[3174,5315,3308],{"class":3291,"style":3292},[3174,5317,3311,5318,5320],{"class":3176,"style":3177},[3174,5319,3314],{"class":3279,"style":3280},[3174,5321,3308],{"class":3291,"style":3292},[3174,5323,5324,5326],{"class":3176,"style":3177},[3174,5325,3314],{"class":3279,"style":3280},[3174,5327,3323],{"class":3279,"style":3280},[3144,5329,2823],{"id":2822},[3147,5331,3501,5332,3505],{},[3236,5333,3504],{},[3507,5335,2766],{"id":2826},[3147,5337,3511,5338,5340,5341,3435,5343,5348],{},[3157,5339,3514],{},", Nuxt's generated ",[3157,5342,244],{},[3151,5344,5346],{"href":5345},"https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig\u002F#noUncheckedSideEffectImports",[3157,5347,3441],{},". This is a default in TypeScript 7, so adopting it early keeps your project aligned ahead of that upgrade.",[3147,5350,5351,5352,5355,5356,5358],{},"With this option on, a side-effect-only import (",[3157,5353,5354],{},"import '.\u002Fsetup'",") that TypeScript cannot resolve to a module is now a type error, whereas it was previously ignored. This only affects type-checking (",[3157,5357,932],{}," and your editor), not runtime behavior.",[3507,5360,2778],{"id":2828},[3147,5362,5363],{},"Unresolved side-effect imports were silently ignored, so a typo or a deleted file could pass type-checking. Flagging them catches these mistakes and matches the TypeScript 7 default.",[3507,5365,2769],{"id":2830},[3147,5367,5368,5369,5372],{},"If type-checking now errors on a side-effect import of a non-code asset (for example ",[3157,5370,5371],{},"import '~\u002Fassets\u002Fstyles.css'","), add an ambient module declaration so TypeScript knows the import is valid:",[3165,5374,5376],{"language":3257,"filename":5375,"class":3259},"types.d.ts",[3157,5377,5378],{"class":3262},[3174,5379,5380,5383,5384,3270,5387,5389],{"class":3176,"style":3177},[3174,5381,5382],{"class":3267,"style":3268},"declare"," module ",[3174,5385,5386],{"class":3717,"style":3718},"'*.css'",[3174,5388,3284],{"class":3279,"style":3280},[3174,5390,3314],{"class":3279,"style":3280},[4011,5392,5393,5398,5402],{},[3147,5394,5395,5396,3293],{},"You can revert to the previous behavior by disabling the option in your ",[3157,5397,3664],{},[5399,5400,5401],null,{}," @case-police-ignore tsConfig ",[3165,5403,5404],{"language":3257,"meta":3258,"class":3259},[3157,5405,5406,3285,5418,3285,5424,3285,5431,3285,5437,3285,5446,3285,5452,3285,5458,3285,5464],{"class":3262},[3174,5407,5408,3270,5410,3270,5412,5414,5416],{"class":3176,"style":3177},[3174,5409,3269],{"class":3267,"style":3268},[3174,5411,3273],{"class":3267,"style":3268},[3174,5413,3276],{"class":3180,"style":3181},[3174,5415,3281],{"class":3279,"style":3280},[3174,5417,3284],{"class":3279,"style":3280},[3174,5419,3691,5420,3270,5422],{"class":3176,"style":3177},[3174,5421,3293],{"class":3291,"style":3292},[3174,5423,3284],{"class":3279,"style":3280},[3174,5425,5426,5427,3270,5429],{"class":3176,"style":3177},"    tsConfig",[3174,5428,3293],{"class":3291,"style":3292},[3174,5430,3284],{"class":3279,"style":3280},[3174,5432,3705,5433,3270,5435],{"class":3176,"style":3177},[3174,5434,3293],{"class":3291,"style":3292},[3174,5436,3284],{"class":3279,"style":3280},[3174,5438,5439,5440,3270,5442,5444],{"class":3176,"style":3177},"        noUncheckedSideEffectImports",[3174,5441,3293],{"class":3291,"style":3292},[3174,5443,3567],{"class":3565,"style":3566},[3174,5445,3308],{"class":3291,"style":3292},[3174,5447,3743,5448,5450],{"class":3176,"style":3177},[3174,5449,3314],{"class":3279,"style":3280},[3174,5451,3308],{"class":3291,"style":3292},[3174,5453,3572,5454,5456],{"class":3176,"style":3177},[3174,5455,3314],{"class":3279,"style":3280},[3174,5457,3308],{"class":3291,"style":3292},[3174,5459,3311,5460,5462],{"class":3176,"style":3177},[3174,5461,3314],{"class":3279,"style":3280},[3174,5463,3308],{"class":3291,"style":3292},[3174,5465,5466,5468],{"class":3176,"style":3177},[3174,5467,3314],{"class":3279,"style":3280},[3174,5469,3323],{"class":3279,"style":3280},[3144,5471,2833],{"id":2832},[3147,5473,3501,5474,3505],{},[3236,5475,3504],{},[3507,5477,2766],{"id":2836},[3147,5479,3511,5480,5482,5483,5489,5490,5492],{},[3157,5481,3514],{},", Nuxt sets Vue's ",[3151,5484,5486],{"href":5485},"https:\u002F\u002Fvuejs.org\u002Fapi\u002Fcompile-time-flags#VUE_OPTIONS_API",[3157,5487,5488],{},"__VUE_OPTIONS_API__"," feature flag to ",[3157,5491,3567],{},", which compiles Vue's Options API runtime out of the client bundle.",[3507,5494,2778],{"id":2838},[3147,5496,5497,5498,5501],{},"The Options API runtime ships in every client bundle even though most Nuxt applications are written with the Composition API and ",[3157,5499,5500],{},"\u003Cscript setup>",". Dropping it shrinks the client bundle (around 6 kB minified \u002F 2 kB gzipped on a minimal app).",[3507,5503,2769],{"id":2840},[3147,5505,5506,5507,5510,5511,3293],{},"If any of your components (or a dependency's components) use the Options API (",[3157,5508,5509],{},"export default { data() {}, methods: {}, ... }","), re-enable it in your ",[3157,5512,3664],{},[3165,5514,5515],{"language":3257,"meta":3258,"class":3259},[3157,5516,5517,3285,5529,3285,5536,3285,5545,3285,5551],{"class":3262},[3174,5518,5519,3270,5521,3270,5523,5525,5527],{"class":3176,"style":3177},[3174,5520,3269],{"class":3267,"style":3268},[3174,5522,3273],{"class":3267,"style":3268},[3174,5524,3276],{"class":3180,"style":3181},[3174,5526,3281],{"class":3279,"style":3280},[3174,5528,3284],{"class":3279,"style":3280},[3174,5530,5531,5532,3270,5534],{"class":3176,"style":3177},"  vue",[3174,5533,3293],{"class":3291,"style":3292},[3174,5535,3284],{"class":3279,"style":3280},[3174,5537,5538,5539,3270,5541,5543],{"class":3176,"style":3177},"    optionsApi",[3174,5540,3293],{"class":3291,"style":3292},[3174,5542,5155],{"class":3565,"style":3566},[3174,5544,3308],{"class":3291,"style":3292},[3174,5546,3311,5547,5549],{"class":3176,"style":3177},[3174,5548,3314],{"class":3279,"style":3280},[3174,5550,3308],{"class":3291,"style":3292},[3174,5552,5553,5555],{"class":3176,"style":3177},[3174,5554,3314],{"class":3279,"style":3280},[3174,5556,3323],{"class":3279,"style":3280},[3488,5558,5559,5561,5562,3643,5565,5568,5569,5572],{},[3157,5560,746],{}," is unaffected: its ",[3157,5563,5564],{},"asyncData",[3157,5566,5567],{},"head"," options are handled through ",[3157,5570,5571],{},"setup()"," rather than the Vue Options API, so it works regardless of this flag.",[3144,5574,2843],{"id":2842},[3147,5576,3501,5577,3505],{},[3236,5578,3504],{},[3507,5580,2766],{"id":2846},[3147,5582,3511,5583,3665,5585,5587,5588,5591,5592,3665,5594,3665,5596,3643,5598,5601],{},[3157,5584,3514],{},[3157,5586,3464],{}," is enabled by default. Nuxt generates typed route names and paths from your ",[3157,5589,5590],{},"pages\u002F"," directory, so composables like ",[3157,5593,656],{},[3157,5595,771],{},[3157,5597,495],{},[3157,5599,5600],{},"router.push"," are type-checked against your actual routes.",[3507,5603,2778],{"id":2848},[3147,5605,5606,5607,5610],{},"Typed routing catches broken links and stale route names at type-check time rather than at runtime, and it is now native to ",[3157,5608,5609],{},"vue-router",", so it is a sensible default.",[3507,5612,2769],{"id":2850},[3147,5614,5615,5616,5619,5620,5622],{},"If you reference routes that don't exist (for example a typo in a ",[3157,5617,5618],{},"to"," prop, or a route defined dynamically outside the ",[3157,5621,5590],{}," directory), type-checking will now error. Fix the reference, or extend the generated route types for routes you add at runtime.",[4011,5624,4013,5625,4016,5627,4020,5629,3247],{},[3157,5626,3493],{},[3151,5628,2754],{"href":4019},[3157,5630,5631],{},"experimental.typedPages: true",[3147,5633,5634],{},"Alternatively, you can opt out and revert to the previous behavior with:",[3165,5636,5637],{"language":3257,"meta":3258,"class":3259},[3157,5638,5639,3285,5651,3285,5657,3285,5666,3285,5672],{"class":3262},[3174,5640,5641,3270,5643,3270,5645,5647,5649],{"class":3176,"style":3177},[3174,5642,3269],{"class":3267,"style":3268},[3174,5644,3273],{"class":3267,"style":3268},[3174,5646,3276],{"class":3180,"style":3181},[3174,5648,3281],{"class":3279,"style":3280},[3174,5650,3284],{"class":3279,"style":3280},[3174,5652,5143,5653,3270,5655],{"class":3176,"style":3177},[3174,5654,3293],{"class":3291,"style":3292},[3174,5656,3284],{"class":3279,"style":3280},[3174,5658,5659,5660,3270,5662,5664],{"class":3176,"style":3177},"    typedPages",[3174,5661,3293],{"class":3291,"style":3292},[3174,5663,3567],{"class":3565,"style":3566},[3174,5665,3308],{"class":3291,"style":3292},[3174,5667,3311,5668,5670],{"class":3176,"style":3177},[3174,5669,3314],{"class":3279,"style":3280},[3174,5671,3308],{"class":3291,"style":3292},[3174,5673,5674,5676],{"class":3176,"style":3177},[3174,5675,3314],{"class":3279,"style":3280},[3174,5677,3323],{"class":3279,"style":3280},[3144,5679,3470,5680,5682],{"id":2852},[3157,5681,3473],{}," Is Ignored",[3147,5684,3501,5685,3505],{},[3236,5686,3504],{},[3507,5688,2766],{"id":2856},[3147,5690,3511,5691,5693,5694,5696,5697,3247],{},[3157,5692,3514],{},", Nuxt removes ",[3157,5695,3482],{}," from its generated TypeScript configurations. Relative Nuxt and Nitro aliases are resolved from Nuxt's build directory instead of a custom ",[3157,5698,3473],{},[3507,5700,2778],{"id":2858},[3147,5702,5703,5704,5706,5707,5710],{},"TypeScript 6 deprecates ",[3157,5705,3473],{},", and it is no longer required when using ",[3157,5708,5709],{},"paths",". Removing the option also keeps Nuxt's generated aliases anchored consistently to the generated configuration that contains them.",[3507,5712,2769],{"id":2860},[3147,5714,5715,5716,5718],{},"Remove ",[3157,5717,3473],{}," from your Nuxt TypeScript configuration. If you used it to anchor a relative Nuxt or Nitro alias, make that alias absolute instead:",[3165,5720,5721],{"language":3790,"filename":234,"class":3791},[3157,5722,5723,3285,5728,3285,5733,3285,5736,3285,5739,3285,5744,3285,5749,3285,5752,3285,5757,3285,5762,3285,5767,3285,5772,3285,5777,3285,5782,3285,5787],{"class":3794},[3174,5724,5725],{"class":3176,"style":3177},[3174,5726,5727],{"class":3806,"style":3718},"+ import { fileURLToPath } from 'node:url'",[3174,5729,5730],{"class":3176,"style":3177},[3174,5731,5732],{"class":3806,"style":3718},"+",[3174,5734,5735],{"class":3176,"style":3177},"  export default defineNuxtConfig({",[3174,5737,5738],{"class":3176,"style":3177},"    alias: {",[3174,5740,5741],{"class":3176,"style":3177},[3174,5742,5743],{"class":3799,"style":3800},"-     images: '.\u002Fassets\u002Fimages',",[3174,5745,5746],{"class":3176,"style":3177},[3174,5747,5748],{"class":3806,"style":3718},"+     images: fileURLToPath(new URL('.\u002Fassets\u002Fimages', import.meta.url)),",[3174,5750,5751],{"class":3176,"style":3177},"    },",[3174,5753,5754],{"class":3176,"style":3177},[3174,5755,5756],{"class":3799,"style":3800},"-   typescript: {",[3174,5758,5759],{"class":3176,"style":3177},[3174,5760,5761],{"class":3799,"style":3800},"-     tsConfig: {",[3174,5763,5764],{"class":3176,"style":3177},[3174,5765,5766],{"class":3799,"style":3800},"-       compilerOptions: {",[3174,5768,5769],{"class":3176,"style":3177},[3174,5770,5771],{"class":3799,"style":3800},"-         baseUrl: '..',",[3174,5773,5774],{"class":3176,"style":3177},[3174,5775,5776],{"class":3799,"style":3800},"-       },",[3174,5778,5779],{"class":3176,"style":3177},[3174,5780,5781],{"class":3799,"style":3800},"-     },",[3174,5783,5784],{"class":3176,"style":3177},[3174,5785,5786],{"class":3799,"style":3800},"-   },",[3174,5788,5789],{"class":3176,"style":3177},"  })",[3141,5791,2863],{"id":2862},[3147,5793,5794],{},"Nuxt 4 includes significant improvements and changes. This guide will help you migrate your existing Nuxt 3 application to Nuxt 4.",[3147,5796,5797],{},"First, upgrade to Nuxt 4:",[3161,5799,5800,5814,5826,5838,5850],{"sync":3163},[3165,5801,5802],{"language":3167,"filename":3168,"class":3169},[3157,5803,5804],{"class":3172},[3174,5805,5806,3270,5808,5810,5811],{"class":3176,"style":3177},[3174,5807,3168],{"class":3180,"style":3181},[3174,5809,4947],{"class":3267,"style":3268}," nuxt@^",[3174,5812,5813],{"class":3303,"style":3304},"4.0.0",[3165,5815,5816],{"language":3167,"filename":3186,"class":3169},[3157,5817,5818],{"class":3172},[3174,5819,5820,3270,5822,5810,5824],{"class":3176,"style":3177},[3174,5821,3186],{"class":3180,"style":3181},[3174,5823,860],{"class":3267,"style":3268},[3174,5825,5813],{"class":3303,"style":3304},[3165,5827,5828],{"language":3167,"filename":3195,"class":3169},[3157,5829,5830],{"class":3172},[3174,5831,5832,3270,5834,5810,5836],{"class":3176,"style":3177},[3174,5833,3195],{"class":3180,"style":3181},[3174,5835,860],{"class":3267,"style":3268},[3174,5837,5813],{"class":3303,"style":3304},[3165,5839,5840],{"language":3167,"filename":3204,"class":3169},[3157,5841,5842],{"class":3172},[3174,5843,5844,3270,5846,5810,5848],{"class":3176,"style":3177},[3174,5845,3204],{"class":3180,"style":3181},[3174,5847,860],{"class":3267,"style":3268},[3174,5849,5813],{"class":3303,"style":3304},[3165,5851,5852],{"language":3167,"filename":3214,"class":3169},[3157,5853,5854],{"class":3172},[3174,5855,5856,3270,5858,5860,5861],{"class":3176,"style":3177},[3174,5857,3214],{"class":3180,"style":3181},[3174,5859,860],{"class":3267,"style":3268}," npm:nuxt@^",[3174,5862,5813],{"class":3303,"style":3304},[3147,5864,5865],{},"After upgrading, most Nuxt 4 behaviors are now the default. However, some features can still be configured if you need to maintain backward compatibility during your migration.",[3147,5867,5868],{},"The following sections detail the key changes and migrations needed when upgrading to Nuxt 4.",[3147,5870,5871],{},"Breaking or significant changes are documented below along with migration steps and available configuration options.",[3144,5873,2867],{"id":2866},[3147,5875,5876,5877,5881],{},"To facilitate the upgrade process, we have collaborated with the ",[3151,5878,5880],{"href":5879},"https:\u002F\u002Fgithub.com\u002Fcodemod\u002Fcodemod","Codemod"," team to automate many migration steps with some open-source codemods.",[3488,5883,5884,5885,5888],{},"If you encounter any issues, please report them to the Codemod team with ",[3157,5886,5887],{},"npx codemod feedback"," 🙏",[3147,5890,5891,5892,3247],{},"For a complete list of Nuxt 4 codemods, detailed information on each, their source, and various ways to run them, visit the ",[3151,5893,5895],{"href":5894},"https:\u002F\u002Fapp.codemod.com\u002Fregistry","Codemod Registry",[3147,5897,5898,5899,5902],{},"You can run all the codemods mentioned in this guide using the following ",[3157,5900,5901],{},"codemod"," recipe:",[3161,5904,5905,5927,5944,5960,5977],{},[3165,5906,5907],{"language":3167,"filename":3168,"class":3169},[3157,5908,5909,3285,5914],{"class":3172},[3174,5910,5911],{"class":3176,"style":3177},[3174,5912,5913],{"class":4130,"style":4131},"# Using pinned version due to https:\u002F\u002Fgithub.com\u002Fcodemod\u002Fcodemod\u002Fissues\u002F1710",[3174,5915,5916,5918,5919,5922,5923,5926],{"class":3176,"style":3177},[3174,5917,3182],{"class":3180,"style":3181}," codemod@",[3174,5920,5921],{"class":3303,"style":3304},"0.18.7"," nuxt\u002F",[3174,5924,5925],{"class":3303,"style":3304},"4","\u002Fmigration-recipe",[3165,5928,5929],{"language":3167,"filename":3186,"class":3169},[3157,5930,5931,3285,5935],{"class":3172},[3174,5932,5933],{"class":3176,"style":3177},[3174,5934,5913],{"class":4130,"style":4131},[3174,5936,5937,5939,5940,5922,5942,5926],{"class":3176,"style":3177},[3174,5938,3186],{"class":3180,"style":3181}," dlx codemod@",[3174,5941,5921],{"class":3303,"style":3304},[3174,5943,5925],{"class":3303,"style":3304},[3165,5945,5946],{"language":3167,"filename":3195,"class":3169},[3157,5947,5948,3285,5952],{"class":3172},[3174,5949,5950],{"class":3176,"style":3177},[3174,5951,5913],{"class":4130,"style":4131},[3174,5953,5954,5939,5956,5922,5958,5926],{"class":3176,"style":3177},[3174,5955,3195],{"class":3180,"style":3181},[3174,5957,5921],{"class":3303,"style":3304},[3174,5959,5925],{"class":3303,"style":3304},[3165,5961,5962],{"language":3167,"filename":3204,"class":3169},[3157,5963,5964,3285,5968],{"class":3172},[3174,5965,5966],{"class":3176,"style":3177},[3174,5967,5913],{"class":4130,"style":4131},[3174,5969,5970,5972,5973,5922,5975,5926],{"class":3176,"style":3177},[3174,5971,3204],{"class":3180,"style":3181}," x codemod@",[3174,5974,5921],{"class":3303,"style":3304},[3174,5976,5925],{"class":3303,"style":3304},[3165,5978,5979],{"language":3167,"filename":3214,"class":3169},[3157,5980,5981,3285,5985],{"class":3172},[3174,5982,5983],{"class":3176,"style":3177},[3174,5984,5913],{"class":4130,"style":4131},[3174,5986,5987,5972,5989,5922,5991,5926],{"class":3176,"style":3177},[3174,5988,3214],{"class":3180,"style":3181},[3174,5990,5921],{"class":3303,"style":3304},[3174,5992,5925],{"class":3303,"style":3304},[3147,5994,5995],{},"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.",[3144,5997,2870],{"id":2869},[3147,5999,3501,6000,6002],{},[3236,6001,3504],{},": Significant",[3147,6004,6005,6006,6009],{},"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 ",[3157,6007,6008],{},"app\u002Fpages\u002F"," directory, this new structure will not apply).",[3147,6011,6012,6013],{},"👉 ",[3151,6014,6016],{"href":6015},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F26444","See full RFC",[3507,6018,2766],{"id":2873},[3334,6020,6021,6032,6045,6060,6073,6090],{},[3337,6022,6023,6024,6027,6028,6031],{},"the new Nuxt default ",[3157,6025,6026],{},"srcDir"," is ",[3157,6029,6030],{},"app\u002F"," by default, and most things are resolved from there.",[3337,6033,6034,6037,6038,6041,6042],{},[3157,6035,6036],{},"serverDir"," now defaults to ",[3157,6039,6040],{},"\u003CrootDir>\u002Fserver"," rather than ",[3157,6043,6044],{},"\u003CsrcDir>\u002Fserver",[3337,6046,6047,3665,6050,3643,6052,6055,6056,6059],{},[3157,6048,6049],{},"layers\u002F",[3157,6051,3616],{},[3157,6053,6054],{},"public\u002F"," are resolved relative to ",[3157,6057,6058],{},"\u003CrootDir>"," by default",[3337,6061,6062,6063,3665,6067,6070,6071],{},"if using ",[3151,6064,6066],{"href":6065},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fcontent\u002Fpull\u002F2649","Nuxt Content v2.13+",[3157,6068,6069],{},"content\u002F"," is resolved relative to ",[3157,6072,6058],{},[3337,6074,6075,6076,6079,6080,3643,6083,6086,6087],{},"a new ",[3157,6077,6078],{},"dir.app"," is added, which is the directory we look for ",[3157,6081,6082],{},"router.options.ts",[3157,6084,6085],{},"spa-loading-template.html"," - this defaults to ",[3157,6088,6089],{},"\u003CsrcDir>\u002F",[3337,6091,6075,6092,6096,6097,3643,6100],{},[3151,6093,6094],{"href":1398},[3157,6095,3671],{}," directory is available for code shared between the Vue app and the Nitro server, with auto-imports for ",[3157,6098,6099],{},"shared\u002Futils\u002F",[3157,6101,6102],{},"shared\u002Ftypes\u002F",[6104,6105],"details",{"$":6106},{"html":6107,"block":6107},1,[6109,6110,6112],"summary",{"$":6111},{"html":6107,"block":6107},"An example v4 folder structure.",[3165,6114,6117],{"language":6115,"class":6116},"sh","shj shiki shj-lang-sh",[3157,6118,6120,3285,6123,3285,6126,3285,6128,3285,6131,3285,6134,3285,6137,3285,6140,3285,6143,3285,6146,3285,6149,3285,6152,3285,6156,3285,6160,3285,6164,3285,6166,3285,6168,3285,6170,3285,6173,3285,6175,3285,6177,3285,6180,3285,6182,3285,6185,3285,6188,3285,6190,3285,6192,3285,6195,3285,6197],{"class":6119},"language-sh",[3174,6121,6122],{"class":3176,"style":3177},".output\u002F",[3174,6124,6125],{"class":3176,"style":3177},".nuxt\u002F",[3174,6127,6030],{"class":3176,"style":3177},[3174,6129,6130],{"class":3176,"style":3177},"  assets\u002F",[3174,6132,6133],{"class":3176,"style":3177},"  components\u002F",[3174,6135,6136],{"class":3176,"style":3177},"  composables\u002F",[3174,6138,6139],{"class":3176,"style":3177},"  layouts\u002F",[3174,6141,6142],{"class":3176,"style":3177},"  middleware\u002F",[3174,6144,6145],{"class":3176,"style":3177},"  pages\u002F",[3174,6147,6148],{"class":3176,"style":3177},"  plugins\u002F",[3174,6150,6151],{"class":3176,"style":3177},"  utils\u002F",[3174,6153,3311,6154],{"class":3176,"style":3177},[3174,6155,224],{"class":3180,"style":3181},[3174,6157,3311,6158],{"class":3176,"style":3177},[3174,6159,219],{"class":3180,"style":3181},[3174,6161,3311,6162],{"class":3176,"style":3177},[3174,6163,6082],{"class":3180,"style":3181},[3174,6165,6069],{"class":3176,"style":3177},[3174,6167,6049],{"class":3176,"style":3177},[3174,6169,3616],{"class":3176,"style":3177},[3174,6171,6172],{"class":3176,"style":3177},"node_modules\u002F",[3174,6174,6054],{"class":3176,"style":3177},[3174,6176,3671],{"class":3176,"style":3177},[3174,6178,6179],{"class":3176,"style":3177},"  types\u002F",[3174,6181,6151],{"class":3176,"style":3177},[3174,6183,6184],{"class":3176,"style":3177},"server\u002F",[3174,6186,6187],{"class":3176,"style":3177},"  api\u002F",[3174,6189,6142],{"class":3176,"style":3177},[3174,6191,6148],{"class":3176,"style":3177},[3174,6193,6194],{"class":3176,"style":3177},"  routes\u002F",[3174,6196,6151],{"class":3176,"style":3177},[3174,6198,6199],{"class":3176,"style":3177},[3174,6200,234],{"class":3180,"style":3181},[3488,6202,6203,6204,6207,6208,6210,6211,6213,6214,6217,6218,3665,6221,3329,6224,6226],{},"With this new structure, the ",[3157,6205,6206],{},"~"," alias now points to the ",[3157,6209,6030],{}," directory by default (your ",[3157,6212,6026],{},"). This means ",[3157,6215,6216],{},"~\u002Fcomponents"," resolves to ",[3157,6219,6220],{},"app\u002Fcomponents\u002F",[3157,6222,6223],{},"~\u002Fpages",[3157,6225,6008],{},", etc.",[3147,6228,6229,6230,3247],{},"👉 For more details, see the ",[3151,6231,6233],{"href":6232},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F27029","PR implementing this change",[3507,6235,2778],{"id":2875},[4030,6237,6238,6250],{},[3337,6239,6240,6243,6244,3643,6247,6249],{},[3236,6241,6242],{},"Performance"," - placing all your code in the root of your repo causes issues with ",[3157,6245,6246],{},".git\u002F",[3157,6248,6172],{}," folders being scanned\u002Fincluded by FS watchers which can significantly delay startup on non-Mac OSes.",[3337,6251,6252,6255,6256,6258,6259,6261,6262,6266],{},[3236,6253,6254],{},"IDE type-safety"," - ",[3157,6257,6184],{}," and the rest of your app are running in two entirely different contexts with different global imports available, and making sure ",[3157,6260,6184],{}," isn't ",[6263,6264,6265],"em",{},"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.",[6268,6269],"video-accordion",{"title":6270,"videoId":6271,"platform":6272},"Watch a video from Vue School on the new directory structure","1031028378","vimeo",[3507,6274,2769],{"id":2877},[4030,6276,6277,6282,6323,6344],{},[3337,6278,6279,6280,3247],{},"Create a new directory called ",[3157,6281,6030],{},[3337,6283,6284,6285,3665,6288,3665,6291,3665,6294,3665,6297,3665,6300,3665,6302,3643,6305,6308,6309,3665,6311,3665,6313,6315,6316,4062,6319,6322],{},"Move your ",[3157,6286,6287],{},"assets\u002F",[3157,6289,6290],{},"components\u002F",[3157,6292,6293],{},"composables\u002F",[3157,6295,6296],{},"app\u002Flayouts\u002F",[3157,6298,6299],{},"app\u002Fmiddleware\u002F",[3157,6301,6008],{},[3157,6303,6304],{},"app\u002Fplugins\u002F",[3157,6306,6307],{},"utils\u002F"," folders under it, as well as ",[3157,6310,219],{},[3157,6312,229],{},[3157,6314,224],{},". If you have an ",[3157,6317,6318],{},"app\u002Frouter-options.ts",[3157,6320,6321],{},"app\u002Fspa-loading-template.html",", these paths remain the same.",[3337,6324,6325,6326,3665,6328,3665,6330,3665,6332,3665,6334,3665,6336,3643,6338,6340,6341,6343],{},"Make sure your ",[3157,6327,234],{},[3157,6329,6069],{},[3157,6331,6049],{},[3157,6333,3616],{},[3157,6335,6054],{},[3157,6337,3671],{},[3157,6339,6184],{}," folders remain outside the ",[3157,6342,6030],{}," folder, in the root of your project.",[3337,6345,6346,6347,4062,6350,6353,6354,6357,6358,6360],{},"Remember to update any third-party configuration files to work with the new directory structure, such as your ",[3157,6348,6349],{},"tailwindcss",[3157,6351,6352],{},"eslint"," configuration (if required - ",[3157,6355,6356],{},"@nuxtjs\u002Ftailwindcss"," should automatically configure ",[3157,6359,6349],{}," correctly).",[4011,6362,6363,6364],{},"You can automate this migration by running ",[3157,6365,6366],{},"npx codemod@latest nuxt\u002F4\u002Ffile-structure",[3147,6368,6369,6370,6373,6374,6377,6378,6380,6381,3665,6383,3665,6385,3643,6387,6389,6390,6393,6394,6396,6397,3665,6400,3643,6403,6405],{},"However, migration is ",[6263,6371,6372],{},"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 ",[6263,6375,6376],{},"already"," have a custom ",[3157,6379,6026],{},". In this case, you should be aware that your ",[3157,6382,3616],{},[3157,6384,6054],{},[3157,6386,3671],{},[3157,6388,6184],{}," folders will be resolved from your ",[3157,6391,6392],{},"rootDir"," rather than from your custom ",[3157,6395,6026],{},". You can override this by configuring ",[3157,6398,6399],{},"dir.modules",[3157,6401,6402],{},"dir.public",[3157,6404,6036],{}," if you need to.",[3147,6407,6408],{},"You can also force a v3 folder structure with the following configuration:",[3165,6410,6411],{"language":3257,"filename":234,"class":3259},[3157,6412,6413,3285,6425,3285,6430,3285,6440,3285,6445,3285,6452,3285,6462,3285,6468],{"class":3262},[3174,6414,6415,3270,6417,3270,6419,6421,6423],{"class":3176,"style":3177},[3174,6416,3269],{"class":3267,"style":3268},[3174,6418,3273],{"class":3267,"style":3268},[3174,6420,3276],{"class":3180,"style":3181},[3174,6422,3281],{"class":3279,"style":3280},[3174,6424,3284],{"class":3279,"style":3280},[3174,6426,3311,6427],{"class":3176,"style":3177},[3174,6428,6429],{"class":4130,"style":4131},"\u002F\u002F This reverts the new srcDir default from `app` back to your root directory",[3174,6431,6432,6433,3270,6435,6438],{"class":3176,"style":3177},"  srcDir",[3174,6434,3293],{"class":3291,"style":3292},[3174,6436,6437],{"class":3717,"style":3718},"'.'",[3174,6439,3308],{"class":3291,"style":3292},[3174,6441,3311,6442],{"class":3176,"style":3177},[3174,6443,6444],{"class":4130,"style":4131},"\u002F\u002F This specifies the directory prefix for `router.options.ts` and `spa-loading-template.html`",[3174,6446,6447,6448,3270,6450],{"class":3176,"style":3177},"  dir",[3174,6449,3293],{"class":3291,"style":3292},[3174,6451,3284],{"class":3279,"style":3280},[3174,6453,6454,6455,3270,6457,6460],{"class":3176,"style":3177},"    app",[3174,6456,3293],{"class":3291,"style":3292},[3174,6458,6459],{"class":3717,"style":3718},"'app'",[3174,6461,3308],{"class":3291,"style":3292},[3174,6463,3311,6464,6466],{"class":3176,"style":3177},[3174,6465,3314],{"class":3279,"style":3280},[3174,6467,3308],{"class":3291,"style":3292},[3174,6469,6470,6472],{"class":3176,"style":3177},[3174,6471,3314],{"class":3279,"style":3280},[3174,6473,3323],{"class":3279,"style":3280},[3144,6475,2880],{"id":2879},[3147,6477,3501,6478,6480],{},[3236,6479,3504],{},": Moderate",[3507,6482,2766],{"id":2883},[3147,6484,6485,6486,3643,6488,6490],{},"Nuxt's data fetching system (",[3157,6487,561],{},[3157,6489,576],{},") has been significantly reorganized for better performance and consistency:",[4030,6492,6493,6529,6542,6548],{},[3337,6494,6495,6498,6499,4062,6501,6503,6504,3665,6507,3643,6510,6513,6514,3665,6517,3665,6520,3665,6523,4062,6526,6528],{},[3236,6496,6497],{},"Shared refs for the same key",": All calls to ",[3157,6500,561],{},[3157,6502,576],{}," with the same key now share the same ",[3157,6505,6506],{},"data",[3157,6508,6509],{},"error",[3157,6511,6512],{},"status"," refs. This means that it is important that all calls with an explicit key must not have conflicting ",[3157,6515,6516],{},"deep",[3157,6518,6519],{},"transform",[3157,6521,6522],{},"pick",[3157,6524,6525],{},"getCachedData",[3157,6527,3273],{}," options.",[3337,6530,6531,3448,6536,6538,6539,6541],{},[3236,6532,6533,6534],{},"More control over ",[3157,6535,6525],{},[3157,6537,6525],{}," function is now called every time data is fetched, even if this is caused by a watcher or calling ",[3157,6540,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.",[3337,6543,6544,6547],{},[3236,6545,6546],{},"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).",[3337,6549,6550,6553,6554,6556],{},[3236,6551,6552],{},"Data cleanup",": When the last component using data fetched with ",[3157,6555,561],{}," is unmounted, Nuxt will remove that data to avoid ever-growing memory usage.",[3507,6558,2778],{"id":2885},[3147,6560,6561,6562,3247],{},"These changes have been made to improve memory usage and increase consistency with loading states across calls of ",[3157,6563,561],{},[3507,6565,2769],{"id":2887},[4030,6567,6568,6822],{},[3337,6569,6570,6576,6684,6690],{},[3147,6571,6572,6575],{},[3236,6573,6574],{},"Check for inconsistent options",": Review any components using the same key with different options or fetch functions.",[3165,6577,6578],{"language":3257,"class":3259},[3157,6579,6580,3285,6585,3285,6637],{"class":3262},[3174,6581,6582],{"class":3176,"style":3177},[3174,6583,6584],{"class":4130,"style":4131},"\u002F\u002F This will now trigger a warning",[3174,6586,6587,3270,6589,6591,6592,6594,6595,3270,6597,3270,6600,6602,6604,6607,3270,6609,6611,3270,6613,3270,6615,6617,6619,6622,6624,3270,6626,6628,6629,3270,6631,3270,6633,6635],{"class":3176,"style":3177},[3174,6588,3848],{"class":3267,"style":3268},[3174,6590,3284],{"class":3279,"style":3280}," data",[3174,6593,3293],{"class":3291,"style":3292}," users1 ",[3174,6596,3314],{"class":3279,"style":3280},[3174,6598,6599],{"class":3291,"style":3292},"=",[3174,6601,561],{"class":3180,"style":3181},[3174,6603,3281],{"class":3279,"style":3280},[3174,6605,6606],{"class":3717,"style":3718},"'users'",[3174,6608,3308],{"class":3291,"style":3292},[3174,6610,3281],{"class":3279,"style":3280},[3174,6612,3323],{"class":3279,"style":3280},[3174,6614,4145],{"class":3267,"style":3268},[3174,6616,702],{"class":3180,"style":3181},[3174,6618,3281],{"class":3279,"style":3280},[3174,6620,6621],{"class":3717,"style":3718},"'\u002Fapi\u002Fusers'",[3174,6623,3323],{"class":3279,"style":3280},[3174,6625,3308],{"class":3291,"style":3292},[3174,6627,3284],{"class":3279,"style":3280}," deep",[3174,6630,3293],{"class":3291,"style":3292},[3174,6632,3567],{"class":3565,"style":3566},[3174,6634,3314],{"class":3279,"style":3280},[3174,6636,3323],{"class":3279,"style":3280},[3174,6638,6639,3270,6641,6591,6643,6645,6646,3270,6648,3270,6650,6652,6654,6656,3270,6658,6660,3270,6662,3270,6664,6666,6668,6670,6672,3270,6674,6628,6676,3270,6678,3270,6680,6682],{"class":3176,"style":3177},[3174,6640,3848],{"class":3267,"style":3268},[3174,6642,3284],{"class":3279,"style":3280},[3174,6644,3293],{"class":3291,"style":3292}," users2 ",[3174,6647,3314],{"class":3279,"style":3280},[3174,6649,6599],{"class":3291,"style":3292},[3174,6651,561],{"class":3180,"style":3181},[3174,6653,3281],{"class":3279,"style":3280},[3174,6655,6606],{"class":3717,"style":3718},[3174,6657,3308],{"class":3291,"style":3292},[3174,6659,3281],{"class":3279,"style":3280},[3174,6661,3323],{"class":3279,"style":3280},[3174,6663,4145],{"class":3267,"style":3268},[3174,6665,702],{"class":3180,"style":3181},[3174,6667,3281],{"class":3279,"style":3280},[3174,6669,6621],{"class":3717,"style":3718},[3174,6671,3323],{"class":3279,"style":3280},[3174,6673,3308],{"class":3291,"style":3292},[3174,6675,3284],{"class":3279,"style":3280},[3174,6677,3293],{"class":3291,"style":3292},[3174,6679,5155],{"class":3565,"style":3566},[3174,6681,3314],{"class":3279,"style":3280},[3174,6683,3323],{"class":3279,"style":3280},[3147,6685,6686,6687,6689],{},"It may be beneficial to extract any calls to ",[3157,6688,561],{}," that share an explicit key (and have custom options) into their own composable:",[3165,6691,6693],{"language":3257,"filename":6692,"class":3259},"app\u002Fcomposables\u002FuseUserData.ts",[3157,6694,6695,3285,6717,3285,6725,3285,6740,3285,6757,3285,6761,3285,6770,3285,6808,3285,6814,3285,6818],{"class":3262},[3174,6696,6697,3270,6699,3270,6702,3270,6705,6707,6708,6713,3270,6715],{"class":3176,"style":3177},[3174,6698,3269],{"class":3267,"style":3268},[3174,6700,6701],{"class":3267,"style":3268},"function",[3174,6703,6704],{"class":3180,"style":3181},"useUserData",[3174,6706,3281],{"class":3279,"style":3280},"userId",[3174,6709,6712],{"class":6710,"style":6711},"shj-syn-type shj-type","color:#E2931D;--shiki-dark:#FFCB6B",": string",[3174,6714,3323],{"class":3279,"style":3280},[3174,6716,3284],{"class":3279,"style":3280},[3174,6718,3311,6719,3270,6721,6723],{"class":3176,"style":3177},[3174,6720,4443],{"class":3267,"style":3268},[3174,6722,561],{"class":3180,"style":3181},[3174,6724,3281],{"class":3279,"style":3280},[3174,6726,3572,6727,6730,6707,6733,6735,6738],{"class":3176,"style":3177},[3174,6728,6729],{"class":3717,"style":3718},"`user-",[3174,6731,6732],{"class":3267,"style":3268},"${",[3174,6734,3314],{"class":3267,"style":3268},[3174,6736,6737],{"class":3717,"style":3718},"`",[3174,6739,3308],{"class":3291,"style":3292},[3174,6741,3572,6742,6744,3270,6746,3270,6748,6751,6707,6753,6755],{"class":3176,"style":3177},[3174,6743,3281],{"class":3279,"style":3280},[3174,6745,3323],{"class":3279,"style":3280},[3174,6747,4145],{"class":3267,"style":3268},[3174,6749,6750],{"class":3180,"style":3181},"fetchUser",[3174,6752,3281],{"class":3279,"style":3280},[3174,6754,3323],{"class":3279,"style":3280},[3174,6756,3308],{"class":3291,"style":3292},[3174,6758,3572,6759],{"class":3176,"style":3177},[3174,6760,3284],{"class":3279,"style":3280},[3174,6762,6763,6764,3270,6766,6768],{"class":3176,"style":3177},"      deep",[3174,6765,3293],{"class":3291,"style":3292},[3174,6767,5155],{"class":3565,"style":3566},[3174,6769,3308],{"class":3291,"style":3292},[3174,6771,6772,6773,6775,6776,3270,6778,6780,3270,6782,6785,6786,6788,6789,3270,6791,3270,6794,6798,6800,3270,6802,6804,6806],{"class":3176,"style":3177},"      transform",[3174,6774,3293],{"class":3291,"style":3292}," user ",[3174,6777,4145],{"class":3267,"style":3268},[3174,6779,3281],{"class":3279,"style":3280},[3174,6781,3284],{"class":3279,"style":3280},[3174,6783,6784],{"class":3291,"style":3292},"...","user",[3174,6787,3308],{"class":3291,"style":3292}," lastAccessed",[3174,6790,3293],{"class":3291,"style":3292},[3174,6792,6793],{"class":3267,"style":3268},"new",[3174,6795,6797],{"class":6796,"style":6711},"shj-syn-class shj-class","Date",[3174,6799,3281],{"class":3279,"style":3280},[3174,6801,3323],{"class":3279,"style":3280},[3174,6803,3314],{"class":3279,"style":3280},[3174,6805,3323],{"class":3279,"style":3280},[3174,6807,3308],{"class":3291,"style":3292},[3174,6809,3572,6810,6812],{"class":3176,"style":3177},[3174,6811,3314],{"class":3279,"style":3280},[3174,6813,3308],{"class":3291,"style":3292},[3174,6815,3311,6816],{"class":3176,"style":3177},[3174,6817,3323],{"class":3279,"style":3280},[3174,6819,6820],{"class":3176,"style":3177},[3174,6821,3314],{"class":3279,"style":3280},[3337,6823,6824,6832],{},[3147,6825,6826,3293],{},[3236,6827,6828,6829,6831],{},"Update ",[3157,6830,6525],{}," implementations",[3165,6833,6834],{"language":3790,"class":3791},[3157,6835,6836,3285,6839,3285,6844,3285,6849,3285,6854,3285,6859,3285,6864,3285,6869,3285,6874,3285,6879,3285,6883,3285,6888,3285,6893],{"class":3794},[3174,6837,6838],{"class":3176,"style":3177},"useAsyncData('key', fetchFunction, {",[3174,6840,6841],{"class":3176,"style":3177},[3174,6842,6843],{"class":3799,"style":3800},"-  getCachedData: (key, nuxtApp) => {",[3174,6845,6846],{"class":3176,"style":3177},[3174,6847,6848],{"class":3799,"style":3800},"-    return cachedData[key]",[3174,6850,6851],{"class":3176,"style":3177},[3174,6852,6853],{"class":3799,"style":3800},"-  }",[3174,6855,6856],{"class":3176,"style":3177},[3174,6857,6858],{"class":3806,"style":3718},"+  getCachedData: (key, nuxtApp, ctx) => {",[3174,6860,6861],{"class":3176,"style":3177},[3174,6862,6863],{"class":3806,"style":3718},"+    \u002F\u002F ctx.cause - can be 'initial' | 'refresh:hook' | 'refresh:manual' | 'watch'",[3174,6865,6866],{"class":3176,"style":3177},[3174,6867,6868],{"class":3806,"style":3718},"+    ",[3174,6870,6871],{"class":3176,"style":3177},[3174,6872,6873],{"class":3806,"style":3718},"+    \u002F\u002F Example: Don't use cache on manual refresh",[3174,6875,6876],{"class":3176,"style":3177},[3174,6877,6878],{"class":3806,"style":3718},"+    if (ctx.cause === 'refresh:manual') return undefined",[3174,6880,6881],{"class":3176,"style":3177},[3174,6882,6868],{"class":3806,"style":3718},[3174,6884,6885],{"class":3176,"style":3177},[3174,6886,6887],{"class":3806,"style":3718},"+    return cachedData[key]",[3174,6889,6890],{"class":3176,"style":3177},[3174,6891,6892],{"class":3806,"style":3718},"+  }",[3174,6894,6895],{"class":3176,"style":3177},"})",[3147,6897,6898],{},"Alternatively, for now, you can disable this behaviour with:",[3165,6900,6901],{"language":3257,"meta":3258,"class":3259},[3157,6902,6903,3285,6915,3285,6921,3285,6930,3285,6939,3285,6945],{"class":3262},[3174,6904,6905,3270,6907,3270,6909,6911,6913],{"class":3176,"style":3177},[3174,6906,3269],{"class":3267,"style":3268},[3174,6908,3273],{"class":3267,"style":3268},[3174,6910,3276],{"class":3180,"style":3181},[3174,6912,3281],{"class":3279,"style":3280},[3174,6914,3284],{"class":3279,"style":3280},[3174,6916,5143,6917,3270,6919],{"class":3176,"style":3177},[3174,6918,3293],{"class":3291,"style":3292},[3174,6920,3284],{"class":3279,"style":3280},[3174,6922,6923,6924,3270,6926,6928],{"class":3176,"style":3177},"    granularCachedData",[3174,6925,3293],{"class":3291,"style":3292},[3174,6927,3567],{"class":3565,"style":3566},[3174,6929,3308],{"class":3291,"style":3292},[3174,6931,6932,6933,3270,6935,6937],{"class":3176,"style":3177},"    purgeCachedData",[3174,6934,3293],{"class":3291,"style":3292},[3174,6936,3567],{"class":3565,"style":3566},[3174,6938,3308],{"class":3291,"style":3292},[3174,6940,3311,6941,6943],{"class":3176,"style":3177},[3174,6942,3314],{"class":3279,"style":3280},[3174,6944,3308],{"class":3291,"style":3292},[3174,6946,6947,6949],{"class":3176,"style":3177},[3174,6948,3314],{"class":3279,"style":3280},[3174,6950,3323],{"class":3279,"style":3280},[3144,6952,2890],{"id":2889},[3147,6954,3501,6955,3505],{},[3236,6956,3504],{},[3507,6958,2766],{"id":2893},[3147,6960,6961,6962,6965],{},"The order in which modules are loaded when using ",[3151,6963,6964],{"href":1520},"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.",[3147,6967,6968],{},"Now modules are loaded in the correct order:",[4030,6970,6971,6977],{},[3337,6972,6973,6976],{},[3236,6974,6975],{},"Layer modules first"," (in extend order - deeper layers first)",[3337,6978,6979,6982],{},[3236,6980,6981],{},"Project modules last"," (highest priority)",[3147,6984,6985],{},"This affects both:",[3334,6987,6988,6996],{},[3337,6989,6990,6991,6993,6994],{},"Modules defined in the ",[3157,6992,159],{}," array in ",[3157,6995,234],{},[3337,6997,6998,6999,7001],{},"Auto-discovered modules from the ",[3157,7000,3616],{}," directory",[3507,7003,2778],{"id":2895},[3147,7005,7006],{},"This change ensures that:",[3334,7008,7009,7012,7015],{},[3337,7010,7011],{},"Extended layers have lower priority than the consuming project",[3337,7013,7014],{},"Module execution order matches the intuitive layer inheritance pattern",[3337,7016,7017],{},"Module configuration and hooks work as expected in multi-layer setups",[3507,7019,2769],{"id":2897},[3147,7021,7022,7025],{},[3236,7023,7024],{},"Most projects will not need changes",", as this corrects the loading order to match expected behavior.",[3147,7027,7028],{},"However, if your project was relying on the previous incorrect order, you may need to:",[4030,7030,7031,7037,7043],{},[3337,7032,7033,7036],{},[3236,7034,7035],{},"Review module dependencies",": Check if any modules depend on specific loading order",[3337,7038,7039,7042],{},[3236,7040,7041],{},"Adjust module configuration",": If modules were configured to work around the incorrect order",[3337,7044,7045,7048],{},[3236,7046,7047],{},"Test thoroughly",": Ensure all functionality works as expected with the corrected order",[3147,7050,7051],{},"Example of the new correct order:",[3165,7053,7054],{"language":3257,"class":3259},[3157,7055,7056,3285,7061,3285,7073,3285,7092,3285,7098,3285,7100,3285,7105,3285,7117,3285,7130,3285,7148,3285,7154,3285,7156,3285,7161,3285,7166,3285,7171,3285,7176],{"class":3262},[3174,7057,7058],{"class":3176,"style":3177},[3174,7059,7060],{"class":4130,"style":4131},"\u002F\u002F Layer: my-layer\u002Fnuxt.config.ts",[3174,7062,7063,3270,7065,3270,7067,7069,7071],{"class":3176,"style":3177},[3174,7064,3269],{"class":3267,"style":3268},[3174,7066,3273],{"class":3267,"style":3268},[3174,7068,3276],{"class":3180,"style":3181},[3174,7070,3281],{"class":3279,"style":3280},[3174,7072,3284],{"class":3279,"style":3280},[3174,7074,7075,7076,3270,7078,7080,7083,3270,7085,7088,7090],{"class":3176,"style":3177},"  modules",[3174,7077,3293],{"class":3291,"style":3292},[3174,7079,4397],{"class":3279,"style":3280},[3174,7081,7082],{"class":3717,"style":3718},"'layer-module-1'",[3174,7084,3308],{"class":3291,"style":3292},[3174,7086,7087],{"class":3717,"style":3718},"'layer-module-2'",[3174,7089,4400],{"class":3279,"style":3280},[3174,7091,3308],{"class":3291,"style":3292},[3174,7093,7094,7096],{"class":3176,"style":3177},[3174,7095,3314],{"class":3279,"style":3280},[3174,7097,3323],{"class":3279,"style":3280},[3174,7099],{"class":3176,"style":3177},[3174,7101,7102],{"class":3176,"style":3177},[3174,7103,7104],{"class":4130,"style":4131},"\u002F\u002F Project: nuxt.config.ts",[3174,7106,7107,3270,7109,3270,7111,7113,7115],{"class":3176,"style":3177},[3174,7108,3269],{"class":3267,"style":3268},[3174,7110,3273],{"class":3267,"style":3268},[3174,7112,3276],{"class":3180,"style":3181},[3174,7114,3281],{"class":3279,"style":3280},[3174,7116,3284],{"class":3279,"style":3280},[3174,7118,4796,7119,3270,7121,7123,7126,7128],{"class":3176,"style":3177},[3174,7120,3293],{"class":3291,"style":3292},[3174,7122,4397],{"class":3279,"style":3280},[3174,7124,7125],{"class":3717,"style":3718},"'.\u002Fmy-layer'",[3174,7127,4400],{"class":3279,"style":3280},[3174,7129,3308],{"class":3291,"style":3292},[3174,7131,7075,7132,3270,7134,7136,7139,3270,7141,7144,7146],{"class":3176,"style":3177},[3174,7133,3293],{"class":3291,"style":3292},[3174,7135,4397],{"class":3279,"style":3280},[3174,7137,7138],{"class":3717,"style":3718},"'project-module-1'",[3174,7140,3308],{"class":3291,"style":3292},[3174,7142,7143],{"class":3717,"style":3718},"'project-module-2'",[3174,7145,4400],{"class":3279,"style":3280},[3174,7147,3308],{"class":3291,"style":3292},[3174,7149,7150,7152],{"class":3176,"style":3177},[3174,7151,3314],{"class":3279,"style":3280},[3174,7153,3323],{"class":3279,"style":3280},[3174,7155],{"class":3176,"style":3177},[3174,7157,7158],{"class":3176,"style":3177},[3174,7159,7160],{"class":4130,"style":4131},"\u002F\u002F Loading order (corrected):",[3174,7162,7163],{"class":3176,"style":3177},[3174,7164,7165],{"class":4130,"style":4131},"\u002F\u002F 1. layer-module-1",[3174,7167,7168],{"class":3176,"style":3177},[3174,7169,7170],{"class":4130,"style":4131},"\u002F\u002F 2. layer-module-2",[3174,7172,7173],{"class":3176,"style":3177},[3174,7174,7175],{"class":4130,"style":4131},"\u002F\u002F 3. project-module-1 (can override layer modules)",[3174,7177,7178],{"class":3176,"style":3177},[3174,7179,7180],{"class":4130,"style":4131},"\u002F\u002F 4. project-module-2 (can override layer modules)",[3147,7182,7183,7184,7190],{},"If you encounter issues with module order dependencies due to needing to register a hook, consider using the ",[3151,7185,7186,7189],{"href":1481},[3157,7187,7188],{},"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.",[3147,7192,7193,7194,3643,7198,7202],{},"👉 See ",[3151,7195,7197],{"href":7196},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F31507","PR #31507",[3151,7199,7201],{"href":7200},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F25719","issue #25719"," for more details.",[3144,7204,2900],{"id":2899},[3147,7206,3501,7207,3505],{},[3236,7208,3504],{},[3507,7210,2766],{"id":2903},[3147,7212,7213,7214,7216,7217,3665,7219,7222,7223,3643,7226,7229],{},"It's possible to set some route metadata using ",[3157,7215,761],{},", such as the ",[3157,7218,4343],{},[3157,7220,7221],{},"path",", and so on. Previously these were available both on the route and on route metadata (for example, ",[3157,7224,7225],{},"route.name",[3157,7227,7228],{},"route.meta.name",").",[3147,7231,7232],{},"Now, they are only accessible on the route object.",[3507,7234,2778],{"id":2905},[3147,7236,7237,7238,7241],{},"This is a result of enabling ",[3157,7239,7240],{},"experimental.scanPageMeta"," by default, and is a performance optimization.",[3507,7243,2769],{"id":2907},[3147,7245,7246],{},"The migration should be straightforward:",[3165,7248,7249],{"language":3790,"class":3791},[3157,7250,7251,3285,7254,3285,7256,3285,7261],{"class":3794},[3174,7252,7253],{"class":3176,"style":3177},"  const route = useRoute()",[3174,7255,3311],{"class":3176,"style":3177},[3174,7257,7258],{"class":3176,"style":3177},[3174,7259,7260],{"class":3799,"style":3800},"- console.log(route.meta.name)",[3174,7262,7263],{"class":3176,"style":3177},[3174,7264,7265],{"class":3806,"style":3718},"+ console.log(route.name)",[3144,7267,2910],{"id":2909},[3147,7269,3501,7270,6480],{},[3236,7271,3504],{},[3147,7273,7274],{},"Vue will now generate component names that match the Nuxt pattern for component naming.",[3507,7276,2766],{"id":2913},[3147,7278,7279],{},"By default, if you haven't set it manually, Vue will assign a component name that matches\nthe filename of the component.",[3165,7281,7283],{"language":3167,"filename":7282,"class":3169},"Directory structure",[3157,7284,7285,3285,7288,3285,7291],{"class":3172},[3174,7286,7287],{"class":3176,"style":3177},"├─ components\u002F",[3174,7289,7290],{"class":3176,"style":3177},"├─── SomeFolder\u002F",[3174,7292,7293],{"class":3176,"style":3177},"├───── MyComponent.vue",[3147,7295,7296,7297,7300,7301,7303],{},"In this case, the component name would be ",[3157,7298,7299],{},"MyComponent",", as far as Vue is concerned. If you wanted to use ",[3157,7302,3371],{}," with it, or identify it in the Vue DevTools, you would need to use this name.",[3147,7305,7306,7307,3247],{},"But in order to auto-import it, you would need to use ",[3157,7308,7309],{},"SomeFolderMyComponent",[3147,7311,7312],{},"With this change, these two values will match, and Vue will generate a component name that matches the Nuxt pattern for component naming.",[3507,7314,2769],{"id":2915},[3147,7316,7317,7318,7321,7322,7325,7326,7328],{},"Ensure that you use the updated name in any tests which use ",[3157,7319,7320],{},"findComponent"," from ",[3157,7323,7324],{},"@vue\u002Ftest-utils"," and in any ",[3157,7327,3371],{}," which depends on the name of your component.",[3147,7330,6898],{},[3165,7332,7333],{"language":3257,"meta":3258,"class":3259},[3157,7334,7335,3285,7347,3285,7353,3285,7362,3285,7368],{"class":3262},[3174,7336,7337,3270,7339,3270,7341,7343,7345],{"class":3176,"style":3177},[3174,7338,3269],{"class":3267,"style":3268},[3174,7340,3273],{"class":3267,"style":3268},[3174,7342,3276],{"class":3180,"style":3181},[3174,7344,3281],{"class":3279,"style":3280},[3174,7346,3284],{"class":3279,"style":3280},[3174,7348,5143,7349,3270,7351],{"class":3176,"style":3177},[3174,7350,3293],{"class":3291,"style":3292},[3174,7352,3284],{"class":3279,"style":3280},[3174,7354,7355,7356,3270,7358,7360],{"class":3176,"style":3177},"    normalizeComponentNames",[3174,7357,3293],{"class":3291,"style":3292},[3174,7359,3567],{"class":3565,"style":3566},[3174,7361,3308],{"class":3291,"style":3292},[3174,7363,3311,7364,7366],{"class":3176,"style":3177},[3174,7365,3314],{"class":3279,"style":3280},[3174,7367,3308],{"class":3291,"style":3292},[3174,7369,7370,7372],{"class":3176,"style":3177},[3174,7371,3314],{"class":3279,"style":3280},[3174,7373,3323],{"class":3279,"style":3280},[3144,7375,2918],{"id":2917},[3147,7377,3501,7378,3505],{},[3236,7379,3504],{},[3507,7381,2766],{"id":2921},[3147,7383,7384,7388,7389,7392],{},[3151,7385,7387],{"href":7386},"https:\u002F\u002Funhead.unjs.io\u002F","Unhead",", used to generate ",[3157,7390,7391],{},"\u003Chead>"," tags, has been updated to version 2. While mostly compatible it includes several breaking changes\nfor lower-level APIs.",[3334,7394,7395,7410,7413],{},[3337,7396,7397,7398,3665,7401,3665,7404,3665,7407,3247],{},"Removed props: ",[3157,7399,7400],{},"vmid",[3157,7402,7403],{},"hid",[3157,7405,7406],{},"children",[3157,7408,7409],{},"body",[3337,7411,7412],{},"Promise input no longer supported.",[3337,7414,7415],{},"Tags are now sorted using Capo.js by default.",[3507,7417,2769],{"id":2923},[3147,7419,7420],{},"The above changes should have minimal impact on your app.",[3147,7422,7423],{},"If you have issues you should verify:",[3334,7425,7426],{},[3337,7427,7428],{},"You're not using any of the removed props.",[3165,7430,7431],{"language":3790,"class":3791},[3157,7432,7433,3285,7436,3285,7439,3285,7442,3285,7445,3285,7450,3285,7455,3285,7458],{"class":3794},[3174,7434,7435],{"class":3176,"style":3177},"useHead({",[3174,7437,7438],{"class":3176,"style":3177},"  meta: [{ ",[3174,7440,7441],{"class":3176,"style":3177},"    name: 'description', ",[3174,7443,7444],{"class":3176,"style":3177},"    \u002F\u002F meta tags don't need a vmid, or a key    ",[3174,7446,7447],{"class":3176,"style":3177},[3174,7448,7449],{"class":3799,"style":3800},"-   vmid: 'description' ",[3174,7451,7452],{"class":3176,"style":3177},[3174,7453,7454],{"class":3799,"style":3800},"-   hid: 'description'",[3174,7456,7457],{"class":3176,"style":3177},"  }]",[3174,7459,6895],{"class":3176,"style":3177},[3334,7461,7462],{},[3337,7463,7464,7465,4062,7469,7473],{},"If you're using ",[3151,7466,7468],{"href":7467},"https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fhead\u002Fguides\u002Fplugins\u002Ftemplate-params","Template Params",[3151,7470,7472],{"href":7471},"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.",[3165,7475,7476],{"language":3257,"class":3259},[3157,7477,7478,3285,7501,3285,7503,3285,7515,3285,7526,3285,7540,3285,7554,3285,7566,3285,7572],{"class":3262},[3174,7479,7480,3270,7483,3270,7485,7488,3270,7490,3270,7493,3270,7495,3270,7498],{"class":3176,"style":3177},[3174,7481,7482],{"class":3267,"style":3268},"import",[3174,7484,3284],{"class":3279,"style":3280},[3174,7486,7487],{"class":6796,"style":6711},"AliasSortingPlugin",[3174,7489,3308],{"class":3291,"style":3292},[3174,7491,7492],{"class":6796,"style":6711},"TemplateParamsPlugin",[3174,7494,3314],{"class":3279,"style":3280},[3174,7496,7497],{"class":3267,"style":3268},"from",[3174,7499,7500],{"class":3717,"style":3718},"'@unhead\u002Fvue\u002Fplugins'",[3174,7502],{"class":3176,"style":3177},[3174,7504,7505,3270,7507,3270,7509,7511,7513],{"class":3176,"style":3177},[3174,7506,3269],{"class":3267,"style":3268},[3174,7508,3273],{"class":3267,"style":3268},[3174,7510,751],{"class":3180,"style":3181},[3174,7512,3281],{"class":3279,"style":3280},[3174,7514,3284],{"class":3279,"style":3280},[3174,7516,3311,7517,3270,7520,7522,3270,7524],{"class":3176,"style":3177},[3174,7518,7519],{"class":3180,"style":3181},"setup",[3174,7521,3281],{"class":3279,"style":3280},[3174,7523,3323],{"class":3279,"style":3280},[3174,7525,3284],{"class":3279,"style":3280},[3174,7527,3572,7528,7530,7531,3270,7533,7536,7538],{"class":3176,"style":3177},[3174,7529,3848],{"class":3267,"style":3268}," unhead ",[3174,7532,6599],{"class":3291,"style":3292},[3174,7534,7535],{"class":3180,"style":3181},"injectHead",[3174,7537,3281],{"class":3279,"style":3280},[3174,7539,3323],{"class":3279,"style":3280},[3174,7541,7542,7543,7545,7548,7550,7552],{"class":3176,"style":3177},"    unhead",[3174,7544,3247],{"class":3291,"style":3292},[3174,7546,7547],{"class":3180,"style":3181},"use",[3174,7549,3281],{"class":3279,"style":3280},[3174,7551,7492],{"class":6796,"style":6711},[3174,7553,3323],{"class":3279,"style":3280},[3174,7555,7542,7556,7558,7560,7562,7564],{"class":3176,"style":3177},[3174,7557,3247],{"class":3291,"style":3292},[3174,7559,7547],{"class":3180,"style":3181},[3174,7561,3281],{"class":3279,"style":3280},[3174,7563,7487],{"class":6796,"style":6711},[3174,7565,3323],{"class":3279,"style":3280},[3174,7567,3311,7568,7570],{"class":3176,"style":3177},[3174,7569,3314],{"class":3279,"style":3280},[3174,7571,3308],{"class":3291,"style":3292},[3174,7573,7574,7576],{"class":3176,"style":3177},[3174,7575,3314],{"class":3279,"style":3280},[3174,7577,3323],{"class":3279,"style":3280},[3147,7579,7580,7581,3329,7584,4062,7587,3247],{},"While not required it's recommended to update any imports from ",[3157,7582,7583],{},"@unhead\u002Fvue",[3157,7585,7586],{},"#imports",[3157,7588,7589],{},"nuxt\u002Fapp",[3165,7591,7592],{"language":3790,"class":3791},[3157,7593,7594,3285,7599],{"class":3794},[3174,7595,7596],{"class":3176,"style":3177},[3174,7597,7598],{"class":3799,"style":3800},"-import { useHead } from '@unhead\u002Fvue'",[3174,7600,7601],{"class":3176,"style":3177},[3174,7602,7603],{"class":3806,"style":3718},"+import { useHead } from '#imports'",[3147,7605,7606,7607,7610],{},"If you still have issues you may revert to the v1 behavior by enabling the ",[3157,7608,7609],{},"head.legacy"," config.",[3165,7612,7613],{"language":3257,"class":3259},[3157,7614,7615,3285,7627,3285,7634,3285,7643,3285,7649],{"class":3262},[3174,7616,7617,3270,7619,3270,7621,7623,7625],{"class":3176,"style":3177},[3174,7618,3269],{"class":3267,"style":3268},[3174,7620,3273],{"class":3267,"style":3268},[3174,7622,3276],{"class":3180,"style":3181},[3174,7624,3281],{"class":3279,"style":3280},[3174,7626,3284],{"class":3279,"style":3280},[3174,7628,7629,7630,3270,7632],{"class":3176,"style":3177},"  unhead",[3174,7631,3293],{"class":3291,"style":3292},[3174,7633,3284],{"class":3279,"style":3280},[3174,7635,7636,7637,3270,7639,7641],{"class":3176,"style":3177},"    legacy",[3174,7638,3293],{"class":3291,"style":3292},[3174,7640,5155],{"class":3565,"style":3566},[3174,7642,3308],{"class":3291,"style":3292},[3174,7644,3311,7645,7647],{"class":3176,"style":3177},[3174,7646,3314],{"class":3279,"style":3280},[3174,7648,3308],{"class":3291,"style":3292},[3174,7650,7651,7653],{"class":3176,"style":3177},[3174,7652,3314],{"class":3279,"style":3280},[3174,7654,3323],{"class":3279,"style":3280},[3144,7656,2926],{"id":2925},[3147,7658,3501,7659,3505],{},[3236,7660,3504],{},[3507,7662,2766],{"id":2929},[3147,7664,7665,7666,7669,7670,7673,7674,7677],{},"When rendering a client-only page (with ",[3157,7667,7668],{},"ssr: false","), we optionally render a loading screen (from ",[3157,7671,7672],{},"~\u002Fapp\u002Fspa-loading-template.html"," - note that this has also changed to ",[3157,7675,7676],{},"~\u002Fspa-loading-template.html"," in Nuxt 4), within the Nuxt app root:",[3165,7679,7682],{"language":7680,"class":7681},"html","shj shiki shj-lang-html",[3157,7683,7685,3285,7704,3285,7709],{"class":7684},"language-html",[3174,7686,7687,7690,3270,7693,7696,7698,7701],{"class":3176,"style":3177},[3174,7688,7689],{"class":3291,"style":3292},"\u003C",[3174,7691,7692],{"class":4851,"style":3800},"div",[3174,7694,7695],{"class":6796,"style":6711},"id",[3174,7697,6599],{"class":3291,"style":3292},[3174,7699,7700],{"class":3717,"style":3718},"\"__nuxt\"",[3174,7702,7703],{"class":3291,"style":3292},">",[3174,7705,3311,7706],{"class":3176,"style":3177},[3174,7707,7708],{"class":4130,"style":4131},"\u003C!-- spa loading template -->",[3174,7710,7711,7714,7716],{"class":3176,"style":3177},[3174,7712,7713],{"class":3291,"style":3292},"\u003C\u002F",[3174,7715,7692],{"class":4851,"style":3800},[3174,7717,7703],{"class":3291,"style":3292},[3147,7719,7720],{},"Now, we default to rendering the template alongside the Nuxt app root:",[3165,7722,7723],{"language":7680,"class":7681},[3157,7724,7725,3285,7745],{"class":7684},[3174,7726,7727,7729,3270,7731,7733,7735,7737,7739,7741,7743],{"class":3176,"style":3177},[3174,7728,7689],{"class":3291,"style":3292},[3174,7730,7692],{"class":4851,"style":3800},[3174,7732,7695],{"class":6796,"style":6711},[3174,7734,6599],{"class":3291,"style":3292},[3174,7736,7700],{"class":3717,"style":3718},[3174,7738,7703],{"class":3291,"style":3292},[3174,7740,7713],{"class":3291,"style":3292},[3174,7742,7692],{"class":4851,"style":3800},[3174,7744,7703],{"class":3291,"style":3292},[3174,7746,7747],{"class":3176,"style":3177},[3174,7748,7708],{"class":4130,"style":4131},[3507,7750,2778],{"id":2931},[3147,7752,7753],{},"This allows the spa loading template to remain in the DOM until the Vue app suspense resolves, preventing a flash of white.",[3507,7755,2769],{"id":2933},[3147,7757,7758,7759,7762,7763,3643,7766,7769],{},"If you were targeting the spa loading template with CSS or ",[3157,7760,7761],{},"document.queryElement"," you will need to update your selectors. For this purpose you can use the new ",[3157,7764,7765],{},"app.spaLoaderTag",[3157,7767,7768],{},"app.spaLoaderAttrs"," configuration options.",[3147,7771,7772],{},"Alternatively, you can revert to the previous behaviour with:",[3165,7774,7775],{"language":3257,"meta":3258,"class":3259},[3157,7776,7777,3285,7789,3285,7795,3285,7805,3285,7811],{"class":3262},[3174,7778,7779,3270,7781,3270,7783,7785,7787],{"class":3176,"style":3177},[3174,7780,3269],{"class":3267,"style":3268},[3174,7782,3273],{"class":3267,"style":3268},[3174,7784,3276],{"class":3180,"style":3181},[3174,7786,3281],{"class":3279,"style":3280},[3174,7788,3284],{"class":3279,"style":3280},[3174,7790,5143,7791,3270,7793],{"class":3176,"style":3177},[3174,7792,3293],{"class":3291,"style":3292},[3174,7794,3284],{"class":3279,"style":3280},[3174,7796,7797,7798,3270,7800,7803],{"class":3176,"style":3177},"    spaLoadingTemplateLocation",[3174,7799,3293],{"class":3291,"style":3292},[3174,7801,7802],{"class":3717,"style":3718},"'within'",[3174,7804,3308],{"class":3291,"style":3292},[3174,7806,3311,7807,7809],{"class":3176,"style":3177},[3174,7808,3314],{"class":3279,"style":3280},[3174,7810,3308],{"class":3291,"style":3292},[3174,7812,7813,7815],{"class":3176,"style":3177},[3174,7814,3314],{"class":3279,"style":3280},[3174,7816,3323],{"class":3279,"style":3280},[3144,7818,7819,7820],{"id":2935},"Parsed ",[3157,7821,7822],{},"error.data",[3147,7824,3501,7825,3505],{},[3236,7826,3504],{},[3147,7828,7829,7830,7832,7833,7835],{},"It was possible to throw an error with a ",[3157,7831,6506],{}," property, but this was not parsed. Now, it is parsed and made available in the ",[3157,7834,6509],{}," object. Although a fix, this is technically a breaking change if you were relying on the previous behavior and parsing it manually.",[3507,7837,2769],{"id":2939},[3147,7839,7840,7841,7843,7844,3293],{},"Update your custom ",[3157,7842,229],{}," to remove any additional parsing of ",[3157,7845,7822],{},[3165,7847,7848],{"language":3790,"class":3791},[3157,7849,7850,3285,7853,3285,7856,3285,7858,3285,7861,3285,7864,3285,7866,3285,7868,3285,7873,3285,7878],{"class":3794},[3174,7851,7852],{"class":3176,"style":3177},"  \u003Cscript setup lang=\"ts\">",[3174,7854,7855],{"class":3176,"style":3177},"  import type { NuxtError } from '#app'",[3174,7857],{"class":3176,"style":3177},[3174,7859,7860],{"class":3176,"style":3177},"  const props = defineProps({",[3174,7862,7863],{"class":3176,"style":3177},"    error: Object as () => NuxtError",[3174,7865,5789],{"class":3176,"style":3177},[3174,7867],{"class":3176,"style":3177},[3174,7869,7870],{"class":3176,"style":3177},[3174,7871,7872],{"class":3799,"style":3800},"- const data = JSON.parse(error.data)",[3174,7874,7875],{"class":3176,"style":3177},[3174,7876,7877],{"class":3806,"style":3718},"+ const data = error.data",[3174,7879,7880],{"class":3176,"style":3177},"  \u003C\u002Fscript>",[3144,7882,2942],{"id":2941},[3147,7884,3501,7885,6480],{},[3236,7886,3504],{},[3147,7888,7889],{},"Nuxt will now only inline styles for Vue components, not global CSS.",[3507,7891,2766],{"id":2945},[3147,7893,7894,7895,7898,7899,7902],{},"Previously, Nuxt would inline all CSS, including global styles, and remove ",[3157,7896,7897],{},"\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 ",[3157,7900,7901],{},".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.",[3507,7904,2769],{"id":2947},[3147,7906,7907,7908,7911],{},"This feature is fully configurable and you can revert to the previous behavior by setting ",[3157,7909,7910],{},"inlineStyles: true"," to inline global CSS as well as per-component CSS.",[3165,7913,7914],{"language":3257,"meta":3258,"class":3259},[3157,7915,7916,3285,7928,3285,7935,3285,7944,3285,7950],{"class":3262},[3174,7917,7918,3270,7920,3270,7922,7924,7926],{"class":3176,"style":3177},[3174,7919,3269],{"class":3267,"style":3268},[3174,7921,3273],{"class":3267,"style":3268},[3174,7923,3276],{"class":3180,"style":3181},[3174,7925,3281],{"class":3279,"style":3280},[3174,7927,3284],{"class":3279,"style":3280},[3174,7929,7930,7931,3270,7933],{"class":3176,"style":3177},"  features",[3174,7932,3293],{"class":3291,"style":3292},[3174,7934,3284],{"class":3279,"style":3280},[3174,7936,7937,7938,3270,7940,7942],{"class":3176,"style":3177},"    inlineStyles",[3174,7939,3293],{"class":3291,"style":3292},[3174,7941,5155],{"class":3565,"style":3566},[3174,7943,3308],{"class":3291,"style":3292},[3174,7945,3311,7946,7948],{"class":3176,"style":3177},[3174,7947,3314],{"class":3279,"style":3280},[3174,7949,3308],{"class":3291,"style":3292},[3174,7951,7952,7954],{"class":3176,"style":3177},[3174,7953,3314],{"class":3279,"style":3280},[3174,7955,3323],{"class":3279,"style":3280},[3144,7957,2950],{"id":2949},[3147,7959,3501,7960,3505],{},[3236,7961,3504],{},[3507,7963,2766],{"id":2953},[3147,7965,7966,7967,7969,7970,7973,7974,7977],{},"We now scan page metadata (defined in ",[3157,7968,761],{},") ",[6263,7971,7972],{},"after"," calling the ",[3157,7975,7976],{},"pages:extend"," hook rather than before.",[3507,7979,2778],{"id":2955},[3147,7981,7982,7983,7985,7986,7989],{},"This was to allow scanning metadata for pages that users wanted to add in ",[3157,7984,7976],{},". We still offer an opportunity to change or override page metadata in a new ",[3157,7987,7988],{},"pages:resolved"," hook.",[3507,7991,2769],{"id":2957},[3147,7993,7994,7995,7997,7998,3247],{},"If you want to override page metadata, do that in ",[3157,7996,7988],{}," rather than in ",[3157,7999,7976],{},[3165,8001,8002],{"language":3790,"class":3791},[3157,8003,8004,3285,8006,3285,8009,3285,8014,3285,8019,3285,8022,3285,8025,3285,8028,3285,8031,3285,8034],{"class":3794},[3174,8005,5735],{"class":3176,"style":3177},[3174,8007,8008],{"class":3176,"style":3177},"    hooks: {",[3174,8010,8011],{"class":3176,"style":3177},[3174,8012,8013],{"class":3799,"style":3800},"-     'pages:extend'(pages) {",[3174,8015,8016],{"class":3176,"style":3177},[3174,8017,8018],{"class":3806,"style":3718},"+     'pages:resolved'(pages) {",[3174,8020,8021],{"class":3176,"style":3177},"        const myPage = pages.find(page => page.path === '\u002F')",[3174,8023,8024],{"class":3176,"style":3177},"        myPage.meta ||= {}",[3174,8026,8027],{"class":3176,"style":3177},"        myPage.meta.layout = 'overridden-layout'",[3174,8029,8030],{"class":3176,"style":3177},"      }",[3174,8032,8033],{"class":3176,"style":3177},"    }",[3174,8035,5789],{"class":3176,"style":3177},[3147,8037,7772],{},[3165,8039,8040],{"language":3257,"meta":3258,"class":3259},[3157,8041,8042,3285,8054,3285,8060,3285,8069,3285,8075],{"class":3262},[3174,8043,8044,3270,8046,3270,8048,8050,8052],{"class":3176,"style":3177},[3174,8045,3269],{"class":3267,"style":3268},[3174,8047,3273],{"class":3267,"style":3268},[3174,8049,3276],{"class":3180,"style":3181},[3174,8051,3281],{"class":3279,"style":3280},[3174,8053,3284],{"class":3279,"style":3280},[3174,8055,5143,8056,3270,8058],{"class":3176,"style":3177},[3174,8057,3293],{"class":3291,"style":3292},[3174,8059,3284],{"class":3279,"style":3280},[3174,8061,8062,8063,3270,8065,8067],{"class":3176,"style":3177},"    scanPageMeta",[3174,8064,3293],{"class":3291,"style":3292},[3174,8066,5155],{"class":3565,"style":3566},[3174,8068,3308],{"class":3291,"style":3292},[3174,8070,3311,8071,8073],{"class":3176,"style":3177},[3174,8072,3314],{"class":3279,"style":3280},[3174,8074,3308],{"class":3291,"style":3292},[3174,8076,8077,8079],{"class":3176,"style":3177},[3174,8078,3314],{"class":3279,"style":3280},[3174,8080,3323],{"class":3279,"style":3280},[3144,8082,2960],{"id":2959},[3147,8084,3501,8085,3599],{},[3236,8086,3504],{},[3507,8088,2766],{"id":2963},[3147,8090,8091,8092,3643,8094,8096,8097,3247],{},"We enabled a previously experimental feature to share data from ",[3157,8093,561],{},[3157,8095,576],{}," calls, across different pages. See ",[3151,8098,8100],{"href":8099},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F24894","original PR",[3507,8102,2778],{"id":2965},[3147,8104,8105,8106,8108,8109,4062,8111,8113],{},"This feature automatically shares payload ",[6263,8107,6506],{}," between pages that are prerendered. This can result in a significant performance improvement when prerendering sites that use ",[3157,8110,561],{},[3157,8112,576],{}," and fetch the same data in different pages.",[3147,8115,8116,8117,8119],{},"For example, if your site requires a ",[3157,8118,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.",[3507,8121,2769],{"id":2967},[3147,8123,8124,8125,8127,8128,8130],{},"Make sure that any unique key of your data is always resolvable to the same data. For example, if you are using ",[3157,8126,561],{}," to fetch data related to a particular page, you should provide a key that uniquely matches that data. (",[3157,8129,576],{}," should do this automatically for you.)",[3165,8132,8134],{"language":3257,"filename":8133,"class":3259},"app\u002Fpages\u002Ftest\u002F[slug].vue",[3157,8135,8136,3285,8141,3285,8146,3285,8159,3285,8187,3285,8215,3285,8221,3285,8226,3285,8258,3285,8282],{"class":3262},[3174,8137,8138],{"class":3176,"style":3177},[3174,8139,8140],{"class":4130,"style":4131},"\u002F\u002F This would be unsafe in a dynamic page (e.g. `[slug].vue`) because the route slug makes a difference",[3174,8142,8143],{"class":3176,"style":3177},[3174,8144,8145],{"class":4130,"style":4131},"\u002F\u002F to the data fetched, but Nuxt can't know that because it's not reflected in the key.",[3174,8147,8148,8150,8151,3270,8153,8155,8157],{"class":3176,"style":3177},[3174,8149,3848],{"class":3267,"style":3268}," route ",[3174,8152,6599],{"class":3291,"style":3292},[3174,8154,656],{"class":3180,"style":3181},[3174,8156,3281],{"class":3279,"style":3280},[3174,8158,3323],{"class":3279,"style":3280},[3174,8160,8161,3270,8163,8165,8166,3270,8168,3270,8170,3270,8172,8174,8176,3270,8179,8181,3270,8183,3270,8185],{"class":3176,"style":3177},[3174,8162,3848],{"class":3267,"style":3268},[3174,8164,3284],{"class":3279,"style":3280}," data ",[3174,8167,3314],{"class":3279,"style":3280},[3174,8169,6599],{"class":3291,"style":3292},[3174,8171,5078],{"class":3267,"style":3268},[3174,8173,561],{"class":3180,"style":3181},[3174,8175,3281],{"class":3279,"style":3280},[3174,8177,8178],{"class":3267,"style":3268},"async",[3174,8180,3281],{"class":3279,"style":3280},[3174,8182,3323],{"class":3279,"style":3280},[3174,8184,4145],{"class":3267,"style":3268},[3174,8186,3284],{"class":3279,"style":3280},[3174,8188,3311,8189,3270,8191,3270,8193,8195,8197,8200,8202,8203,8205,8206,8208,8209,8211,8213],{"class":3176,"style":3177},[3174,8190,4443],{"class":3267,"style":3268},[3174,8192,5078],{"class":3267,"style":3268},[3174,8194,702],{"class":3180,"style":3181},[3174,8196,3281],{"class":3279,"style":3280},[3174,8198,8199],{"class":3717,"style":3718},"`\u002Fapi\u002Fmy-page\u002F",[3174,8201,6732],{"class":3267,"style":3268},"route",[3174,8204,3247],{"class":3291,"style":3292},"params",[3174,8207,3247],{"class":3291,"style":3292},"slug",[3174,8210,3314],{"class":3267,"style":3268},[3174,8212,6737],{"class":3717,"style":3718},[3174,8214,3323],{"class":3279,"style":3280},[3174,8216,8217,8219],{"class":3176,"style":3177},[3174,8218,3314],{"class":3279,"style":3280},[3174,8220,3323],{"class":3279,"style":3280},[3174,8222,8223],{"class":3176,"style":3177},[3174,8224,8225],{"class":4130,"style":4131},"\u002F\u002F Instead, you should use a key that uniquely identifies the data fetched.",[3174,8227,8228,3270,8230,8165,8232,3270,8234,3270,8236,3270,8238,8240,8202,8242,8205,8244,8208,8246,3270,8248,3270,8250,8252,3270,8254,3270,8256],{"class":3176,"style":3177},[3174,8229,3848],{"class":3267,"style":3268},[3174,8231,3284],{"class":3279,"style":3280},[3174,8233,3314],{"class":3279,"style":3280},[3174,8235,6599],{"class":3291,"style":3292},[3174,8237,5078],{"class":3267,"style":3268},[3174,8239,561],{"class":3180,"style":3181},[3174,8241,3281],{"class":3279,"style":3280},[3174,8243,3247],{"class":3291,"style":3292},[3174,8245,3247],{"class":3291,"style":3292},[3174,8247,3308],{"class":3291,"style":3292},[3174,8249,8178],{"class":3267,"style":3268},[3174,8251,3281],{"class":3279,"style":3280},[3174,8253,3323],{"class":3279,"style":3280},[3174,8255,4145],{"class":3267,"style":3268},[3174,8257,3284],{"class":3279,"style":3280},[3174,8259,3311,8260,3270,8262,3270,8264,8266,8268,8270,8202,8272,8205,8274,8208,8276,8278,8280],{"class":3176,"style":3177},[3174,8261,4443],{"class":3267,"style":3268},[3174,8263,5078],{"class":3267,"style":3268},[3174,8265,702],{"class":3180,"style":3181},[3174,8267,3281],{"class":3279,"style":3280},[3174,8269,8199],{"class":3717,"style":3718},[3174,8271,6732],{"class":3267,"style":3268},[3174,8273,3247],{"class":3291,"style":3292},[3174,8275,3247],{"class":3291,"style":3292},[3174,8277,3314],{"class":3267,"style":3268},[3174,8279,6737],{"class":3717,"style":3718},[3174,8281,3323],{"class":3279,"style":3280},[3174,8283,8284,8286],{"class":3176,"style":3177},[3174,8285,3314],{"class":3279,"style":3280},[3174,8287,3323],{"class":3279,"style":3280},[3147,8289,8290],{},"Alternatively, you can disable this feature with:",[3165,8292,8293],{"language":3257,"meta":3258,"class":3259},[3157,8294,8295,3285,8307,3285,8313,3285,8322,3285,8328],{"class":3262},[3174,8296,8297,3270,8299,3270,8301,8303,8305],{"class":3176,"style":3177},[3174,8298,3269],{"class":3267,"style":3268},[3174,8300,3273],{"class":3267,"style":3268},[3174,8302,3276],{"class":3180,"style":3181},[3174,8304,3281],{"class":3279,"style":3280},[3174,8306,3284],{"class":3279,"style":3280},[3174,8308,5143,8309,3270,8311],{"class":3176,"style":3177},[3174,8310,3293],{"class":3291,"style":3292},[3174,8312,3284],{"class":3279,"style":3280},[3174,8314,8315,8316,3270,8318,8320],{"class":3176,"style":3177},"    sharedPrerenderData",[3174,8317,3293],{"class":3291,"style":3292},[3174,8319,3567],{"class":3565,"style":3566},[3174,8321,3308],{"class":3291,"style":3292},[3174,8323,3311,8324,8326],{"class":3176,"style":3177},[3174,8325,3314],{"class":3279,"style":3280},[3174,8327,3308],{"class":3291,"style":3292},[3174,8329,8330,8332],{"class":3176,"style":3177},[3174,8331,3314],{"class":3279,"style":3280},[3174,8333,3323],{"class":3279,"style":3280},[3144,8335,8336,8337,3643,8339,8341,8342,3643,8344],{"id":2969},"Default ",[3157,8338,6506],{},[3157,8340,6509],{}," values in ",[3157,8343,561],{},[3157,8345,576],{},[3147,8347,3501,8348,3505],{},[3236,8349,3504],{},[3507,8351,2766],{"id":2973},[3147,8353,8354,3643,8356,8358,8359,8361,8362,3247],{},[3157,8355,6506],{},[3157,8357,6509],{}," objects returned from ",[3157,8360,561],{}," will now default to ",[3157,8363,3391],{},[3507,8365,2778],{"id":2975},[3147,8367,8368,8369,8371,8372,8375,8376,3329,8378,8380,8381,8371,8383,8385],{},"Previously ",[3157,8370,6506],{}," was initialized to ",[3157,8373,8374],{},"null"," but reset in ",[3157,8377,726],{},[3157,8379,3391],{},". ",[3157,8382,6509],{},[3157,8384,8374],{},". This change is to bring greater consistency.",[3507,8387,2769],{"id":2977},[3147,8389,8390,8391,4062,8394,8397,8398,8400,8401,8403],{},"If you were checking if ",[3157,8392,8393],{},"data.value",[3157,8395,8396],{},"error.value"," were ",[3157,8399,8374],{},", you can update these checks to check for ",[3157,8402,3391],{}," instead.",[4011,8405,8406,8407],{},"You can automate this step by running ",[3157,8408,8409],{},"npx codemod@latest nuxt\u002F4\u002Fdefault-data-error-value",[3144,8411,8412,8413,8416,8417,8420,8421,8424,8425,3643,8427],{"id":2979},"Removal of deprecated ",[3157,8414,8415],{},"boolean"," values for ",[3157,8418,8419],{},"dedupe"," option when calling ",[3157,8422,8423],{},"refresh"," in ",[3157,8426,561],{},[3157,8428,576],{},[3147,8430,3501,8431,3505],{},[3236,8432,3504],{},[3507,8434,2766],{"id":2983},[3147,8436,8437,8438,3329,8441,8443,8444,8447,8448,8450,8451,8447,8454,7229],{},"Previously it was possible to pass ",[3157,8439,8440],{},"dedupe: boolean",[3157,8442,8423],{},". These were aliases of ",[3157,8445,8446],{},"cancel"," (",[3157,8449,5155],{},") and ",[3157,8452,8453],{},"defer",[3157,8455,3567],{},[3165,8457,8459],{"language":3257,"meta":8458,"class":3259},"twoslash [app\u002Fapp.vue]",[3157,8460,8461,3285,8466,3285,8512,3285,8514,3285,8529,3285,8548],{"class":3262},[3174,8462,8463],{"class":3176,"style":3177},[3174,8464,8465],{"class":4130,"style":4131},"\u002F\u002F @errors: 2322",[3174,8467,8468,3270,8470,8472,8473,3270,8475,3270,8477,3270,8479,8481,8483,8485,3270,8487,3270,8489,8491,8493,8496,8498,8500,8501,3270,8503,3270,8506,8508,8510],{"class":3176,"style":3177},[3174,8469,3848],{"class":3267,"style":3268},[3174,8471,3284],{"class":3279,"style":3280}," refresh ",[3174,8474,3314],{"class":3279,"style":3280},[3174,8476,6599],{"class":3291,"style":3292},[3174,8478,5078],{"class":3267,"style":3268},[3174,8480,561],{"class":3180,"style":3181},[3174,8482,3281],{"class":3279,"style":3280},[3174,8484,3281],{"class":3279,"style":3280},[3174,8486,3323],{"class":3279,"style":3280},[3174,8488,4145],{"class":3267,"style":3268},[3174,8490,3412],{"class":6796,"style":6711},[3174,8492,3247],{"class":3291,"style":3292},[3174,8494,8495],{"class":3180,"style":3181},"resolve",[3174,8497,3281],{"class":3279,"style":3280},[3174,8499,3284],{"class":3279,"style":3280}," message",[3174,8502,3293],{"class":3291,"style":3292},[3174,8504,8505],{"class":3717,"style":3718},"'Hello, Nuxt!'",[3174,8507,3314],{"class":3279,"style":3280},[3174,8509,3323],{"class":3279,"style":3280},[3174,8511,3323],{"class":3279,"style":3280},[3174,8513],{"class":3176,"style":3177},[3174,8515,8516,3270,8518,3270,8520,3270,8523,8525,3270,8527],{"class":3176,"style":3177},[3174,8517,8178],{"class":3267,"style":3268},[3174,8519,6701],{"class":3267,"style":3268},[3174,8521,8522],{"class":3180,"style":3181},"refreshData",[3174,8524,3281],{"class":3279,"style":3280},[3174,8526,3323],{"class":3279,"style":3280},[3174,8528,3284],{"class":3279,"style":3280},[3174,8530,3311,8531,3270,8533,8535,8537,8539,8540,3270,8542,3270,8544,8546],{"class":3176,"style":3177},[3174,8532,5078],{"class":3267,"style":3268},[3174,8534,8423],{"class":3180,"style":3181},[3174,8536,3281],{"class":3279,"style":3280},[3174,8538,3284],{"class":3279,"style":3280}," dedupe",[3174,8541,3293],{"class":3291,"style":3292},[3174,8543,5155],{"class":3565,"style":3566},[3174,8545,3314],{"class":3279,"style":3280},[3174,8547,3323],{"class":3279,"style":3280},[3174,8549,8550],{"class":3176,"style":3177},[3174,8551,3314],{"class":3279,"style":3280},[3507,8553,2778],{"id":2985},[3147,8555,8556],{},"These aliases were removed, for greater clarity.",[3147,8558,8559,8560,8562,8563,8565,8566,3247],{},"The issue came up when adding ",[3157,8561,8419],{}," as an option to ",[3157,8564,561],{},", and we removed the boolean values as they ended up being ",[6263,8567,8568],{},"opposites",[3147,8570,8571,8574,8575,8581,8582,8585,8586,8588,8589,8592,8593,8597],{},[3157,8572,8573],{},"refresh({ dedupe: false })"," meant ",[3236,8576,8577,8578,8580],{},"do not ",[6263,8579,8446],{}," existing requests in favour of this new one",". But passing ",[3157,8583,8584],{},"dedupe: true"," within the options of ",[3157,8587,561],{}," means ",[3236,8590,8591],{},"do not make any new requests if there is an existing pending request."," (See ",[3151,8594,8596],{"href":8595},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F24564#pullrequestreview-1764584361","PR",".)",[3507,8599,2769],{"id":2987},[3147,8601,7246],{},[3165,8603,8604],{"language":3790,"class":3791},[3157,8605,8606,3285,8612,3285,8614,3285,8617,3285,8622,3285,8627,3285,8629,3285,8634,3285,8639],{"class":3794},[3174,8607,8608,8609],{"class":3176,"style":3177},"  const { refresh } = await useAsyncData(async () => ({ message: 'Hello, Nuxt 3",[3174,8610,8611],{"class":3267,"style":3268},"!' }))",[3174,8613,3311],{"class":3176,"style":3177},[3174,8615,8616],{"class":3176,"style":3177},"  async function refreshData () {",[3174,8618,8619],{"class":3176,"style":3177},[3174,8620,8621],{"class":3799,"style":3800},"-   await refresh({ dedupe: true })",[3174,8623,8624],{"class":3176,"style":3177},[3174,8625,8626],{"class":3806,"style":3718},"+   await refresh({ dedupe: 'cancel' })",[3174,8628],{"class":3176,"style":3177},[3174,8630,8631],{"class":3176,"style":3177},[3174,8632,8633],{"class":3799,"style":3800},"-   await refresh({ dedupe: false })",[3174,8635,8636],{"class":3176,"style":3177},[3174,8637,8638],{"class":3806,"style":3718},"+   await refresh({ dedupe: 'defer' })",[3174,8640,8641],{"class":3176,"style":3177},"  }",[4011,8643,8406,8644],{},[3157,8645,8646],{},"npx codemod@latest nuxt\u002F4\u002Fdeprecated-dedupe-value",[3144,8648,8649,8650,8424,8652,3643,8654],{"id":2989},"Respect defaults when clearing ",[3157,8651,6506],{},[3157,8653,561],{},[3157,8655,576],{},[3147,8657,3501,8658,3505],{},[3236,8659,3504],{},[3507,8661,2766],{"id":2993},[3147,8663,8664,8665,8667,8668,8670,8671,4062,8674,8676],{},"If you provide a custom ",[3157,8666,3273],{}," value for ",[3157,8669,561],{},", this will now be used when calling ",[3157,8672,8673],{},"clear",[3157,8675,726],{}," and it will be reset to its default value rather than simply unset.",[3507,8678,2778],{"id":2995},[3147,8680,8681,8682,8684,8685,8687],{},"Often users set an appropriately empty value, such as an empty array, to avoid the need to check for ",[3157,8683,8374],{},"\u002F",[3157,8686,3391],{}," when iterating over it. This should be respected when resetting\u002Fclearing the data.",[3144,8689,8649,8690],{"id":2997},[3157,8691,691],{},[3147,8693,3501,8694,3505],{},[3236,8695,3504],{},[3507,8697,2766],{"id":3001},[3147,8699,3511,8700,3665,8702,8704,8705,8707,8708,8710,8711,8713,8714,8716,8717,8719],{},[3157,8701,3514],{},[3157,8703,731],{}," will reset state to its initial value (provided by the ",[3157,8706,910],{}," function of ",[3157,8709,691],{},") instead of setting it to ",[3157,8712,3391],{},". This aligns ",[3157,8715,731],{}," behavior with ",[3157,8718,726],{},", which already resets to defaults.",[3507,8721,2778],{"id":3003},[3147,8723,8724,8725,8727,8728,8730,8731,8733,8734,8736],{},"When ",[3157,8726,731],{}," sets state to ",[3157,8729,3391],{},", composables that depend on that state can crash because they expect the state to always have a valid shape (e.g., accessing properties on ",[3157,8732,3391],{},"). Resetting to the ",[3157,8735,910],{}," value ensures state always has a usable default.",[3507,8738,2769],{"id":3005},[3147,8740,8741,8742,8744,8745,8747,8748,3293],{},"If you rely on ",[3157,8743,731],{}," setting state to ",[3157,8746,3391],{},", you can explicitly pass ",[3157,8749,8750],{},"{ reset: false }",[3165,8752,8753],{"language":3790,"class":3791},[3157,8754,8755,3285,8760],{"class":3794},[3174,8756,8757],{"class":3176,"style":3177},[3174,8758,8759],{"class":3799,"style":3800},"- clearNuxtState('myKey')",[3174,8761,8762],{"class":3176,"style":3177},[3174,8763,8764],{"class":3806,"style":3718},"+ clearNuxtState('myKey', { reset: false })",[3147,8766,8767],{},"Alternatively, you can revert to the previous behavior with:",[3165,8769,8770],{"language":3257,"meta":3258,"class":3259},[3157,8771,8772,3285,8784,3285,8790,3285,8797,3285,8804,3285,8813,3285,8819,3285,8825,3285,8831],{"class":3262},[3174,8773,8774,3270,8776,3270,8778,8780,8782],{"class":3176,"style":3177},[3174,8775,3269],{"class":3267,"style":3268},[3174,8777,3273],{"class":3267,"style":3268},[3174,8779,3276],{"class":3180,"style":3181},[3174,8781,3281],{"class":3279,"style":3280},[3174,8783,3284],{"class":3279,"style":3280},[3174,8785,5143,8786,3270,8788],{"class":3176,"style":3177},[3174,8787,3293],{"class":3291,"style":3292},[3174,8789,3284],{"class":3279,"style":3280},[3174,8791,8792,8793,3270,8795],{"class":3176,"style":3177},"    defaults",[3174,8794,3293],{"class":3291,"style":3292},[3174,8796,3284],{"class":3279,"style":3280},[3174,8798,8799,8800,3270,8802],{"class":3176,"style":3177},"      useState",[3174,8801,3293],{"class":3291,"style":3292},[3174,8803,3284],{"class":3279,"style":3280},[3174,8805,8806,8807,3270,8809,8811],{"class":3176,"style":3177},"        resetOnClear",[3174,8808,3293],{"class":3291,"style":3292},[3174,8810,3567],{"class":3565,"style":3566},[3174,8812,3308],{"class":3291,"style":3292},[3174,8814,3743,8815,8817],{"class":3176,"style":3177},[3174,8816,3314],{"class":3279,"style":3280},[3174,8818,3308],{"class":3291,"style":3292},[3174,8820,3572,8821,8823],{"class":3176,"style":3177},[3174,8822,3314],{"class":3279,"style":3280},[3174,8824,3308],{"class":3291,"style":3292},[3174,8826,3311,8827,8829],{"class":3176,"style":3177},[3174,8828,3314],{"class":3279,"style":3280},[3174,8830,3308],{"class":3291,"style":3292},[3174,8832,8833,8835],{"class":3176,"style":3177},[3174,8834,3314],{"class":3279,"style":3280},[3174,8836,3323],{"class":3279,"style":3280},[3147,8838,8839,8840,3293],{},"You can also opt in to this behavior today without setting ",[3157,8841,3514],{},[3165,8843,8844],{"language":3257,"meta":3258,"class":3259},[3157,8845,8846,3285,8858,3285,8864,3285,8870,3285,8876,3285,8884,3285,8890,3285,8896,3285,8902],{"class":3262},[3174,8847,8848,3270,8850,3270,8852,8854,8856],{"class":3176,"style":3177},[3174,8849,3269],{"class":3267,"style":3268},[3174,8851,3273],{"class":3267,"style":3268},[3174,8853,3276],{"class":3180,"style":3181},[3174,8855,3281],{"class":3279,"style":3280},[3174,8857,3284],{"class":3279,"style":3280},[3174,8859,5143,8860,3270,8862],{"class":3176,"style":3177},[3174,8861,3293],{"class":3291,"style":3292},[3174,8863,3284],{"class":3279,"style":3280},[3174,8865,8792,8866,3270,8868],{"class":3176,"style":3177},[3174,8867,3293],{"class":3291,"style":3292},[3174,8869,3284],{"class":3279,"style":3280},[3174,8871,8799,8872,3270,8874],{"class":3176,"style":3177},[3174,8873,3293],{"class":3291,"style":3292},[3174,8875,3284],{"class":3279,"style":3280},[3174,8877,8806,8878,3270,8880,8882],{"class":3176,"style":3177},[3174,8879,3293],{"class":3291,"style":3292},[3174,8881,5155],{"class":3565,"style":3566},[3174,8883,3308],{"class":3291,"style":3292},[3174,8885,3743,8886,8888],{"class":3176,"style":3177},[3174,8887,3314],{"class":3279,"style":3280},[3174,8889,3308],{"class":3291,"style":3292},[3174,8891,3572,8892,8894],{"class":3176,"style":3177},[3174,8893,3314],{"class":3279,"style":3280},[3174,8895,3308],{"class":3291,"style":3292},[3174,8897,3311,8898,8900],{"class":3176,"style":3177},[3174,8899,3314],{"class":3279,"style":3280},[3174,8901,3308],{"class":3291,"style":3292},[3174,8903,8904,8906],{"class":3176,"style":3177},[3174,8905,3314],{"class":3279,"style":3280},[3174,8907,3323],{"class":3279,"style":3280},[3144,8909,8910,8911,8914,8915,3643,8917],{"id":3007},"Alignment of ",[3157,8912,8913],{},"pending"," value in ",[3157,8916,561],{},[3157,8918,576],{},[3147,8920,3501,8921,3599],{},[3236,8922,3504],{},[3147,8924,8925,8926,8928,8929,3665,8931,3665,8933,3643,8935,8937,8938,8940,8941,8943],{},"The ",[3157,8927,8913],{}," object returned from ",[3157,8930,561],{},[3157,8932,576],{},[3157,8934,596],{},[3157,8936,601],{}," is now a computed property that is ",[3157,8939,5155],{}," only when ",[3157,8942,6512],{}," is also pending.",[3507,8945,2766],{"id":3011},[3147,8947,8948,8949,8952,8953,8955,8956,8958,8959,8961,8962,8964],{},"Now, when ",[3157,8950,8951],{},"immediate: false"," is passed, ",[3157,8954,8913],{}," will be ",[3157,8957,3567],{}," until the first request is made. This is a change from the previous behavior, where ",[3157,8960,8913],{}," was always ",[3157,8963,5155],{}," until the first request was made.",[3507,8966,2778],{"id":3013},[3147,8968,8969,8970,8972,8973,8975,8976,8978],{},"This aligns the meaning of ",[3157,8971,8913],{}," with the ",[3157,8974,6512],{}," property, which is also ",[3157,8977,8913],{}," when the request is in progress.",[3507,8980,2769],{"id":3015},[3147,8982,8983,8984,8986,8987,8989,8990,8992],{},"If you rely on the ",[3157,8985,8913],{}," property, ensure that your logic accounts for the new behavior where ",[3157,8988,8913],{}," will only be ",[3157,8991,5155],{}," when the status is also pending.",[3165,8994,8995],{"language":3790,"class":3791},[3157,8996,8997,3285,9000,3285,9005,3285,9010,3285,9013,3285,9016,3285,9019,3285,9022,3285,9024,3285,9027,3285,9029,3285,9032,3285,9035,3285,9037,3285,9040],{"class":3794},[3174,8998,8999],{"class":3176,"style":3177},"  \u003Ctemplate>",[3174,9001,9002],{"class":3176,"style":3177},[3174,9003,9004],{"class":3799,"style":3800},"-   \u003Cdiv v-if=\"!pending\">",[3174,9006,9007],{"class":3176,"style":3177},[3174,9008,9009],{"class":3806,"style":3718},"+   \u003Cdiv v-if=\"status === 'success'\">",[3174,9011,9012],{"class":3176,"style":3177},"      \u003Cp>Data: {{ data }}\u003C\u002Fp>",[3174,9014,9015],{"class":3176,"style":3177},"    \u003C\u002Fdiv>",[3174,9017,9018],{"class":3176,"style":3177},"    \u003Cdiv v-else>",[3174,9020,9021],{"class":3176,"style":3177},"      \u003Cp>Loading...\u003C\u002Fp>",[3174,9023,9015],{"class":3176,"style":3177},[3174,9025,9026],{"class":3176,"style":3177},"  \u003C\u002Ftemplate>",[3174,9028,7852],{"class":3176,"style":3177},[3174,9030,9031],{"class":3176,"style":3177},"  const { data, pending, execute, status } = await useAsyncData(() => fetch('\u002Fapi\u002Fdata'), {",[3174,9033,9034],{"class":3176,"style":3177},"    immediate: false",[3174,9036,5789],{"class":3176,"style":3177},[3174,9038,9039],{"class":3176,"style":3177},"  onMounted(() => execute())",[3174,9041,7880],{"class":3176,"style":3177},[3147,9043,9044],{},"Alternatively, you can temporarily revert to the previous behavior with:",[3165,9046,9047],{"language":3257,"meta":3258,"class":3259},[3157,9048,9049,3285,9061,3285,9067,3285,9076,3285,9082],{"class":3262},[3174,9050,9051,3270,9053,3270,9055,9057,9059],{"class":3176,"style":3177},[3174,9052,3269],{"class":3267,"style":3268},[3174,9054,3273],{"class":3267,"style":3268},[3174,9056,3276],{"class":3180,"style":3181},[3174,9058,3281],{"class":3279,"style":3280},[3174,9060,3284],{"class":3279,"style":3280},[3174,9062,5143,9063,3270,9065],{"class":3176,"style":3177},[3174,9064,3293],{"class":3291,"style":3292},[3174,9066,3284],{"class":3279,"style":3280},[3174,9068,9069,9070,3270,9072,9074],{"class":3176,"style":3177},"    pendingWhenIdle",[3174,9071,3293],{"class":3291,"style":3292},[3174,9073,5155],{"class":3565,"style":3566},[3174,9075,3308],{"class":3291,"style":3292},[3174,9077,3311,9078,9080],{"class":3176,"style":3177},[3174,9079,3314],{"class":3279,"style":3280},[3174,9081,3308],{"class":3291,"style":3292},[3174,9083,9084,9086],{"class":3176,"style":3177},[3174,9085,3314],{"class":3279,"style":3280},[3174,9087,3323],{"class":3279,"style":3280},[3144,9089,9090,9091,3643,9093],{"id":3017},"Key Change Behavior in ",[3157,9092,561],{},[3157,9094,576],{},[3147,9096,3501,9097,3599],{},[3236,9098,3504],{},[3507,9100,2766],{"id":3021},[3147,9102,9103,9104,4062,9106,9108,9109,9111,9112,9114],{},"When using reactive keys in ",[3157,9105,561],{},[3157,9107,576],{},", Nuxt automatically refetches data when the key changes. When ",[3157,9110,8951],{}," is set, ",[3157,9113,561],{}," will only fetch data when the key changes if the data has already been fetched once.",[3147,9116,9117,9118,9120],{},"Previously, ",[3157,9119,576],{}," had slightly different behavior. It would always fetch data when the key changed.",[3147,9122,9123,9124,3643,9126,9128],{},"Now, ",[3157,9125,576],{},[3157,9127,561],{}," behave consistently - by only fetch data when the key changes if the data has already been fetched once.",[3507,9130,2778],{"id":3023},[3147,9132,9133,9134,3643,9136,9138,9139,9141,9142,4062,9144,9147,9148,4062,9150,3247],{},"This ensures consistent behavior between ",[3157,9135,561],{},[3157,9137,576],{},", and prevents unexpected fetches. If you have set ",[3157,9140,8951],{},", then you must call ",[3157,9143,8423],{},[3157,9145,9146],{},"execute"," or data will never be fetched in ",[3157,9149,576],{},[3157,9151,561],{},[3507,9153,2769],{"id":3025},[3147,9155,9156,9157,9159],{},"This change should generally improve the expected behavior, but if you were expecting changing the key or options of a non-immediate ",[3157,9158,576],{},", you now will need to trigger it manually the first time.",[3165,9161,9162],{"language":3790,"class":3791},[3157,9163,9164,3285,9167,3285,9170,3285,9173,3285,9175,3285,9178],{"class":3794},[3174,9165,9166],{"class":3176,"style":3177},"  const id = ref('123')",[3174,9168,9169],{"class":3176,"style":3177},"  const { data, execute } = await useFetch('\u002Fapi\u002Ftest', {",[3174,9171,9172],{"class":3176,"style":3177},"    query: { id },",[3174,9174,9034],{"class":3176,"style":3177},[3174,9176,9177],{"class":3176,"style":3177},"  )",[3174,9179,9180],{"class":3176,"style":3177},[3174,9181,9182],{"class":3806,"style":3718},"+ watch(id, () => execute(), { once: true })",[3147,9184,9185],{},"To opt out of this behavior:",[3165,9187,9188],{"language":3257,"class":3259},[3157,9189,9190,3285,9195,3285,9207,3285,9213,3285,9222,3285,9228],{"class":3262},[3174,9191,9192],{"class":3176,"style":3177},[3174,9193,9194],{"class":4130,"style":4131},"\u002F\u002F Or globally in your Nuxt config",[3174,9196,9197,3270,9199,3270,9201,9203,9205],{"class":3176,"style":3177},[3174,9198,3269],{"class":3267,"style":3268},[3174,9200,3273],{"class":3267,"style":3268},[3174,9202,3276],{"class":3180,"style":3181},[3174,9204,3281],{"class":3279,"style":3280},[3174,9206,3284],{"class":3279,"style":3280},[3174,9208,5143,9209,3270,9211],{"class":3176,"style":3177},[3174,9210,3293],{"class":3291,"style":3292},[3174,9212,3284],{"class":3279,"style":3280},[3174,9214,9215,9216,3270,9218,9220],{"class":3176,"style":3177},"    alwaysRunFetchOnKeyChange",[3174,9217,3293],{"class":3291,"style":3292},[3174,9219,5155],{"class":3565,"style":3566},[3174,9221,3308],{"class":3291,"style":3292},[3174,9223,3311,9224,9226],{"class":3176,"style":3177},[3174,9225,3314],{"class":3279,"style":3280},[3174,9227,3308],{"class":3291,"style":3292},[3174,9229,9230,9232],{"class":3176,"style":3177},[3174,9231,3314],{"class":3279,"style":3280},[3174,9233,3323],{"class":3279,"style":3280},[3144,9235,9236,9237,3643,9239],{"id":3027},"Shallow Data Reactivity in ",[3157,9238,561],{},[3157,9240,576],{},[3147,9242,3501,9243,3505],{},[3236,9244,3504],{},[3147,9246,8925,9247,8928,9249,3665,9251,3665,9253,3643,9255,9257,9258,9261,9262,3247],{},[3157,9248,6506],{},[3157,9250,561],{},[3157,9252,576],{},[3157,9254,596],{},[3157,9256,601],{}," is now a ",[3157,9259,9260],{},"shallowRef"," rather than a ",[3157,9263,9264],{},"ref",[3507,9266,2766],{"id":3031},[3147,9268,9269,9270,9272,9273,9276],{},"When new data is fetched, anything depending on ",[3157,9271,6506],{}," will still be reactive because the entire object is replaced. But if your code changes a property ",[6263,9274,9275],{},"within"," that data structure, this will not trigger any reactivity in your app.",[3507,9278,2778],{"id":3033},[3147,9280,9281,9282,9285,9286,9288],{},"This brings a ",[3236,9283,9284],{},"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, ",[3157,9287,6506],{}," should also be immutable.",[3507,9290,2769],{"id":3035},[3147,9292,9293],{},"In most cases, no migration steps are required, but if you rely on the reactivity of the data object then you have two options:",[4030,9295,9296,9315],{},[3337,9297,9298,9301],{},[3147,9299,9300],{},"You can granularly opt in to deep reactivity on a per-composable basis:",[3165,9302,9303],{"language":3790,"class":3791},[3157,9304,9305,3285,9310],{"class":3794},[3174,9306,9307],{"class":3176,"style":3177},[3174,9308,9309],{"class":3799,"style":3800},"- const { data } = useFetch('\u002Fapi\u002Ftest')",[3174,9311,9312],{"class":3176,"style":3177},[3174,9313,9314],{"class":3806,"style":3718},"+ const { data } = useFetch('\u002Fapi\u002Ftest', { deep: true })",[3337,9316,9317,9320],{},[3147,9318,9319],{},"You can change the default behavior on a project-wide basis (not recommended):",[3165,9321,9322],{"language":3257,"meta":3258,"class":3259},[3157,9323,9324,3285,9336,3285,9342,3285,9348,3285,9355,3285,9364,3285,9370,3285,9376,3285,9382],{"class":3262},[3174,9325,9326,3270,9328,3270,9330,9332,9334],{"class":3176,"style":3177},[3174,9327,3269],{"class":3267,"style":3268},[3174,9329,3273],{"class":3267,"style":3268},[3174,9331,3276],{"class":3180,"style":3181},[3174,9333,3281],{"class":3279,"style":3280},[3174,9335,3284],{"class":3279,"style":3280},[3174,9337,5143,9338,3270,9340],{"class":3176,"style":3177},[3174,9339,3293],{"class":3291,"style":3292},[3174,9341,3284],{"class":3279,"style":3280},[3174,9343,8792,9344,3270,9346],{"class":3176,"style":3177},[3174,9345,3293],{"class":3291,"style":3292},[3174,9347,3284],{"class":3279,"style":3280},[3174,9349,9350,9351,3270,9353],{"class":3176,"style":3177},"      useAsyncData",[3174,9352,3293],{"class":3291,"style":3292},[3174,9354,3284],{"class":3279,"style":3280},[3174,9356,9357,9358,3270,9360,9362],{"class":3176,"style":3177},"        deep",[3174,9359,3293],{"class":3291,"style":3292},[3174,9361,5155],{"class":3565,"style":3566},[3174,9363,3308],{"class":3291,"style":3292},[3174,9365,3743,9366,9368],{"class":3176,"style":3177},[3174,9367,3314],{"class":3279,"style":3280},[3174,9369,3308],{"class":3291,"style":3292},[3174,9371,3572,9372,9374],{"class":3176,"style":3177},[3174,9373,3314],{"class":3279,"style":3280},[3174,9375,3308],{"class":3291,"style":3292},[3174,9377,3311,9378,9380],{"class":3176,"style":3177},[3174,9379,3314],{"class":3279,"style":3280},[3174,9381,3308],{"class":3291,"style":3292},[3174,9383,9384,9386],{"class":3176,"style":3177},[3174,9385,3314],{"class":3279,"style":3280},[3174,9387,3323],{"class":3279,"style":3280},[4011,9389,9390,9391],{},"If you need to, you can automate this step by running ",[3157,9392,9393],{},"npx codemod@latest nuxt\u002F4\u002Fshallow-function-reactivity",[3144,9395,9396,9397],{"id":3037},"Absolute Watch Paths in ",[3157,9398,9399],{},"builder:watch",[3147,9401,3501,9402,3505],{},[3236,9403,3504],{},[3507,9405,2766],{"id":3041},[3147,9407,9408,9409,9411,9412,3247],{},"The Nuxt ",[3157,9410,9399],{}," hook now emits a path which is absolute rather than relative to your project ",[3157,9413,6026],{},[3507,9415,2778],{"id":3043},[3147,9417,9418,9419,9421],{},"This allows us to support watching paths which are outside your ",[3157,9420,6026],{},", and offers better support for layers and other more complex patterns.",[3507,9423,2769],{"id":3045},[3147,9425,9426,9427,3247],{},"We have already proactively migrated the public Nuxt modules which we are aware use this hook. See ",[3151,9428,9430],{"href":9429},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F25339","issue #25339",[3147,9432,9433,9434,9436],{},"However, if you are a module author using the ",[3157,9435,9399],{}," 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:",[3165,9438,9439],{"language":3790,"class":3791},[3157,9440,9441,3285,9446,3285,9449,3285,9452,3285,9457,3285,9460],{"class":3794},[3174,9442,9443],{"class":3176,"style":3177},[3174,9444,9445],{"class":3806,"style":3718},"+ import { relative, resolve } from 'node:fs'",[3174,9447,9448],{"class":3176,"style":3177},"  \u002F\u002F ...",[3174,9450,9451],{"class":3176,"style":3177},"  nuxt.hook('builder:watch', async (event, path) => {",[3174,9453,9454],{"class":3176,"style":3177},[3174,9455,9456],{"class":3806,"style":3718},"+   path = relative(nuxt.options.srcDir, resolve(nuxt.options.srcDir, path))",[3174,9458,9459],{"class":3176,"style":3177},"    \u002F\u002F ...",[3174,9461,5789],{"class":3176,"style":3177},[4011,9463,8406,9464],{},[3157,9465,9466],{},"npx codemod@latest nuxt\u002F4\u002Fabsolute-watch-path",[3144,9468,9469,9470,3849],{"id":3047},"Removal of ",[3157,9471,9472],{},"window.__NUXT__",[3507,9474,2766],{"id":3051},[3147,9476,9477,9478,9480],{},"We are removing the global ",[3157,9479,9472],{}," object after the app finishes hydration.",[3507,9482,2778],{"id":3053},[3147,9484,9485,9486,9490,9491,3247],{},"This opens the way to multi-app patterns (",[3151,9487,9489],{"href":9488},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fissues\u002F21635","#21635",") and enables us to focus on a single way to access Nuxt app data - ",[3157,9492,9493],{},"useNuxtApp()",[3507,9495,2769],{"id":3055},[3147,9497,9498,9499,3293],{},"The data is still available, but can be accessed with ",[3157,9500,9501],{},"useNuxtApp().payload",[3165,9503,9504],{"language":3790,"class":3791},[3157,9505,9506,3285,9511],{"class":3794},[3174,9507,9508],{"class":3176,"style":3177},[3174,9509,9510],{"class":3799,"style":3800},"- console.log(window.__NUXT__)",[3174,9512,9513],{"class":3176,"style":3177},[3174,9514,9515],{"class":3806,"style":3718},"+ console.log(useNuxtApp().payload)",[3144,9517,3058],{"id":3057},[3147,9519,3501,9520,3599],{},[3236,9521,3504],{},[3507,9523,2766],{"id":3061},[3147,9525,9526,9527,9529,9530,9533],{},"Child folders in your ",[3157,9528,6299],{}," folder are also scanned for ",[3157,9531,9532],{},"index"," files and these are now also registered as middleware in your project.",[3507,9535,2778],{"id":3063},[3147,9537,9538,9539,3643,9541,3247],{},"Nuxt scans a number of folders automatically, including ",[3157,9540,6299],{},[3157,9542,6304],{},[3147,9544,9526,9545,9547,9548,9550],{},[3157,9546,6304],{}," folder are scanned for ",[3157,9549,9532],{}," files and we wanted to make this behavior consistent between scanned directories.",[3507,9552,2769],{"id":3065},[3147,9554,9555],{},"Probably no migration is necessary but if you wish to revert to previous behavior you can add a hook to filter out these middleware:",[3165,9557,9558],{"language":3257,"class":3259},[3157,9559,9560,3285,9572,3285,9579,3285,9590,3285,9647,3285,9653,3285,9659],{"class":3262},[3174,9561,9562,3270,9564,3270,9566,9568,9570],{"class":3176,"style":3177},[3174,9563,3269],{"class":3267,"style":3268},[3174,9565,3273],{"class":3267,"style":3268},[3174,9567,3276],{"class":3180,"style":3181},[3174,9569,3281],{"class":3279,"style":3280},[3174,9571,3284],{"class":3279,"style":3280},[3174,9573,9574,9575,3270,9577],{"class":3176,"style":3177},"  hooks",[3174,9576,3293],{"class":3291,"style":3292},[3174,9578,3284],{"class":3279,"style":3280},[3174,9580,3572,9581,3270,9584,1348,9586,3270,9588],{"class":3176,"style":3177},[3174,9582,9583],{"class":3717,"style":3718},"'app:resolve'",[3174,9585,3281],{"class":3279,"style":3280},[3174,9587,3323],{"class":3279,"style":3280},[3174,9589,3284],{"class":3279,"style":3280},[3174,9591,9592,9593,9595,9596,9598,9599,154,9601,9603,9606,9608,9609,3270,9611,9614,9615,9618,9621,9623,9626,9628,9630,9632,9633,9636,9638,9640,9641,7221,9643,9645],{"class":3176,"style":3177},"      app",[3174,9594,3247],{"class":3291,"style":3292},"middleware ",[3174,9597,6599],{"class":3291,"style":3292}," app",[3174,9600,3247],{"class":3291,"style":3292},[3174,9602,3247],{"class":3291,"style":3292},[3174,9604,9605],{"class":3180,"style":3181},"filter",[3174,9607,3281],{"class":3279,"style":3280},"mw ",[3174,9610,4145],{"class":3267,"style":3268},[3174,9612,9613],{"class":3291,"style":3292},"!\u002F","\\",[3174,9616,9617],{"class":3291,"style":3292},"\u002Findex",[3174,9619,9620],{"class":3267,"style":3268},"\\.",[3174,9622,4397],{"class":3291,"style":3292},[3174,9624,9625],{"class":3267,"style":3268},"^",[3174,9627,8684],{"class":3291,"style":3292},[3174,9629,4400],{"class":3279,"style":3280},[3174,9631,5732],{"class":3291,"style":3292},"$",[3174,9634,9635],{"class":3291,"style":3292},"\u002F.",[3174,9637,930],{"class":3180,"style":3181},[3174,9639,3281],{"class":3279,"style":3280},"mw",[3174,9642,3247],{"class":3291,"style":3292},[3174,9644,3323],{"class":3279,"style":3280},[3174,9646,3323],{"class":3279,"style":3280},[3174,9648,3572,9649,9651],{"class":3176,"style":3177},[3174,9650,3314],{"class":3279,"style":3280},[3174,9652,3308],{"class":3291,"style":3292},[3174,9654,3311,9655,9657],{"class":3176,"style":3177},[3174,9656,3314],{"class":3279,"style":3280},[3174,9658,3308],{"class":3291,"style":3292},[3174,9660,9661,9663],{"class":3176,"style":3177},[3174,9662,3314],{"class":3279,"style":3280},[3174,9664,3323],{"class":3279,"style":3280},[3144,9666,3068],{"id":3067},[3147,9668,3501,9669,3505],{},[3236,9670,3504],{},[3507,9672,2766],{"id":3071},[3147,9674,9675,9676,9679,9680,9683],{},"Previously, Nuxt used ",[3157,9677,9678],{},"lodash\u002Ftemplate"," to compile templates located on the file system using the ",[3157,9681,9682],{},".ejs"," file format\u002Fsyntax.",[3147,9685,9686,9687,3665,9690,3665,9693,9696],{},"In addition, we provided some template utilities (",[3157,9688,9689],{},"serialize",[3157,9691,9692],{},"importName",[3157,9694,9695],{},"importSources",") which could be used for code-generation within these templates, which are now being removed.",[3507,9698,2778],{"id":3073},[3147,9700,9701,9702,9705],{},"In Nuxt v3 we moved to a 'virtual' syntax with a ",[3157,9703,9704],{},"getContents()"," function which is much more flexible and performant.",[3147,9707,9708,9709,9711,9712,9715],{},"In addition, ",[3157,9710,9678],{}," 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, ",[3157,9713,9714],{},"lodash"," is a hefty dependency and is unused by most projects.",[3147,9717,9718,9719,9723],{},"Finally, providing code serialization functions directly within Nuxt is not ideal. Instead, we maintain projects like ",[3151,9720,9722],{"href":9721},"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.",[3507,9725,2769],{"id":3075},[3147,9727,9728],{},"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:",[3334,9730,9731,9736,9742],{},[3337,9732,9733,9734,3247],{},"Moving your string interpolation logic directly into ",[3157,9735,9704],{},[3337,9737,9738,9739,3247],{},"Using a custom function to handle the replacement, such as in ",[3151,9740,9741],{"href":9741},"https:\u002F\u002Fgithub.com\u002Fnuxt-modules\u002Fcolor-mode\u002Fpull\u002F240",[3337,9743,9744,9745,9748,9749,9752],{},"Use ",[3157,9746,9747],{},"es-toolkit\u002Fcompat"," (a drop-in replacement for lodash template), as a dependency of ",[6263,9750,9751],{},"your"," project rather than Nuxt:",[3165,9754,9755],{"language":3790,"class":3791},[3157,9756,9757,3285,9762,3285,9767,3285,9769,3285,9772,3285,9775,3285,9778,3285,9783,3285,9788,3285,9793,3285,9798,3285,9803],{"class":3794},[3174,9758,9759],{"class":3176,"style":3177},[3174,9760,9761],{"class":3806,"style":3718},"+ import { readFileSync } from 'node:fs'",[3174,9763,9764],{"class":3176,"style":3177},[3174,9765,9766],{"class":3806,"style":3718},"+ import { template } from 'es-toolkit\u002Fcompat'",[3174,9768,9448],{"class":3176,"style":3177},[3174,9770,9771],{"class":3176,"style":3177},"  addTemplate({",[3174,9773,9774],{"class":3176,"style":3177},"    fileName: 'appinsights-vue.js'",[3174,9776,9777],{"class":3176,"style":3177},"    options: { \u002F* some options *\u002F },",[3174,9779,9780],{"class":3176,"style":3177},[3174,9781,9782],{"class":3799,"style":3800},"-   src: resolver.resolve('.\u002Fruntime\u002Fplugin.ejs'),",[3174,9784,9785],{"class":3176,"style":3177},[3174,9786,9787],{"class":3806,"style":3718},"+   getContents({ options }) {",[3174,9789,9790],{"class":3176,"style":3177},[3174,9791,9792],{"class":3806,"style":3718},"+     const contents = readFileSync(resolver.resolve('.\u002Fruntime\u002Fplugin.ejs'), 'utf-8')",[3174,9794,9795],{"class":3176,"style":3177},[3174,9796,9797],{"class":3806,"style":3718},"+     return template(contents)({ options })",[3174,9799,9800],{"class":3176,"style":3177},[3174,9801,9802],{"class":3806,"style":3718},"+   },",[3174,9804,5789],{"class":3176,"style":3177},[3147,9806,9807,9808,3665,9810,3665,9812,9814,9815,3293],{},"Finally, if you are using the template utilities (",[3157,9809,9689],{},[3157,9811,9692],{},[3157,9813,9695],{},"), you can replace them as follows with utilities from ",[3157,9816,9817],{},"knitwork",[3165,9819,9820],{"language":3257,"class":3259},[3157,9821,9822,3285,9842,3285,9844,3285,9966,3285,9968,3285,10011,3285,10038,3285,10049,3285,10093,3285,10097,3285,10116,3285,10134,3285,10138,3285,10140],{"class":3262},[3174,9823,9824,3270,9826,9828,9829,9831,9832,9834,9835,3270,9837,3270,9839],{"class":3176,"style":3177},[3174,9825,7482],{"class":3267,"style":3268},[3174,9827,3284],{"class":3279,"style":3280}," genDynamicImport",[3174,9830,3308],{"class":3291,"style":3292}," genImport",[3174,9833,3308],{"class":3291,"style":3292}," genSafeVariableName ",[3174,9836,3314],{"class":3279,"style":3280},[3174,9838,7497],{"class":3267,"style":3268},[3174,9840,9841],{"class":3717,"style":3718},"'knitwork'",[3174,9843],{"class":3176,"style":3177},[3174,9845,9846,9848,9849,3270,9851,6506,9853,9856,3270,9858,3270,9860,9863,9865,9868,6506,9870,3270,9872,9874,3270,9876,9879,9881,9883,9886,9888,9891,9894,9897,9899,9901,9904,9907,9909,9912,9915,9917,9918,3270,9920,9922,9924,9927,9929,9930,9932,9934,9936,9938,9940,9942,9944,9946,9949,9951,9953,9955,9957,3270,9959,9962,9964],{"class":3176,"style":3177},[3174,9847,3848],{"class":3267,"style":3268}," serialize ",[3174,9850,6599],{"class":3291,"style":3292},[3174,9852,3281],{"class":3279,"style":3280},[3174,9854,9855],{"class":6710,"style":6711},": any",[3174,9857,3323],{"class":3279,"style":3280},[3174,9859,4145],{"class":3267,"style":3268},[3174,9861,9862],{"class":3303,"style":3304},"JSON",[3174,9864,3247],{"class":3291,"style":3292},[3174,9866,9867],{"class":3180,"style":3181},"stringify",[3174,9869,3281],{"class":3279,"style":3280},[3174,9871,3308],{"class":3291,"style":3292},[3174,9873,8374],{"class":3303,"style":3304},[3174,9875,3308],{"class":3291,"style":3292},[3174,9877,9878],{"class":3303,"style":3304},"2",[3174,9880,3323],{"class":3279,"style":3280},[3174,9882,3247],{"class":3291,"style":3292},[3174,9884,9885],{"class":3180,"style":3181},"replace",[3174,9887,3281],{"class":3279,"style":3280},[3174,9889,9890],{"class":3291,"style":3292},"\u002F\"",[3174,9892,9893],{"class":3267,"style":3268},"\\{",[3174,9895,9896],{"class":3291,"style":3292},"(.",[3174,9898,5732],{"class":4851,"style":3800},[3174,9900,3323],{"class":3291,"style":3292},[3174,9902,9903],{"class":3267,"style":3268},"\\}",[3174,9905,9906],{"class":3291,"style":3292},"\"(?=,?",[3174,9908,9632],{"class":3267,"style":3268},[3174,9910,9911],{"class":3291,"style":3292},")\u002F",[3174,9913,9914],{"class":3267,"style":3268},"gm",[3174,9916,3308],{"class":3291,"style":3292}," r ",[3174,9919,4145],{"class":3267,"style":3268},[3174,9921,9862],{"class":3303,"style":3304},[3174,9923,3247],{"class":3291,"style":3292},[3174,9925,9926],{"class":3180,"style":3181},"parse",[3174,9928,3281],{"class":3279,"style":3280},"r",[3174,9931,3323],{"class":3279,"style":3280},[3174,9933,3247],{"class":3291,"style":3292},[3174,9935,9885],{"class":3180,"style":3181},[3174,9937,3281],{"class":3279,"style":3280},[3174,9939,8684],{"class":3291,"style":3292},[3174,9941,9625],{"class":3267,"style":3268},[3174,9943,9893],{"class":3267,"style":3268},[3174,9945,9896],{"class":3291,"style":3292},[3174,9947,9948],{"class":4851,"style":3800},"*",[3174,9950,3323],{"class":3291,"style":3292},[3174,9952,9903],{"class":3267,"style":3268},[3174,9954,9632],{"class":3267,"style":3268},[3174,9956,8684],{"class":3291,"style":3292},[3174,9958,3308],{"class":3291,"style":3292},[3174,9960,9961],{"class":3717,"style":3718},"'$1'",[3174,9963,3323],{"class":3279,"style":3280},[3174,9965,3323],{"class":3279,"style":3280},[3174,9967],{"class":3176,"style":3177},[3174,9969,9970,9972,9973,3270,9975,9977,9978,3270,9980,9983,9984,9986,9988,3270,9990,9992,9993,3270,9995,3270,9997,3270,9999,3270,10001,10003,10005,3270,10007,3270,10009],{"class":3176,"style":3177},[3174,9971,3848],{"class":3267,"style":3268}," importSources ",[3174,9974,6599],{"class":3291,"style":3292},[3174,9976,3281],{"class":3279,"style":3280},"sources",[3174,9979,6712],{"class":6710,"style":6711},[3174,9981,9982],{"class":3291,"style":3292},"|"," string",[3174,9985,4397],{"class":3279,"style":3280},[3174,9987,4400],{"class":3279,"style":3280},[3174,9989,3308],{"class":3291,"style":3292},[3174,9991,3284],{"class":3279,"style":3280}," lazy ",[3174,9994,6599],{"class":3291,"style":3292},[3174,9996,3567],{"class":3565,"style":3566},[3174,9998,3314],{"class":3279,"style":3280},[3174,10000,6599],{"class":3291,"style":3292},[3174,10002,3284],{"class":3279,"style":3280},[3174,10004,3314],{"class":3279,"style":3280},[3174,10006,3323],{"class":3279,"style":3280},[3174,10008,4145],{"class":3267,"style":3268},[3174,10010,3284],{"class":3279,"style":3280},[3174,10012,3311,10013,3270,10015,10018,9977,10020,10022,10024,10027,10029,10031,10032,3270,10034,3270,10036],{"class":3176,"style":3177},[3174,10014,4443],{"class":3267,"style":3268},[3174,10016,10017],{"class":3180,"style":3181},"toArray",[3174,10019,3281],{"class":3279,"style":3280},[3174,10021,3323],{"class":3279,"style":3280},[3174,10023,3247],{"class":3291,"style":3292},[3174,10025,10026],{"class":3180,"style":3181},"map",[3174,10028,3281],{"class":3279,"style":3280},[3174,10030,3281],{"class":3279,"style":3280},"src",[3174,10033,3323],{"class":3279,"style":3280},[3174,10035,4145],{"class":3267,"style":3268},[3174,10037,3284],{"class":3279,"style":3280},[3174,10039,3572,10040,3270,10042,10044,10045,3270,10047],{"class":3176,"style":3177},[3174,10041,4225],{"class":3267,"style":3268},[3174,10043,3281],{"class":3279,"style":3280},"lazy",[3174,10046,3323],{"class":3279,"style":3280},[3174,10048,3284],{"class":3279,"style":3280},[3174,10050,3743,10051,3270,10053,10056,10058,10061,10031,10063,10065,10067,10070,10072,10073,10075,10076,10078,10080,10082,10084,10031,10086,10088,10090],{"class":3176,"style":3177},[3174,10052,4443],{"class":3267,"style":3268},[3174,10054,10055],{"class":3717,"style":3718},"`const ",[3174,10057,6732],{"class":3267,"style":3268},[3174,10059,10060],{"class":3180,"style":3181},"genSafeVariableName",[3174,10062,3281],{"class":3279,"style":3280},[3174,10064,3323],{"class":3279,"style":3280},[3174,10066,3314],{"class":3267,"style":3268},[3174,10068,10069],{"class":3717,"style":3718}," = ",[3174,10071,6732],{"class":3267,"style":3268},"genDynamicImport(src, { comment: `webpackChunkName",[3174,10074,3293],{"class":3291,"style":3292}," $",[3174,10077,3284],{"class":3279,"style":3280},[3174,10079,9862],{"class":3303,"style":3304},[3174,10081,3247],{"class":3291,"style":3292},[3174,10083,9867],{"class":3180,"style":3181},[3174,10085,3281],{"class":3279,"style":3280},[3174,10087,3323],{"class":3279,"style":3280},[3174,10089,3314],{"class":3279,"style":3280},[3174,10091,10092],{"class":3717,"style":3718},"` })}`",[3174,10094,3572,10095],{"class":3176,"style":3177},[3174,10096,3314],{"class":3279,"style":3280},[3174,10098,3572,10099,3270,10101,10104,10031,10106,3270,10108,10110,10031,10112,10114],{"class":3176,"style":3177},[3174,10100,4443],{"class":3267,"style":3268},[3174,10102,10103],{"class":3180,"style":3181},"genImport",[3174,10105,3281],{"class":3279,"style":3280},[3174,10107,3308],{"class":3291,"style":3292},[3174,10109,10060],{"class":3180,"style":3181},[3174,10111,3281],{"class":3279,"style":3280},[3174,10113,3323],{"class":3279,"style":3280},[3174,10115,3323],{"class":3279,"style":3280},[3174,10117,3311,10118,10120,10122,10124,10127,10129,10132],{"class":3176,"style":3177},[3174,10119,3314],{"class":3279,"style":3280},[3174,10121,3323],{"class":3279,"style":3280},[3174,10123,3247],{"class":3291,"style":3292},[3174,10125,10126],{"class":3180,"style":3181},"join",[3174,10128,3281],{"class":3279,"style":3280},[3174,10130,10131],{"class":3717,"style":3718},"'\\n'",[3174,10133,3323],{"class":3279,"style":3280},[3174,10135,10136],{"class":3176,"style":3177},[3174,10137,3314],{"class":3279,"style":3280},[3174,10139],{"class":3176,"style":3177},[3174,10141,10142,10144,10145,10147],{"class":3176,"style":3177},[3174,10143,3848],{"class":3267,"style":3268}," importName ",[3174,10146,6599],{"class":3291,"style":3292}," genSafeVariableName",[4011,10149,8406,10150],{},[3157,10151,10152],{},"npx codemod@latest nuxt\u002F4\u002Ftemplate-compilation-changes",[3144,10154,3078],{"id":3077},[3147,10156,3501,10157,3505],{},[3236,10158,3504],{},[3507,10160,2766],{"id":3081},[3147,10162,10163,10166,10167,10169,10170,3247],{},[3157,10164,10165],{},"compilerOptions.noUncheckedIndexedAccess"," is now ",[3157,10168,5155],{}," instead of ",[3157,10171,3567],{},[3507,10173,2778],{"id":3083},[3147,10175,10176,10177,10181,10182,3247],{},"This change is a follow up to a prior ",[3151,10178,10180],{"href":10179},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F27485","3.12 config update"," where we improved our defaults, mostly adhering to ",[3151,10183,10185],{"href":10184},"https:\u002F\u002Fwww.totaltypescript.com\u002Ftsconfig-cheat-sheet","TotalTypeScript's recommendations",[3507,10187,2769],{"id":3085},[3147,10189,10190],{},"There are two approaches:",[4030,10192,10193,10196],{},[3337,10194,10195],{},"Run a typecheck on your app and fix any new errors (recommended).",[3337,10197,10198,10203,10205],{},[3147,10199,10200,10201,3293],{},"Override the new default in your ",[3157,10202,234],{},[5399,10204,5401],{},[3165,10206,10207],{"language":3257,"class":3259},[3157,10208,10209,3285,10221,3285,10227,3285,10233,3285,10239,3285,10248,3285,10254,3285,10260,3285,10266],{"class":3262},[3174,10210,10211,3270,10213,3270,10215,10217,10219],{"class":3176,"style":3177},[3174,10212,3269],{"class":3267,"style":3268},[3174,10214,3273],{"class":3267,"style":3268},[3174,10216,3276],{"class":3180,"style":3181},[3174,10218,3281],{"class":3279,"style":3280},[3174,10220,3284],{"class":3279,"style":3280},[3174,10222,3691,10223,3270,10225],{"class":3176,"style":3177},[3174,10224,3293],{"class":3291,"style":3292},[3174,10226,3284],{"class":3279,"style":3280},[3174,10228,5426,10229,3270,10231],{"class":3176,"style":3177},[3174,10230,3293],{"class":3291,"style":3292},[3174,10232,3284],{"class":3279,"style":3280},[3174,10234,3705,10235,3270,10237],{"class":3176,"style":3177},[3174,10236,3293],{"class":3291,"style":3292},[3174,10238,3284],{"class":3279,"style":3280},[3174,10240,10241,10242,3270,10244,10246],{"class":3176,"style":3177},"        noUncheckedIndexedAccess",[3174,10243,3293],{"class":3291,"style":3292},[3174,10245,3567],{"class":3565,"style":3566},[3174,10247,3308],{"class":3291,"style":3292},[3174,10249,3743,10250,10252],{"class":3176,"style":3177},[3174,10251,3314],{"class":3279,"style":3280},[3174,10253,3308],{"class":3291,"style":3292},[3174,10255,3572,10256,10258],{"class":3176,"style":3177},[3174,10257,3314],{"class":3279,"style":3280},[3174,10259,3308],{"class":3291,"style":3292},[3174,10261,3311,10262,10264],{"class":3176,"style":3177},[3174,10263,3314],{"class":3279,"style":3280},[3174,10265,3308],{"class":3291,"style":3292},[3174,10267,10268,10270],{"class":3176,"style":3177},[3174,10269,3314],{"class":3279,"style":3280},[3174,10271,3323],{"class":3279,"style":3280},[3144,10273,3088],{"id":3087},[3147,10275,3501,10276,3505],{},[3236,10277,3504],{},[3507,10279,2766],{"id":3091},[3147,10281,10282],{},"Nuxt now generates separate TypeScript configurations for different contexts to provide better type-checking experiences:",[4030,10284,10285,10328,10337,10343,10349],{},[3337,10286,10287,10293],{},[3147,10288,10289,10292],{},[3236,10290,10291],{},"New TypeScript configuration files",": Nuxt now generates additional TypeScript configurations:",[3334,10294,10295,10301,10307,10316,10322],{},[3337,10296,10297,10300],{},[3157,10298,10299],{},".nuxt\u002Ftsconfig.app.json"," - For your app code (Vue components, composables, etc.)",[3337,10302,10303,10306],{},[3157,10304,10305],{},".nuxt\u002Ftsconfig.server.json"," - For your server-side code (Nitro\u002Fserver directory)",[3337,10308,10309,10312,10313,10315],{},[3157,10310,10311],{},".nuxt\u002Ftsconfig.node.json"," - For your build-time code (modules, ",[3157,10314,234],{},", etc.)",[3337,10317,10318,10321],{},[3157,10319,10320],{},".nuxt\u002Ftsconfig.shared.json"," - For code shared between app and server contexts (like types and non-environment specific utilities)",[3337,10323,10324,10327],{},[3157,10325,10326],{},".nuxt\u002Ftsconfig.json"," - Legacy configuration for backward compatibility",[3337,10329,10330,10333,10334,10336],{},[3236,10331,10332],{},"Backward compatibility",": Existing projects that extend ",[3157,10335,10326],{}," will continue to work as before.",[3337,10338,10339,10342],{},[3236,10340,10341],{},"Opt-in project references",": New projects or those wanting better type checking can adopt TypeScript's project references feature.",[3337,10344,10345,10348],{},[3236,10346,10347],{},"Context-specific type checking",": Each context now has appropriate compiler options and includes\u002Fexcludes for its specific environment.",[3337,10350,10351,10358],{},[3236,10352,10353,10354,10357],{},"New ",[3157,10355,10356],{},"typescript.nodeTsConfig"," option",": You can now customize the TypeScript configuration for Node.js build-time code.",[3507,10360,2778],{"id":3093},[3147,10362,10363],{},"This change provides several benefits:",[4030,10365,10366,10372,10378,10384],{},[3337,10367,10368,10371],{},[3236,10369,10370],{},"Better type safety",": Each context (app, server, build-time) gets appropriate type checking with context-specific globals and APIs.",[3337,10373,10374,10377],{},[3236,10375,10376],{},"Improved IDE experience",": Better IntelliSense and error reporting for different parts of your codebase.",[3337,10379,10380,10383],{},[3236,10381,10382],{},"Cleaner separation",": Server code won't incorrectly suggest client-side APIs and vice versa.",[3337,10385,10386,10388],{},[3236,10387,6242],{},": TypeScript can more efficiently check code with properly scoped configurations.",[3147,10390,10391,10392,10394,10395,10397,10398,10400],{},"For example, auto-imports are not available in your ",[3157,10393,234],{}," (but previously this was not flagged by TypeScript). And while IDEs recognized the separate context hinted by ",[3157,10396,244],{}," in your ",[3157,10399,6184],{}," directory, this was not reflected in type-checking (requiring a separate step).",[3507,10402,2769],{"id":3095},[3147,10404,10405,10408],{},[3236,10406,10407],{},"No migration is required"," - existing projects will continue to work as before.",[3147,10410,10411],{},"However, to take advantage of improved type checking, you can opt in to the new project references approach:",[4030,10413,10414,10520,10534,10556,10597,10755],{},[3337,10415,10416,10424,10438],{},[3147,10417,10418,10423],{},[3236,10419,10420,10421],{},"Update your root ",[3157,10422,244],{}," to use project references:",[3488,10425,10426,10427,10429,10430,10433,10434,10437],{},"If your ",[3157,10428,244],{}," currently has an ",[3157,10431,10432],{},"\"extends\": \".\u002F.nuxt\u002Ftsconfig.json\""," line, ",[3236,10435,10436],{},"remove it"," before adding the references. Project references and extends are mutually exclusive.",[3165,10439,10440],{"language":4838,"class":4839},[3157,10441,10442,3285,10446,3285,10451,3285,10460,3285,10467,3285,10479,3285,10490,3285,10501,3285,10512,3285,10516],{"class":4842},[3174,10443,10444],{"class":3176,"style":3177},[3174,10445,3284],{"class":3279,"style":3280},[3174,10447,3311,10448],{"class":3176,"style":3177},[3174,10449,10450],{"class":4130,"style":4131},"\u002F\u002F Remove \"extends\": \".\u002F.nuxt\u002Ftsconfig.json\" if present",[3174,10452,3311,10453,3380,10456,10458,3308],{"class":3176,"style":3177},[3174,10454,10455],{"class":4851,"style":3800},"\"files\"",[3174,10457,4397],{"class":3279,"style":3280},[3174,10459,4400],{"class":3279,"style":3280},[3174,10461,3311,10462,3380,10465],{"class":3176,"style":3177},[3174,10463,10464],{"class":4851,"style":3800},"\"references\"",[3174,10466,4397],{"class":3279,"style":3280},[3174,10468,3572,10469,3270,10471,3380,10474,3270,10477,3308],{"class":3176,"style":3177},[3174,10470,3284],{"class":3279,"style":3280},[3174,10472,10473],{"class":4851,"style":3800},"\"path\"",[3174,10475,10476],{"class":3717,"style":3718},"\".\u002F.nuxt\u002Ftsconfig.app.json\"",[3174,10478,3314],{"class":3279,"style":3280},[3174,10480,3572,10481,3270,10483,3380,10485,3270,10488,3308],{"class":3176,"style":3177},[3174,10482,3284],{"class":3279,"style":3280},[3174,10484,10473],{"class":4851,"style":3800},[3174,10486,10487],{"class":3717,"style":3718},"\".\u002F.nuxt\u002Ftsconfig.server.json\"",[3174,10489,3314],{"class":3279,"style":3280},[3174,10491,3572,10492,3270,10494,3380,10496,3270,10499,3308],{"class":3176,"style":3177},[3174,10493,3284],{"class":3279,"style":3280},[3174,10495,10473],{"class":4851,"style":3800},[3174,10497,10498],{"class":3717,"style":3718},"\".\u002F.nuxt\u002Ftsconfig.shared.json\"",[3174,10500,3314],{"class":3279,"style":3280},[3174,10502,3572,10503,3270,10505,3380,10507,3270,10510],{"class":3176,"style":3177},[3174,10504,3284],{"class":3279,"style":3280},[3174,10506,10473],{"class":4851,"style":3800},[3174,10508,10509],{"class":3717,"style":3718},"\".\u002F.nuxt\u002Ftsconfig.node.json\"",[3174,10511,3314],{"class":3279,"style":3280},[3174,10513,3311,10514],{"class":3176,"style":3177},[3174,10515,4400],{"class":3279,"style":3280},[3174,10517,10518],{"class":3176,"style":3177},[3174,10519,3314],{"class":3279,"style":3280},[3337,10521,10522,10527,10528,10531,10532,3247],{},[3236,10523,10524,10525],{},"Remove any manual server ",[3157,10526,244],{}," files (like ",[3157,10529,10530],{},"server\u002Ftsconfig.json",") that extended ",[3157,10533,10305],{},[3337,10535,10536,10542],{},[3147,10537,10538,10541],{},[3236,10539,10540],{},"Update your type checking scripts"," to use the build flag for project references:",[3165,10543,10544],{"language":3790,"class":3791},[3157,10545,10546,3285,10551],{"class":3794},[3174,10547,10548],{"class":3176,"style":3177},[3174,10549,10550],{"class":3799,"style":3800},"- \"typecheck\": \"nuxt prepare && vue-tsc --noEmit\"",[3174,10552,10553],{"class":3176,"style":3177},[3174,10554,10555],{"class":3806,"style":3718},"+ \"typecheck\": \"nuxt prepare && vue-tsc -b --noEmit\"",[3337,10557,10558,10563,10585],{},[3147,10559,10560,3293],{},[3236,10561,10562],{},"Move all type augmentations into their appropriate context",[3334,10564,10565,10571,10576],{},[3337,10566,10567,10568,10570],{},"If you are augmenting types for the app context, move the files to the ",[3157,10569,6030],{}," directory.",[3337,10572,10573,10574,10570],{},"If you are augmenting types for the server context, move the files to the ",[3157,10575,6184],{},[3337,10577,10578,10579,10582,10583,10570],{},"If you are augmenting types that are ",[3236,10580,10581],{},"shared between the app and server",", move the files to the ",[3157,10584,3671],{},[10586,10587,10588,10589,3665,10591,10593,10594,10596],"warning",{},"Augmenting types from outside the ",[3157,10590,6030],{},[3157,10592,6184],{},", or ",[3157,10595,3671],{}," directories will not work with the new project references setup.",[3337,10598,10599,10605,10607],{},[3147,10600,10601,10604],{},[3236,10602,10603],{},"Configure TypeScript options"," if needed:",[5399,10606,5401],{},[3165,10608,10609],{"language":3257,"class":3259},[3157,10610,10611,3285,10623,3285,10629,3285,10634,3285,10640,3285,10645,3285,10651,3285,10656,3285,10663,3285,10667,3285,10673,3285,10678,3285,10684,3285,10688,3285,10694,3285,10700,3285,10707,3285,10714,3285,10719,3285,10726,3285,10731,3285,10737,3285,10743,3285,10749],{"class":3262},[3174,10612,10613,3270,10615,3270,10617,10619,10621],{"class":3176,"style":3177},[3174,10614,3269],{"class":3267,"style":3268},[3174,10616,3273],{"class":3267,"style":3268},[3174,10618,3276],{"class":3180,"style":3181},[3174,10620,3281],{"class":3279,"style":3280},[3174,10622,3284],{"class":3279,"style":3280},[3174,10624,3691,10625,3270,10627],{"class":3176,"style":3177},[3174,10626,3293],{"class":3291,"style":3292},[3174,10628,3284],{"class":3279,"style":3280},[3174,10630,3572,10631],{"class":3176,"style":3177},[3174,10632,10633],{"class":4130,"style":4131},"\u002F\u002F customize tsconfig.app.json",[3174,10635,5426,10636,3270,10638],{"class":3176,"style":3177},[3174,10637,3293],{"class":3291,"style":3292},[3174,10639,3284],{"class":3279,"style":3280},[3174,10641,3743,10642],{"class":3176,"style":3177},[3174,10643,10644],{"class":4130,"style":4131},"\u002F\u002F ...",[3174,10646,3572,10647,10649],{"class":3176,"style":3177},[3174,10648,3314],{"class":3279,"style":3280},[3174,10650,3308],{"class":3291,"style":3292},[3174,10652,3572,10653],{"class":3176,"style":3177},[3174,10654,10655],{"class":4130,"style":4131},"\u002F\u002F customize tsconfig.shared.json",[3174,10657,10658,10659,3270,10661],{"class":3176,"style":3177},"    sharedTsConfig",[3174,10660,3293],{"class":3291,"style":3292},[3174,10662,3284],{"class":3279,"style":3280},[3174,10664,3743,10665],{"class":3176,"style":3177},[3174,10666,10644],{"class":4130,"style":4131},[3174,10668,3572,10669,10671],{"class":3176,"style":3177},[3174,10670,3314],{"class":3279,"style":3280},[3174,10672,3308],{"class":3291,"style":3292},[3174,10674,3572,10675],{"class":3176,"style":3177},[3174,10676,10677],{"class":4130,"style":4131},"\u002F\u002F customize tsconfig.node.json",[3174,10679,3698,10680,3270,10682],{"class":3176,"style":3177},[3174,10681,3293],{"class":3291,"style":3292},[3174,10683,3284],{"class":3279,"style":3280},[3174,10685,3743,10686],{"class":3176,"style":3177},[3174,10687,10644],{"class":4130,"style":4131},[3174,10689,3572,10690,10692],{"class":3176,"style":3177},[3174,10691,3314],{"class":3279,"style":3280},[3174,10693,3308],{"class":3291,"style":3292},[3174,10695,3311,10696,10698],{"class":3176,"style":3177},[3174,10697,3314],{"class":3279,"style":3280},[3174,10699,3308],{"class":3291,"style":3292},[3174,10701,10702,10703,3270,10705],{"class":3176,"style":3177},"  nitro",[3174,10704,3293],{"class":3291,"style":3292},[3174,10706,3284],{"class":3279,"style":3280},[3174,10708,10709,10710,3270,10712],{"class":3176,"style":3177},"    typescript",[3174,10711,3293],{"class":3291,"style":3292},[3174,10713,3284],{"class":3279,"style":3280},[3174,10715,3743,10716],{"class":3176,"style":3177},[3174,10717,10718],{"class":4130,"style":4131},"\u002F\u002F customize tsconfig.server.json",[3174,10720,10721,10722,3270,10724],{"class":3176,"style":3177},"      tsConfig",[3174,10723,3293],{"class":3291,"style":3292},[3174,10725,3284],{"class":3279,"style":3280},[3174,10727,10728,10729],{"class":3176,"style":3177},"        ",[3174,10730,10644],{"class":4130,"style":4131},[3174,10732,3743,10733,10735],{"class":3176,"style":3177},[3174,10734,3314],{"class":3279,"style":3280},[3174,10736,3308],{"class":3291,"style":3292},[3174,10738,3572,10739,10741],{"class":3176,"style":3177},[3174,10740,3314],{"class":3279,"style":3280},[3174,10742,3308],{"class":3291,"style":3292},[3174,10744,3311,10745,10747],{"class":3176,"style":3177},[3174,10746,3314],{"class":3279,"style":3280},[3174,10748,3308],{"class":3291,"style":3292},[3174,10750,10751,10753],{"class":3176,"style":3177},[3174,10752,3314],{"class":3279,"style":3280},[3174,10754,3323],{"class":3279,"style":3280},[3337,10756,10757,10760],{},[3236,10758,10759],{},"Update any CI\u002Fbuild scripts"," that run TypeScript checking to ensure they use the new project references approach.",[3147,10762,10763],{},"The new configuration provides better type safety and IntelliSense for projects that opt in, while maintaining full backward compatibility for existing setups.",[3144,10765,3098],{"id":3097},[3147,10767,3501,10768,3505],{},[3236,10769,3504],{},[3507,10771,2766],{"id":3101},[3147,10773,10774],{},"Four experimental features are no longer configurable in Nuxt 4:",[3334,10776,10777,10785,10793,10801,10808],{},[3337,10778,10779,8955,10782,10784],{},[3157,10780,10781],{},"experimental.treeshakeClientOnly",[3157,10783,5155],{}," (default since v3.0)",[3337,10786,10787,8955,10790,10792],{},[3157,10788,10789],{},"experimental.configSchema",[3157,10791,5155],{}," (default since v3.3)",[3337,10794,10795,8955,10798,10800],{},[3157,10796,10797],{},"experimental.polyfillVueUseHead",[3157,10799,3567],{}," (default since v3.4)",[3337,10802,10803,8955,10806,10800],{},[3157,10804,10805],{},"experimental.respectNoSSRHeader",[3157,10807,3567],{},[3337,10809,10810,10813,10814,6059],{},[3157,10811,10812],{},"vite.devBundler"," is no longer configurable - it will use ",[3157,10815,10816],{},"vite-node",[3507,10818,2778],{"id":3103},[3147,10820,10821],{},"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.",[3507,10823,2769],{"id":3105},[3334,10825,10826,10836],{},[3337,10827,10828,10831,10832],{},[3157,10829,10830],{},"polyfillVueUseHead"," is implementable in user-land with ",[3151,10833,10835],{"href":10834},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fblob\u002Ff209158352b09d1986aa320e29ff36353b91c358\u002Fpackages\u002Fnuxt\u002Fsrc\u002Fhead\u002Fruntime\u002Fplugins\u002Fvueuse-head-polyfill.ts#L10-L11","this plugin",[3337,10837,10838,10841,10842],{},[3157,10839,10840],{},"respectNoSSRHeader","is implementable in user-land with ",[3151,10843,10845],{"href":10844},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fblob\u002Fc660b39447f0d5b8790c0826092638d321cd6821\u002Fpackages\u002Fnuxt\u002Fsrc\u002Fcore\u002Fruntime\u002Fnitro\u002Fno-ssr.ts#L8-L9","server middleware",[3144,10847,10848,10849,10851],{"id":3107},"Removal of Top-Level ",[3157,10850,900],{}," Configuration",[3147,10853,3501,10854,3505],{},[3236,10855,3504],{},[3507,10857,2766],{"id":3111},[3147,10859,10860,10861,10863],{},"The top-level ",[3157,10862,900],{}," configuration option is no longer available in Nuxt 4. This includes all of its properties:",[3334,10865,10866,10872],{},[3337,10867,10868,10871],{},[3157,10869,10870],{},"generate.exclude"," - for excluding routes from prerendering",[3337,10873,10874,10877],{},[3157,10875,10876],{},"generate.routes"," - for specifying routes to prerender",[3507,10879,2778],{"id":3113},[3147,10881,10882,10883,10885,10886,10889],{},"The top level ",[3157,10884,900],{}," configuration was a holdover from Nuxt 2. We've supported ",[3157,10887,10888],{},"nitro.prerender"," for a while now, and it is the preferred way to configure prerendering in Nuxt 3+.",[3507,10891,2769],{"id":3115},[3147,10893,10894,10895,10897,10898,10900],{},"Replace ",[3157,10896,900],{}," configuration with the corresponding ",[3157,10899,10888],{}," options:",[3165,10902,10903],{"language":3790,"class":3791},[3157,10904,10905,3285,10908,3285,10913,3285,10918,3285,10923,3285,10928,3285,10933,3285,10938,3285,10943,3285,10948,3285,10953,3285,10958],{"class":3794},[3174,10906,10907],{"class":3176,"style":3177},"export default defineNuxtConfig({",[3174,10909,10910],{"class":3176,"style":3177},[3174,10911,10912],{"class":3799,"style":3800},"- generate: {",[3174,10914,10915],{"class":3176,"style":3177},[3174,10916,10917],{"class":3799,"style":3800},"-   exclude: ['\u002Fadmin', '\u002Fprivate'],",[3174,10919,10920],{"class":3176,"style":3177},[3174,10921,10922],{"class":3799,"style":3800},"-   routes: ['\u002Fsitemap.xml', '\u002Frobots.txt']",[3174,10924,10925],{"class":3176,"style":3177},[3174,10926,10927],{"class":3799,"style":3800},"- }",[3174,10929,10930],{"class":3176,"style":3177},[3174,10931,10932],{"class":3806,"style":3718},"+ nitro: {",[3174,10934,10935],{"class":3176,"style":3177},[3174,10936,10937],{"class":3806,"style":3718},"+   prerender: {",[3174,10939,10940],{"class":3176,"style":3177},[3174,10941,10942],{"class":3806,"style":3718},"+     ignore: ['\u002Fadmin', '\u002Fprivate'],",[3174,10944,10945],{"class":3176,"style":3177},[3174,10946,10947],{"class":3806,"style":3718},"+     routes: ['\u002Fsitemap.xml', '\u002Frobots.txt']",[3174,10949,10950],{"class":3176,"style":3177},[3174,10951,10952],{"class":3806,"style":3718},"+   }",[3174,10954,10955],{"class":3176,"style":3177},[3174,10956,10957],{"class":3806,"style":3718},"+ }",[3174,10959,6895],{"class":3176,"style":3177},[4749,10961,10963],{"to":10962},"https:\u002F\u002Fnitro.build\u002Fconfig#prerender","Read more about Nitro's prerender configuration options.",[3144,10965,3118],{"id":3117},[3147,10967,3501,10968,3505],{},[3236,10969,3504],{},[3507,10971,2766],{"id":3121},[3147,10973,8724,10974,10976,10977,10979,10980,10983,10984,10987,10988,10169,10991,3247],{},[3157,10975,3253],{}," is set to ",[3157,10978,3305],{}," (or ",[3157,10981,10982],{},"experimental.normalizePageNames"," is enabled), page component names match their route names instead of using the filename. For example, ",[3157,10985,10986],{},"pages\u002Ffoo\u002Findex.vue"," will have the component name ",[3157,10989,10990],{},"foo",[3157,10992,9532],{},[3507,10994,2778],{"id":3123},[3147,10996,10997,10998,3643,11000,11003,11004,11006,11007,4474,11009,8684,11011,11014,11015,11018],{},"Previously, Vue assigned component names based on the filename. This meant multiple pages like ",[3157,10999,10986],{},[3157,11001,11002],{},"pages\u002Fbar\u002Findex.vue"," would both have the component name ",[3157,11005,9532],{},". This made ",[3157,11008,3371],{},[3157,11010,4156],{},[3157,11012,11013],{},"exclude"," filters unreliable and required manually adding ",[3157,11016,11017],{},"defineOptions({ name: '...' })"," to each page.",[3507,11020,2769],{"id":3125},[3147,11022,11023,11024,3270,11026,8684,11028,11030],{},"If you rely on the current component names (e.g. in ",[3157,11025,3371],{},[3157,11027,4156],{},[3157,11029,11013],{}," lists), update them to use route names instead of filenames.",[3165,11032,11033],{"language":3790,"class":3791},[3157,11034,11035,3285,11040,3285,11043,3285,11048,3285,11053,3285,11056],{"class":3794},[3174,11036,11037],{"class":3176,"style":3177},[3174,11038,11039],{"class":3799,"style":3800},"\u003Ctemplate>",[3174,11041,11042],{"class":3176,"style":3177},"  \u003CNuxtPage :keepalive=\"{",[3174,11044,11045],{"class":3176,"style":3177},[3174,11046,11047],{"class":3799,"style":3800},"-   include: ['index']",[3174,11049,11050],{"class":3176,"style":3177},[3174,11051,11052],{"class":3806,"style":3718},"+   include: ['foo']",[3174,11054,11055],{"class":3176,"style":3177},"  }\" \u002F>",[3174,11057,11058],{"class":3176,"style":3177},[3174,11059,11060],{"class":3799,"style":3800},"\u003C\u002Ftemplate>",[3147,11062,11063],{},"To disable this behavior:",[3165,11065,11066],{"language":3257,"meta":3258,"class":3259},[3157,11067,11068,3285,11080,3285,11086,3285,11095,3285,11101],{"class":3262},[3174,11069,11070,3270,11072,3270,11074,11076,11078],{"class":3176,"style":3177},[3174,11071,3269],{"class":3267,"style":3268},[3174,11073,3273],{"class":3267,"style":3268},[3174,11075,3276],{"class":3180,"style":3181},[3174,11077,3281],{"class":3279,"style":3280},[3174,11079,3284],{"class":3279,"style":3280},[3174,11081,5143,11082,3270,11084],{"class":3176,"style":3177},[3174,11083,3293],{"class":3291,"style":3292},[3174,11085,3284],{"class":3279,"style":3280},[3174,11087,11088,11089,3270,11091,11093],{"class":3176,"style":3177},"    normalizePageNames",[3174,11090,3293],{"class":3291,"style":3292},[3174,11092,3567],{"class":3565,"style":3566},[3174,11094,3308],{"class":3291,"style":3292},[3174,11096,3311,11097,11099],{"class":3176,"style":3177},[3174,11098,3314],{"class":3279,"style":3280},[3174,11100,3308],{"class":3291,"style":3292},[3174,11102,11103,11105],{"class":3176,"style":3177},[3174,11104,3314],{"class":3279,"style":3280},[3174,11106,3323],{"class":3279,"style":3280},[3141,11108,3128],{"id":3127},[3147,11110,11111],{},"In the table below, there is a quick comparison between 3 versions of Nuxt:",[11113,11114,11115,11134],"table",{},[11116,11117,11118],"thead",{},[11119,11120,11121,11125,11128,11131],"tr",{},[11122,11123,11124],"th",{},"Feature \u002F Version",[11122,11126,11127],{},"Nuxt 2",[11122,11129,11130],{},"Nuxt Bridge",[11122,11132,11133],{},"Nuxt 3+",[11135,11136,11137,11150,11162,11175,11188,11201,11213,11224,11235,11246,11259,11269,11280,11291,11303],"tbody",{},[11119,11138,11139,11143,11145,11147],{},[11140,11141,11142],"td",{},"Vue",[11140,11144,9878],{},[11140,11146,9878],{},[11140,11148,11149],{},"3",[11119,11151,11152,11155,11158,11160],{},[11140,11153,11154],{},"Stability",[11140,11156,11157],{},"😊 Stable",[11140,11159,11157],{},[11140,11161,11157],{},[11119,11163,11164,11166,11169,11172],{},[11140,11165,6242],{},[11140,11167,11168],{},"🏎 Fast",[11140,11170,11171],{},"✈️ Faster",[11140,11173,11174],{},"🚀 Fastest",[11119,11176,11177,11180,11183,11186],{},[11140,11178,11179],{},"Nitro Engine",[11140,11181,11182],{},"❌",[11140,11184,11185],{},"✅",[11140,11187,11185],{},[11119,11189,11190,11193,11196,11199],{},[11140,11191,11192],{},"ESM support",[11140,11194,11195],{},"🌙 Partial",[11140,11197,11198],{},"👍 Better",[11140,11200,11185],{},[11119,11202,11203,11205,11208,11211],{},[11140,11204,285],{},[11140,11206,11207],{},"☑️ Opt-in",[11140,11209,11210],{},"🚧 Partial",[11140,11212,11185],{},[11119,11214,11215,11218,11220,11222],{},[11140,11216,11217],{},"Composition API",[11140,11219,11182],{},[11140,11221,11210],{},[11140,11223,11185],{},[11119,11225,11226,11229,11231,11233],{},[11140,11227,11228],{},"Options API",[11140,11230,11185],{},[11140,11232,11185],{},[11140,11234,11185],{},[11119,11236,11237,11240,11242,11244],{},[11140,11238,11239],{},"Components Auto Import",[11140,11241,11185],{},[11140,11243,11185],{},[11140,11245,11185],{},[11119,11247,11248,11253,11255,11257],{},[11140,11249,11250,11252],{},[3157,11251,5500],{}," syntax",[11140,11254,11182],{},[11140,11256,11210],{},[11140,11258,11185],{},[11119,11260,11261,11263,11265,11267],{},[11140,11262,1063],{},[11140,11264,11182],{},[11140,11266,11185],{},[11140,11268,11185],{},[11119,11270,11271,11274,11276,11278],{},[11140,11272,11273],{},"webpack",[11140,11275,5925],{},[11140,11277,5925],{},[11140,11279,3305],{},[11119,11281,11282,11284,11287,11289],{},[11140,11283,1233],{},[11140,11285,11286],{},"⚠️ Partial",[11140,11288,11210],{},[11140,11290,11185],{},[11119,11292,11293,11295,11298,11301],{},[11140,11294,853],{},[11140,11296,11297],{},"❌ Old",[11140,11299,11300],{},"✅ nuxt",[11140,11302,11300],{},[11119,11304,11305,11308,11310,11312],{},[11140,11306,11307],{},"Static sites",[11140,11309,11185],{},[11140,11311,11185],{},[11140,11313,11185],{},[3141,11315,3131],{"id":3130},[3147,11317,11318],{},"The migration guide provides a step-by-step comparison of Nuxt 2 features to Nuxt 3+ features and guidance to adapt your current application.",[4749,11320,11321,11322,3247],{"to":1885},"Check out the ",[3236,11323,11324],{},"guide to migrating from Nuxt 2 to Nuxt 3",[3141,11326,3134],{"id":3133},[3147,11328,11329],{},"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.",[4749,11331,11332],{"to":1862},[3236,11333,11334],{},"Migrate from Nuxt 2 to Nuxt Bridge",{"v5":11336,"v4":11337,"v3":11338,"v2":11339},"5 (nightly)","4.5.2","3.21.11","2.18.1"]