Nuxt v3.21.10

nuxt/nuxt
Share
Summary
Nuxt v3.21.10 is a critical security release addressing several vulnerabilities, including server-side RCE and unauthorized component instantiation. Developers are urged to upgrade immediately using `npx nuxt upgrade --dedupe`. The update also includes various fixes for SSR issues, layout meta synchronization, and improvements to the development experience.

Full release notes

⚠️ This is a security release. We recommend upgrading as soon as possible with npx nuxt upgrade --dedupe.

It fixes server-side RCE and unauthorized component instantiation via server island props, a route rule authorization bypass, server component DoS, and dev server path disclosure. Refreshing your lockfile also pulls in @nuxt/[email protected], which fixes a separate critical development-only RCE.

If you already upgraded for the earlier route rule advisory (CVE-2026-53721), you still need this release: one of the fixes addresses a regression introduced by that fix.

Full details: Nuxt Security Patch Releases and GitHub Security Advisories.

👉 Changelog

compare changes

🩹 Fixes

  • nuxt: Clear hide/reset timeouts in set() (#35534)
  • nuxt: Preserve trailing slash in NuxtLink href when unset (#35501)
  • vite: Resolve SSR inlined CSS module class name mismatch (#35610)
  • nuxt: Sync layout meta during middleware on SSR (#35633)
  • nuxt: Update client URL to match SSR on fatal middleware error (#35637)
  • nuxt: Watch external component directories in development (#35652)
  • nuxt: Don't cross-pollute useAsyncData cache on reactive key change (#35656)
  • nuxt: Return global route for useRoute in detached effect scope (#35659)
  • nuxt: Ignore custom name or path when reusing an existing page in pages:extend (#35661)
  • nuxt: Preserve explicit useFetch method inference (#35671)
  • nuxt: Correct default export detection in plugin metadata (#35676)
  • nuxt: Reload real page module on HMR of JSX render-function pages (#35678)
  • vite: Ensure server sourcemap-preserver plugin actually runs (#35680)
  • nuxt: Resolve @unhead/vue/* from nuxt's dependency tree (#35690)
  • nuxt: Don't apply scroll behaviour after a subsequent nav (#35719)
  • vite: Preserve css suffix when extracting ssr inline styles (#35714)
  • nuxt: Don't exclude client entry module from style extraction (#35720)
  • kit: Avoid mutating layer configs when resolving options (#35729)
  • nuxt: Generate layout types even when pages module is disabled (#35717)
  • nitro: Skip resource hints for stylesheets already rendered as blocking links (#35691)
  • nuxt: Revalidate cached route payloads instead of using force-cache (#35672)
  • nuxt: Preserve query params in cached payload extraction (#35696)
  • rspack,webpack: Resolve loaders and runtime deps from nuxt dirs (#35568)
  • nuxt: Render client components in nested server components (#35669)
  • nuxt: Remove dev error overlay when error is cleared (#35821)
  • rspack,webpack: Resolve bundled postcss defaults from builder (#35823)
  • schema: Normalise slashes in app.buildAssetsDir (#35833)
  • nuxt: Case-fold route rule keys to match folded lookups (619963309)
  • nitro: Require loopback peer for chrome devtools workspace endpoint (00f71bb65)
  • nitro: Bound island props and v-for to prevent unauthenticated DoS (668cdfdfd)
  • nuxt: Reject reserved template island prop under runtime compiler (5b60017f7)
  • nuxt: Reject top-level as prop for islands (00a2b0494)

📖 Documentation

  • Document relative baseURL workarounds (#34004)
  • Warn about runtimeCompiler security best practices (b76c1a8bd)
  • Warn about validating server component props (f6d72628d)

✅ Tests

  • Guard against transient undefined _route in gotoPath (5391e7e6a)
  • Raise route-HMR polling timeout to reduce e2e flakiness (cbc757c63)
  • kit: Scope loadNuxt temp dir so it doesn't delete sibling fixtures (72e4b5578)

❤️ Contributors

  • Daniel Roe (@danielroe)
  • Florian Heuberger (@Flo0806)
  • Matej Černý (@cernymatej)
  • bdbch (@bdbch)
  • Elecmonkey (@elecmonkey)
  • Ryota Watanabe (@wattanx)
  • kealan (@KealanAU)
  • Julien Huang (@huang-julien)
  • Luke Nelson (@luc122c)
  • Harlan Wilton (@harlan-zw)
  • Mateleo (@Mateleo)
  • lutejka (@lutejka)
  • Darlan José Batista do Prado (@DarlanPrado)
  • Max (@onmax)
  • Sushant (@sushantguri)
  • raminjafary (@raminjafary)

Latest Nuxt releases

All releases

Latest articles about Nuxt

Oops! I gave Nuxt permissions to delete files

Oops! I gave Nuxt permissions to delete files

Program With Erik

Nuxt 3 hits End Of Life

Nuxt 3 hits End Of Life

Certificates.dev

Nuxt 4.5 SSR Streaming Is Kind of a Big Deal

Nuxt 4.5 SSR Streaming Is Kind of a Big Deal

Program With Erik

How to Set Up an MCP Server for an Existing Nuxt App

How to Set Up an MCP Server for an Existing Nuxt App

Michael Hoffmann