# Nuxt Changelog

> Latest releases from Nuxt and official modules.

## v3.15.0 (nuxt/content) - 2026-07-02

[Release notes](https://github.com/nuxt/content/releases/tag/v3.15.0)

### 🚀 Features

- Add explicit `bun` sqlite connector for Bun runtime deployments - by @0x77dev and @farnabaz in https://github.com/nuxt/content/issues/3741 [<samp>(92ac2)</samp>](https://github.com/nuxt/content/commit/92ac2ab2)
- **search**: Add type inference for extraFields - by @hendrikheil and **Claude Sonnet 4.6** in https://github.com/nuxt/content/issues/3714 [<samp>(07849)</samp>](https://github.com/nuxt/content/commit/078491b8)

### 🐞 Bug Fixes

- **content**: Support validator detection with pnpm enableGlobalVirtualStore - by @BellYun and @farnabaz in https://github.com/nuxt/content/issues/3791 [<samp>(6b272)</samp>](https://github.com/nuxt/content/commit/6b2720b6)
- **hmr**: Update all matching collections when a file changes - by @farnabaz in https://github.com/nuxt/content/issues/3802 [<samp>(06f8e)</samp>](https://github.com/nuxt/content/commit/06f8edba)
- **search**: Softer heading-level boost curve and tuned defaults - by @benjamincanac in https://github.com/nuxt/content/issues/3801 [<samp>(00d25)</samp>](https://github.com/nuxt/content/commit/00d25a5f)
- **vercel**: Use tmp directory to clone contents - by @farnabaz in https://github.com/nuxt/content/issues/3810 [<samp>(793d5)</samp>](https://github.com/nuxt/content/commit/793d59ab)

##### [View changes on GitHub](https://github.com/nuxt/content/compare/v3.14.0...v3.15.0)

---

## v2.3.1 (nuxt/icon) - 2026-07-02

[Release notes](https://github.com/nuxt/icon/releases/tag/v2.3.1)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- Include Nuxt layers in icon scanner context. &nbsp;-&nbsp; by @oyedejioyewole and **Anthony Fu (via agent)** in https://github.com/nuxt/icon/issues/505 [<samp>(1345d)</samp>](https://github.com/nuxt/icon/commit/1345dc9)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/icon/compare/v2.3.0...v2.3.1)

---

## v2.3.0 (nuxt/icon) - 2026-07-02

[Release notes](https://github.com/nuxt/icon/releases/tag/v2.3.0)

### &nbsp;&nbsp;&nbsp;🚀 Features

- Standalone Vite plugin and reusable utils for client icon bundling &nbsp;-&nbsp; by @antfubot in https://github.com/nuxt/icon/issues/506 [<samp>(b386f)</samp>](https://github.com/nuxt/icon/commit/b386fbb)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/icon/compare/v2.2.5...v2.3.0)

---

## v1.3.0 (nuxt/scripts) - 2026-06-30

[Release notes](https://github.com/nuxt/scripts/releases/tag/v1.3.0)

### &nbsp;&nbsp;&nbsp;🚀 Features

- **proxy**: Support path aliases to hide third-party hostnames &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/821 [<samp>(899b1)</samp>](https://github.com/nuxt/scripts/commit/899b1cb5)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- **runtime**: Avoid server-side script use callbacks &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/820 [<samp>(a2896)</samp>](https://github.com/nuxt/scripts/commit/a28962e5)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/scripts/compare/v1.2.1...v1.3.0)

---

## v2.2.5 (nuxt/icon) - 2026-06-29

[Release notes](https://github.com/nuxt/icon/releases/tag/v2.2.5)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- Don't hard-fail on unresolvable hook-contributed client bundle icons &nbsp;-&nbsp; by @benjamincanac in https://github.com/nuxt/icon/issues/504 [<samp>(c4f79)</samp>](https://github.com/nuxt/icon/commit/c4f7935)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/icon/compare/v2.2.4...v2.2.5)

---

## v2.2.4 (nuxt/icon) - 2026-06-25

[Release notes](https://github.com/nuxt/icon/releases/tag/v2.2.4)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- Resolve client bundle collections from rootDir/workspaceDir &nbsp;-&nbsp; by @benjamincanac in https://github.com/nuxt/icon/issues/502 [<samp>(a744c)</samp>](https://github.com/nuxt/icon/commit/a744c65)

### &nbsp;&nbsp;&nbsp;🏎 Performance

- **server-bundle**: Discover collections via directory listing &nbsp;-&nbsp; by @TheAlexLichter and @atinux in https://github.com/nuxt/icon/issues/501 [<samp>(c1770)</samp>](https://github.com/nuxt/icon/commit/c177026)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/icon/compare/v2.2.3...v2.2.4)

---

## v4.9.0 (nuxt/ui) - 2026-06-17

[Release notes](https://github.com/nuxt/ui/releases/tag/v4.9.0)

## :sparkles: Highlights

### :calendar: Calendar month and year selection

The [`Calendar`](https://ui.nuxt.com/docs/components/calendar) component gains a single `type` prop (`date` | `month` | `year`, default `date`) that renders it as a day, month or year picker, covering both standalone pickers and quick navigation:

```vue
<script setup lang="ts">
const value = shallowRef(new CalendarDate(2026, 6, 17))
</script>

<template>
  <UCalendar v-model="value" type="month" />
</template>
```

> [!TIP]
> In `date` mode the heading also becomes a clickable button that cycles `day → month → year`, so you can jump to a month or year without clicking through `prev` / `next` repeatedly. This is controlled by the new `viewControls` and `viewButton` props and works with `range`.

### :compass: useTour composable

The new [`useTour`](https://ui.nuxt.com/docs/composables/use-tour) composable drives guided tours by re-anchoring a single [`Popover`](https://ui.nuxt.com/docs/components/popover) across steps. It owns the step state and resolves each step's `target` into a `reference` you bind to `<UPopover>`, while you keep full control over the content and navigation:

```vue
<script setup lang="ts">
const card = useTemplateRef('card')

const tour = useTour([
  { target: '#cta', title: 'Get started' },
  { target: () => card.value, title: 'Profile', side: 'right' },
  { target: null, title: 'All set' }
])
</script>

<template>
  <UButton @click="tour.start()">Start tour</UButton>

  <UPopover :open="tour.open.value" :reference="tour.reference.value" :dismissible="false">
    <template #content>
      <!-- your content + buttons -->
      <UButton :disabled="!tour.hasPrev.value" @click="tour.prev()">Back</UButton>
      <UButton @click="tour.next()">{{ tour.hasNext.value ? 'Next' : 'Finish' }}</UButton>
    </template>
  </UPopover>
</template>
```

### :scissors: Override default classes

A new build-time [`theme.unstyled`](https://ui.nuxt.com/docs/getting-started/installation/nuxt#themeunstyled) option strips Nuxt UI's default theme classes from every component, keeping only their structure and the classes you provide through `class`, `ui` or `app.config.ui`. This lets you bring your own design system on top of the components' logic and accessibility, or cut HTML and bundle bloat:

```ts [nuxt.config.ts]
export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  ui: {
    theme: {
      unstyled: true
    }
  }
})
```

> [!WARNING]
> This strips **structural** classes too (positioning, transitions, flex/grid), not just cosmetic ones. Layout-heavy components like `Modal`, `Drawer` or `Calendar` will need you to re-supply their layout.

For more surgical control, slot classes can now be a `(defaults) => classes` [function](https://ui.nuxt.com/docs/getting-started/theme/components) that **replaces** the slot's defaults instead of merging onto them. It receives the resolved defaults so you can reuse part of them, while plain strings keep merging exactly as before. It works in `:ui`, `app.config.ui` and `<UTheme :ui>`:

```vue
<template>
  <UButton :ui="{ base: () => 'text-3xl font-bold' }" label="Button" />
</template>
```

### :dart: Uniform focus styles

Every component now shares a single [`focus-visible`](https://ui.nuxt.com/docs/getting-started/theme/css-variables#focus) language: a soft outline halo tinted with the component's `color` (e.g. `outline-primary/25`), so the indicator stays consistent and accessible across every variant and color. Tab panels, scrollable regions and overlay links that browsers make focusable now show the halo too, instead of hiding focus entirely.

If you prefer one outline color across your whole app regardless of component color, a single global rule in your `main.css` does it:

```css [main.css]
*,
::before,
::after {
  @apply outline-primary/25;
}

*:focus-visible,
*:has(> a:focus-visible) {
  --tw-ring-color: var(--ui-primary);
}
```

> [!NOTE]
> Check out the before/after preview images in https://github.com/nuxt/ui/pull/6576.

## :rocket: Features

* **Calendar:** add month and year selection ([#6582](https://github.com/nuxt/ui/issues/6582)) ([ca3c72e](https://github.com/nuxt/ui/commit/ca3c72eb6606da882a6aba5c9f35a3ff0dddf820))
* **ChatMessages:** expose `registerMessageRef` ([#6275](https://github.com/nuxt/ui/issues/6275)) ([f99778e](https://github.com/nuxt/ui/commit/f99778e3e7639c11f6b46a4e4c57fbc66077195a))
* **components:** allow hiding `icon` with `false` ([#6597](https://github.com/nuxt/ui/issues/6597)) ([09eb639](https://github.com/nuxt/ui/commit/09eb639a33460e1ece8fcfc7dd9c2f523af9b0b4))
* **ContentSearch/DashboardSearch:** forward input config to command palette ([#6312](https://github.com/nuxt/ui/issues/6312)) ([5199b7e](https://github.com/nuxt/ui/commit/5199b7e1d262d693af4114884f06bd9126cd3202))
* **FileUpload:** expose `removeFile` in slots ([#6492](https://github.com/nuxt/ui/issues/6492)) ([4da3a5d](https://github.com/nuxt/ui/commit/4da3a5d34373b8c99a7304d5cd143da8273a9238))
* **Modal/Slideover:** add `leave` and `enter` events ([#6596](https://github.com/nuxt/ui/issues/6596)) ([006324a](https://github.com/nuxt/ui/commit/006324aeb91ae4054c314c9cb4a9d552fe04e44e))
* **module:** add `theme.unstyled` option ([#6551](https://github.com/nuxt/ui/issues/6551)) ([a2a8bc9](https://github.com/nuxt/ui/commit/a2a8bc907a5e490fd056e112f86e52c6416b8636))
* **PinInput:** add `separator` prop ([#6392](https://github.com/nuxt/ui/issues/6392)) ([89b30e8](https://github.com/nuxt/ui/commit/89b30e8ebe2b3b3e637ba823d1c35bc2c2d32a68))
* **ScrollArea:** add `shadow` prop ([#6561](https://github.com/nuxt/ui/issues/6561)) ([d850ae6](https://github.com/nuxt/ui/commit/d850ae60531787984ba2416d6fca99626637b41b))
* **Select/SelectMenu:** use `multiple` in theme ([#6554](https://github.com/nuxt/ui/issues/6554)) ([f66eb65](https://github.com/nuxt/ui/commit/f66eb65f5cb80e245491a6de75d9bb3b175be011))
* **Sidebar:** add `transition` prop ([#6484](https://github.com/nuxt/ui/issues/6484)) ([af80a67](https://github.com/nuxt/ui/commit/af80a674a5061dea3272ea113fa497d698fc184b))
* **theme:** allow replacing slot classes with a function ([#6562](https://github.com/nuxt/ui/issues/6562)) ([ea576e2](https://github.com/nuxt/ui/commit/ea576e2f321665574c416af34e7ef04e68654a79))
* **theme:** uniformize focus styles across components ([#6576](https://github.com/nuxt/ui/issues/6576)) ([b026ca2](https://github.com/nuxt/ui/commit/b026ca2cdb0e4d6aff6d271a95e2d7e5e1bd7e3f))
* **useTour:** new composable ([#6557](https://github.com/nuxt/ui/issues/6557)) ([dc05151](https://github.com/nuxt/ui/commit/dc0515128ee6783b6cebd410c85a3e405fb7872a))
* **vite:** add `root` option to override `.nuxt-ui` directory location ([#6595](https://github.com/nuxt/ui/issues/6595)) ([cccb3d5](https://github.com/nuxt/ui/commit/cccb3d5a4a3e837173b1d31e6397efaedb032f59))

## :bug: Bug Fixes

* **CommandPalette:** only scroll to highlighted item when focused ([#6579](https://github.com/nuxt/ui/issues/6579)) ([02259a6](https://github.com/nuxt/ui/commit/02259a6ae963408b2a971722b9b66d225a0505f3))
* **Link:** set default for locale prop ([#6563](https://github.com/nuxt/ui/issues/6563)) ([e9ab758](https://github.com/nuxt/ui/commit/e9ab75888a3143f77ebcc18b8fe40ba370d065d5))
* **module:** remove inline script in SPA mode for strict CSP ([#6577](https://github.com/nuxt/ui/issues/6577)) ([7225e9f](https://github.com/nuxt/ui/commit/7225e9f451e405d6b07de8ee44b93a11a50b55a8))
* **ProseCodeCollapse:** cap root `max-height` instead of toggling pre `height` ([#6565](https://github.com/nuxt/ui/issues/6565)) ([52d3c45](https://github.com/nuxt/ui/commit/52d3c45478d1cfc88e288a093407d459ccf5ad48))
* **ProseKbd:** type default slot as `VNode[]` ([52367b1](https://github.com/nuxt/ui/commit/52367b1ac375e86b4f996ed07958114e9d63a81a))
* **SelectMenu:** bind `id` and aria attributes on trigger ([#6572](https://github.com/nuxt/ui/issues/6572)) ([c3bef7a](https://github.com/nuxt/ui/commit/c3bef7a21bdd67343492f01e874044e59894b95b))
* **Select:** open menu on label click ([#6575](https://github.com/nuxt/ui/issues/6575)) ([e8d18c3](https://github.com/nuxt/ui/commit/e8d18c37a0ebfe527ddc8fc38846d68f52e273be))
* **Tabs:** render active indicator during SSR ([#6570](https://github.com/nuxt/ui/issues/6570)) ([9e5b8a6](https://github.com/nuxt/ui/commit/9e5b8a6bff4f9f12fc6282b450466ec68dc9017d))
* **templates:** resolve vite root to an absolute path for [#build](https://github.com/nuxt/ui/issues/build) aliases ([#6586](https://github.com/nuxt/ui/issues/6586)) ([238e291](https://github.com/nuxt/ui/commit/238e291791737b15fe94eeac6f93468cfcf932bb))

## :globe_with_meridians: Locales

* **locale:** add Latvian language ([#6552](https://github.com/nuxt/ui/issues/6552)) ([fa52538](https://github.com/nuxt/ui/commit/fa5253825258dfb7e543dd84452602979b329703))

## :heart: Contributors

* @benjamincanac
* @innocenzi
* @zAlweNy26
* @maximepvrt
* @OrbisK
* @mikenewbon
* @al1maher
* @emilsgulbis
* @martinszeltins
* @cydrickn
* @neukinal
* @hendrikheil
* @johnson-jnr
* @ReCoN-96

**Full Changelog**: https://github.com/nuxt/ui/compare/v4.8.2...v4.9.0


---

## v1.1.3 (nuxt/hints) - 2026-06-13

[Release notes](https://github.com/nuxt/hints/releases/tag/v1.1.3)

### 🩹 Fixes

- Ignore style serialization-only hydration diffs ([#352](https://github.com/nuxt/hints/pull/352))

### ❤️ Contributors

- Matthias Amon ([@Mat4m0](https://github.com/Mat4m0))

---

## v1.16.0 (nuxt/eslint) - 2026-06-10

[Release notes](https://github.com/nuxt/eslint/releases/tag/v1.16.0)

### &nbsp;&nbsp;&nbsp;🚀 Features

- Update deps &nbsp;-&nbsp; by @antfu [<samp>(008ad)</samp>](https://github.com/nuxt/eslint/commit/008adb4)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/eslint/compare/v1.15.2...v1.16.0)

---

## v4.4.8 (nuxt/nuxt) - 2026-06-08

[Release notes](https://github.com/nuxt/nuxt/releases/tag/v4.4.8)

> 4.4.8 is a hotfix release to address an issue running the dev server on MacOS.

## 👉 Changelog

[compare changes](https://github.com/nuxt/nuxt/compare/v4.4.7...v4.4.8)
### 🩹 Fixes
- **vite:** Shorter socket name for macOs with tmp fallback ([#35265](https://github.com/nuxt/nuxt/pull/35265))
- **kit:** Respect `type` option in `findPath` ([#35272](https://github.com/nuxt/nuxt/pull/35272))
- **deps:** Update nuxt/scripts presets ([905621594](https://github.com/nuxt/nuxt/commit/905621594))
- **nuxt:** Revert unhead dependency back to v2 ([e6d578fea](https://github.com/nuxt/nuxt/commit/e6d578fea))
### 📖 Documentation
- Fix many typos ([#35266](https://github.com/nuxt/nuxt/pull/35266))
- Explain static fallback pages ([#35277](https://github.com/nuxt/nuxt/pull/35277))
- Change `null` to `undefined` in data-fetching docs to match actual types ([#35301](https://github.com/nuxt/nuxt/pull/35301))
- Fix broken internal links, useAsyncData watch type, and NuxtError type ([#35303](https://github.com/nuxt/nuxt/pull/35303))

### ❤️ Contributors
- Daniel Roe (@danielroe)
- Ali Mahmmoud (@AliMahmoudDev)
- Quentin Macq (@quentinmcq)
- Pranav Rajeshirke (@Pranav188)
- Eduardo San Martin Morote (@posva)

---

## v3.21.8 (nuxt/nuxt) - 2026-06-08

[Release notes](https://github.com/nuxt/nuxt/releases/tag/v3.21.8)

> 3.21.8 is a hotfix release to address an issue running the dev server on MacOS.



## 👉 Changelog

[compare changes](https://github.com/nuxt/nuxt/compare/v3.21.7...v3.21.8)
### 🩹 Fixes
- **vite:** Shorter socket name for macOs with tmp fallback ([#35265](https://github.com/nuxt/nuxt/pull/35265))
- **kit:** Respect `type` option in `findPath` ([#35272](https://github.com/nuxt/nuxt/pull/35272))
- **deps:** Update nuxt/scripts presets ([ff6b060dd](https://github.com/nuxt/nuxt/commit/ff6b060dd))
### 📖 Documentation
- Change `null` to `undefined` in data-fetching docs to match actual types ([#35301](https://github.com/nuxt/nuxt/pull/35301))

### ❤️ Contributors
- Daniel Roe (@danielroe)
- Ali Mahmmoud (@AliMahmoudDev)
- Quentin Macq (@quentinmcq)
- Eduardo San Martin Morote (@posva)

---

## v4.8.2 (nuxt/ui) - 2026-06-04

[Release notes](https://github.com/nuxt/ui/releases/tag/v4.8.2)

## :bug: Bug Fixes

* **Form:** support setting the `name` attribute ([#6539](https://github.com/nuxt/ui/issues/6539)) ([f8186e2](https://github.com/nuxt/ui/commit/f8186e2d49472629cb0ea29ef1da468227bde677))
* **InputMenu/SelectMenu:** re-highlight first item when items change ([#6538](https://github.com/nuxt/ui/issues/6538)) ([0414dd0](https://github.com/nuxt/ui/commit/0414dd0d1ba694962562efdabfb60c135ab742ad))
* **InputNumber/InputDate/InputTime/Calendar:** restore `locale` prop ([#6546](https://github.com/nuxt/ui/issues/6546)) ([ed2f955](https://github.com/nuxt/ui/commit/ed2f955f092b6213ba2c3a4750260433f0edc2c6))
* **module:** merge custom variants into AppConfig type ([#6531](https://github.com/nuxt/ui/issues/6531)) ([f0571c3](https://github.com/nuxt/ui/commit/f0571c3786cdddb54712bb89154f8482e0c3c62e))

**Full Changelog**: https://github.com/nuxt/ui/compare/v4.8.1...v4.8.2

---

## v1.2.1 (nuxt/scripts) - 2026-06-02

[Release notes](https://github.com/nuxt/scripts/releases/tag/v1.2.1)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- Provide SpeedCurve snippet fallback &nbsp;-&nbsp; by @sjh9714 in https://github.com/nuxt/scripts/issues/811 [<samp>(c1322)</samp>](https://github.com/nuxt/scripts/commit/c1322798)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/scripts/compare/v1.2.0...v1.2.1)

---

## v2.2.3 (nuxt/icon) - 2026-06-02

[Release notes](https://github.com/nuxt/icon/releases/tag/v2.2.3)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- Scope per-instance customize to unique CSS selector &nbsp;-&nbsp; by @mukundshah and **Sébastien Chopin** in https://github.com/nuxt/icon/issues/483 [<samp>(17d93)</samp>](https://github.com/nuxt/icon/commit/17d9348)
- **server**:
  - Use `ufo` for query parsing to fix h3 v2 compatibility &nbsp;-&nbsp; by @benjamincanac and @atinux in https://github.com/nuxt/icon/issues/493 [<samp>(93172)</samp>](https://github.com/nuxt/icon/commit/931722e)
  - Guard collection lookup against prototype keys &nbsp;-&nbsp; by @itsmelouis and **Sébastien Chopin** in https://github.com/nuxt/icon/issues/488 [<samp>(45025)</samp>](https://github.com/nuxt/icon/commit/4502522)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/icon/compare/v2.2.2...v2.2.3)

---

## v4.4.7 (nuxt/nuxt) - 2026-06-02

[Release notes](https://github.com/nuxt/nuxt/releases/tag/v4.4.7)

> 4.4.7 is a security hotfix release.

👉 make sure to check https://github.com/nuxt/nuxt/security/advisories to view open advisories resolved by this release.

## 👉 Changelog

[compare changes](https://github.com/nuxt/nuxt/compare/v4.4.6...v4.4.7)
### 🩹 Fixes
- **nitro:** Assign `noSSR` before deciding payload extraction ([#35108](https://github.com/nuxt/nuxt/pull/35108))
- **vite:** Avoid filtering out dirs with shared prefix from `allowDirs` ([#35112](https://github.com/nuxt/nuxt/pull/35112))
- **nuxt:** Use resolve from `pathe` for buildCache path boundary check ([#35111](https://github.com/nuxt/nuxt/pull/35111))
- **nuxt:** Prevent sibling-directory traversal in test component wrapper ([#35110](https://github.com/nuxt/nuxt/pull/35110))
- **nitro:** Pass event data to `isValid` in dev clipboard-copy listener ([#35109](https://github.com/nuxt/nuxt/pull/35109))
- **nuxt:** Validate protocols in `reloadNuxtApp` path before reload ([#35115](https://github.com/nuxt/nuxt/pull/35115))
- **vite:** Prefix public asset virtuals with null byte ([9e303b438](https://github.com/nuxt/nuxt/commit/9e303b438))
- **nuxt:** Re-run `getCachedData` after initial fetch ([#35122](https://github.com/nuxt/nuxt/pull/35122))
- **nuxt:** Propagate `useFetch`/`useAsyncData` factory types ([#35133](https://github.com/nuxt/nuxt/pull/35133))
- **vite:** Close vite dev server on nuxt close ([a10a68abc](https://github.com/nuxt/nuxt/commit/a10a68abc))
- **kit,nuxt:** Handle cancelling prompts to install packages ([e84813229](https://github.com/nuxt/nuxt/commit/e84813229))
- **kit:** Avoid excluding node-context files in legacy tsconfig ([#35152](https://github.com/nuxt/nuxt/pull/35152))
- **nuxt:** Handle missing payload in chunkError listener ([#35155](https://github.com/nuxt/nuxt/pull/35155))
- **nuxt:** Await in-lifght template generation when closing nuxt ([#35181](https://github.com/nuxt/nuxt/pull/35181))
- **nuxt:** Clarify page and layout usage warnings ([#35184](https://github.com/nuxt/nuxt/pull/35184))
- **webpack:** Surface compilation errors when stats.toString is empty ([073b07851](https://github.com/nuxt/nuxt/commit/073b07851))
- **nuxt:** Reject prototype-chain keys in the island registry ([#35205](https://github.com/nuxt/nuxt/pull/35205))
- **nuxt:** Apply `isScriptProtocol` guard to `navigateTo` open option ([#35206](https://github.com/nuxt/nuxt/pull/35206))
- **nuxt:** Prevent server-only page island from recursing via `<NuxtPage>` ([#35198](https://github.com/nuxt/nuxt/pull/35198))
- **rspack,webpack:** Require loopback host when missing same-origin signals ([#35200](https://github.com/nuxt/nuxt/pull/35200))
- **nitro:** Gate chrome devtools workspace endpoint to local requests ([#35201](https://github.com/nuxt/nuxt/pull/35201))
- **nuxt:** Escape props in `<NuxtClientFallback>` ssr output ([#35199](https://github.com/nuxt/nuxt/pull/35199))
- **kit:** Improve TS extension stripping/substitutions ([#35233](https://github.com/nuxt/nuxt/pull/35233))
- **nuxt:** Preserve `.d.mts`/`.d.cts` in `resolveTypePaths` ([#35235](https://github.com/nuxt/nuxt/pull/35235))
- **nuxt:** Escape `<NoScript>` slot content ([4b054e9d9](https://github.com/nuxt/nuxt/commit/4b054e9d9))
- **nuxt:** Match route rules case-insensitively to mirror `vue-router` ([07e39cd6f](https://github.com/nuxt/nuxt/commit/07e39cd6f))
- **nuxt:** Reject script-capable protocols in `<NuxtLink>` href ([0103ce06f](https://github.com/nuxt/nuxt/commit/0103ce06f))
- **nuxt:** Block path-normalization open redirect in `navigateTo` ([2cce6fb02](https://github.com/nuxt/nuxt/commit/2cce6fb02))
- **nuxt:** Reject cross-origin paths in `reloadNuxtApp` ([e447a793c](https://github.com/nuxt/nuxt/commit/e447a793c))
- **vite:** Bind vite-node IPC to a permissioned filesystem socket ([1f9f4767a](https://github.com/nuxt/nuxt/commit/1f9f4767a))
### 💅 Refactors
- **kit,nuxt,vite:** Use `es2023` array methods ([#34980](https://github.com/nuxt/nuxt/pull/34980))
- **nuxt:** Replace `runInNewContext` with AST walker ([d72a89ef4](https://github.com/nuxt/nuxt/commit/d72a89ef4))
### 📖 Documentation
- Document vite client and server options ([#35090](https://github.com/nuxt/nuxt/pull/35090))
- Add dedicated module dependencies page ([#35171](https://github.com/nuxt/nuxt/pull/35171))
- Add nodeTsConfig and sharedTsConfig options ([#35231](https://github.com/nuxt/nuxt/pull/35231))
- Edit for clarity and grammar ([#35214](https://github.com/nuxt/nuxt/pull/35214))
### 🏡 Chore
- Use `execFileSync` for safety in release scripts ([1d7baaf01](https://github.com/nuxt/nuxt/commit/1d7baaf01))
- Assert there is always a tag ([e98c47c3c](https://github.com/nuxt/nuxt/commit/e98c47c3c))
- Add autofix action tag in comment ([ffa5c0098](https://github.com/nuxt/nuxt/commit/ffa5c0098))
- Fix type in test ([a549652e2](https://github.com/nuxt/nuxt/commit/a549652e2))
- Update renovate minimum release age ([d12d5e58a](https://github.com/nuxt/nuxt/commit/d12d5e58a))
- Fix lychee dynamic composable exclude ([#35119](https://github.com/nuxt/nuxt/pull/35119))
- Update lockfile ([91186dc51](https://github.com/nuxt/nuxt/commit/91186dc51))
- Lint ([dbc58965c](https://github.com/nuxt/nuxt/commit/dbc58965c))
### ✅ Tests
- Update test for js payload rendering ([bdcb81536](https://github.com/nuxt/nuxt/commit/bdcb81536))
- Cover add regression test for hmr in sibling local layers ([#35125](https://github.com/nuxt/nuxt/pull/35125))
- Improve reliability of hmr test ([1d709b3cc](https://github.com/nuxt/nuxt/commit/1d709b3cc))
### 🤖 CI
- Always run all tests for 4.x/3.x ([0dc4665cf](https://github.com/nuxt/nuxt/commit/0dc4665cf))
- Migrate from tibdex ([ded29dc0f](https://github.com/nuxt/nuxt/commit/ded29dc0f))
- Add zizmor github actions check ([#35089](https://github.com/nuxt/nuxt/pull/35089))
- Update to agentscan v1.8.0 ([#35120](https://github.com/nuxt/nuxt/pull/35120))
- Automatically close PRs from automated accounts ([#35161](https://github.com/nuxt/nuxt/pull/35161))
- Disable provenance-change enforcement in dependency-review ([a2cf43e68](https://github.com/nuxt/nuxt/commit/a2cf43e68))

### ❤️ Contributors
- Daniel Roe (@danielroe)
- David Stack (@davidstackio)
- David De Sloovere (@DavidDeSloovere)
- anton-gor-dev (@anton-gor-dev)
- Noah3521 (@Noah3521)
- Shahar Aviram (@ShaharAviram1)
- Matej Černý (@cernymatej)
- Mohit Kumar (@mohitkum4r)
- Matteo Gabriele (@MatteoGabriele)
- Julien Huang (@huang-julien)
- Damian Głowala (@DamianGlowala)

---

## v3.21.7 (nuxt/nuxt) - 2026-06-02

[Release notes](https://github.com/nuxt/nuxt/releases/tag/v3.21.7)

> 3.21.7 is the a security hotfix release.

👉 make sure to check https://github.com/nuxt/nuxt/security/advisories to view open advisories resolved by this release.

## 👉 Changelog

[compare changes](https://github.com/nuxt/nuxt/compare/v3.21.6...v3.21.7)
### 🩹 Fixes
- **nitro:** Assign `noSSR` before deciding payload extraction ([#35108](https://github.com/nuxt/nuxt/pull/35108))
- **vite:** Avoid filtering out dirs with shared prefix from `allowDirs` ([#35112](https://github.com/nuxt/nuxt/pull/35112))
- **nuxt:** Use resolve from `pathe` for buildCache path boundary check ([#35111](https://github.com/nuxt/nuxt/pull/35111))
- **nuxt:** Prevent sibling-directory traversal in test component wrapper ([#35110](https://github.com/nuxt/nuxt/pull/35110))
- **nitro:** Pass event data to `isValid` in dev clipboard-copy listener ([#35109](https://github.com/nuxt/nuxt/pull/35109))
- **nuxt:** Validate protocols in `reloadNuxtApp` path before reload ([#35115](https://github.com/nuxt/nuxt/pull/35115))
- **vite:** Resolve vite `clientServer` with `ssr: false` ([#34959](https://github.com/nuxt/nuxt/pull/34959))
- **vite:** Prefix public asset virtuals with null byte ([38d330179](https://github.com/nuxt/nuxt/commit/38d330179))
- **nuxt:** Handle missing payload in chunkError listener ([#35155](https://github.com/nuxt/nuxt/pull/35155))
- **vite:** Close vite dev server on nuxt close ([d007d7060](https://github.com/nuxt/nuxt/commit/d007d7060))
- **kit,nuxt:** Handle cancelling prompts to install packages ([59821a5ca](https://github.com/nuxt/nuxt/commit/59821a5ca))
- **nuxt:** Await in-lifght template generation when closing nuxt ([#35181](https://github.com/nuxt/nuxt/pull/35181))
- **webpack:** Surface compilation errors when stats.toString is empty ([71dccff2b](https://github.com/nuxt/nuxt/commit/71dccff2b))
- **kit:** Improve TS extension stripping/substitutions ([#35233](https://github.com/nuxt/nuxt/pull/35233))
- **nuxt:** Preserve `.d.mts`/`.d.cts` in `resolveTypePaths` ([#35235](https://github.com/nuxt/nuxt/pull/35235))
- **nuxt:** Reject prototype-chain keys in the island registry ([#35205](https://github.com/nuxt/nuxt/pull/35205))
- **nitro:** Gate chrome devtools workspace endpoint to local requests ([#35201](https://github.com/nuxt/nuxt/pull/35201))
- **nuxt:** Escape props in `<NuxtClientFallback>` ssr output ([#35199](https://github.com/nuxt/nuxt/pull/35199))
- **nuxt:** Apply `isScriptProtocol` guard to `navigateTo` open option ([#35206](https://github.com/nuxt/nuxt/pull/35206))
- **rspack,webpack:** Require loopback host when missing same-origin signals ([#35200](https://github.com/nuxt/nuxt/pull/35200))
- **nuxt:** Absolutely resolve `defu` in app config template ([40bedf0db](https://github.com/nuxt/nuxt/commit/40bedf0db))
- **nuxt:** Match route rules case-insensitively to mirror `vue-router` ([3f3e3fa7b](https://github.com/nuxt/nuxt/commit/3f3e3fa7b))
- **nuxt:** Escape `<NoScript>` slot content ([7fea9fd68](https://github.com/nuxt/nuxt/commit/7fea9fd68))
- **nuxt:** Block path-normalization open redirect in `navigateTo` ([1f2dd5e78](https://github.com/nuxt/nuxt/commit/1f2dd5e78))
- **nuxt:** Reject cross-origin paths in `reloadNuxtApp` ([6497d99dd](https://github.com/nuxt/nuxt/commit/6497d99dd))
- **vite:** Bind vite-node IPC to a permissioned filesystem socket ([c293bf950](https://github.com/nuxt/nuxt/commit/c293bf950))
- **nuxt:** Reject script-capable protocols in `<NuxtLink>` href ([53284043d](https://github.com/nuxt/nuxt/commit/53284043d))
- **nuxt:** Clarify page and layout usage warnings ([#35184](https://github.com/nuxt/nuxt/pull/35184))
- **nuxt:** Do not absolutely resolve `defu` ([d11d7b1b5](https://github.com/nuxt/nuxt/commit/d11d7b1b5))
### 📖 Documentation
- Edit for clarity and grammar ([#35214](https://github.com/nuxt/nuxt/pull/35214))
- Add dedicated module dependencies page ([#35171](https://github.com/nuxt/nuxt/pull/35171))
### 🏡 Chore
- Use `execFileSync` for safety in release scripts ([9a455a658](https://github.com/nuxt/nuxt/commit/9a455a658))
- Assert there is always a tag ([8da21fba8](https://github.com/nuxt/nuxt/commit/8da21fba8))
- Fix type in test ([bc2837125](https://github.com/nuxt/nuxt/commit/bc2837125))
- Fix lychee dynamic composable exclude ([#35119](https://github.com/nuxt/nuxt/pull/35119))
- Add autofix action tag in comment ([70eba297f](https://github.com/nuxt/nuxt/commit/70eba297f))
- Update renovate minimum release age ([27a6821a1](https://github.com/nuxt/nuxt/commit/27a6821a1))
### ✅ Tests
- Update test for js payload rendering ([b51a80840](https://github.com/nuxt/nuxt/commit/b51a80840))
- Improve reliability of hmr test ([0078499f0](https://github.com/nuxt/nuxt/commit/0078499f0))
### 🤖 CI
- Always run all tests for 4.x/3.x ([0519c0ade](https://github.com/nuxt/nuxt/commit/0519c0ade))
- Update to agentscan v1.8.0 ([#35120](https://github.com/nuxt/nuxt/pull/35120))
- Automatically close PRs from automated accounts ([#35161](https://github.com/nuxt/nuxt/pull/35161))
- Migrate from tibdex ([6277aedcb](https://github.com/nuxt/nuxt/commit/6277aedcb))
- Disable provenance-change enforcement in dependency-review ([1d4910eed](https://github.com/nuxt/nuxt/commit/1d4910eed))
- Add zizmor github actions check ([#35089](https://github.com/nuxt/nuxt/pull/35089))

### ❤️ Contributors
- Daniel Roe (@danielroe)
- Matej Černý (@cernymatej)
- anton-gor-dev (@anton-gor-dev)
- Julien Huang (@huang-julien)
- David Stack (@davidstackio)
- Noah3521 (@Noah3521)
- Matteo Gabriele (@MatteoGabriele)
- Mohit Kumar (@mohitkum4r)
- Florian Heuberger (@Flo0806)

---

## v1.2.0 (nuxt/scripts) - 2026-06-02

[Release notes](https://github.com/nuxt/scripts/releases/tag/v1.2.0)

### &nbsp;&nbsp;&nbsp;🚀 Features

- SpeedCurve LUX &nbsp;-&nbsp; by @zizzfizzix and @harlan-zw in https://github.com/nuxt/scripts/issues/782 [<samp>(82696)</samp>](https://github.com/nuxt/scripts/commit/8269677e)
- **globals**: Runtime disable + scripts:globals hook &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/808 [<samp>(62b04)</samp>](https://github.com/nuxt/scripts/commit/62b04172)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- **deps**: Add support for unhead v3 &nbsp;-&nbsp; by @danielroe and @harlan-zw in https://github.com/nuxt/scripts/issues/795 [<samp>(fefd9)</samp>](https://github.com/nuxt/scripts/commit/fefd9fe1)
- **google-maps**: Deprecate heatmap component &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/809 [<samp>(c92ac)</samp>](https://github.com/nuxt/scripts/commit/c92ac39a)
- **google-maps,gravatar**: A11y misc fixes &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/802 [<samp>(bb42b)</samp>](https://github.com/nuxt/scripts/commit/bb42bea3)
- **instagram-embed**: Use facebookexternalhit UA & don't cache empty shells &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/806 [<samp>(87b13)</samp>](https://github.com/nuxt/scripts/commit/87b13429)
- **proxy**: Strip hop-by-hop request headers (RFC 7230) &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/804 [<samp>(da57b)</samp>](https://github.com/nuxt/scripts/commit/da57b6ec)
- **speedcurve**: Vendor LUX snippet and group schema options &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/805 [<samp>(ac0ad)</samp>](https://github.com/nuxt/scripts/commit/ac0ad5ca)
- **stripe**: Allow selecting Stripe.js SDK version &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/799 [<samp>(ae8d2)</samp>](https://github.com/nuxt/scripts/commit/ae8d2c23)
- **vimeo**: A11y keyboard and video placeholder alt text &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/803 [<samp>(33a11)</samp>](https://github.com/nuxt/scripts/commit/33a113a2)
- **youtube-player**: A11y keyboard-accessible &nbsp;-&nbsp; by @harlan-zw in https://github.com/nuxt/scripts/issues/798 [<samp>(8b4e9)</samp>](https://github.com/nuxt/scripts/commit/8b4e9998)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/scripts/compare/v1.1.1...v1.2.0)

---

## v4.0.0-alpha.7 (nuxt/devtools) - 2026-06-02

[Release notes](https://github.com/nuxt/devtools/releases/tag/v4.0.0-alpha.7)

### &nbsp;&nbsp;&nbsp;🐞 Bug Fixes

- **devtools**: Don't scope dock plugin with `{ server: false }` &nbsp;-&nbsp; by @antfu [<samp>(b2665)</samp>](https://github.com/nuxt/devtools/commit/b2665eb0)

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/devtools/compare/v4.0.0-alpha.6...v4.0.0-alpha.7)

---

## v4.0.0-alpha.6 (nuxt/devtools) - 2026-05-29

[Release notes](https://github.com/nuxt/devtools/releases/tag/v4.0.0-alpha.6)

*No significant changes*

##### &nbsp;&nbsp;&nbsp;&nbsp;[View changes on GitHub](https://github.com/nuxt/devtools/compare/v4.0.0-alpha.5...v4.0.0-alpha.6)

---

## v4.8.1 (nuxt/ui) - 2026-05-28

[Release notes](https://github.com/nuxt/ui/releases/tag/v4.8.1)

## :bug: Bug Fixes

* **ContentSearch/DashboardSearch:** proxy missing CommandPalette props ([#6505](https://github.com/nuxt/ui/issues/6505)) ([631f5dc](https://github.com/nuxt/ui/commit/631f5dc543fecaa36d5090a10a3db3223e9671b5))
* **Form:** add `method="post"` to prevent credential leaking via GET before hydration ([#6512](https://github.com/nuxt/ui/issues/6512)) ([7a0825a](https://github.com/nuxt/ui/commit/7a0825ad6a17627ce4c6dd860df3cebb7cf1d813))
* **Icon:** avoid recursive icon resolution ([#6495](https://github.com/nuxt/ui/issues/6495)) ([d50c121](https://github.com/nuxt/ui/commit/d50c121c05372082a7414d205d612513e89d3af7))
* **locale:** improve Thai translation accuracy and consistency ([#6509](https://github.com/nuxt/ui/issues/6509)) ([5d82418](https://github.com/nuxt/ui/commit/5d82418c56e956a9f1b684b48f9bf40197cdf3aa))
* **module:** expose component theme keys in AppConfig type ([#6520](https://github.com/nuxt/ui/issues/6520)) ([ffaf163](https://github.com/nuxt/ui/commit/ffaf163f77601015e4fa9e29bc18a33ca7dcb93d))
* **Select/SelectMenu/InputMenu:** add fallback for `max-height` ([#6503](https://github.com/nuxt/ui/issues/6503)) ([f4d7cbe](https://github.com/nuxt/ui/commit/f4d7cbe71f3cb62eaf8b92a4da73f115324fcf6a))

## :wave: Contributors

* @Akur1a
* @bansal
* @benjamincanac
* @maximepvrt
* @thanet-s

**Full Changelog**: https://github.com/nuxt/ui/compare/v4.8.0...v4.8.1

---
