@nuxt/docs 3.20.1 → 3.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (251) hide show
  1. package/1.getting-started/01.introduction.md +5 -5
  2. package/1.getting-started/02.installation.md +4 -7
  3. package/1.getting-started/03.configuration.md +32 -32
  4. package/1.getting-started/04.views.md +10 -8
  5. package/1.getting-started/05.assets.md +8 -8
  6. package/1.getting-started/06.styling.md +24 -18
  7. package/1.getting-started/07.routing.md +11 -11
  8. package/1.getting-started/08.seo-meta.md +10 -6
  9. package/1.getting-started/09.transitions.md +12 -12
  10. package/1.getting-started/10.data-fetching.md +18 -18
  11. package/1.getting-started/11.state-management.md +7 -7
  12. package/1.getting-started/12.error-handling.md +28 -22
  13. package/1.getting-started/13.server.md +9 -9
  14. package/1.getting-started/14.layers.md +52 -18
  15. package/1.getting-started/15.prerendering.md +10 -4
  16. package/1.getting-started/16.deployment.md +3 -2
  17. package/1.getting-started/17.testing.md +18 -8
  18. package/1.getting-started/18.upgrade.md +111 -60
  19. package/{2.guide/1.directory-structure → 2.directory-structure}/0.nuxt.md +1 -1
  20. package/{2.guide/1.directory-structure → 2.directory-structure}/0.output.md +2 -2
  21. package/{2.guide/1.directory-structure → 2.directory-structure}/1.assets.md +3 -3
  22. package/{2.guide/1.directory-structure → 2.directory-structure}/1.components.md +13 -9
  23. package/{2.guide/1.directory-structure → 2.directory-structure}/1.composables.md +4 -4
  24. package/{2.guide/1.directory-structure → 2.directory-structure}/1.content.md +2 -2
  25. package/2.directory-structure/1.layers.md +87 -0
  26. package/{2.guide/1.directory-structure → 2.directory-structure}/1.layouts.md +37 -5
  27. package/{2.guide/1.directory-structure → 2.directory-structure}/1.middleware.md +8 -8
  28. package/{2.guide/1.directory-structure → 2.directory-structure}/1.modules.md +10 -4
  29. package/{2.guide/1.directory-structure → 2.directory-structure}/1.node_modules.md +2 -2
  30. package/{2.guide/1.directory-structure → 2.directory-structure}/1.pages.md +43 -22
  31. package/{2.guide/1.directory-structure → 2.directory-structure}/1.plugins.md +6 -3
  32. package/{2.guide/1.directory-structure → 2.directory-structure}/1.public.md +1 -1
  33. package/{2.guide/1.directory-structure → 2.directory-structure}/1.server.md +29 -9
  34. package/{2.guide/1.directory-structure → 2.directory-structure}/1.shared.md +4 -4
  35. package/{2.guide/1.directory-structure → 2.directory-structure}/1.utils.md +5 -5
  36. package/{2.guide/1.directory-structure → 2.directory-structure}/2.env.md +4 -4
  37. package/{2.guide/1.directory-structure → 2.directory-structure}/2.nuxtignore.md +2 -1
  38. package/{2.guide/1.directory-structure → 2.directory-structure}/2.nuxtrc.md +6 -3
  39. package/{2.guide/1.directory-structure → 2.directory-structure}/3.app-config.md +2 -2
  40. package/{2.guide/1.directory-structure → 2.directory-structure}/3.app.md +5 -5
  41. package/{2.guide/1.directory-structure → 2.directory-structure}/3.error.md +10 -8
  42. package/{2.guide/1.directory-structure → 2.directory-structure}/3.nuxt-config.md +2 -2
  43. package/{2.guide/1.directory-structure → 2.directory-structure}/3.package.md +1 -1
  44. package/{2.guide/1.directory-structure → 2.directory-structure}/3.tsconfig.md +3 -2
  45. package/2.directory-structure/index.md +65 -0
  46. package/3.guide/0.index.md +28 -0
  47. package/{2.guide/2.concepts/3.rendering.md → 3.guide/1.concepts/1.rendering.md} +8 -33
  48. package/{2.guide/2.concepts/2.vuejs-development.md → 3.guide/1.concepts/10.vuejs-development.md} +11 -10
  49. package/{2.guide/2.concepts/10.nuxt-lifecycle.md → 3.guide/1.concepts/2.nuxt-lifecycle.md} +34 -27
  50. package/{2.guide/2.concepts/1.auto-imports.md → 3.guide/1.concepts/3.auto-imports.md} +10 -10
  51. package/{2.guide/2.concepts → 3.guide/1.concepts}/4.server-engine.md +3 -3
  52. package/{2.guide/2.concepts → 3.guide/1.concepts}/5.modules.md +15 -2
  53. package/{2.guide/2.concepts → 3.guide/1.concepts}/7.esm.md +5 -4
  54. package/{2.guide/2.concepts → 3.guide/1.concepts}/8.typescript.md +11 -17
  55. package/{2.guide/2.concepts → 3.guide/1.concepts}/9.code-style.md +1 -1
  56. package/{2.guide/5.best-practices → 3.guide/2.best-practices}/hydration.md +1 -1
  57. package/{2.guide/5.best-practices → 3.guide/2.best-practices}/performance.md +5 -5
  58. package/3.guide/3.ai/.navigation.yml +3 -0
  59. package/3.guide/3.ai/1.mcp.md +277 -0
  60. package/3.guide/3.ai/2.llms-txt.md +65 -0
  61. package/3.guide/4.modules/.navigation.yml +3 -0
  62. package/3.guide/4.modules/1.getting-started.md +103 -0
  63. package/3.guide/4.modules/2.module-anatomy.md +138 -0
  64. package/3.guide/4.modules/3.recipes-basics.md +330 -0
  65. package/3.guide/4.modules/4.recipes-advanced.md +243 -0
  66. package/3.guide/4.modules/5.testing.md +76 -0
  67. package/3.guide/4.modules/6.best-practices.md +104 -0
  68. package/3.guide/4.modules/7.ecosystem.md +32 -0
  69. package/3.guide/4.modules/index.md +36 -0
  70. package/{2.guide/4.recipes → 3.guide/5.recipes}/1.custom-routing.md +4 -4
  71. package/{2.guide/4.recipes → 3.guide/5.recipes}/2.vite-plugin.md +5 -1
  72. package/{2.guide/4.recipes → 3.guide/5.recipes}/3.custom-usefetch.md +3 -3
  73. package/{2.guide/4.recipes → 3.guide/5.recipes}/4.sessions-and-authentication.md +2 -2
  74. package/{2.guide/3.going-further → 3.guide/6.going-further}/1.events.md +3 -4
  75. package/{2.guide/3.going-further → 3.guide/6.going-further}/1.experimental-features.md +212 -87
  76. package/3.guide/6.going-further/1.features.md +108 -0
  77. package/{2.guide/3.going-further → 3.guide/6.going-further}/1.internals.md +5 -4
  78. package/{2.guide/3.going-further → 3.guide/6.going-further}/10.runtime-config.md +3 -3
  79. package/{2.guide/3.going-further → 3.guide/6.going-further}/11.nightly-release-channel.md +1 -1
  80. package/{2.guide/3.going-further → 3.guide/6.going-further}/2.hooks.md +7 -7
  81. package/{2.guide/3.going-further → 3.guide/6.going-further}/4.kit.md +3 -3
  82. package/{2.guide/3.going-further → 3.guide/6.going-further}/6.nuxt-app.md +6 -6
  83. package/{2.guide/3.going-further → 3.guide/6.going-further}/7.layers.md +40 -14
  84. package/{2.guide/3.going-further → 3.guide/6.going-further}/9.debugging.md +3 -2
  85. package/{3.api → 4.api}/1.components/1.nuxt-client-fallback.md +5 -1
  86. package/{3.api → 4.api}/1.components/10.nuxt-picture.md +1 -1
  87. package/{3.api → 4.api}/1.components/11.teleports.md +2 -2
  88. package/{3.api → 4.api}/1.components/12.nuxt-route-announcer.md +1 -3
  89. package/{3.api → 4.api}/1.components/13.nuxt-time.md +0 -2
  90. package/{3.api → 4.api}/1.components/2.nuxt-page.md +4 -4
  91. package/{3.api → 4.api}/1.components/3.nuxt-layout.md +7 -7
  92. package/{3.api → 4.api}/1.components/4.nuxt-link.md +13 -13
  93. package/{3.api → 4.api}/1.components/5.nuxt-loading-indicator.md +2 -2
  94. package/{3.api → 4.api}/1.components/6.nuxt-error-boundary.md +2 -2
  95. package/{3.api → 4.api}/1.components/7.nuxt-welcome.md +2 -2
  96. package/{3.api → 4.api}/1.components/8.nuxt-island.md +9 -2
  97. package/{3.api → 4.api}/2.composables/use-app-config.md +1 -1
  98. package/{3.api → 4.api}/2.composables/use-async-data.md +5 -5
  99. package/4.api/2.composables/use-cookie.md +183 -0
  100. package/{3.api → 4.api}/2.composables/use-error.md +3 -3
  101. package/{3.api → 4.api}/2.composables/use-fetch.md +37 -37
  102. package/{3.api → 4.api}/2.composables/use-head-safe.md +1 -1
  103. package/{3.api → 4.api}/2.composables/use-head.md +22 -7
  104. package/{3.api → 4.api}/2.composables/use-lazy-async-data.md +1 -1
  105. package/{3.api → 4.api}/2.composables/use-lazy-fetch.md +9 -9
  106. package/{3.api → 4.api}/2.composables/use-nuxt-app.md +11 -9
  107. package/{3.api → 4.api}/2.composables/use-response-header.md +1 -1
  108. package/{3.api → 4.api}/2.composables/use-route-announcer.md +0 -2
  109. package/{3.api → 4.api}/2.composables/use-route.md +2 -2
  110. package/4.api/2.composables/use-router.md +94 -0
  111. package/{3.api → 4.api}/2.composables/use-runtime-config.md +5 -5
  112. package/{3.api → 4.api}/2.composables/use-seo-meta.md +2 -2
  113. package/{3.api → 4.api}/2.composables/use-server-seo-meta.md +2 -2
  114. package/{3.api → 4.api}/2.composables/use-state.md +12 -2
  115. package/{3.api → 4.api}/3.utils/$fetch.md +2 -2
  116. package/{3.api → 4.api}/3.utils/abort-navigation.md +3 -3
  117. package/{3.api → 4.api}/3.utils/add-route-middleware.md +1 -1
  118. package/{3.api → 4.api}/3.utils/call-once.md +2 -4
  119. package/{3.api → 4.api}/3.utils/clear-error.md +1 -1
  120. package/{3.api → 4.api}/3.utils/create-error.md +7 -7
  121. package/{3.api → 4.api}/3.utils/define-lazy-hydration-component.md +5 -5
  122. package/{3.api → 4.api}/3.utils/define-nuxt-component.md +1 -1
  123. package/{3.api → 4.api}/3.utils/define-nuxt-plugin.md +12 -12
  124. package/{3.api → 4.api}/3.utils/define-nuxt-route-middleware.md +3 -3
  125. package/{3.api → 4.api}/3.utils/define-page-meta.md +23 -16
  126. package/{3.api → 4.api}/3.utils/define-route-rules.md +2 -2
  127. package/{3.api → 4.api}/3.utils/navigate-to.md +14 -14
  128. package/{3.api → 4.api}/3.utils/on-before-route-leave.md +1 -1
  129. package/{3.api → 4.api}/3.utils/on-before-route-update.md +1 -1
  130. package/{3.api → 4.api}/3.utils/preload-route-components.md +2 -2
  131. package/{3.api → 4.api}/3.utils/refresh-cookie.md +0 -2
  132. package/{3.api → 4.api}/3.utils/refresh-nuxt-data.md +1 -1
  133. package/{3.api → 4.api}/3.utils/reload-nuxt-app.md +1 -1
  134. package/{3.api → 4.api}/3.utils/set-page-layout.md +36 -0
  135. package/{3.api → 4.api}/3.utils/set-response-status.md +3 -3
  136. package/{3.api → 4.api}/3.utils/show-error.md +4 -4
  137. package/{3.api → 4.api}/3.utils/update-app-config.md +2 -2
  138. package/{3.api → 4.api}/4.commands/add.md +11 -11
  139. package/4.api/4.commands/analyze.md +42 -0
  140. package/4.api/4.commands/build-module.md +42 -0
  141. package/4.api/4.commands/build.md +47 -0
  142. package/{3.api → 4.api}/4.commands/cleanup.md +6 -6
  143. package/4.api/4.commands/dev.md +60 -0
  144. package/{3.api → 4.api}/4.commands/devtools.md +7 -7
  145. package/4.api/4.commands/generate.md +42 -0
  146. package/4.api/4.commands/info.md +33 -0
  147. package/4.api/4.commands/init.md +50 -0
  148. package/4.api/4.commands/module.md +84 -0
  149. package/4.api/4.commands/prepare.md +41 -0
  150. package/4.api/4.commands/preview.md +44 -0
  151. package/4.api/4.commands/test.md +40 -0
  152. package/4.api/4.commands/typecheck.md +44 -0
  153. package/4.api/4.commands/upgrade.md +37 -0
  154. package/{3.api → 4.api}/5.kit/1.modules.md +31 -18
  155. package/{3.api → 4.api}/5.kit/10.templates.md +23 -23
  156. package/{3.api → 4.api}/5.kit/11.nitro.md +36 -36
  157. package/{3.api → 4.api}/5.kit/12.resolving.md +2 -2
  158. package/{3.api → 4.api}/5.kit/14.builder.md +35 -23
  159. package/{3.api → 4.api}/5.kit/16.layers.md +16 -16
  160. package/{3.api → 4.api}/5.kit/2.programmatic.md +2 -2
  161. package/{3.api → 4.api}/5.kit/3.compatibility.md +2 -2
  162. package/{3.api → 4.api}/5.kit/4.autoimports.md +18 -18
  163. package/4.api/5.kit/5.components.md +146 -0
  164. package/{3.api → 4.api}/5.kit/6.context.md +1 -1
  165. package/{3.api → 4.api}/5.kit/8.layout.md +1 -1
  166. package/4.api/6.advanced/1.hooks.md +105 -0
  167. package/{3.api → 4.api}/index.md +7 -7
  168. package/5.community/4.contribution.md +10 -10
  169. package/5.community/5.framework-contribution.md +9 -9
  170. package/5.community/6.roadmap.md +25 -25
  171. package/5.community/7.changelog.md +20 -0
  172. package/6.bridge/1.overview.md +9 -1
  173. package/6.bridge/3.bridge-composition-api.md +2 -2
  174. package/6.bridge/4.plugins-and-middleware.md +4 -4
  175. package/6.bridge/5.nuxt3-compatible-api.md +1 -1
  176. package/6.bridge/8.nitro.md +4 -0
  177. package/7.migration/10.bundling.md +1 -1
  178. package/7.migration/11.server.md +3 -3
  179. package/7.migration/2.configuration.md +6 -6
  180. package/7.migration/20.module-authors.md +3 -3
  181. package/7.migration/3.auto-imports.md +1 -1
  182. package/7.migration/4.meta.md +1 -1
  183. package/7.migration/5.plugins-and-middleware.md +3 -3
  184. package/7.migration/6.pages-and-layouts.md +9 -9
  185. package/7.migration/7.component-options.md +6 -6
  186. package/7.migration/8.runtime-config.md +1 -1
  187. package/package.json +1 -1
  188. package/2.guide/0.index.md +0 -25
  189. package/2.guide/3.going-further/1.features.md +0 -103
  190. package/2.guide/3.going-further/3.modules.md +0 -901
  191. package/3.api/2.composables/use-cookie.md +0 -183
  192. package/3.api/2.composables/use-router.md +0 -94
  193. package/3.api/4.commands/analyze.md +0 -42
  194. package/3.api/4.commands/build-module.md +0 -42
  195. package/3.api/4.commands/build.md +0 -47
  196. package/3.api/4.commands/dev.md +0 -60
  197. package/3.api/4.commands/generate.md +0 -42
  198. package/3.api/4.commands/info.md +0 -33
  199. package/3.api/4.commands/init.md +0 -50
  200. package/3.api/4.commands/module.md +0 -84
  201. package/3.api/4.commands/prepare.md +0 -41
  202. package/3.api/4.commands/preview.md +0 -44
  203. package/3.api/4.commands/test.md +0 -40
  204. package/3.api/4.commands/typecheck.md +0 -44
  205. package/3.api/4.commands/upgrade.md +0 -37
  206. package/3.api/5.kit/5.components.md +0 -146
  207. package/3.api/6.advanced/1.hooks.md +0 -105
  208. /package/{2.guide/1.directory-structure → 2.directory-structure}/.navigation.yml +0 -0
  209. /package/{2.guide/1.directory-structure → 2.directory-structure}/2.gitignore.md +0 -0
  210. /package/{2.guide → 3.guide}/.navigation.yml +0 -0
  211. /package/{2.guide/2.concepts → 3.guide/1.concepts}/.navigation.yml +0 -0
  212. /package/{2.guide/5.best-practices → 3.guide/2.best-practices}/.navigation.yml +0 -0
  213. /package/{2.guide/5.best-practices → 3.guide/2.best-practices}/plugins.md +0 -0
  214. /package/{2.guide/4.recipes → 3.guide/5.recipes}/.navigation.yml +0 -0
  215. /package/{2.guide/3.going-further → 3.guide/6.going-further}/.navigation.yml +0 -0
  216. /package/{2.guide/3.going-further → 3.guide/6.going-further}/index.md +0 -0
  217. /package/{3.api → 4.api}/.navigation.yml +0 -0
  218. /package/{3.api → 4.api}/1.components/.navigation.yml +0 -0
  219. /package/{3.api → 4.api}/1.components/1.client-only.md +0 -0
  220. /package/{3.api → 4.api}/1.components/1.dev-only.md +0 -0
  221. /package/{3.api → 4.api}/1.components/9.nuxt-img.md +0 -0
  222. /package/{3.api → 4.api}/2.composables/.navigation.yml +0 -0
  223. /package/{3.api → 4.api}/2.composables/on-prehydrate.md +0 -0
  224. /package/{3.api → 4.api}/2.composables/use-hydration.md +0 -0
  225. /package/{3.api → 4.api}/2.composables/use-loading-indicator.md +0 -0
  226. /package/{3.api → 4.api}/2.composables/use-nuxt-data.md +0 -0
  227. /package/{3.api → 4.api}/2.composables/use-preview-mode.md +0 -0
  228. /package/{3.api → 4.api}/2.composables/use-request-event.md +0 -0
  229. /package/{3.api → 4.api}/2.composables/use-request-fetch.md +0 -0
  230. /package/{3.api → 4.api}/2.composables/use-request-header.md +0 -0
  231. /package/{3.api → 4.api}/2.composables/use-request-headers.md +0 -0
  232. /package/{3.api → 4.api}/2.composables/use-request-url.md +0 -0
  233. /package/{3.api → 4.api}/2.composables/use-runtime-hook.md +0 -0
  234. /package/{3.api → 4.api}/3.utils/.navigation.yml +0 -0
  235. /package/{3.api → 4.api}/3.utils/clear-nuxt-data.md +0 -0
  236. /package/{3.api → 4.api}/3.utils/clear-nuxt-state.md +0 -0
  237. /package/{3.api → 4.api}/3.utils/on-nuxt-ready.md +0 -0
  238. /package/{3.api → 4.api}/3.utils/prefetch-components.md +0 -0
  239. /package/{3.api → 4.api}/3.utils/preload-components.md +0 -0
  240. /package/{3.api → 4.api}/3.utils/prerender-routes.md +0 -0
  241. /package/{3.api → 4.api}/4.commands/.navigation.yml +0 -0
  242. /package/{3.api → 4.api}/5.kit/.navigation.yml +0 -0
  243. /package/{3.api → 4.api}/5.kit/10.runtime-config.md +0 -0
  244. /package/{3.api → 4.api}/5.kit/13.logging.md +0 -0
  245. /package/{3.api → 4.api}/5.kit/15.examples.md +0 -0
  246. /package/{3.api → 4.api}/5.kit/7.pages.md +0 -0
  247. /package/{3.api → 4.api}/5.kit/9.head.md +0 -0
  248. /package/{3.api → 4.api}/5.kit/9.plugins.md +0 -0
  249. /package/{3.api → 4.api}/6.advanced/.navigation.yml +0 -0
  250. /package/{3.api → 4.api}/6.advanced/2.import-meta.md +0 -0
  251. /package/{3.api → 4.api}/6.nuxt-config.md +0 -0
@@ -19,7 +19,7 @@ If you want to play around with Nuxt in your browser, you can [try it out in one
19
19
 
20
20
  Nuxt uses conventions and an opinionated directory structure to automate repetitive tasks and allow developers to focus on pushing features. The configuration file can still customize and override its default behaviors.
21
21
 
22
- - **File-based routing:** define routes based on the structure of your [`pages/` directory](/docs/3.x/guide/directory-structure/pages). This can make it easier to organize your application and avoid the need for manual route configuration.
22
+ - **File-based routing:** define routes based on the structure of your [`pages/` directory](/docs/3.x/directory-structure/pages). This can make it easier to organize your application and avoid the need for manual route configuration.
23
23
  - **Code splitting:** Nuxt automatically splits your code into smaller chunks, which can help reduce the initial load time of your application.
24
24
  - **Server-side rendering out of the box:** Nuxt comes with built-in SSR capabilities, so you don't have to set up a separate server yourself.
25
25
  - **Auto-imports:** write Vue composables and components in their respective directories and use them without having to import them with the benefits of tree-shaking and optimized JS bundles.
@@ -44,7 +44,7 @@ Overall, server-side rendering can provide a faster and more efficient user expe
44
44
  As Nuxt is a versatile framework, it gives you the possibility to statically render your whole application to a static hosting with `nuxt generate`,
45
45
  disable SSR globally with the `ssr: false` option or leverage hybrid rendering by setting up the `routeRules` option.
46
46
 
47
- :read-more{title="Nuxt rendering modes" to="/docs/guide/concepts/rendering"}
47
+ :read-more{title="Nuxt rendering modes" to="/docs/3.x/guide/concepts/rendering"}
48
48
 
49
49
  ### Server engine
50
50
 
@@ -54,19 +54,19 @@ In development, it uses Rollup and Node.js workers for your server code and cont
54
54
 
55
55
  In production, Nitro builds your app and server into one universal `.output` directory. This output is light: minified and removed from any Node.js modules (except polyfills). You can deploy this output on any system supporting JavaScript, from Node.js, Serverless, Workers, Edge-side rendering or purely static.
56
56
 
57
- :read-more{title="Nuxt server engine" to="/docs/guide/concepts/server-engine"}
57
+ :read-more{title="Nuxt server engine" to="/docs/3.x/guide/concepts/server-engine"}
58
58
 
59
59
  ### Production-ready
60
60
 
61
61
  A Nuxt application can be deployed on a Node or Deno server, pre-rendered to be hosted in static environments, or deployed to serverless and edge providers.
62
62
 
63
- :read-more{title="Deployment section" to="/docs/getting-started/deployment"}
63
+ :read-more{title="Deployment section" to="/docs/3.x/getting-started/deployment"}
64
64
 
65
65
  ### Modular
66
66
 
67
67
  A module system allows you to extend Nuxt with custom features and integrations with third-party services.
68
68
 
69
- :read-more{title="Nuxt Modules Concept" to="/docs/guide/concepts/modules"}
69
+ :read-more{title="Nuxt Modules Concept" to="/docs/3.x/guide/concepts/modules"}
70
70
 
71
71
  ### Architecture
72
72
 
@@ -17,9 +17,7 @@ Or follow the steps below to set up a new Nuxt project on your computer.
17
17
 
18
18
  ## New Project
19
19
 
20
- <!-- TODO: need to fix upstream in nuxt/nuxt.com -->
21
- <!-- markdownlint-disable-next-line MD001 -->
22
- #### Prerequisites
20
+ ### Prerequisites
23
21
 
24
22
  - **Node.js** - [`20.x`](https://nodejs.org/en) or newer (but we recommend the [active LTS release](https://github.com/nodejs/release#release-schedule))
25
23
  - **Text editor** - There is no IDE requirement, but we recommend [Visual Studio Code](https://code.visualstudio.com/) with the [official Vue extension](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (previously known as Volar) or [WebStorm](https://www.jetbrains.com/webstorm/), which, along with [other JetBrains IDEs](https://www.jetbrains.com/ides/), offers great Nuxt support right out-of-the-box.
@@ -29,13 +27,12 @@ Or follow the steps below to set up a new Nuxt project on your computer.
29
27
  ::details
30
28
  :summary[Additional notes for an optimal setup:]
31
29
  - **Node.js**: Make sure to use an even numbered version (20, 22, etc.)
32
- - **Nuxtr**: Install the community-developed [Nuxtr extension](https://marketplace.visualstudio.com/items?itemName=Nuxtr.nuxtr-vscode)
33
30
  - **WSL**: If you are using Windows and experience slow HMR, you may want to try using [WSL (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/install) which may solve some performance issues.
34
31
  - **Windows slow DNS resolution**: Instead of using `localhost:3000` for local dev server on Windows, use `127.0.0.1` for much faster loading experience on browsers.
35
32
  ::
36
33
  ::
37
34
 
38
- Open a terminal (if you're using [Visual Studio Code](https://code.visualstudio.com), you can open an [integrated terminal](https://code.visualstudio.com/docs/editor/integrated-terminal)) and use the following command to create a new starter project:
35
+ Open a terminal (if you're using [Visual Studio Code](https://code.visualstudio.com), you can open an [integrated terminal](https://code.visualstudio.com/docs/terminal/basics)) and use the following command to create a new starter project:
39
36
 
40
37
  ::code-group{sync="pm"}
41
38
 
@@ -44,7 +41,7 @@ npm create nuxt@latest <project-name> -- -t v3
44
41
  ```
45
42
 
46
43
  ```bash [yarn]
47
- yarn create nuxt@latest <project-name> -t v3
44
+ yarn create nuxt <project-name> -t v3
48
45
  ```
49
46
 
50
47
  ```bash [pnpm]
@@ -115,4 +112,4 @@ Well done! A browser window should automatically open for <http://localhost:3000
115
112
 
116
113
  Now that you've created your Nuxt project, you are ready to start building your application.
117
114
 
118
- :read-more{title="Nuxt Concepts" to="/docs/guide/concepts"}
115
+ :read-more{title="Nuxt Concepts" to="/docs/3.x/guide/concepts"}
@@ -4,11 +4,11 @@ description: Nuxt is configured with sensible defaults to make you productive.
4
4
  navigation.icon: i-lucide-cog
5
5
  ---
6
6
 
7
- By default, Nuxt is configured to cover most use cases. The [`nuxt.config.ts`](/docs/3.x/guide/directory-structure/nuxt-config) file can override or extend this default configuration.
7
+ By default, Nuxt is configured to cover most use cases. The [`nuxt.config.ts`](/docs/3.x/directory-structure/nuxt-config) file can override or extend this default configuration.
8
8
 
9
9
  ## Nuxt Configuration
10
10
 
11
- The [`nuxt.config.ts`](/docs/3.x/guide/directory-structure/nuxt-config) file is located at the root of a Nuxt project and can override or extend the application's behavior.
11
+ The [`nuxt.config.ts`](/docs/3.x/directory-structure/nuxt-config) file is located at the root of a Nuxt project and can override or extend the application's behavior.
12
12
 
13
13
  A minimal configuration file exports the `defineNuxtConfig` function containing an object with your configuration. The `defineNuxtConfig` helper is globally available without import.
14
14
 
@@ -20,7 +20,7 @@ export default defineNuxtConfig({
20
20
 
21
21
  This file will often be mentioned in the documentation, for example to add custom scripts, register modules or change rendering modes.
22
22
 
23
- ::read-more{to="/docs/api/configuration/nuxt-config"}
23
+ ::read-more{to="/docs/3.x/api/configuration/nuxt-config"}
24
24
  Every option is described in the **Configuration Reference**.
25
25
  ::
26
26
 
@@ -96,7 +96,7 @@ const runtimeConfig = useRuntimeConfig()
96
96
  </script>
97
97
  ```
98
98
 
99
- :read-more{to="/docs/guide/going-further/runtime-config"}
99
+ :read-more{to="/docs/3.x/guide/going-further/runtime-config"}
100
100
 
101
101
  ## App Configuration
102
102
 
@@ -124,7 +124,7 @@ const appConfig = useAppConfig()
124
124
  </script>
125
125
  ```
126
126
 
127
- :read-more{to="/docs/guide/directory-structure/app-config"}
127
+ :read-more{to="/docs/3.x/directory-structure/app-config"}
128
128
 
129
129
  ## `runtimeConfig` vs. `app.config`
130
130
 
@@ -133,37 +133,37 @@ As stated above, `runtimeConfig` and `app.config` are both used to expose variab
133
133
  - `runtimeConfig`: Private or public tokens that need to be specified after build using environment variables.
134
134
  - `app.config`: Public tokens that are determined at build time, website configuration such as theme variant, title and any project config that are not sensitive.
135
135
 
136
- Feature | `runtimeConfig` | `app.config`
137
- -------------------------------|------------------|-------------------
138
- Client Side | Hydrated | Bundled
139
- Environment Variables | ✅ Yes | ❌ No
140
- Reactive | ✅ Yes | ✅ Yes
141
- Types support | ✅ Partial | ✅ Yes
142
- Configuration per Request | ❌ No | ✅ Yes
143
- Hot Module Replacement | ❌ No | ✅ Yes
144
- Non primitive JS types | ❌ No | ✅ Yes
136
+ | Feature | `runtimeConfig` | `app.config` |
137
+ |---------------------------|-----------------|--------------|
138
+ | Client-side | Hydrated | Bundled |
139
+ | Environment variables | ✅ Yes | ❌ No |
140
+ | Reactive | ✅ Yes | ✅ Yes |
141
+ | Types support | ✅ Partial | ✅ Yes |
142
+ | Configuration per request | ❌ No | ✅ Yes |
143
+ | Hot module replacement | ❌ No | ✅ Yes |
144
+ | Non-primitive JS types | ❌ No | ✅ Yes |
145
145
 
146
146
  ## External Configuration Files
147
147
 
148
- Nuxt uses [`nuxt.config.ts`](/docs/3.x/guide/directory-structure/nuxt-config) file as the single source of truth for configurations and skips reading external configuration files. During the course of building your project, you may have a need to configure those. The following table highlights common configurations and, where applicable, how they can be configured with Nuxt.
148
+ Nuxt uses [`nuxt.config.ts`](/docs/3.x/directory-structure/nuxt-config) file as the single source of truth for configurations and skips reading external configuration files. During the course of building your project, you may have a need to configure those. The following table highlights common configurations and, where applicable, how they can be configured with Nuxt.
149
149
 
150
- Name | Config File | How To Configure
151
- ---------------------------------------------|---------------------------|-------------------------
152
- [Nitro](https://nitro.build) | ~~`nitro.config.ts`~~ | Use [`nitro`](/docs/3.x/api/nuxt-config#nitro) key in `nuxt.config`
153
- [PostCSS](https://postcss.org) | ~~`postcss.config.js`~~ | Use [`postcss`](/docs/3.x/api/nuxt-config#postcss) key in `nuxt.config`
154
- [Vite](https://vite.dev) | ~~`vite.config.ts`~~ | Use [`vite`](/docs/3.x/api/nuxt-config#vite) key in `nuxt.config`
155
- [webpack](https://webpack.js.org) | ~~`webpack.config.ts`~~ | Use [`webpack`](/docs/3.x/api/nuxt-config#webpack-1) key in `nuxt.config`
150
+ | Name | Config File | How To Configure |
151
+ |-----------------------------------|-------------------------|---------------------------------------------------------------------------|
152
+ | [Nitro](https://nitro.build) | ~~`nitro.config.ts`~~ | Use [`nitro`](/docs/3.x/api/nuxt-config#nitro) key in `nuxt.config` |
153
+ | [PostCSS](https://postcss.org) | ~~`postcss.config.js`~~ | Use [`postcss`](/docs/3.x/api/nuxt-config#postcss) key in `nuxt.config` |
154
+ | [Vite](https://vite.dev) | ~~`vite.config.ts`~~ | Use [`vite`](/docs/3.x/api/nuxt-config#vite) key in `nuxt.config` |
155
+ | [webpack](https://webpack.js.org) | ~~`webpack.config.ts`~~ | Use [`webpack`](/docs/3.x/api/nuxt-config#webpack-1) key in `nuxt.config` |
156
156
 
157
157
  Here is a list of other common config files:
158
158
 
159
- Name | Config File | How To Configure
160
- ---------------------------------------------|-------------------------|--------------------------
161
- [TypeScript](https://www.typescriptlang.org) | `tsconfig.json` | [More Info](/docs/3.x/guide/concepts/typescript#nuxttsconfigjson)
162
- [ESLint](https://eslint.org) | `eslint.config.js` | [More Info](https://eslint.org/docs/latest/use/configure/configuration-files)
163
- [Prettier](https://prettier.io) | `prettier.config.js` | [More Info](https://prettier.io/docs/en/configuration.html)
164
- [Stylelint](https://stylelint.io) | `stylelint.config.js` | [More Info](https://stylelint.io/user-guide/configure)
165
- [TailwindCSS](https://tailwindcss.com) | `tailwind.config.js` | [More Info](https://tailwindcss.nuxtjs.org/tailwindcss/configuration)
166
- [Vitest](https://vitest.dev) | `vitest.config.ts` | [More Info](https://vitest.dev/config/)
159
+ | Name | Config File | How To Configure |
160
+ |----------------------------------------------|-----------------------|-------------------------------------------------------------------------------|
161
+ | [TypeScript](https://www.typescriptlang.org) | `tsconfig.json` | [More Info](/docs/3.x/directory-structure/tsconfig) |
162
+ | [ESLint](https://eslint.org) | `eslint.config.js` | [More Info](https://eslint.org/docs/latest/use/configure/configuration-files) |
163
+ | [Prettier](https://prettier.io) | `prettier.config.js` | [More Info](https://prettier.io/docs/configuration.html) |
164
+ | [Stylelint](https://stylelint.io) | `stylelint.config.js` | [More Info](https://stylelint.io/user-guide/configure/) |
165
+ | [TailwindCSS](https://tailwindcss.com) | `tailwind.config.js` | [More Info](https://tailwindcss.nuxtjs.org/tailwindcss/configuration/) |
166
+ | [Vitest](https://vitest.dev) | `vitest.config.ts` | [More Info](https://vitest.dev/config/) |
167
167
 
168
168
  ## Vue Configuration
169
169
 
@@ -187,7 +187,7 @@ export default defineNuxtConfig({
187
187
  })
188
188
  ```
189
189
 
190
- :read-more{to="/docs/api/configuration/nuxt-config#vue"}
190
+ :read-more{to="/docs/3.x/api/configuration/nuxt-config#vue"}
191
191
 
192
192
  ### With webpack
193
193
 
@@ -205,7 +205,7 @@ export default defineNuxtConfig({
205
205
  })
206
206
  ```
207
207
 
208
- :read-more{to="/docs/api/configuration/nuxt-config#loaders"}
208
+ :read-more{to="/docs/3.x/api/configuration/nuxt-config#loaders"}
209
209
 
210
210
  ### Enabling Experimental Vue Features
211
211
 
@@ -223,4 +223,4 @@ export default defineNuxtConfig({
223
223
 
224
224
  Since Nuxt 3.9 and Vue 3.4, `reactivityTransform` has been moved from Vue to Vue Macros which has a [Nuxt integration](https://vue-macros.dev/guide/nuxt-integration.html).
225
225
 
226
- :read-more{to="/docs/api/configuration/nuxt-config#vue-1"}
226
+ :read-more{to="/docs/3.x/api/configuration/nuxt-config#vue-1"}
@@ -26,7 +26,7 @@ If you are familiar with Vue, you might wonder where `main.js` is (the file that
26
26
 
27
27
  ![Components are reusable pieces of UI](/assets/docs/getting-started/views/components.svg)
28
28
 
29
- Most components are reusable pieces of the user interface, like buttons and menus. In Nuxt, you can create these components in the [`components/`](/docs/3.x/guide/directory-structure/components) directory, and they will be automatically available across your application without having to explicitly import them.
29
+ Most components are reusable pieces of the user interface, like buttons and menus. In Nuxt, you can create these components in the [`components/`](/docs/3.x/directory-structure/components) directory, and they will be automatically available across your application without having to explicitly import them.
30
30
 
31
31
  ::code-group
32
32
 
@@ -55,9 +55,9 @@ Most components are reusable pieces of the user interface, like buttons and menu
55
55
 
56
56
  ![Pages are views tied to a specific route](/assets/docs/getting-started/views/pages.svg)
57
57
 
58
- Pages represent views for each specific route pattern. Every file in the [`pages/`](/docs/3.x/guide/directory-structure/pages) directory represents a different route displaying its content.
58
+ Pages represent views for each specific route pattern. Every file in the [`pages/`](/docs/3.x/directory-structure/pages) directory represents a different route displaying its content.
59
59
 
60
- To use pages, create `pages/index.vue` file and add `<NuxtPage />` component to the [`app.vue`](/docs/3.x/guide/directory-structure/app) (or remove `app.vue` for default entry). You can now create more pages and their corresponding routes by adding new files in the [`pages/`](/docs/3.x/guide/directory-structure/pages) directory.
60
+ To use pages, create an `pages/index.vue` file and add `<NuxtPage />` component to the [`app.vue`](/docs/3.x/directory-structure/app) (or remove `app.vue` for default entry). You can now create more pages and their corresponding routes by adding new files in the [`pages/`](/docs/3.x/directory-structure/pages) directory.
61
61
 
62
62
  ::code-group
63
63
 
@@ -82,7 +82,7 @@ To use pages, create `pages/index.vue` file and add `<NuxtPage />` component to
82
82
 
83
83
  ::
84
84
 
85
- :read-more{title="Routing Section" to="/docs/getting-started/routing"}
85
+ :read-more{title="Routing Section" to="/docs/3.x/getting-started/routing"}
86
86
 
87
87
  ## Layouts
88
88
 
@@ -91,7 +91,7 @@ To use pages, create `pages/index.vue` file and add `<NuxtPage />` component to
91
91
  Layouts are wrappers around pages that contain a common User Interface for several pages, such as header and footer displays. Layouts are Vue files using `<slot />` components to display the **page** content. The `layouts/default.vue` file will be used by default. Custom layouts can be set as part of your page metadata.
92
92
 
93
93
  ::note
94
- If you only have a single layout in your application, we recommend using [`app.vue`](/docs/3.x/guide/directory-structure/app) with [`<NuxtPage />`](/docs/3.x/api/components/nuxt-page) instead.
94
+ If you only have a single layout in your application, we recommend using [`app.vue`](/docs/3.x/directory-structure/app) with [`<NuxtPage />`](/docs/3.x/api/components/nuxt-page) instead.
95
95
  ::
96
96
 
97
97
  ::code-group
@@ -137,7 +137,7 @@ If you only have a single layout in your application, we recommend using [`app.v
137
137
 
138
138
  ::
139
139
 
140
- If you want to create more layouts and learn how to use them in your pages, find more information in the [Layouts section](/docs/3.x/guide/directory-structure/layouts).
140
+ If you want to create more layouts and learn how to use them in your pages, find more information in the [Layouts section](/docs/3.x/directory-structure/layouts).
141
141
 
142
142
  ## Advanced: Extending the HTML Template
143
143
 
@@ -148,7 +148,9 @@ If you only need to modify the `<head>`, you can refer to the [SEO and meta sect
148
148
  You can have full control over the HTML template by adding a Nitro plugin that registers a hook.
149
149
  The callback function of the `render:html` hook allows you to mutate the HTML before it is sent to the client.
150
150
 
151
- ```ts twoslash [server/plugins/extend-html.ts]
151
+ <!-- TODO: figure out how to use twoslash to inject types for a different context -->
152
+
153
+ ```ts [server/plugins/extend-html.ts]
152
154
  export default defineNitroPlugin((nitroApp) => {
153
155
  nitroApp.hooks.hook('render:html', (html, { event }) => {
154
156
  // This will be an object representation of the html template.
@@ -160,4 +162,4 @@ export default defineNitroPlugin((nitroApp) => {
160
162
  })
161
163
  ```
162
164
 
163
- :read-more{to="/docs/guide/going-further/hooks"}
165
+ :read-more{to="/docs/3.x/guide/going-further/hooks"}
@@ -6,14 +6,14 @@ navigation.icon: i-lucide-image
6
6
 
7
7
  Nuxt uses two directories to handle assets like stylesheets, fonts or images.
8
8
 
9
- - The [`public/`](/docs/3.x/guide/directory-structure/public) directory content is served at the server root as-is.
10
- - The [`assets/`](/docs/3.x/guide/directory-structure/assets) directory contains by convention every asset that you want the build tool (Vite or webpack) to process.
9
+ - The [`public/`](/docs/3.x/directory-structure/public) directory content is served at the server root as-is.
10
+ - The [`assets/`](/docs/3.x/directory-structure/assets) directory contains by convention every asset that you want the build tool (Vite or webpack) to process.
11
11
 
12
12
  ## Public Directory
13
13
 
14
- The [`public/`](/docs/3.x/guide/directory-structure/public) directory is used as a public server for static assets publicly available at a defined URL of your application.
14
+ The [`public/`](/docs/3.x/directory-structure/public) directory is used as a public server for static assets publicly available at a defined URL of your application.
15
15
 
16
- You can get a file in the [`public/`](/docs/3.x/guide/directory-structure/public) directory from your application's code or from a browser by the root URL `/`.
16
+ You can get a file in the [`public/`](/docs/3.x/directory-structure/public) directory from your application's code or from a browser by the root URL `/`.
17
17
 
18
18
  ### Example
19
19
 
@@ -30,11 +30,11 @@ For example, referencing an image file in the `public/img/` directory, available
30
30
 
31
31
  ## Assets Directory
32
32
 
33
- Nuxt uses [Vite](https://vite.dev/guide/assets.html) (default) or [webpack](https://webpack.js.org/guides/asset-management) to build and bundle your application. The main function of these build tools is to process JavaScript files, but they can be extended through [plugins](https://vite.dev/plugins) (for Vite) or [loaders](https://webpack.js.org/loaders) (for webpack) to process other kinds of assets, like stylesheets, fonts or SVGs. This step transforms the original file, mainly for performance or caching purposes (such as stylesheet minification or browser cache invalidation).
33
+ Nuxt uses [Vite](https://vite.dev/guide/assets) (default) or [webpack](https://webpack.js.org/guides/asset-management/) to build and bundle your application. The main function of these build tools is to process JavaScript files, but they can be extended through [plugins](https://vite.dev/plugins/) (for Vite) or [loaders](https://webpack.js.org/loaders/) (for webpack) to process other kinds of assets, like stylesheets, fonts or SVGs. This step transforms the original file, mainly for performance or caching purposes (such as stylesheet minification or browser cache invalidation).
34
34
 
35
- By convention, Nuxt uses the [`assets/`](/docs/3.x/guide/directory-structure/assets) directory to store these files but there is no auto-scan functionality for this directory, and you can use any other name for it.
35
+ By convention, Nuxt uses the [`assets/`](/docs/3.x/directory-structure/assets) directory to store these files but there is no auto-scan functionality for this directory, and you can use any other name for it.
36
36
 
37
- In your application's code, you can reference a file located in the [`assets/`](/docs/3.x/guide/directory-structure/assets) directory by using the `~/assets/` path.
37
+ In your application's code, you can reference a file located in the [`assets/`](/docs/3.x/directory-structure/assets) directory by using the `~/assets/` path.
38
38
 
39
39
  ### Example
40
40
 
@@ -50,5 +50,5 @@ For example, referencing an image file that will be processed if a build tool is
50
50
  ```
51
51
 
52
52
  ::note
53
- Nuxt won't serve files in the [`assets/`](/docs/3.x/guide/directory-structure/assets) directory at a static URL like `/assets/my-file.png`. If you need a static URL, use the [`public/`](#public-directory) directory.
53
+ Nuxt won't serve files in the [`assets/`](/docs/3.x/directory-structure/assets) directory at a static URL like `/assets/my-file.png`. If you need a static URL, use the [`public/`](/docs/3.x/getting-started/assets#public-directory) directory.
54
54
  ::
@@ -9,12 +9,12 @@ You can use CSS preprocessors, CSS frameworks, UI libraries and Nuxt modules to
9
9
 
10
10
  ## Local Stylesheets
11
11
 
12
- If you're writing local stylesheets, the natural place to put them is the [`assets/` directory](/docs/3.x/guide/directory-structure/assets).
12
+ If you're writing local stylesheets, the natural place to put them is the [`assets/` directory](/docs/3.x/directory-structure/assets).
13
13
 
14
14
  ### Importing Within Components
15
15
 
16
16
  You can import stylesheets in your pages, layouts and components directly.
17
- You can use a JavaScript import, or a CSS [`@import` statement](https://developer.mozilla.org/en-US/docs/Web/CSS/@import).
17
+ You can use a JavaScript import, or a CSS [`@import` statement](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@import).
18
18
 
19
19
  ```vue [pages/index.vue]
20
20
  <script>
@@ -37,7 +37,7 @@ The stylesheets will be inlined in the HTML rendered by Nuxt.
37
37
  ### The CSS Property
38
38
 
39
39
  You can also use the `css` property in the Nuxt configuration.
40
- The natural place for your stylesheets is the [`assets/` directory](/docs/3.x/guide/directory-structure/assets). You can then reference its path and Nuxt will include it to all the pages of your application.
40
+ The natural place for your stylesheets is the [`assets/` directory](/docs/3.x/directory-structure/assets). You can then reference its path and Nuxt will include it to all the pages of your application.
41
41
 
42
42
  ```ts [nuxt.config.ts]
43
43
  export default defineNuxtConfig({
@@ -95,6 +95,10 @@ pnpm install animate.css
95
95
  bun install animate.css
96
96
  ```
97
97
 
98
+ ```bash [deno]
99
+ deno install npm:animate.css
100
+ ```
101
+
98
102
  ::
99
103
 
100
104
  Then you can reference it directly in your pages, layouts and components:
@@ -137,7 +141,7 @@ export default defineNuxtConfig({
137
141
 
138
142
  You can use the useHead composable to dynamically set a value in your head in your code.
139
143
 
140
- :read-more{to="/docs/api/composables/use-head"}
144
+ :read-more{to="/docs/3.x/api/composables/use-head"}
141
145
 
142
146
  ```ts twoslash
143
147
  useHead({
@@ -153,7 +157,9 @@ If you need more advanced control, you can intercept the rendered html with a ho
153
157
 
154
158
  Create a plugin in `~/server/plugins/my-plugin.ts` like this:
155
159
 
156
- ```ts twoslash [server/plugins/my-plugin.ts]
160
+ <!-- TODO: figure out how to use twoslash to inject types for a different context -->
161
+
162
+ ```ts [server/plugins/my-plugin.ts]
157
163
  export default defineNitroPlugin((nitro) => {
158
164
  nitro.hooks.hook('render:html', (html) => {
159
165
  html.head.push('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css">')
@@ -161,7 +167,7 @@ export default defineNitroPlugin((nitro) => {
161
167
  })
162
168
  ```
163
169
 
164
- External stylesheets are render-blocking resources: they must be loaded and processed before the browser renders the page. Web pages that contain unnecessarily large styles take longer to render. You can read more about it on [web.dev](https://web.dev/defer-non-critical-css).
170
+ External stylesheets are render-blocking resources: they must be loaded and processed before the browser renders the page. Web pages that contain unnecessarily large styles take longer to render. You can read more about it on [web.dev](https://web.dev/articles/defer-non-critical-css).
165
171
 
166
172
  ## Using Preprocessors
167
173
 
@@ -204,7 +210,7 @@ export default defineNuxtConfig({
204
210
  In both cases, the compiled stylesheets will be inlined in the HTML rendered by Nuxt.
205
211
  ::
206
212
 
207
- If you need to inject code in pre-processed files, like a [Sass partial](https://sass-lang.com/documentation/at-rules/use#partials) with color variables, you can do so with the Vite [preprocessors options](https://vite.dev/config/shared-options.html#css-preprocessoroptions).
213
+ If you need to inject code in pre-processed files, like a [Sass partial](https://sass-lang.com/documentation/at-rules/use/#partials) with color variables, you can do so with the Vite [preprocessors options](https://vite.dev/config/shared-options#css-preprocessoroptions).
208
214
 
209
215
  Create some partials in your `assets` directory:
210
216
 
@@ -256,11 +262,11 @@ export default defineNuxtConfig({
256
262
 
257
263
  ::
258
264
 
259
- Nuxt uses Vite by default. If you wish to use webpack instead, refer to each preprocessor loader [documentation](https://webpack.js.org/loaders/sass-loader).
265
+ Nuxt uses Vite by default. If you wish to use webpack instead, refer to each preprocessor loader [documentation](https://webpack.js.org/loaders/sass-loader/).
260
266
 
261
267
  ### Preprocessor Workers (Experimental)
262
268
 
263
- Vite has made available an [experimental option](https://vite.dev/config/shared-options.html#css-preprocessormaxworkers) which can speed up using preprocessors.
269
+ Vite has made available an [experimental option](https://vite.dev/config/shared-options#css-preprocessormaxworkers) which can speed up using preprocessors.
264
270
 
265
271
  You can enable this in your `nuxt.config`:
266
272
 
@@ -282,7 +288,7 @@ This is an experimental option and you should refer to the Vite documentation an
282
288
 
283
289
  One of the best things about Vue and SFC is how great it is at naturally dealing with styling. You can directly write CSS or preprocessor code in the style block of your components file, therefore you will have fantastic developer experience without having to use something like CSS-in-JS. However if you wish to use CSS-in-JS, you can find 3rd party libraries and modules that support it, such as [pinceau](https://github.com/Tahul/pinceau).
284
290
 
285
- You can refer to the [Vue docs](https://vuejs.org/api/sfc-css-features.html) for a comprehensive reference about styling components in SFC.
291
+ You can refer to the [Vue docs](https://vuejs.org/api/sfc-css-features) for a comprehensive reference about styling components in SFC.
286
292
 
287
293
  ### Class And Style Bindings
288
294
 
@@ -352,7 +358,7 @@ const styleObject = reactive({ color: 'red', fontSize: '13px' })
352
358
 
353
359
  ::
354
360
 
355
- Refer to the [Vue docs](https://vuejs.org/guide/essentials/class-and-style.html) for more information.
361
+ Refer to the [Vue docs](https://vuejs.org/guide/essentials/class-and-style) for more information.
356
362
 
357
363
  ### Dynamic Styles With `v-bind`
358
364
 
@@ -445,7 +451,7 @@ SFC style blocks support preprocessor syntax. Vite comes with built-in support f
445
451
 
446
452
  ::
447
453
 
448
- You can refer to the [Vite CSS docs](https://vite.dev/guide/features.html#css) and the [@vitejs/plugin-vue docs](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue).
454
+ You can refer to the [Vite CSS docs](https://vite.dev/guide/features#css) and the [@vitejs/plugin-vue docs](https://github.com/vitejs/vite-plugin-vue/tree/main/packages/plugin-vue).
449
455
  For webpack users, refer to the [vue loader docs](https://vue-loader.vuejs.org).
450
456
 
451
457
  ## Using PostCSS
@@ -476,7 +482,7 @@ By default, Nuxt comes with the following plugins already pre-configured:
476
482
  - [postcss-import](https://github.com/postcss/postcss-import): Improves the `@import` rule
477
483
  - [postcss-url](https://github.com/postcss/postcss-url): Transforms `url()` statements
478
484
  - [autoprefixer](https://github.com/postcss/autoprefixer): Automatically adds vendor prefixes
479
- - [cssnano](https://cssnano.github.io/cssnano): Minification and purge
485
+ - [cssnano](https://cssnano.github.io/cssnano/): Minification and purge
480
486
 
481
487
  ## Leveraging Layouts For Multiple Styles
482
488
 
@@ -498,7 +504,7 @@ Use different styles for different layouts.
498
504
  </style>
499
505
  ```
500
506
 
501
- :read-more{to="/docs/guide/directory-structure/layouts"}
507
+ :read-more{to="/docs/3.x/directory-structure/layouts"}
502
508
 
503
509
  ## Third Party Libraries And Modules
504
510
 
@@ -515,7 +521,7 @@ Here are a few modules to help you get started:
515
521
  - [Nuxt UI](https://ui.nuxt.com): A UI Library for Modern Web Apps
516
522
  - [Panda CSS](https://panda-css.com/docs/installation/nuxt): CSS-in-JS engine that generates atomic CSS at build time
517
523
 
518
- Nuxt modules provide you with a good developer experience out of the box, but remember that if your favorite tool doesn't have a module, it doesn't mean that you can't use it with Nuxt! You can configure it yourself for your own project. Depending on the tool, you might need to use a [Nuxt plugin](/docs/3.x/guide/directory-structure/plugins) and/or [make your own module](/docs/3.x/guide/going-further/modules). Share them with the [community](/modules) if you do!
524
+ Nuxt modules provide you with a good developer experience out of the box, but remember that if your favorite tool doesn't have a module, it doesn't mean that you can't use it with Nuxt! You can configure it yourself for your own project. Depending on the tool, you might need to use a [Nuxt plugin](/docs/3.x/directory-structure/plugins) and/or [make your own module](/docs/3.x/guide/modules). Share them with the [community](/modules) if you do!
519
525
 
520
526
  ### Easily Load Webfonts
521
527
 
@@ -529,11 +535,11 @@ If you are using [UnoCSS](https://unocss.dev/integrations/nuxt), note that it co
529
535
 
530
536
  Nuxt comes with the same `<Transition>` element that Vue has, and also has support for the experimental [View Transitions API](/docs/3.x/getting-started/transitions#view-transitions-api-experimental).
531
537
 
532
- :read-more{to="/docs/getting-started/transitions"}
538
+ :read-more{to="/docs/3.x/getting-started/transitions"}
533
539
 
534
540
  ### Font Advanced Optimization
535
541
 
536
- We would recommend using [Fontaine](https://github.com/nuxt-modules/fontaine) to reduce your [CLS](https://web.dev/cls). If you need something more advanced, consider creating a Nuxt module to extend the build process or the Nuxt runtime.
542
+ We would recommend using [Fontaine](https://github.com/nuxt-modules/fontaine) to reduce your [CLS](https://web.dev/articles/cls). If you need something more advanced, consider creating a Nuxt module to extend the build process or the Nuxt runtime.
537
543
 
538
544
  ::tip
539
545
  Always remember to take advantage of the various tools and techniques available in the Web ecosystem at large to make styling your application easier and more efficient. Whether you're using native CSS, a preprocessor, postcss, a UI library or a module, Nuxt has got you covered. Happy styling!
@@ -549,7 +555,7 @@ You can do the following to speed-up the download of your global CSS files:
549
555
  - Host your assets on the same domain (do not use a different subdomain)
550
556
 
551
557
  Most of these things should be done for you automatically if you're using modern platforms like Cloudflare, Netlify or Vercel.
552
- You can find an LCP optimization guide on [web.dev](https://web.dev/optimize-lcp).
558
+ You can find an LCP optimization guide on [web.dev](https://web.dev/articles/optimize-lcp).
553
559
 
554
560
  If all of your CSS is inlined by Nuxt, you can (experimentally) completely stop external CSS files from being referenced in your rendered HTML.
555
561
  You can achieve that with a hook, that you can place in a module, or in your Nuxt configuration file.
@@ -4,11 +4,11 @@ description: Nuxt file-system routing creates a route for every file in the page
4
4
  navigation.icon: i-lucide-milestone
5
5
  ---
6
6
 
7
- One core feature of Nuxt is the file system router. Every Vue file inside the [`pages/`](/docs/3.x/guide/directory-structure/pages) directory creates a corresponding URL (or route) that displays the contents of the file. By using dynamic imports for each page, Nuxt leverages code-splitting to ship the minimum amount of JavaScript for the requested route.
7
+ One core feature of Nuxt is the file system router. Every Vue file inside the [`pages/`](/docs/3.x/directory-structure/pages) directory creates a corresponding URL (or route) that displays the contents of the file. By using dynamic imports for each page, Nuxt leverages code-splitting to ship the minimum amount of JavaScript for the requested route.
8
8
 
9
9
  ## Pages
10
10
 
11
- Nuxt routing is based on [vue-router](https://router.vuejs.org) and generates the routes from every component created in the [`pages/` directory](/docs/3.x/guide/directory-structure/pages), based on their filename.
11
+ Nuxt routing is based on [vue-router](https://router.vuejs.org) and generates the routes from every component created in the [`pages/` directory](/docs/3.x/directory-structure/pages), based on their filename.
12
12
 
13
13
  This file system routing uses naming conventions to create dynamic and nested routes:
14
14
 
@@ -43,7 +43,7 @@ This file system routing uses naming conventions to create dynamic and nested ro
43
43
 
44
44
  ::
45
45
 
46
- :read-more{to="/docs/guide/directory-structure/pages"}
46
+ :read-more{to="/docs/3.x/directory-structure/pages"}
47
47
 
48
48
  ## Navigation
49
49
 
@@ -65,7 +65,7 @@ When a [`<NuxtLink>`](/docs/3.x/api/components/nuxt-link) enters the viewport on
65
65
  </template>
66
66
  ```
67
67
 
68
- :read-more{to="/docs/api/components/nuxt-link"}
68
+ :read-more{to="/docs/3.x/api/components/nuxt-link"}
69
69
 
70
70
  ## Route Parameters
71
71
 
@@ -80,7 +80,7 @@ console.log(route.params.id)
80
80
  </script>
81
81
  ```
82
82
 
83
- :read-more{to="/docs/api/composables/use-route"}
83
+ :read-more{to="/docs/3.x/api/composables/use-route"}
84
84
 
85
85
  ## Route Middleware
86
86
 
@@ -91,14 +91,14 @@ Route middleware runs within the Vue part of your Nuxt app. Despite the similar
91
91
  ::
92
92
 
93
93
  ::important
94
- Route middleware does **not** run for server routes (e.g. `/api/*`) or other server requests. To apply middleware to these requests, use [server middleware](/docs/3.x/guide/directory-structure/server#server-middleware) instead.
94
+ Route middleware does **not** run for server routes (e.g. `/api/*`) or other server requests. To apply middleware to these requests, use [server middleware](/docs/3.x/directory-structure/server#server-middleware) instead.
95
95
  ::
96
96
 
97
97
  There are three kinds of route middleware:
98
98
 
99
99
  1. Anonymous (or inline) route middleware, which are defined directly in the pages where they are used.
100
- 2. Named route middleware, which are placed in the [`middleware/`](/docs/3.x/guide/directory-structure/middleware) directory and will be automatically loaded via asynchronous import when used on a page. (**Note**: The route middleware name is normalized to kebab-case, so `someMiddleware` becomes `some-middleware`.)
101
- 3. Global route middleware, which are placed in the [`middleware/`](/docs/3.x/guide/directory-structure/middleware) directory (with a `.global` suffix) and will be automatically run on every route change.
100
+ 2. Named route middleware, which are placed in the [`middleware/`](/docs/3.x/directory-structure/middleware) directory and will be automatically loaded via asynchronous import when used on a page. (**Note**: The route middleware name is normalized to kebab-case, so `someMiddleware` becomes `some-middleware`.)
101
+ 3. Global route middleware, which are placed in the [`middleware/`](/docs/3.x/directory-structure/middleware) directory (with a `.global` suffix) and will be automatically run on every route change.
102
102
 
103
103
  Example of an `auth` middleware protecting the `/dashboard` page:
104
104
 
@@ -129,13 +129,13 @@ definePageMeta({
129
129
 
130
130
  ::
131
131
 
132
- :read-more{to="/docs/guide/directory-structure/middleware"}
132
+ :read-more{to="/docs/3.x/directory-structure/middleware"}
133
133
 
134
134
  ## Route Validation
135
135
 
136
136
  Nuxt offers route validation via the `validate` property in [`definePageMeta()`](/docs/3.x/api/utils/define-page-meta) in each page you wish to validate.
137
137
 
138
- The `validate` property accepts the `route` as an argument. You can return a boolean value to determine whether or not this is a valid route to be rendered with this page. If you return `false`, this will cause a 404 error. You can also directly return an object with `statusCode`/`statusMessage` to customize the error returned.
138
+ The `validate` property accepts the `route` as an argument. You can return a boolean value to determine whether or not this is a valid route to be rendered with this page. If you return `false`, this will cause a 404 error. You can also directly return an object with `status`/`statusText` to customize the error returned.
139
139
 
140
140
  If you have a more complex use case, then you can use anonymous route middleware instead.
141
141
 
@@ -150,4 +150,4 @@ definePageMeta({
150
150
  </script>
151
151
  ```
152
152
 
153
- :read-more{to="/docs/api/utils/define-page-meta"}
153
+ :read-more{to="/docs/3.x/api/utils/define-page-meta"}
@@ -9,7 +9,7 @@ and numerous configuration options to manage your app's head and SEO meta tags.
9
9
 
10
10
  ## Nuxt Config
11
11
 
12
- Providing an [`app.head`](/docs/3.x/api/nuxt-config#head) property in your [`nuxt.config.ts`](/docs/3.x/guide/directory-structure/nuxt-config) allows you to statically customize the head for your entire app.
12
+ Providing an [`app.head`](/docs/3.x/api/nuxt-config#head) property in your [`nuxt.config.ts`](/docs/3.x/directory-structure/nuxt-config) allows you to statically customize the head for your entire app.
13
13
 
14
14
  ::important
15
15
  This method does not allow you to provide reactive data. We recommend using `useHead()` in `app.vue`.
@@ -33,7 +33,7 @@ export default defineNuxtConfig({
33
33
  })
34
34
  ```
35
35
 
36
- You can also provide any of the keys listed below in [Types](#types).
36
+ You can also provide any of the keys listed below in [Types](/docs/3.x/getting-started/seo-meta#types).
37
37
 
38
38
  ### Defaults Tags
39
39
 
@@ -96,7 +96,7 @@ useSeoMeta({
96
96
  </script>
97
97
  ```
98
98
 
99
- :read-more{to="/docs/api/composables/use-seo-meta"}
99
+ :read-more{to="/docs/3.x/api/composables/use-seo-meta"}
100
100
 
101
101
  ## Components
102
102
 
@@ -134,6 +134,10 @@ const title = ref('Hello World')
134
134
 
135
135
  It's suggested to wrap your components in either a `<Head>` or `<Html>` components as tags will be deduped more intuitively.
136
136
 
137
+ ::warning
138
+ If you need to duplicate tags across client-server boundaries, apply a `key` attribute on the `<Head>` component.
139
+ ::
140
+
137
141
  ## Types
138
142
 
139
143
  Below are the non-reactive types used for [`useHead`](/docs/3.x/api/composables/use-head), [`app.head`](/docs/3.x/api/nuxt-config#head) and components.
@@ -273,7 +277,7 @@ useHead({
273
277
 
274
278
  ### With `definePageMeta`
275
279
 
276
- Within your [`pages/` directory](/docs/3.x/guide/directory-structure/pages), you can use `definePageMeta` along with [`useHead`](/docs/3.x/api/composables/use-head) to set metadata based on the current route.
280
+ Within your [`pages/` directory](/docs/3.x/directory-structure/pages), you can use `definePageMeta` along with [`useHead`](/docs/3.x/api/composables/use-head) to set metadata based on the current route.
277
281
 
278
282
  For example, you can first set the current page title (this is extracted at build time via a macro, so it can't be set dynamically):
279
283
 
@@ -297,9 +301,9 @@ useHead({
297
301
  </script>
298
302
  ```
299
303
 
300
- :link-example{to="/docs/examples/features/meta-tags"}
304
+ :link-example{to="/docs/3.x/examples/features/meta-tags"}
301
305
 
302
- :read-more{to="/docs/guide/directory-structure/pages/#page-metadata"}
306
+ :read-more{to="/docs/3.x/directory-structure/pages/#page-metadata"}
303
307
 
304
308
  ### Dynamic Title
305
309