@nuxt/docs 4.2.1 → 4.2.2

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 (230) hide show
  1. package/1.getting-started/01.introduction.md +1 -1
  2. package/1.getting-started/03.configuration.md +27 -27
  3. package/1.getting-started/04.views.md +5 -5
  4. package/1.getting-started/05.assets.md +7 -7
  5. package/1.getting-started/06.styling.md +5 -5
  6. package/1.getting-started/07.routing.md +7 -7
  7. package/1.getting-started/08.seo-meta.md +3 -3
  8. package/1.getting-started/09.transitions.md +6 -6
  9. package/1.getting-started/10.data-fetching.md +2 -2
  10. package/1.getting-started/11.state-management.md +2 -2
  11. package/1.getting-started/12.error-handling.md +3 -3
  12. package/1.getting-started/13.server.md +2 -2
  13. package/1.getting-started/14.layers.md +3 -3
  14. package/1.getting-started/16.deployment.md +1 -1
  15. package/1.getting-started/17.testing.md +32 -1
  16. package/1.getting-started/18.upgrade.md +23 -23
  17. package/{2.guide/1.directory-structure → 2.directory-structure}/0.nuxt.md +1 -1
  18. package/{2.guide/1.directory-structure → 2.directory-structure}/0.output.md +1 -1
  19. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.assets.md +2 -2
  20. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.components.md +2 -2
  21. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.composables.md +2 -2
  22. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.layouts.md +3 -3
  23. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.middleware.md +1 -1
  24. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.pages.md +7 -7
  25. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.plugins.md +2 -2
  26. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/1.utils.md +3 -3
  27. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/3.app.md +4 -4
  28. package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/3.error.md +1 -3
  29. package/{2.guide/1.directory-structure → 2.directory-structure}/1.content.md +2 -2
  30. package/{2.guide/1.directory-structure → 2.directory-structure}/1.modules.md +1 -1
  31. package/{2.guide/1.directory-structure → 2.directory-structure}/1.node_modules.md +1 -1
  32. package/{2.guide/1.directory-structure → 2.directory-structure}/1.server.md +3 -3
  33. package/{2.guide/1.directory-structure → 2.directory-structure}/1.shared.md +3 -3
  34. package/{2.guide/1.directory-structure → 2.directory-structure}/2.env.md +2 -2
  35. package/{2.guide/1.directory-structure → 2.directory-structure}/2.nuxtignore.md +1 -1
  36. package/{2.guide/1.directory-structure → 2.directory-structure}/2.nuxtrc.md +1 -1
  37. package/{2.guide/1.directory-structure → 2.directory-structure}/3.nuxt-config.md +1 -1
  38. package/{2.guide/1.directory-structure → 2.directory-structure}/3.package.md +1 -1
  39. package/2.directory-structure/index.md +61 -0
  40. package/{2.guide → 3.guide}/0.index.md +4 -7
  41. package/{2.guide/2.concepts/3.rendering.md → 3.guide/1.concepts/1.rendering.md} +1 -27
  42. package/{2.guide/2.concepts/2.vuejs-development.md → 3.guide/1.concepts/10.vuejs-development.md} +4 -3
  43. package/{2.guide/2.concepts/10.nuxt-lifecycle.md → 3.guide/1.concepts/2.nuxt-lifecycle.md} +32 -25
  44. package/{2.guide/2.concepts/1.auto-imports.md → 3.guide/1.concepts/3.auto-imports.md} +5 -5
  45. package/{2.guide/2.concepts → 3.guide/1.concepts}/4.server-engine.md +3 -3
  46. package/{2.guide/2.concepts → 3.guide/1.concepts}/5.modules.md +1 -1
  47. package/{2.guide/2.concepts → 3.guide/1.concepts}/7.esm.md +1 -0
  48. package/{2.guide/2.concepts → 3.guide/1.concepts}/8.typescript.md +4 -4
  49. package/{2.guide/5.best-practices → 3.guide/2.best-practices}/performance.md +2 -2
  50. package/3.guide/3.ai/.navigation.yml +3 -0
  51. package/3.guide/3.ai/1.mcp.md +255 -0
  52. package/3.guide/3.ai/2.llms-txt.md +65 -0
  53. package/{2.guide → 3.guide}/4.recipes/1.custom-routing.md +1 -1
  54. package/{2.guide → 3.guide}/4.recipes/2.vite-plugin.md +1 -1
  55. package/{2.guide → 3.guide}/4.recipes/3.custom-usefetch.md +1 -1
  56. package/{2.guide → 3.guide}/4.recipes/4.sessions-and-authentication.md +1 -1
  57. package/{2.guide/3.going-further → 3.guide/5.going-further}/1.events.md +2 -3
  58. package/{2.guide/3.going-further → 3.guide/5.going-further}/1.experimental-features.md +4 -4
  59. package/{2.guide/3.going-further → 3.guide/5.going-further}/1.internals.md +3 -2
  60. package/{2.guide/3.going-further → 3.guide/5.going-further}/10.runtime-config.md +2 -2
  61. package/{2.guide/3.going-further → 3.guide/5.going-further}/2.hooks.md +2 -2
  62. package/{2.guide/3.going-further → 3.guide/5.going-further}/3.modules.md +2 -2
  63. package/{2.guide/3.going-further → 3.guide/5.going-further}/6.nuxt-app.md +3 -3
  64. package/{2.guide/3.going-further → 3.guide/5.going-further}/7.layers.md +12 -12
  65. package/{3.api → 4.api}/1.components/12.nuxt-route-announcer.md +1 -3
  66. package/{3.api → 4.api}/1.components/13.nuxt-time.md +0 -2
  67. package/{3.api → 4.api}/1.components/2.nuxt-page.md +2 -2
  68. package/{3.api → 4.api}/1.components/3.nuxt-layout.md +5 -5
  69. package/{3.api → 4.api}/1.components/5.nuxt-loading-indicator.md +1 -1
  70. package/{3.api → 4.api}/1.components/7.nuxt-welcome.md +2 -2
  71. package/{3.api → 4.api}/2.composables/use-app-config.md +1 -1
  72. package/4.api/2.composables/use-cookie.md +183 -0
  73. package/{3.api → 4.api}/2.composables/use-fetch.md +31 -31
  74. package/{3.api → 4.api}/2.composables/use-lazy-fetch.md +8 -8
  75. package/{3.api → 4.api}/2.composables/use-nuxt-app.md +4 -4
  76. package/{3.api → 4.api}/2.composables/use-response-header.md +1 -1
  77. package/{3.api → 4.api}/2.composables/use-route-announcer.md +0 -2
  78. package/{3.api → 4.api}/2.composables/use-route.md +1 -1
  79. package/{3.api → 4.api}/2.composables/use-router.md +2 -2
  80. package/{3.api → 4.api}/2.composables/use-runtime-config.md +1 -1
  81. package/{3.api → 4.api}/3.utils/$fetch.md +1 -1
  82. package/{3.api → 4.api}/3.utils/abort-navigation.md +1 -1
  83. package/{3.api → 4.api}/3.utils/add-route-middleware.md +1 -1
  84. package/{3.api → 4.api}/3.utils/call-once.md +0 -2
  85. package/{3.api → 4.api}/3.utils/define-nuxt-plugin.md +12 -12
  86. package/{3.api → 4.api}/3.utils/define-nuxt-route-middleware.md +1 -1
  87. package/{3.api → 4.api}/3.utils/define-page-meta.md +6 -6
  88. package/{3.api → 4.api}/3.utils/navigate-to.md +10 -10
  89. package/{3.api → 4.api}/3.utils/refresh-cookie.md +0 -2
  90. package/{3.api → 4.api}/3.utils/update-app-config.md +2 -2
  91. package/{3.api → 4.api}/4.commands/add.md +10 -10
  92. package/4.api/4.commands/analyze.md +42 -0
  93. package/4.api/4.commands/build-module.md +42 -0
  94. package/4.api/4.commands/build.md +47 -0
  95. package/{3.api → 4.api}/4.commands/cleanup.md +6 -6
  96. package/4.api/4.commands/dev.md +60 -0
  97. package/{3.api → 4.api}/4.commands/devtools.md +7 -7
  98. package/4.api/4.commands/generate.md +42 -0
  99. package/4.api/4.commands/info.md +33 -0
  100. package/4.api/4.commands/init.md +50 -0
  101. package/4.api/4.commands/module.md +84 -0
  102. package/4.api/4.commands/prepare.md +41 -0
  103. package/4.api/4.commands/preview.md +44 -0
  104. package/4.api/4.commands/test.md +40 -0
  105. package/4.api/4.commands/typecheck.md +44 -0
  106. package/4.api/4.commands/upgrade.md +37 -0
  107. package/{3.api → 4.api}/5.kit/1.modules.md +16 -16
  108. package/{3.api → 4.api}/5.kit/10.templates.md +23 -23
  109. package/{3.api → 4.api}/5.kit/11.nitro.md +35 -35
  110. package/{3.api → 4.api}/5.kit/14.builder.md +15 -15
  111. package/{3.api → 4.api}/5.kit/16.layers.md +12 -12
  112. package/{3.api → 4.api}/5.kit/2.programmatic.md +2 -2
  113. package/{3.api → 4.api}/5.kit/4.autoimports.md +18 -18
  114. package/4.api/5.kit/5.components.md +146 -0
  115. package/4.api/6.advanced/1.hooks.md +105 -0
  116. package/{3.api → 4.api}/6.nuxt-config.md +5 -4
  117. package/5.community/6.roadmap.md +25 -25
  118. package/5.community/7.changelog.md +10 -0
  119. package/6.bridge/1.overview.md +1 -1
  120. package/6.bridge/2.typescript.md +1 -1
  121. package/6.bridge/3.bridge-composition-api.md +1 -1
  122. package/6.bridge/4.plugins-and-middleware.md +2 -2
  123. package/7.migration/11.server.md +1 -1
  124. package/7.migration/2.configuration.md +2 -2
  125. package/7.migration/20.module-authors.md +1 -1
  126. package/7.migration/3.auto-imports.md +1 -1
  127. package/7.migration/5.plugins-and-middleware.md +2 -2
  128. package/7.migration/6.pages-and-layouts.md +6 -6
  129. package/package.json +1 -1
  130. package/3.api/2.composables/use-cookie.md +0 -183
  131. package/3.api/4.commands/analyze.md +0 -42
  132. package/3.api/4.commands/build-module.md +0 -42
  133. package/3.api/4.commands/build.md +0 -47
  134. package/3.api/4.commands/dev.md +0 -60
  135. package/3.api/4.commands/generate.md +0 -42
  136. package/3.api/4.commands/info.md +0 -33
  137. package/3.api/4.commands/init.md +0 -50
  138. package/3.api/4.commands/module.md +0 -84
  139. package/3.api/4.commands/prepare.md +0 -41
  140. package/3.api/4.commands/preview.md +0 -44
  141. package/3.api/4.commands/test.md +0 -40
  142. package/3.api/4.commands/typecheck.md +0 -44
  143. package/3.api/4.commands/upgrade.md +0 -37
  144. package/3.api/5.kit/5.components.md +0 -146
  145. package/3.api/6.advanced/1.hooks.md +0 -105
  146. /package/{2.guide/1.directory-structure → 2.directory-structure}/.navigation.yml +0 -0
  147. /package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/.navigation.yml +0 -0
  148. /package/{2.guide/1.directory-structure → 2.directory-structure}/1.app/3.app-config.md +0 -0
  149. /package/{2.guide/1.directory-structure → 2.directory-structure}/1.public.md +0 -0
  150. /package/{2.guide/1.directory-structure → 2.directory-structure}/2.gitignore.md +0 -0
  151. /package/{2.guide/1.directory-structure → 2.directory-structure}/3.tsconfig.md +0 -0
  152. /package/{2.guide → 3.guide}/.navigation.yml +0 -0
  153. /package/{2.guide/2.concepts → 3.guide/1.concepts}/.navigation.yml +0 -0
  154. /package/{2.guide/2.concepts → 3.guide/1.concepts}/9.code-style.md +0 -0
  155. /package/{2.guide/5.best-practices → 3.guide/2.best-practices}/.navigation.yml +0 -0
  156. /package/{2.guide/5.best-practices → 3.guide/2.best-practices}/hydration.md +0 -0
  157. /package/{2.guide/5.best-practices → 3.guide/2.best-practices}/plugins.md +0 -0
  158. /package/{2.guide → 3.guide}/4.recipes/.navigation.yml +0 -0
  159. /package/{2.guide/3.going-further → 3.guide/5.going-further}/.navigation.yml +0 -0
  160. /package/{2.guide/3.going-further → 3.guide/5.going-further}/1.features.md +0 -0
  161. /package/{2.guide/3.going-further → 3.guide/5.going-further}/11.nightly-release-channel.md +0 -0
  162. /package/{2.guide/3.going-further → 3.guide/5.going-further}/4.kit.md +0 -0
  163. /package/{2.guide/3.going-further → 3.guide/5.going-further}/9.debugging.md +0 -0
  164. /package/{2.guide/3.going-further → 3.guide/5.going-further}/index.md +0 -0
  165. /package/{3.api → 4.api}/.navigation.yml +0 -0
  166. /package/{3.api → 4.api}/1.components/.navigation.yml +0 -0
  167. /package/{3.api → 4.api}/1.components/1.client-only.md +0 -0
  168. /package/{3.api → 4.api}/1.components/1.dev-only.md +0 -0
  169. /package/{3.api → 4.api}/1.components/1.nuxt-client-fallback.md +0 -0
  170. /package/{3.api → 4.api}/1.components/10.nuxt-picture.md +0 -0
  171. /package/{3.api → 4.api}/1.components/11.teleports.md +0 -0
  172. /package/{3.api → 4.api}/1.components/4.nuxt-link.md +0 -0
  173. /package/{3.api → 4.api}/1.components/6.nuxt-error-boundary.md +0 -0
  174. /package/{3.api → 4.api}/1.components/8.nuxt-island.md +0 -0
  175. /package/{3.api → 4.api}/1.components/9.nuxt-img.md +0 -0
  176. /package/{3.api → 4.api}/2.composables/.navigation.yml +0 -0
  177. /package/{3.api → 4.api}/2.composables/on-prehydrate.md +0 -0
  178. /package/{3.api → 4.api}/2.composables/use-async-data.md +0 -0
  179. /package/{3.api → 4.api}/2.composables/use-error.md +0 -0
  180. /package/{3.api → 4.api}/2.composables/use-head-safe.md +0 -0
  181. /package/{3.api → 4.api}/2.composables/use-head.md +0 -0
  182. /package/{3.api → 4.api}/2.composables/use-hydration.md +0 -0
  183. /package/{3.api → 4.api}/2.composables/use-lazy-async-data.md +0 -0
  184. /package/{3.api → 4.api}/2.composables/use-loading-indicator.md +0 -0
  185. /package/{3.api → 4.api}/2.composables/use-nuxt-data.md +0 -0
  186. /package/{3.api → 4.api}/2.composables/use-preview-mode.md +0 -0
  187. /package/{3.api → 4.api}/2.composables/use-request-event.md +0 -0
  188. /package/{3.api → 4.api}/2.composables/use-request-fetch.md +0 -0
  189. /package/{3.api → 4.api}/2.composables/use-request-header.md +0 -0
  190. /package/{3.api → 4.api}/2.composables/use-request-headers.md +0 -0
  191. /package/{3.api → 4.api}/2.composables/use-request-url.md +0 -0
  192. /package/{3.api → 4.api}/2.composables/use-runtime-hook.md +0 -0
  193. /package/{3.api → 4.api}/2.composables/use-seo-meta.md +0 -0
  194. /package/{3.api → 4.api}/2.composables/use-server-seo-meta.md +0 -0
  195. /package/{3.api → 4.api}/2.composables/use-state.md +0 -0
  196. /package/{3.api → 4.api}/3.utils/.navigation.yml +0 -0
  197. /package/{3.api → 4.api}/3.utils/clear-error.md +0 -0
  198. /package/{3.api → 4.api}/3.utils/clear-nuxt-data.md +0 -0
  199. /package/{3.api → 4.api}/3.utils/clear-nuxt-state.md +0 -0
  200. /package/{3.api → 4.api}/3.utils/create-error.md +0 -0
  201. /package/{3.api → 4.api}/3.utils/define-lazy-hydration-component.md +0 -0
  202. /package/{3.api → 4.api}/3.utils/define-nuxt-component.md +0 -0
  203. /package/{3.api → 4.api}/3.utils/define-route-rules.md +0 -0
  204. /package/{3.api → 4.api}/3.utils/on-before-route-leave.md +0 -0
  205. /package/{3.api → 4.api}/3.utils/on-before-route-update.md +0 -0
  206. /package/{3.api → 4.api}/3.utils/on-nuxt-ready.md +0 -0
  207. /package/{3.api → 4.api}/3.utils/prefetch-components.md +0 -0
  208. /package/{3.api → 4.api}/3.utils/preload-components.md +0 -0
  209. /package/{3.api → 4.api}/3.utils/preload-route-components.md +0 -0
  210. /package/{3.api → 4.api}/3.utils/prerender-routes.md +0 -0
  211. /package/{3.api → 4.api}/3.utils/refresh-nuxt-data.md +0 -0
  212. /package/{3.api → 4.api}/3.utils/reload-nuxt-app.md +0 -0
  213. /package/{3.api → 4.api}/3.utils/set-page-layout.md +0 -0
  214. /package/{3.api → 4.api}/3.utils/set-response-status.md +0 -0
  215. /package/{3.api → 4.api}/3.utils/show-error.md +0 -0
  216. /package/{3.api → 4.api}/4.commands/.navigation.yml +0 -0
  217. /package/{3.api → 4.api}/5.kit/.navigation.yml +0 -0
  218. /package/{3.api → 4.api}/5.kit/10.runtime-config.md +0 -0
  219. /package/{3.api → 4.api}/5.kit/12.resolving.md +0 -0
  220. /package/{3.api → 4.api}/5.kit/13.logging.md +0 -0
  221. /package/{3.api → 4.api}/5.kit/15.examples.md +0 -0
  222. /package/{3.api → 4.api}/5.kit/3.compatibility.md +0 -0
  223. /package/{3.api → 4.api}/5.kit/6.context.md +0 -0
  224. /package/{3.api → 4.api}/5.kit/7.pages.md +0 -0
  225. /package/{3.api → 4.api}/5.kit/8.layout.md +0 -0
  226. /package/{3.api → 4.api}/5.kit/9.head.md +0 -0
  227. /package/{3.api → 4.api}/5.kit/9.plugins.md +0 -0
  228. /package/{3.api → 4.api}/6.advanced/.navigation.yml +0 -0
  229. /package/{3.api → 4.api}/6.advanced/2.import-meta.md +0 -0
  230. /package/{3.api → 4.api}/index.md +0 -0
@@ -1,10 +1,9 @@
1
1
  ---
2
- title: "Events"
2
+ title: "Creating Custom Events"
3
3
  description: "Nuxt provides a powerful event system powered by hookable."
4
+ navigation.title: "Custom Events"
4
5
  ---
5
6
 
6
- # Events
7
-
8
7
  Using events is a great way to decouple your application and allow for more flexible and modular communication between different parts of your code. Events can have multiple listeners that do not depend on each other. For example, you may wish to send an email to your user each time an order has shipped. Instead of coupling your order processing code to your email code, you can emit an event which a listener can receive and use to dispatch an email.
9
8
 
10
9
  The Nuxt event system is powered by [unjs/hookable](https://github.com/unjs/hookable), which is the same library that powers the Nuxt hooks system.
@@ -131,7 +131,7 @@ Emits `app:chunkError` hook when there is an error loading vite/webpack chunks.
131
131
 
132
132
  By default, Nuxt will also perform a reload of the new route when a chunk fails to load when navigating to a new route (`automatic`).
133
133
 
134
- Setting `automatic-immediate` will lead Nuxt to perform a reload of the current route right when a chunk fails to load (instead of waiting for navigation). This is useful for chunk errors that are not triggered by navigation, e.g., when your Nuxt app fails to load a [lazy component](/docs/4.x/guide/directory-structure/app/components#dynamic-imports). A potential downside of this behavior is undesired reloads, e.g., when your app does not need the chunk that caused the error.
134
+ Setting `automatic-immediate` will lead Nuxt to perform a reload of the current route right when a chunk fails to load (instead of waiting for navigation). This is useful for chunk errors that are not triggered by navigation, e.g., when your Nuxt app fails to load a [lazy component](/docs/4.x/directory-structure/app/components#dynamic-imports). A potential downside of this behavior is undesired reloads, e.g., when your app does not need the chunk that caused the error.
135
135
 
136
136
  You can disable automatic handling by setting this to `false`, or handle chunk errors manually by setting it to `manual`.
137
137
 
@@ -318,7 +318,7 @@ export default defineNuxtConfig({
318
318
  })
319
319
  ```
320
320
 
321
- :read-more{to="/docs/4.x/guide/directory-structure/app/components#server-components"}
321
+ :read-more{to="/docs/4.x/directory-structure/app/components#server-components"}
322
322
 
323
323
  ::read-more{icon="i-simple-icons-github" to="https://github.com/nuxt/nuxt/issues/19772" target="_blank"}
324
324
  You can follow the server components roadmap on GitHub.
@@ -541,7 +541,7 @@ export default defineNuxtConfig({
541
541
  })
542
542
  ```
543
543
 
544
- This allows modules to access additional metadata from the page metadata in the build context. If you are using this within a module, it's recommended also to [augment the `NuxtPage` types with your keys](/docs/4.x/guide/directory-structure/app/pages#typing-custom-metadata).
544
+ This allows modules to access additional metadata from the page metadata in the build context. If you are using this within a module, it's recommended also to [augment the `NuxtPage` types with your keys](/docs/4.x/directory-structure/app/pages#typing-custom-metadata).
545
545
 
546
546
  ## navigationRepaint
547
547
 
@@ -665,7 +665,7 @@ export default defineNuxtConfig({
665
665
  })
666
666
  ```
667
667
 
668
- ::read-more{icon="i-simple-icons-github" color="gray" to="/docs/4.x/guide/directory-structure/app/components#delayed-or-lazy-hydration"}
668
+ ::read-more{icon="i-simple-icons-github" color="gray" to="/docs/4.x/directory-structure/app/components#delayed-or-lazy-hydration"}
669
669
  Read more about lazy hydration.
670
670
  ::
671
671
 
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: "How Nuxt Works?"
3
3
  description: "Nuxt is a minimal but highly customizable framework to build web applications."
4
+ navigation: false
4
5
  ---
5
6
 
6
7
  This guide helps you better understand Nuxt internals to develop new solutions and module integrations on top of Nuxt.
@@ -30,7 +31,7 @@ Global usage is possible for the browser but not on the server, to avoid sharing
30
31
 
31
32
  Since [`useNuxtApp`](/docs/4.x/api/composables/use-nuxt-app) throws an exception if context is currently unavailable, if your composable does not always require `nuxtApp`, you can use [`tryUseNuxtApp`](/docs/4.x/api/composables/use-nuxt-app#tryusenuxtapp) instead, which will return `null` instead of throwing an exception.
32
33
 
33
- To extend the `nuxtApp` interface and hook into different stages or access contexts, we can use [Nuxt Plugins](/docs/4.x/guide/directory-structure/app/plugins).
34
+ To extend the `nuxtApp` interface and hook into different stages or access contexts, we can use [Nuxt Plugins](/docs/4.x/directory-structure/app/plugins).
34
35
 
35
36
  Check [Nuxt App](/docs/4.x/api/composables/use-nuxt-app) for more information about this interface.
36
37
 
@@ -76,6 +77,6 @@ Nuxt builds and bundles project using Node.js but also has a runtime side.
76
77
 
77
78
  While both areas can be extended, that runtime context is isolated from build-time. Therefore, they are not supposed to share state, code, or context other than runtime configuration!
78
79
 
79
- `nuxt.config` and [Nuxt Modules](/docs/4.x/guide/going-further/modules) can be used to extend the build context, and [Nuxt Plugins](/docs/4.x/guide/directory-structure/app/plugins) can be used to extend runtime.
80
+ `nuxt.config` and [Nuxt Modules](/docs/4.x/guide/going-further/modules) can be used to extend the build context, and [Nuxt Plugins](/docs/4.x/directory-structure/app/plugins) can be used to extend runtime.
80
81
 
81
82
  When building an application for production, `nuxt build` will generate a standalone build in the `.output` directory, independent of `nuxt.config` and [Nuxt modules](/docs/4.x/guide/going-further/modules).
@@ -5,7 +5,7 @@ description: "Nuxt provides a runtime config API to expose configuration and sec
5
5
 
6
6
  ## Exposing
7
7
 
8
- To expose config and environment variables to the rest of your app, you will need to define runtime configuration in your [`nuxt.config`](/docs/4.x/guide/directory-structure/nuxt-config) file, using the [`runtimeConfig`](/docs/4.x/api/nuxt-config#runtimeconfig) option.
8
+ To expose config and environment variables to the rest of your app, you will need to define runtime configuration in your [`nuxt.config`](/docs/4.x/directory-structure/nuxt-config) file, using the [`runtimeConfig`](/docs/4.x/api/nuxt-config#runtimeconfig) option.
9
9
 
10
10
  ```ts [nuxt.config.ts]
11
11
  export default defineNuxtConfig({
@@ -45,7 +45,7 @@ The most common way to provide configuration is by using [Environment Variables]
45
45
 
46
46
  ::note
47
47
  The Nuxt CLI has built-in support for reading your `.env` file in development, build and generate. But when you run your built server, **your `.env` file will not be read**.
48
- :read-more{to="/docs/4.x/guide/directory-structure/env"}
48
+ :read-more{to="/docs/4.x/directory-structure/env"}
49
49
  ::
50
50
 
51
51
  Runtime config values are **automatically replaced by matching environment variables at runtime**.
@@ -39,7 +39,7 @@ Explore all available Nuxt hooks.
39
39
 
40
40
  ## App Hooks (Runtime)
41
41
 
42
- App hooks can be mainly used by [Nuxt Plugins](/docs/4.x/guide/directory-structure/app/plugins) to hook into rendering lifecycle but could also be used in Vue composables.
42
+ App hooks can be mainly used by [Nuxt Plugins](/docs/4.x/directory-structure/app/plugins) to hook into rendering lifecycle but could also be used in Vue composables.
43
43
 
44
44
  ```ts [app/plugins/test.ts]
45
45
  export default defineNuxtPlugin((nuxtApp) => {
@@ -55,7 +55,7 @@ Explore all available App hooks.
55
55
 
56
56
  ## Server Hooks (Runtime)
57
57
 
58
- These hooks are available for [server plugins](/docs/4.x/guide/directory-structure/server#server-plugins) to hook into Nitro's runtime behavior.
58
+ These hooks are available for [server plugins](/docs/4.x/directory-structure/server#server-plugins) to hook into Nitro's runtime behavior.
59
59
 
60
60
  ```ts [~/server/plugins/test.ts]
61
61
  export default defineNitroPlugin((nitroApp) => {
@@ -117,7 +117,7 @@ Nuxt Modules come with a variety of powerful APIs and patterns allowing them to
117
117
  We can consider two kinds of Nuxt Modules:
118
118
 
119
119
  - published modules are distributed on npm - you can see a list of some community modules on [the Nuxt website](/modules).
120
- - "local" modules, they exist within a Nuxt project itself, either [inlined in Nuxt config](/docs/4.x/api/nuxt-config#modules) or as part of [the `modules` directory](/docs/4.x/guide/directory-structure/modules).
120
+ - "local" modules, they exist within a Nuxt project itself, either [inlined in Nuxt config](/docs/4.x/api/nuxt-config#modules) or as part of [the `modules` directory](/docs/4.x/directory-structure/modules).
121
121
 
122
122
  In either case, their anatomy is similar.
123
123
 
@@ -224,7 +224,7 @@ Modules, like everything in a Nuxt configuration, aren't included in your applic
224
224
  Inside the runtime directory, you can provide any kind of assets related to the Nuxt App:
225
225
  - Vue components
226
226
  - Composables
227
- - [Nuxt plugins](/docs/4.x/guide/directory-structure/app/plugins)
227
+ - [Nuxt plugins](/docs/4.x/directory-structure/app/plugins)
228
228
 
229
229
  To the [server engine](/docs/4.x/guide/concepts/server-engine), Nitro:
230
230
  - API routes
@@ -23,7 +23,7 @@ Jump over the `NuxtApp` interface documentation.
23
23
 
24
24
  Many composables and utilities, both built-in and user-made, may require access to the Nuxt instance. This doesn't exist everywhere on your application, because a fresh instance is created on every request.
25
25
 
26
- Currently, the Nuxt context is only accessible in [plugins](/docs/4.x/guide/directory-structure/app/plugins), [Nuxt hooks](/docs/4.x/guide/going-further/hooks), [Nuxt middleware](/docs/4.x/guide/directory-structure/app/middleware) (if wrapped in `defineNuxtRouteMiddleware`), and [setup functions](https://vuejs.org/api/composition-api-setup) (in pages and components).
26
+ Currently, the Nuxt context is only accessible in [plugins](/docs/4.x/directory-structure/app/plugins), [Nuxt hooks](/docs/4.x/guide/going-further/hooks), [Nuxt middleware](/docs/4.x/directory-structure/app/middleware) (if wrapped in `defineNuxtRouteMiddleware`), and [setup functions](https://vuejs.org/api/composition-api-setup) (in pages and components).
27
27
 
28
28
  If a composable is called without access to the context, you may get an error stating that 'A composable that requires access to the Nuxt instance was called outside of a plugin, Nuxt hook, Nuxt middleware, or Vue setup function.' In that case, you can also explicitly call functions within this context by using [`nuxtApp.runWithContext`](/docs/4.x/api/composables/use-nuxt-app#runwithcontext).
29
29
 
@@ -42,7 +42,7 @@ If your composable does not always need `nuxtApp` or you simply want to check if
42
42
 
43
43
  Plugins also receive `nuxtApp` as the first argument for convenience.
44
44
 
45
- :read-more{to="/docs/4.x/guide/directory-structure/app/plugins"}
45
+ :read-more{to="/docs/4.x/directory-structure/app/plugins"}
46
46
 
47
47
  ## Providing Helpers
48
48
 
@@ -55,7 +55,7 @@ nuxtApp.provide('hello', name => `Hello ${name}!`)
55
55
  console.log(nuxtApp.$hello('name')) // Prints "Hello name!"
56
56
  ```
57
57
 
58
- ::read-more{to="/docs/4.x/guide/directory-structure/app/plugins#providing-helpers"}
58
+ ::read-more{to="/docs/4.x/directory-structure/app/plugins#providing-helpers"}
59
59
  It is possible to inject helpers by returning an object with a `provide` key in plugins.
60
60
  ::
61
61
 
@@ -7,7 +7,7 @@ Nuxt layers are a powerful feature that you can use to share and reuse partial N
7
7
 
8
8
  :read-more{to="/docs/4.x/getting-started/layers"}
9
9
 
10
- A minimal Nuxt layer directory should contain a [`nuxt.config.ts`](/docs/4.x/guide/directory-structure/nuxt-config) file to indicate it is a layer.
10
+ A minimal Nuxt layer directory should contain a [`nuxt.config.ts`](/docs/4.x/directory-structure/nuxt-config) file to indicate it is a layer.
11
11
 
12
12
  ```ts [base/nuxt.config.ts]
13
13
  export default defineNuxtConfig({})
@@ -15,20 +15,20 @@ export default defineNuxtConfig({})
15
15
 
16
16
  Additionally, certain other files in the layer directory will be auto-scanned and used by Nuxt for the project extending this layer.
17
17
 
18
- - [`app/components/*`](/docs/4.x/guide/directory-structure/app/components) - Extend the default components
19
- - [`app/composables/*`](/docs/4.x/guide/directory-structure/app/composables) - Extend the default composables
20
- - [`app/layouts/*`](/docs/4.x/guide/directory-structure/app/layouts) - Extend the default layouts
21
- - [`app/middleware/*`](/docs/4.x/guide/directory-structure/app/middleware) - Extend the default middleware
22
- - [`app/pages/*`](/docs/4.x/guide/directory-structure/app/pages) - Extend the default pages
23
- - [`app/plugins/*`](/docs/4.x/guide/directory-structure/app/plugins) - Extend the default plugins
24
- - [`app/utils/*`](/docs/4.x/guide/directory-structure/app/utils) - Extend the default utils
25
- - [`app/app.config.ts`](/docs/4.x/guide/directory-structure/app/app-config) - Extend the default app config
26
- - [`server/*`](/docs/4.x/guide/directory-structure/server) - Extend the default server endpoints & middleware
27
- - [`nuxt.config.ts`](/docs/4.x/guide/directory-structure/nuxt-config)- Extend the default nuxt config
18
+ - [`app/components/*`](/docs/4.x/directory-structure/app/components) - Extend the default components
19
+ - [`app/composables/*`](/docs/4.x/directory-structure/app/composables) - Extend the default composables
20
+ - [`app/layouts/*`](/docs/4.x/directory-structure/app/layouts) - Extend the default layouts
21
+ - [`app/middleware/*`](/docs/4.x/directory-structure/app/middleware) - Extend the default middleware
22
+ - [`app/pages/*`](/docs/4.x/directory-structure/app/pages) - Extend the default pages
23
+ - [`app/plugins/*`](/docs/4.x/directory-structure/app/plugins) - Extend the default plugins
24
+ - [`app/utils/*`](/docs/4.x/directory-structure/app/utils) - Extend the default utils
25
+ - [`app/app.config.ts`](/docs/4.x/directory-structure/app/app-config) - Extend the default app config
26
+ - [`server/*`](/docs/4.x/directory-structure/server) - Extend the default server endpoints & middleware
27
+ - [`nuxt.config.ts`](/docs/4.x/directory-structure/nuxt-config)- Extend the default nuxt config
28
28
 
29
29
  ## Basic Example
30
30
 
31
- ::code-group
31
+ ::code-tree{defaultValue="nuxt.config.ts" expandAll}
32
32
 
33
33
  ```ts [nuxt.config.ts]
34
34
  export default defineNuxtConfig({
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  title: '<NuxtRouteAnnouncer>'
3
3
  description: 'The <NuxtRouteAnnouncer> component adds a hidden element with the page title to announce route changes to assistive technologies.'
4
- navigation:
5
- badge: New
6
4
  links:
7
5
  - label: Source
8
6
  icon: i-simple-icons-github
@@ -16,7 +14,7 @@ This component is available in Nuxt v3.12+.
16
14
 
17
15
  ## Usage
18
16
 
19
- Add `<NuxtRouteAnnouncer/>` in your [`app.vue`](/docs/4.x/guide/directory-structure/app/app) or [`app/layouts/`](/docs/4.x/guide/directory-structure/app/layouts) to enhance accessibility by informing assistive technologies about page title changes. This ensures that navigational changes are announced to users relying on screen readers.
17
+ Add `<NuxtRouteAnnouncer/>` in your [`app.vue`](/docs/4.x/directory-structure/app/app) or [`app/layouts/`](/docs/4.x/directory-structure/app/layouts) to enhance accessibility by informing assistive technologies about page title changes. This ensures that navigational changes are announced to users relying on screen readers.
20
18
 
21
19
  ```vue [app/app.vue]
22
20
  <template>
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  title: '<NuxtTime>'
3
3
  description: 'The <NuxtTime> component displays time in a locale-friendly format with server-client consistency.'
4
- navigation:
5
- badge: New
6
4
  links:
7
5
  - label: Source
8
6
  icon: i-simple-icons-github
@@ -8,7 +8,7 @@ links:
8
8
  size: xs
9
9
  ---
10
10
 
11
- `<NuxtPage>` is a built-in component that comes with Nuxt. It lets you display top-level or nested pages located in the [`app/pages/`](/docs/4.x/guide/directory-structure/app/pages) directory.
11
+ `<NuxtPage>` is a built-in component that comes with Nuxt. It lets you display top-level or nested pages located in the [`app/pages/`](/docs/4.x/directory-structure/app/pages) directory.
12
12
 
13
13
  ::note
14
14
  `<NuxtPage>` is a wrapper around [`<RouterView>`](https://router.vuejs.org/api/interfaces/routerviewprops) from Vue Router. It should be used instead of `<RouterView>` because the former takes additional care of internal states. Otherwise, `useRoute()` may return incorrect paths.
@@ -151,4 +151,4 @@ console.log(attrs.foobar) // Outputs: 123
151
151
  </script>
152
152
  ```
153
153
 
154
- :read-more{to="/docs/4.x/guide/directory-structure/app/pages"}
154
+ :read-more{to="/docs/4.x/directory-structure/app/pages"}
@@ -18,11 +18,11 @@ You can use `<NuxtLayout />` component to activate the `default` layout on `app.
18
18
  </template>
19
19
  ```
20
20
 
21
- :read-more{to="/docs/4.x/guide/directory-structure/app/layouts"}
21
+ :read-more{to="/docs/4.x/directory-structure/app/layouts"}
22
22
 
23
23
  ## Props
24
24
 
25
- - `name`: Specify a layout name to be rendered, can be a string, reactive reference or a computed property. It **must** match the name of the corresponding layout file in the [`app/layouts/`](/docs/4.x/guide/directory-structure/app/layouts) directory.
25
+ - `name`: Specify a layout name to be rendered, can be a string, reactive reference or a computed property. It **must** match the name of the corresponding layout file in the [`app/layouts/`](/docs/4.x/directory-structure/app/layouts) directory.
26
26
  - **type**: `string`
27
27
  - **default**: `default`
28
28
 
@@ -51,11 +51,11 @@ Please note the layout name is normalized to kebab-case, so if your layout file
51
51
  </template>
52
52
  ```
53
53
 
54
- ::read-more{to="/docs/4.x/guide/directory-structure/app/layouts"}
54
+ ::read-more{to="/docs/4.x/directory-structure/app/layouts"}
55
55
  Read more about dynamic layouts.
56
56
  ::
57
57
 
58
- - `fallback`: If an invalid layout is passed to the `name` prop, no layout will be rendered. Specify a `fallback` layout to be rendered in this scenario. It **must** match the name of the corresponding layout file in the [`app/layouts/`](/docs/4.x/guide/directory-structure/app/layouts) directory.
58
+ - `fallback`: If an invalid layout is passed to the `name` prop, no layout will be rendered. Specify a `fallback` layout to be rendered in this scenario. It **must** match the name of the corresponding layout file in the [`app/layouts/`](/docs/4.x/directory-structure/app/layouts) directory.
59
59
  - **type**: `string`
60
60
  - **default**: `null`
61
61
 
@@ -158,4 +158,4 @@ defineExpose({
158
158
 
159
159
  ::
160
160
 
161
- :read-more{to="/docs/4.x/guide/directory-structure/app/layouts"}
161
+ :read-more{to="/docs/4.x/directory-structure/app/layouts"}
@@ -10,7 +10,7 @@ links:
10
10
 
11
11
  ## Usage
12
12
 
13
- Add `<NuxtLoadingIndicator/>` in your [`app.vue`](/docs/4.x/guide/directory-structure/app/app) or [`app/layouts/`](/docs/4.x/guide/directory-structure/app/layouts).
13
+ Add `<NuxtLoadingIndicator/>` in your [`app.vue`](/docs/4.x/directory-structure/app/app) or [`app/layouts/`](/docs/4.x/directory-structure/app/layouts).
14
14
 
15
15
  ```vue [app/app.vue]
16
16
  <template>
@@ -4,7 +4,7 @@ description: The <NuxtWelcome> component greets users in new projects made from
4
4
  links:
5
5
  - label: Source
6
6
  icon: i-simple-icons-github
7
- to: https://github.com/nuxt/assets/blob/main/packages/templates/templates/welcome/index.html
7
+ to: https://github.com/nuxt/nuxt/blob/main/packages/ui-templates/templates/welcome/index.html
8
8
  size: xs
9
9
  ---
10
10
 
@@ -21,5 +21,5 @@ Preview the `<NuxtWelcome />` component.
21
21
  ::
22
22
 
23
23
  ::tip
24
- This component is part of [nuxt/assets](https://github.com/nuxt/assets).
24
+ This component is part of [`@nuxt/ui-templates`](https://github.com/nuxt/nuxt/tree/main/packages/ui-templates) package.
25
25
  ::
@@ -16,4 +16,4 @@ const appConfig = useAppConfig()
16
16
  console.log(appConfig)
17
17
  ```
18
18
 
19
- :read-more{to="/docs/4.x/guide/directory-structure/app/app-config"}
19
+ :read-more{to="/docs/4.x/directory-structure/app/app-config"}
@@ -0,0 +1,183 @@
1
+ ---
2
+ title: 'useCookie'
3
+ description: useCookie is an SSR-friendly composable to read and write cookies.
4
+ links:
5
+ - label: Source
6
+ icon: i-simple-icons-github
7
+ to: https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/composables/cookie.ts
8
+ size: xs
9
+ ---
10
+
11
+ ## Usage
12
+
13
+ Within your pages, components, and plugins, you can use `useCookie` to read and write cookies in an SSR-friendly way.
14
+
15
+ ```ts
16
+ const cookie = useCookie(name, options)
17
+ ```
18
+
19
+ ::note
20
+ `useCookie` only works in the [Nuxt context](/docs/4.x/guide/going-further/nuxt-app#the-nuxt-context).
21
+ ::
22
+
23
+ ::tip
24
+ The returned ref will automatically serialize and deserialize cookie values to JSON.
25
+ ::
26
+
27
+ ## Type
28
+
29
+ ```ts [Signature]
30
+ import type { Ref } from 'vue'
31
+ import type { CookieParseOptions, CookieSerializeOptions } from 'cookie-es'
32
+
33
+ export interface CookieOptions<T = any> extends Omit<CookieSerializeOptions & CookieParseOptions, 'decode' | 'encode'> {
34
+ decode?(value: string): T
35
+ encode?(value: T): string
36
+ default?: () => T | Ref<T>
37
+ watch?: boolean | 'shallow'
38
+ readonly?: boolean
39
+ }
40
+
41
+ export interface CookieRef<T> extends Ref<T> {}
42
+
43
+ export function useCookie<T = string | null | undefined> (
44
+ name: string,
45
+ options?: CookieOptions<T>,
46
+ ): CookieRef<T>
47
+ ```
48
+
49
+ ## Parameters
50
+
51
+ `name`: The name of the cookie.
52
+
53
+ `options`: Options to control cookie behavior. The object can have the following properties:
54
+
55
+ Most of the options will be directly passed to the [cookie](https://github.com/jshttp/cookie) package.
56
+
57
+ | Property | Type | Default | Description |
58
+ |---------------|------------------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
59
+ | `decode` | `(value: string) => T` | `decodeURIComponent` + [destr](https://github.com/unjs/destr). | Custom function to decode the cookie value. Since the value of a cookie has a limited character set (and must be a simple string), this function can be used to decode a previously encoded cookie value into a JavaScript string or other object. <br/> **Note:** If an error is thrown from this function, the original, non-decoded cookie value will be returned as the cookie's value. |
60
+ | `encode` | `(value: T) => string` | `JSON.stringify` + `encodeURIComponent` | Custom function to encode the cookie value. Since the value of a cookie has a limited character set (and must be a simple string), this function can be used to encode a value into a string suited for a cookie's value. |
61
+ | `default` | `() => T \| Ref<T>` | `undefined` | Function returning the default value if the cookie does not exist. The function can also return a `Ref`. |
62
+ | `watch` | `boolean \| 'shallow'` | `true` | Whether to watch for changes and update the cookie. `true` for deep watch, `'shallow'` for shallow watch, i.e. data changes for only top level properties, `false` to disable. <br/> **Note:** Refresh `useCookie` values manually when a cookie has changed with [`refreshCookie`](/docs/4.x/api/utils/refresh-cookie). |
63
+ | `readonly` | `boolean` | `false` | If `true`, disables writing to the cookie. |
64
+ | `maxAge` | `number` | `undefined` | Max age in seconds for the cookie, i.e. the value for the [`Max-Age` `Set-Cookie` attribute](https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.2). The given number will be converted to an integer by rounding down. By default, no maximum age is set. |
65
+ | `expires` | `Date` | `undefined` | Expiration date for the cookie. By default, no expiration is set. Most clients will consider this a "non-persistent cookie" and will delete it on a condition like exiting a web browser application. <br/> **Note:** The [cookie storage model specification](https://datatracker.ietf.org/doc/html/rfc6265#section-5.3) states that if both `expires` and `maxAge` is set, then `maxAge` takes precedence, but not all clients may obey this, so if both are set, they should point to the same date and time! <br/>If neither of `expires` and `maxAge` is set, the cookie will be session-only and removed when the user closes their browser. |
66
+ | `httpOnly` | `boolean` | `false` | Sets the HttpOnly attribute. <br/> **Note:** Be careful when setting this to `true`, as compliant clients will not allow client-side JavaScript to see the cookie in `document.cookie`. |
67
+ | `secure` | `boolean` | `false` | Sets the [`Secure` `Set-Cookie` attribute](https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.5). <br/>**Note:** Be careful when setting this to `true`, as compliant clients will not send the cookie back to the server in the future if the browser does not have an HTTPS connection. This can lead to hydration errors. |
68
+ | `partitioned` | `boolean` | `false` | Sets the [`Partitioned` `Set-Cookie` attribute](https://datatracker.ietf.org/doc/html/draft-cutler-httpbis-partitioned-cookies#section-2.1). <br/>**Note:** This is an attribute that has not yet been fully standardized, and may change in the future. <br/>This also means many clients may ignore this attribute until they understand it.<br/>More information can be found in the [proposal](https://github.com/privacycg/CHIPS). |
69
+ | `domain` | `string` | `undefined` | Sets the [`Domain` `Set-Cookie` attribute](https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.3). By default, no domain is set, and most clients will consider applying the cookie only to the current domain. |
70
+ | `path` | `string` | `'/'` | Sets the [`Path` `Set-Cookie` attribute](https://datatracker.ietf.org/doc/html/rfc6265#section-5.2.4). By default, the path is considered the ["default path"](https://datatracker.ietf.org/doc/html/rfc6265#section-5.1.4). |
71
+ | `sameSite` | `boolean \| string` | `undefined` | Sets the [`SameSite` `Set-Cookie` attribute](https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7). <br/>- `true` will set the `SameSite` attribute to `Strict` for strict same-site enforcement.<br/>- `false` will not set the `SameSite` attribute.<br/>- `'lax'` will set the `SameSite` attribute to `Lax` for lax same-site enforcement.<br/>- `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie.<br/>- `'strict'` will set the `SameSite` attribute to `Strict` for strict same-site enforcement. |
72
+
73
+ ## Return Values
74
+
75
+ Returns a Vue `Ref<T>` representing the cookie value. Updating the ref will update the cookie (unless `readonly` is set). The ref is SSR-friendly and will work on both client and server.
76
+
77
+ ## Examples
78
+
79
+ ### Basic Usage
80
+
81
+ The example below creates a cookie called `counter`. If the cookie doesn't exist, it is initially set to a random value. Whenever we update the `counter` variable, the cookie will be updated accordingly.
82
+
83
+ ```vue [app/app.vue]
84
+ <script setup lang="ts">
85
+ const counter = useCookie('counter')
86
+
87
+ counter.value ||= Math.round(Math.random() * 1000)
88
+ </script>
89
+
90
+ <template>
91
+ <div>
92
+ <h1>Counter: {{ counter || '-' }}</h1>
93
+ <button @click="counter = null">
94
+ reset
95
+ </button>
96
+ <button @click="counter--">
97
+ -
98
+ </button>
99
+ <button @click="counter++">
100
+ +
101
+ </button>
102
+ </div>
103
+ </template>
104
+ ```
105
+
106
+ ### Readonly Cookies
107
+
108
+ ```vue
109
+ <script setup lang="ts">
110
+ const user = useCookie(
111
+ 'userInfo',
112
+ {
113
+ default: () => ({ score: -1 }),
114
+ watch: false,
115
+ },
116
+ )
117
+
118
+ if (user.value) {
119
+ // the actual `userInfo` cookie will not be updated
120
+ user.value.score++
121
+ }
122
+ </script>
123
+
124
+ <template>
125
+ <div>User score: {{ user?.score }}</div>
126
+ </template>
127
+ ```
128
+
129
+ ### Writable Cookies
130
+
131
+ ```vue
132
+ <script setup lang="ts">
133
+ const list = useCookie(
134
+ 'list',
135
+ {
136
+ default: () => [],
137
+ watch: 'shallow',
138
+ },
139
+ )
140
+
141
+ function add () {
142
+ list.value?.push(Math.round(Math.random() * 1000))
143
+ // list cookie won't be updated with this change
144
+ }
145
+
146
+ function save () {
147
+ // the actual `list` cookie will be updated
148
+ list.value &&= [...list.value]
149
+ }
150
+ </script>
151
+
152
+ <template>
153
+ <div>
154
+ <h1>List</h1>
155
+ <pre>{{ list }}</pre>
156
+ <button @click="add">
157
+ Add
158
+ </button>
159
+ <button @click="save">
160
+ Save
161
+ </button>
162
+ </div>
163
+ </template>
164
+ ```
165
+
166
+ ### Cookies in API Routes
167
+
168
+ You can use `getCookie` and `setCookie` from [`h3`](https://github.com/h3js/h3) package to set cookies in server API routes.
169
+
170
+ ```ts [server/api/counter.ts]
171
+ export default defineEventHandler((event) => {
172
+ // Read counter cookie
173
+ let counter = getCookie(event, 'counter') || 0
174
+
175
+ // Increase counter cookie by 1
176
+ setCookie(event, 'counter', ++counter)
177
+
178
+ // Send JSON response
179
+ return { counter }
180
+ })
181
+ ```
182
+
183
+ :link-example{to="/docs/4.x/examples/advanced/use-cookie"}
@@ -183,29 +183,29 @@ type AsyncDataRequestStatus = 'idle' | 'pending' | 'success' | 'error'
183
183
 
184
184
  - `options` (object): Configuration for the fetch request. Extends [unjs/ofetch](https://github.com/unjs/ofetch) options and [`AsyncDataOptions`](/docs/4.x/api/composables/use-async-data#params). All options can be a static value, a `ref`, or a computed value.
185
185
 
186
- | Option | Type | Default | Description |
187
- | ---| --- | --- | --- |
188
- | `key` | `MaybeRefOrGetter<string>` | auto-gen | Unique key for de-duplication. If not provided, generated from URL and options. |
189
- | `method` | `MaybeRefOrGetter<string>` | `'GET'` | HTTP request method. |
190
- | `query` | `MaybeRefOrGetter<SearchParams>` | - | Query/search params to append to the URL. Alias: `params`. |
191
- | `params` | `MaybeRefOrGetter<SearchParams>` | - | Alias for `query`. |
192
- | `body` | `MaybeRefOrGetter<RequestInit['body'] \| Record<string, any>>` | - | Request body. Objects are automatically stringified. |
193
- | `headers` | `MaybeRefOrGetter<Record<string, string> \| [key, value][] \| Headers>` | - | Request headers. |
194
- | `baseURL` | `MaybeRefOrGetter<string>` | - | Base URL for the request. |
195
- | `timeout` | `MaybeRefOrGetter<number>` | - | Timeout in milliseconds to abort the request. |
196
- | `cache` | `boolean \| string` | - | Cache control. Boolean disables cache, or use Fetch API values: `default`, `no-store`, etc. |
197
- | `server` | `boolean` | `true` | Whether to fetch on the server. |
198
- | `lazy` | `boolean` | `false` | If true, resolves after route loads (does not block navigation). |
199
- | `immediate` | `boolean` | `true` | If false, prevents request from firing immediately. |
200
- | `default` | `() => DataT` | - | Factory for default value of `data` before async resolves. |
201
- | `timeout` | `number` | - | A number in milliseconds to wait before timing out the request (defaults to `undefined`, which means no timeout) |
202
- | `transform` | `(input: DataT) => DataT \| Promise<DataT>` | - | Function to transform the result after resolving. |
203
- | `getCachedData`| `(key, nuxtApp, ctx) => DataT \| undefined` | - | Function to return cached data. See below for default. |
204
- | `pick` | `string[]` | - | Only pick specified keys from the result. |
205
- | `watch` | `MultiWatchSources \| false` | - | Array of reactive sources to watch and auto-refresh. `false` disables watching. |
206
- | `deep` | `boolean` | `false` | Return data in a deep ref object. |
207
- | `dedupe` | `'cancel' \| 'defer'` | `'cancel'` | Avoid fetching same key more than once at a time. |
208
- | `$fetch` | `typeof globalThis.$fetch` | - | Custom $fetch implementation. See [Custom useFetch in Nuxt](/docs/4.x/guide/recipes/custom-usefetch) |
186
+ | Option | Type | Default | Description |
187
+ |-----------------|-------------------------------------------------------------------------|------------|------------------------------------------------------------------------------------------------------------------|
188
+ | `key` | `MaybeRefOrGetter<string>` | auto-gen | Unique key for de-duplication. If not provided, generated from URL and options. |
189
+ | `method` | `MaybeRefOrGetter<string>` | `'GET'` | HTTP request method. |
190
+ | `query` | `MaybeRefOrGetter<SearchParams>` | - | Query/search params to append to the URL. Alias: `params`. |
191
+ | `params` | `MaybeRefOrGetter<SearchParams>` | - | Alias for `query`. |
192
+ | `body` | `MaybeRefOrGetter<RequestInit['body'] \| Record<string, any>>` | - | Request body. Objects are automatically stringified. |
193
+ | `headers` | `MaybeRefOrGetter<Record<string, string> \| [key, value][] \| Headers>` | - | Request headers. |
194
+ | `baseURL` | `MaybeRefOrGetter<string>` | - | Base URL for the request. |
195
+ | `timeout` | `MaybeRefOrGetter<number>` | - | Timeout in milliseconds to abort the request. |
196
+ | `cache` | `boolean \| string` | - | Cache control. Boolean disables cache, or use Fetch API values: `default`, `no-store`, etc. |
197
+ | `server` | `boolean` | `true` | Whether to fetch on the server. |
198
+ | `lazy` | `boolean` | `false` | If true, resolves after route loads (does not block navigation). |
199
+ | `immediate` | `boolean` | `true` | If false, prevents request from firing immediately. |
200
+ | `default` | `() => DataT` | - | Factory for default value of `data` before async resolves. |
201
+ | `timeout` | `number` | - | A number in milliseconds to wait before timing out the request (defaults to `undefined`, which means no timeout) |
202
+ | `transform` | `(input: DataT) => DataT \| Promise<DataT>` | - | Function to transform the result after resolving. |
203
+ | `getCachedData` | `(key, nuxtApp, ctx) => DataT \| undefined` | - | Function to return cached data. See below for default. |
204
+ | `pick` | `string[]` | - | Only pick specified keys from the result. |
205
+ | `watch` | `MultiWatchSources \| false` | - | Array of reactive sources to watch and auto-refresh. `false` disables watching. |
206
+ | `deep` | `boolean` | `false` | Return data in a deep ref object. |
207
+ | `dedupe` | `'cancel' \| 'defer'` | `'cancel'` | Avoid fetching same key more than once at a time. |
208
+ | `$fetch` | `typeof globalThis.$fetch` | - | Custom $fetch implementation. See [Custom useFetch in Nuxt](/docs/4.x/guide/recipes/custom-usefetch) |
209
209
 
210
210
  ::note
211
211
  All fetch options can be given a `computed` or `ref` value. These will be watched and new requests made automatically with any new values if they are updated.
@@ -222,14 +222,14 @@ This only caches data when `experimental.payloadExtraction` in `nuxt.config` is
222
222
 
223
223
  ## Return Values
224
224
 
225
- | Name | Type | Description |
226
- | --- | --- |--- |
227
- | `data` | `Ref<DataT \| undefined>` | The result of the asynchronous fetch. |
228
- | `refresh` | `(opts?: AsyncDataExecuteOptions) => Promise<void>` | Function to manually refresh the data. By default, Nuxt waits until a `refresh` is finished before it can be executed again. |
229
- | `execute` | `(opts?: AsyncDataExecuteOptions) => Promise<void>` | Alias for `refresh`. |
230
- | `error` | `Ref<ErrorT \| undefined>` | Error object if the data fetching failed. |
231
- | `status` | `Ref<'idle' \| 'pending' \| 'success' \| 'error'>` | Status of the data request. See below for possible values. |
232
- | `clear` | `() => void` | Resets `data` to `undefined` (or the value of `options.default()` if provided), `error` to `undefined`, set `status` to `idle`, and cancels any pending requests. |
225
+ | Name | Type | Description |
226
+ |-----------|-----------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
227
+ | `data` | `Ref<DataT \| undefined>` | The result of the asynchronous fetch. |
228
+ | `refresh` | `(opts?: AsyncDataExecuteOptions) => Promise<void>` | Function to manually refresh the data. By default, Nuxt waits until a `refresh` is finished before it can be executed again. |
229
+ | `execute` | `(opts?: AsyncDataExecuteOptions) => Promise<void>` | Alias for `refresh`. |
230
+ | `error` | `Ref<ErrorT \| undefined>` | Error object if the data fetching failed. |
231
+ | `status` | `Ref<'idle' \| 'pending' \| 'success' \| 'error'>` | Status of the data request. See below for possible values. |
232
+ | `clear` | `() => void` | Resets `data` to `undefined` (or the value of `options.default()` if provided), `error` to `undefined`, set `status` to `idle`, and cancels any pending requests. |
233
233
 
234
234
  ### Status values
235
235