--- name: built-in-components description: NuxtLink, NuxtPage, NuxtLayout, and other built-in Nuxt components --- # Built-in Components Nuxt provides several built-in components for common functionality. ## NuxtLink Optimized link component with prefetching: ```vue ``` ## NuxtPage Renders the current page component (used in layouts): ```vue ``` With page transitions: ```vue ``` Pass props to page: ```vue ``` ## NuxtLayout Controls layout rendering: ```vue ``` Dynamic layout: ```vue ``` Layout with transitions: ```vue ``` ## NuxtLoadingIndicator Progress bar for page navigation: ```vue ``` ## NuxtErrorBoundary Catch and handle errors in child components: ```vue ``` ## ClientOnly Render content only on client-side: ```vue ``` ## DevOnly Render content only in development: ```vue ``` ## NuxtIsland Server components (experimental): ```vue ``` Islands render in their own isolated Vue app keyed on props (for cacheability). `useRoute()` and other vue-router composables inside an island reflect the island's own request, **not** the current page — pass route info in via props or the `context` prop. Props/context are sent as GET query params (may appear in logs/CDN caches). ## NuxtImg and NuxtPicture Optimized images (requires `@nuxt/image` module): ```vue ``` ## Teleport Render content outside component tree: ```vue ``` For SSR, use `` with Teleport: ```vue ``` ## NuxtRouteAnnouncer Accessibility: automatically announces page changes (from the page ``) to screen readers: ```vue <!-- app/app.vue --> <template> <NuxtRouteAnnouncer /> <NuxtLayout> <NuxtPage /> </NuxtLayout> </template> ``` ## NuxtAnnouncer Accessibility: a hidden live region for **manual** announcements of dynamic content (form validation, toasts, loading). Add it once, then drive it with the `useAnnouncer` composable (Nuxt 4.4.2+): ```vue <!-- app/app.vue --> <template> <NuxtAnnouncer /> <NuxtLayout> <NuxtPage /> </NuxtLayout> </template> ``` ```vue <script setup lang="ts"> const { polite, assertive } = useAnnouncer() assertive('Error: form is invalid') // interrupts immediately </script> ``` Props: `politeness` (`polite` | `assertive` | `off`, default `polite`), `atomic` (default `true`). Use `<NuxtRouteAnnouncer>` for route changes, `<NuxtAnnouncer>` for everything else. <!-- Source references: - https://nuxt.com/docs/4.x/api/components/nuxt-link - https://nuxt.com/docs/4.x/api/components/nuxt-page - https://nuxt.com/docs/4.x/api/components/nuxt-layout - https://nuxt.com/docs/4.x/api/components/client-only - https://nuxt.com/docs/4.x/api/components/nuxt-announcer - https://nuxt.com/docs/4.x/api/components/nuxt-island -->