---
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
AboutPost 1NuxtHeavy PageReplace
Dashboard
```
## 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
Something went wrong: {{ error.message }}
```
## ClientOnly
Render content only on client-side:
```vue
Loading chart...
```
## 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
Modal content
```
For SSR, use `` with Teleport:
```vue
```
## NuxtRouteAnnouncer
Accessibility: automatically announces page changes (from the page ``) to screen readers:
```vue
```
## 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
```
```vue
```
Props: `politeness` (`polite` | `assertive` | `off`, default `polite`), `atomic` (default `true`). Use `` for route changes, `` for everything else.