Changelog

Discover the latest releases from Nuxt and the official modules.
@nuxt/scripts

v0.12.0

This release includes the merge of several new available scripts:

Thank you to all contributors. An extra special shout out to @OrbisK, @dennisadriaans, @DamianGlowala, @vachmara & @gelanderosh for their contributions in this release.

⚠️ Please test when upgrading, as there is breaking changes included.

   🚨 Breaking Changes

   🚀 Features

   🐞 Bug Fixes

    View changes on GitHub
@nuxt/ui

v3.3.5

🐛 Bug Fixes

  • InputMenu: ensure to pass a string to items when multiple (0031a75), closes #5018
  • InputTags: add blur and focus event handlers on input (#5007) (5db2708)
  • Progress: improve status-position when 0 (#4994) (e0891ea)
  • Tabs: use nullish coalescing on item value (a4ab796), closes #4804
  • types: allow arbitrary keys in tv config (#4992) (8d859ea)
  • types: resolve ambient declaration error in icons type (#4991) (526cb81)

New Contributors

Full Changelog: https://github.com/nuxt/ui/compare/v3.3.4...v3.3.5

@nuxt/ui

v4.0.0

We are excited to announce Nuxt UI v4, a major milestone that unifies Nuxt UI and Nuxt UI Pro into a single, fully open-source library. Following NuxtLabs joining Vercel in July, we're now able to offer 100+ production-ready components and a complete Figma Kit available for free to everyone.

Read the blog post announcement: https://nuxt.com/blog/nuxt-ui-v4

Get started with Nuxt UI v4 →

✨ Highlights

🌐 Unified and Open Source

Nuxt UI v4 marks a significant milestone by merging Nuxt UI and Nuxt UI Pro into one cohesive, fully open-source library:

  • 100+ components: Complete access to all components, including those previously exclusive to Pro
  • Figma Kit: Professional design resources now available to everyone
  • Single package: Everything unified under @nuxt/ui

🖥 Templates

All our previously exclusive templates for Nuxt and Vue are now available to everyone and updated to Nuxt UI v4:

  • Starter: A minimal template to get started with Nuxt UI
  • Landing: A modern landing page template powered by Nuxt Content
  • Docs: A documentation template powered by Nuxt Content
  • SaaS: A SaaS template with landing, pricing, docs and blog powered by Nuxt Content
  • Dashboard: A dashboard template with multi-column layout for building sophisticated admin interfaces
  • Chat: An AI chatbot template to build your own chatbot powered by Nuxt MDC and Vercel AI SDK
  • Portfolio: A sleek portfolio template to showcase your work, skills and blog powered by Nuxt Content
  • Changelog: A changelog template to display your repository releases notes from GitHub powered by Nuxt MDC

📚 Documentation

We've made extensive improvements to the documentation in v4 to provide a better developer experience:

  • Unified location: All documentation now lives under /docs/ with automatic redirects from legacy paths
  • Dedicated sections: Theme and Typography now have their own organized sections
  • AI-ready features: LLMs.txt endpoints and MCP Server integration for AI tools like Cursor, Windsurf, and GitHub Copilot

🌱 Migration from v3

The migration from v3 to v4 is designed to be smoother than previous major version transitions. We recommend reading the migration guide for step-by-step instructions.

For Nuxt UI users

  1. Update to @nuxt/ui@latest

For Nuxt UI Pro users

  1. Replace @nuxt/ui-pro with @nuxt/ui in your dependencies
  2. Update module registration from @nuxt/ui-pro to @nuxt/ui in your Nuxt config
  3. Change configuration key from uiPro to ui in your app config
  4. Update CSS imports from @nuxt/ui-pro to @nuxt/ui
  5. Update any import statements to reference @nuxt/ui

🙏 Acknowledgements

We want to extend a special thanks to everyone who supported Nuxt UI Pro. Your early adoption and feedback were instrumental in shaping Nuxt UI. You helped us fund, maintain, and improve the project, allowing us to reach this milestone where we can now offer these powerful tools to the entire community.

A huge thanks to the dedicated team behind Nuxt UI and our incredible community of 250+ contributors. Your hard work, creativity, and passion have been the driving force behind this project's success.

Thank you for being part of this journey 💚

@nuxt/ui

v4.0.0-beta.0

🐛 Bug Fixes

  • ChatMessages: wrap indicator with slot (#5036) (c00bf30)
  • CheckboxGroup: proxy generic to emits (ffa5b23)
  • Form: improve nested form validation handling (#5024) (77a554e)
  • Form: remove joi and yup in favor of @standard-schema/spec (#5035) (723cf36)
  • InputMenu: ensure to pass a string to items when multiple (9beccbb), closes #5018
  • InputTags: add blur and focus event handlers on input (#5007) (3fd2614)
  • locale: improve translations in pt locale (#5003) (725ef9b)
  • module: only inject tailwindcss vite plugin once (#5008) (c2e39dd)
  • ProseImg: add w-full by default (#4997) (de47add)
  • Tabs: use nullish coalescing on item value (340fc48), closes #4804
  • Tree: remove value-key in favor of get-key (#4999) (240ff42)
  • types: allow arbitrary keys in tv config (#4992) (ae77b69)

New Contributors

Full Changelog: https://github.com/nuxt/ui/compare/v4.0.0-alpha.2...v4.0.0-beta.0

@nuxt/ui

v4.0.0-alpha.2

This 4.0.0-alpha.2 release focused mostly on stability and documentation.

The official v4 release should come next week after some more testing.

📚 Documentation

We've made significant improvements to the documentation in this release.

🚨 Breaking Changes

  • Form: don't mutate the form's state if transformations are enabled (#4902)

Read the migration guide about this change: https://ui4.nuxt.com/docs/getting-started/migration/v4#changes-to-form-component

🚀 Features

  • ContentNavigation: handle collapsible false with type multiple (c42c2ab)

🐛 Bug Fixes

  • Banner: ensure actions slot renders (#4946) (5d6e1fc)
  • CodeTree/Tree: improve accessibility (#4945) (117b4b3)
  • components: dot notation type support for labelKey and valueKey (#4933) (11a0320)
  • components: proxySlots reactivity (#4969) (3173bee)
  • components: standardize naming for type interfaces (#4990) (788d2de)
  • FileUpload: add missing button type (f33e43c), closes #4935
  • Form: don't mutate the form's state if transformations are enabled (#4902) (99dbe81)
  • Form: handling race condition on clear function (#4843) (2269b48)
  • InputMenu/Select/SelectMenu: show falsy value when model value is falsy (#4882) (073dd14)
  • locale: improve id name (#4890) (1b5d741)
  • Marquee: handle RTL mode (#4887) (1846079)
  • Progress: improve status-position when 0 (#4994) (0e1e44c)
  • types: export missing tv types (#4971) (2bf273c)
  • types: resolve ambient declaration error in icons type (#4991) (6ddf899)

🔥 Performances

  • module: do not block setup by importing plugin (#4923) (695d9f7)

🌐 Locales

👋 New Contributors

Full Changelog: https://github.com/nuxt/ui/compare/v4.0.0-alpha.1...v4.0.0-alpha.2

@nuxt/content

v3.7.1

  • remove zod and zod-to-json-schema from optional deps (#3541) (8e038f0)
nuxt

v4.1.2

4.1.2 is a regularly scheduled patch release.

✅ Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.

👉 Changelog

compare changes

🔥 Performance

  • kit: Do not normalise templates in loop if dst is present (#33200)
  • nuxt: Remove watcher from hydrate-when lazy hydration strategy (#33199)
  • nuxt,schema: Normalise components + directories more efficiently (#33207)
  • kit,nuxt: Reduce unnecessary iteration in nuxt code (#33212)
  • nuxt: Skip running lazy hydration transform with filter (#33213)

🩹 Fixes

  • schema: Add pkg-types to dependencies (9fe2541ca)
  • nuxt: Ignore errors when treeshaking composables within other composables (f99eac516)
  • nuxt: Do not tree-shake composables within other composables (#33153)
  • kit: Ensure module dependencies are typed correctly (4568e8451)
  • nuxt: Prevent Infinity backgroundSize in loading indicator (#33211)
  • nuxt: Remove unused enabled from components dir options (#32844)
  • nuxt: Sync watch request in useAsyncData (#33192)
  • nuxt: Move key imports logic after all modules run (#33214)

📖 Documentation

  • Update reference to source dir (65712297a)
  • Update language on bridge head migration (c9d986889)
  • Update file path for pinia store (#33205)
  • Add app/ suffix to a few links (#33217)

🏡 Chore

✅ Tests

❤️ Contributors

  • Julien Huang (@huang-julien)
  • Daniel Roe (@danielroe)
  • Adrien Foulon (@Tofandel)
  • Matej Černý (@cernymatej)
  • Антон Стасюк (@11Alone11)
  • wuiyang (@wuiyang)
  • Revadike (@Revadike)
nuxt

v3.19.2

3.19.2 is a regularly scheduled patch release.

✅ Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.

👉 Changelog

compare changes

🔥 Performance

  • kit: Do not normalise templates in loop if dst is present (#33200)
  • nuxt: Remove watcher from hydrate-when lazy hydration strategy (#33199)
  • nuxt,schema: Normalise components + directories more efficiently (#33207)
  • kit,nuxt: Reduce unnecessary iteration in nuxt code (#33212)
  • nuxt: Skip running lazy hydration transform with filter (#33213)

🩹 Fixes

  • schema: Add pkg-types to dependencies (a6e5dd756)
  • nuxt: Ignore errors when treeshaking composables within other composables (e3e42ac77)
  • nuxt: Do not tree-shake composables within other composables (#33153)
  • kit: Ensure module dependencies are typed correctly (ea16d182a)
  • nuxt: Prevent Infinity backgroundSize in loading indicator (#33211)
  • nuxt: Remove unused enabled from components dir options (#32844)
  • nuxt: Sync watch request in useAsyncData (#33192)
  • nuxt: Move key imports logic after all modules run (#33214)

📖 Documentation

  • Update language on bridge head migration (32e76f609)

🏡 Chore

❤️ Contributors

  • Daniel Roe (@danielroe)
  • Adrien Foulon (@Tofandel)
  • Matej Černý (@cernymatej)
  • Антон Стасюк (@11Alone11)
  • wuiyang (@wuiyang)
@nuxt/content

v3.7.0

🎉 Highlights

  • Support multiple validator libraries Zod v4 and Valibot
  • Collection fields can inherit their schema from Vue components

!NOTE The z re-export from @nuxt/content is deprecated and will be removed in a future release. Import z from zod (or zod/v3) instead.

🚀 Enhancements

  • Adopt standard schema spec and support different validators (#3524)
  • Inherit component prop types in content collection (#3451)

🩹 Fixes

  • Ignore OSX meta file .DS_Store (fe5d7f91)
  • Ignore .DS_Store files in all subdirectories (c7a9af3f)
  • nuxthub: Missing line separator in database migrations (#3464)
  • Do not register close hook if websocket is disabled (#3474)
  • ProseCode preview syntax highlighting (#3491)
  • Improve websocket and watcher cleanup handling (#3478)
  • Deprecate nitro export in favor of server (ec97064f)
  • Block experimental sqlite warning on node (5ac31da0)
  • Use listhen's publicUrl if available (#3500)
  • Add dependency at Nuxt root dir (#3525)
  • inherit: Type generation (63500f33)
  • Normalize source cwd (#3532)
  • inherit: Issue with property definition in arrays (873b7687)
  • inherit: Try resolve component from root directory (b0073f1d)
  • inherit: Cache component meta (e9658de3)

📖 Documentation

  • Use vue <slot> (#3460)
  • collections: Remove useless docs (55e34ad3)
  • Document sqliteConnector (f97ea701)
  • Extend tip for azure static web apps (#3472)
  • Create examples and integrations section (#3473)
  • template: Update docus base dir (6a028d19)
  • template: Update docus and add i18n as draft (a9fed2f9)
  • Fix typo in content editors (#3486)
  • I18n example useless import (#3479)
  • Fixed example syntax (#3495)
  • ui: Update green to match with nuxt (31baffb9)
  • Fix nativeSqlite configuration link (#3508)
  • studio: IconLibraries option in editor schema def (8c3b55ac)
  • Use kbd for keyboard shortcuts (9979388d)

🏡 Chore

  • announcement: Nuxtlabs joins vercel (80acc862)
  • Upgrade deps (17af59c6)
  • Upgrade @nuxtjs/i18n (81bf914c)
  • Examples with the right argument order (#3493)
  • Upgrade deps (#3498)
  • Upgrade to Nuxt 4 (#3499)
  • Update WebSocket content reload logger prefix for clarity (#3522)
  • Use NuxtHub nightly (#3536)

❤️ Contributors

nuxt

v4.1.1

v4.1.1 is a regularly scheduled patch release

✅ Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.

👉 Changelog

compare changes

🩹 Fixes

  • nuxt: Correct relative path of auto imported components (#33122)
  • nuxt: Prefer accessing globalThis over window (#33125)
  • nuxt: Migrate to AST-aware tree-shaking + route injection (#33128)
  • nuxt: Ignore #components import mapping inside packages that use it internally (#33049)
  • vite: Remove explicit vite-node configuration of deps.inline (#33133)
  • nuxt: Include trace in dev-time useRoute usage warning (#33039)
  • kit: Improve DX by displaying module name when possible (#33137)
  • nuxt: Print route middleware path in warning (#33136)
  • nuxt: Include core auto-imports from imports:sources in override warning (#33050)
  • nuxt: Render relative importmap entry path if required (#33146)

📖 Documentation

  • Add -- to bun create command (5e661f0ca)
  • Add app/ prefix in lots of cases (#33117)
  • Add JSDoc for navigateTo (#21442)

🏡 Chore

🤖 CI

  • Remove default discord reactions from thread (more noise than it's worth) (183913fe2)
  • Rewrite release workflow in ts + support multiple tags (4469ead82)
  • Pass correct flag (711037cda)
  • Pass tag via env variable (fb83cd5ba)
  • Drop 4x tags from releases (1cd8a6857)

❤️ Contributors

  • Daniel Roe (@danielroe)
  • Matej Černý (@cernymatej)
  • Bobbie Goede (@BobbieGoede)
  • Sébastien Chopin (@atinux)
  • Octavio Araiza (@8ctavio)
  • Michael Brevard (@GalacticHypernova)
  • abeer0 (@iiio2)
  • 山吹色御守 (@KazariEX)
nuxt

v3.19.1

v3.19.1 is a regularly scheduled patch release

✅ Upgrading

Our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

This will deduplicate your lockfile as well, and help ensure that you pull in updates from other dependencies that Nuxt relies on, particularly in the unjs ecosystem.

👉 Changelog

compare changes

🩹 Fixes

  • nuxt: Correct relative path of auto imported components (#33122)
  • nuxt: Prefer accessing globalThis over window (#33125)
  • nuxt: Migrate to AST-aware tree-shaking + route injection (#33128)
  • nuxt: Ignore #components import mapping inside packages that use it internally (#33049)
  • vite: Remove explicit vite-node configuration of deps.inline (#33133)
  • nuxt: Include trace in dev-time useRoute usage warning (#33039)
  • nuxt: Print route middleware path in warning (#33136)
  • nuxt: Include core auto-imports from imports:sources in override warning (#33050)
  • nuxt: Render relative importmap entry path if required (#33146)

📖 Documentation

  • Add documentation for module lifecycle hooks (#33115)
  • Add -- to bun create command (ab6aa8ee5)
  • Add JSDoc for navigateTo (#21442)

🏡 Chore

✅ Tests

🤖 CI

  • Remove default discord reactions from thread (more noise than it's worth) (2e3c91e0c)
  • Rewrite release workflow in ts + support multiple tags (478c64342)
  • Pass correct flag (a954f383f)
  • Pass tag via env variable (dcfc82688)
  • Drop 4x tags from releases (e3aa50d11)

❤️ Contributors

  • Daniel Roe (@danielroe)
  • Matej Černý (@cernymatej)
  • Bobbie Goede (@BobbieGoede)
  • Octavio Araiza (@8ctavio)
  • Michael Brevard (@GalacticHypernova)
  • abeer0 (@iiio2)
  • 山吹色御守 (@KazariEX)
nuxt

v4.1.0

👀 Highlights

🔥 Build and Performance Improvements

🍫 Enhanced Chunk Stability

Build stability has been significantly improved with import maps (#33075). This prevents cascading hash changes that could invalidate large portions of your build when small changes are made:

<!-- Automatically injected import map -->
<script type="importmap">{"imports":{"#entry":"/_nuxt/DC5HVSK5.js"}}</script>

By default, JS chunks emitted in a Vite build are hashed, which means they can be cached immutably. However, this can cause a significant issue: a change to a single component can cause every hash to be invalidated, massively increasing the chance of 404s.

In short:

  1. a component is changed slightly - the hash of its JS chunk changes
  2. the page which uses the component has to be updated to reference the new file name
  3. the entry now has its hash changed because it dynamically imports the page
  4. every other file which imports the entry has its hash changed because the entry file name is changed

Obviously this wasn't optimal. With this new feature, the hash of (otherwise) unchanged files which import the entry won't be affected.

This feature is automatically enabled and helps maintain better cache efficiency in production. It does require native import map support, but Nuxt will automatically disable it if you have configured vite.build.target to include a browser that doesn't support import maps.

And of course you can disable it if needed:

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    entryImportMap: false
  }
})

🦀 Experimental Rolldown Support

Nuxt now includes experimental support for rolldown-vite (#31812), bringing Rust-powered bundling for potentially faster builds.

To try Rolldown in your Nuxt project, you need to override Vite with the rolldown-powered version since Vite is a dependency of Nuxt. Add the following to your package.json:

npm:

{
  "overrides": {
    "vite": "npm:rolldown-vite@latest"
  }
}

pnpm:

{
  "pnpm": {
    "overrides": {
      "vite": "npm:rolldown-vite@latest"
    }
  }
}

yarn:

{
  "resolutions": {
    "vite": "npm:rolldown-vite@latest"
  }
}

bun:

{
  "overrides": {
    "vite": "npm:rolldown-vite@latest"
  }
}

After adding the override, reinstall your dependencies. Nuxt will automatically detect when Rolldown is available and adjust its build configuration accordingly.

For more details on Rolldown integration, see the Vite Rolldown guide.

!NOTE This is experimental and may have some limitations, but offers a glimpse into the future of high-performance bundling in Nuxt.

🧪 Improved Lazy Hydration

Lazy hydration macros now work without auto-imports (#33037), making them more reliable when component auto-discovery is disabled:

<script setup>
// Works even with components: false
const LazyComponent = defineLazyHydrationComponent(
  'visible',
  () => import('./MyComponent.vue')
)
</script>

This ensures that components that are not "discovered" through Nuxt (e.g., because components is set to false in the config) can still be used in lazy hydration macros.

📄 Enhanced Page Rules

If you have enabled experimental extraction of route rules, these are now exposed on a dedicated rules property on NuxtPage objects (#32897), making them more accessible to modules and improving the overall architecture:

// In your module
nuxt.hook('pages:extend', pages => {
  pages.push({
    path: '/api-docs',
    rules: { 
      prerender: true,
      cors: true,
      headers: { 'Cache-Control': 's-maxage=31536000' }
    }
  })
})

The defineRouteRules function continues to work exactly as before, but now provides better integration possibilities for modules.

🚀 Module Development Enhancements

🪾 Module Dependencies and Integration

Modules can now specify dependencies and modify options for other modules (#33063). This enables better module integration and ensures proper setup order:

export default defineNuxtModule({
  meta: {
    name: 'my-module',
  },
  moduleDependencies: {
    'some-module': {
      // You can specify a version constraint for the module
      version: '>=2',
      // By default moduleDependencies will be added to the list of modules 
      // to be installed by Nuxt unless `optional` is set.
      optional: true,
      // Any configuration that should override `nuxt.options`.
      overrides: {},
      // Any configuration that should be set. It will override module defaults but
      // will not override any configuration set in `nuxt.options`.
      defaults: {}
    }
  },
  setup (options, nuxt) {
    // Your module setup logic
  }
})

This replaces the deprecated installModule function and provides a more robust way to handle module dependencies with version constraints and configuration merging.

🪝 Module Lifecycle Hooks

Module authors now have access to two new lifecycle hooks: onInstall and onUpgrade (#32397). These hooks allow modules to perform additional setup steps when first installed or when upgraded to a new version:

export default defineNuxtModule({
  meta: {
    name: 'my-module',
    version: '1.0.0',
  },

  onInstall(nuxt) {
    // This will be run when the module is first installed
    console.log('Setting up my-module for the first time!')
  },

  onUpgrade(inlineOptions, nuxt, previousVersion) {
    // This will be run when the module is upgraded
    console.log(`Upgrading my-module from v${previousVersion}`)
  }
})

The hooks are only triggered when both name and version are provided in the module metadata. Nuxt uses the .nuxtrc file internally to track module versions and trigger the appropriate hooks. (If you haven't come across it before, the .nuxtrc file should be committed to version control.)

!TIP This means module authors can begin implementing their own 'setup wizards' to provide a better experience when some setup is required after installing a module.

🙈 Enhanced File Resolution

The new ignore option for resolveFiles (#32858) allows module authors to exclude specific files based on glob patterns:

// Resolve all .vue files except test files
const files = await resolveFiles(srcDir, '**/*.vue', {
  ignore: ['**/*.test.vue', '**/__tests__/**']
})

📂 Layer Directories Utility

A new getLayerDirectories utility (#33098) provides a clean interface for accessing layer directories without directly accessing private APIs:

import { getLayerDirectories } from '@nuxt/kit'

const layerDirs = await getLayerDirectories(nuxt)
// Access key directories:
// layerDirs.app        - /app/ by default
// layerDirs.appPages   - /app/pages by default
// layerDirs.server     - /server by default
// layerDirs.public     - /public by default

✨ Developer Experience Improvements

🎱 Simplified Kit Utilities

Several kit utilities have been improved for better developer experience:

  • addServerImports now supports single imports (#32289):
// Before: required array
addServerImports([{ from: 'my-package', name: 'myUtility' }])

// Now: can pass directly
addServerImports({ from: 'my-package', name: 'myUtility' })

🔥 Performance Optimizations

This release includes several internal performance optimizations:

  • Improved route rules cache management (#32877)
  • Optimized app manifest watching (#32880)
  • Better TypeScript processing for page metadata (#32920)

🐛 Notable Fixes

  • Improved useFetch hook typing (#32891)
  • Better handling of TypeScript expressions in page metadata (#32902, #32914)
  • Enhanced route matching and synchronization (#32899)
  • Reduced verbosity of Vue server warnings in development (#33018)
  • Better handling of relative time calculations in <NuxtTime> (#32893)

✅ Upgrading

As usual, our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.

👉 Changelog

compare changes

🚀 Enhancements

  • kit: Add ignore option to resolveFiles (#32858)
  • kit: Add onInstall and onUpgrade module hooks (#32397)
  • nuxt,vite: Add experimental support for rolldown-vite (#31812)
  • nuxt: Extract defineRouteRules to page rules property (#32897)
  • nuxt,vite: Use importmap to increase chunk stability (#33075)
  • nuxt: Lazy hydration macros without auto-imports (#33037)
  • kit,nuxt,schema: Allow modules to specify dependencies (#33063)
  • kit,nuxt: Add getLayerDirectories util and refactor to use it (#33098)

🔥 Performance

  • nuxt: Clear inline route rules cache when pages change (#32877)
  • nuxt: Stop watching app manifest once a change has been detected (#32880)

🩹 Fixes

  • nuxt: Handle satisfies in page augmentation (#32902)
  • nuxt: Type response in useFetch hooks (#32891)
  • nuxt: Add TS parenthesis and as expression for page meta extraction (#32914)
  • nuxt: Use correct unit thresholds for relative time (#32893)
  • nuxt: Handle uncached current build manifests (#32913)
  • kit: Resolve directories in resolvePath and normalize file extensions (#32857)
  • schema,vite: Bump requestTimeout + allow configuration (#32874)
  • nuxt: Deep merge extracted route meta (#32887)
  • nuxt: Do not expose app components until fully resolved (#32993)
  • kit: Only exclude node_modules/ if no custom srcDir (#32987)
  • nuxt: Transform ts before page meta extraction (#32920)
  • nuxt: Compare final matched routes when syncing route object (#32899)
  • nuxt: Make vue server warnings much less verbose in dev mode (#33018)
  • schema: Allow disabling cssnano/autoprefixer postcss plugins (#33016)
  • kit: Ensure local layers are prioritised alphabetically (#33030)
  • kit,nuxt: Expose global types to vue compiler (#33026)
  • deps: Bump devalue (#33072)
  • nuxt: Support config type inference for defineNuxtModule().with() (#33081)
  • nuxt: Search for colliding names in route children (b58c139d2)
  • nuxt: Delete nuxtApp._runningTransition on resolve (#33025)
  • nuxt: Add validation for nuxt island reviver key (#33069)

💅 Refactors

  • nuxt: Simplify page segment parsing (#32901)
  • nuxt: Remove unnecessary async/await in afterEach (#32999)
  • vite: Simplify inline chunk iteration (6f4da1b8c)
  • kit,nuxt,ui-templates,vite: Address deprecations + improve regexp perf (#33093)

📖 Documentation

  • Switch example to use vitest projects (#32863)
  • Update testing setupTimeout and add teardownTimeout (#32868)
  • Update webRoot to use new app directory (df7177bff)
  • Add middleware to layers guide (6fc25ff79)
  • Use app/ directory in layer guide (eee55ea41)
  • Add documentation for --nightly command (#32907)
  • Update package information in roadmap section (#32881)
  • Add more info about nuxt spa loader element attributes (#32871)
  • Update features.inlineStyles default value (6ff3fbebb)
  • Correct filename in example (#33000)
  • Add more information about using useRoute and accessing route in middleware (#33004)
  • Avoid variable shadowing in locale example (#33031)
  • Add documentation for module lifecycle hooks (#33115)

🏡 Chore

  • config: Migrate renovate config (#32861)
  • Remove stray test file (ca84285cc)
  • Ignore webpagetest.org when scanning links (6c974f0be)
  • Add type: 'module' in playground (#33099)

✅ Tests

  • Add failing test for link component duplication (#32792)
  • Simplify module hook tests (#32950)
  • Refactor stubbing of import.meta.dev (#33023)
  • Use findWorkspaceDir rather than relative paths to repo root (a6dec5bd9)
  • Improve router test for global transitions (5d783662c)
  • Use expect.poll (53fb61d5d)
  • Use expect.poll instead of expectWithPolling (357492ca7)
  • Use vi.waitUntil instead of custom retry logic (611e66a47)

🤖 CI

  • Remove double set of tests for docs prs (6bc9dccf4)
  • Add workflow for discord team discussion threads (bc656a24d)
  • Fix some syntax issues with discord + github integrations (f5f01b8c1)
  • Use token for adding issue to project (66afbe0a2)
  • Use discord bot to create thread automatically (618a3cd40)
  • Only use discord bot (bfd30d8ce)
  • Update format of discord message (eb79a2f07)
  • Try bolding entire line (c66124d7b)
  • Oops (38644b933)
  • Add delay after adding each reaction (ecb49019f)
  • Use last lts node version for testing (e06e37d02)
  • Try npm trusted publisher (85f1e05eb)
  • Use npm trusted publisher for main releases (abf5d9e9f)
  • Change wording (#32979)
  • Add github ai moderator (#33077)

❤️ Contributors

  • Daniel Roe (@danielroe)
  • abeer0 (@iiio2)
  • Julien Huang (@huang-julien)
  • kyumoon (@kyumoon)
  • Alexander Lichter (@TheAlexLichter)
  • Bobbie Goede (@BobbieGoede)
  • Rich Harris (@Rich-Harris)
  • mustafa60x (@mustafa60x)
  • Matej Černý (@cernymatej)
  • Alex Liu (@Mini-ghost)
  • Amitav Chris Mostafa (@semibroiled)
  • Romain Hamel (@romhml)
  • Jacky Lam (@jackylamhk)
  • Mukund Shah (@mukundshah)
  • Luke Nelson (@luc122c)
  • letianpailove (@letianpailove)
  • Erwan Jugand (@erwanjugand)
  • Alexander (@TheColorman)
  • Ryota Watanabe (@wattanx)
  • Yizack Rangel (@Yizack)
nuxt

v3.19.0

👀 Highlights

Please see the release notes for Nuxt v4.1 for full details on the features and fixes in Nuxt v3.19.

✅ Upgrading

As usual, our recommendation for upgrading is to run:

npx nuxt upgrade --dedupe

This will refresh your lockfile and pull in all the latest dependencies that Nuxt relies on, especially from the unjs ecosystem.

👉 Changelog

compare changes

🚀 Enhancements

  • kit: Add ignore option to resolveFiles (#32858)
  • kit: Add onInstall and onUpgrade module hooks (#32397)
  • nuxt,vite: Add experimental support for rolldown-vite (#31812)
  • nuxt: Extract defineRouteRules to page rules property (#32897)
  • nuxt,vite: Use importmap to increase chunk stability (#33075)
  • nuxt: Lazy hydration macros without auto-imports (#33037)
  • kit,nuxt,schema: Allow modules to specify dependencies (#33063)
  • kit,nuxt: Add getLayerDirectories util and refactor to use it (#33098)

🔥 Performance

  • nuxt: Clear inline route rules cache when pages change (#32877)
  • nuxt: Stop watching app manifest once a change has been detected (#32880)

🩹 Fixes

  • nuxt: Handle satisfies in page augmentation (#32902)
  • nuxt: Type response in useFetch hooks (#32891)
  • nuxt: Add TS parenthesis and as expression for page meta extraction (#32914)
  • nuxt: Use correct unit thresholds for relative time (#32893)
  • nuxt: Handle uncached current build manifests (#32913)
  • kit: Resolve directories in resolvePath and normalize file extensions (#32857)
  • schema,vite: Bump requestTimeout + allow configuration (#32874)
  • nuxt: Deep merge extracted route meta (#32887)
  • nuxt: Do not expose app components until fully resolved (#32993)
  • kit: Only exclude node_modules/ if no custom srcDir (#32987)
  • nuxt: Compare final matched routes when syncing route object (#32899)
  • nuxt: Make vue server warnings much less verbose in dev mode (#33018)
  • schema: Allow disabling cssnano/autoprefixer postcss plugins (#33016)
  • kit: Ensure local layers are prioritised alphabetically (#33030)
  • kit,nuxt: Expose global types to vue compiler (#33026)
  • nuxt: Support config type inference for defineNuxtModule().with() (#33081)
  • nuxt: Search for colliding names in route children (31a9282c2)
  • nuxt: Delete nuxtApp._runningTransition on resolve (#33025)
  • nuxt: Add validation for nuxt island reviver key (#33069)
  • kit: Prioritise local layers over extended layers (ae8b0d2b8)
  • kit: Address merge conflict (89ccbbebb)
  • kit: Do not resolve public dir aliases (5d87d3a80)

💅 Refactors

  • nuxt: Simplify page segment parsing (#32901)
  • nuxt: Remove unnecessary async/await in afterEach (#32999)
  • vite: Simplify inline chunk iteration (9ea90fc33)
  • kit,nuxt,ui-templates,vite: Address deprecations + improve regexp perf (#33093)

📖 Documentation

  • Add a section about augmenting types with TS project references (#32843)
  • Switch example to use vitest projects (#32863)
  • Update testing setupTimeout and add teardownTimeout (#32868)
  • Add middleware to layers guide (fa516d440)
  • Add documentation for --nightly command (#32907)
  • Update package information in roadmap section (#32881)
  • Add more info about nuxt spa loader element attributes (#32871)
  • Correct filename in example (#33000)
  • Add more information about using useRoute and accessing route in middleware (#33004)
  • Avoid variable shadowing in locale example (#33031)

🏡 Chore

  • Remove stray test file (42fd247a4)
  • Ignore webpagetest.org when scanning links (cb18f4960)
  • Add type: 'module' in playground (#33099)

✅ Tests

  • Add failing test for link component duplication (#32792)
  • Simplify module hook tests (#32950)
  • Refactor stubbing of import.meta.dev (#33023)
  • Use findWorkspaceDir rather than relative paths to repo root (c4c3ada96)
  • Improve router test for global transitions (7e6a6fc35)
  • Use expect.poll (f4354203a)
  • Use expect.poll instead of expectWithPolling (15ca5be95)
  • Use vi.waitUntil instead of custom retry logic (4c8c13090)
  • Update test for app creation (9a3b44515)
  • Update bundle size snapshot (76988ce97)

🤖 CI

  • Remove double set of tests for docs prs (14c006ac4)
  • Add workflow for discord team discussion threads (f14854fc3)
  • Fix some syntax issues with discord + github integrations (c059f7cd1)
  • Use token for adding issue to project (51661bac3)
  • Use discord bot to create thread automatically (37f9eb27b)
  • Only use discord bot (38ce2dcbb)
  • Update format of discord message (0047b3059)
  • Try bolding entire line (6e9f40eb9)
  • Oops (8b044cad2)
  • Add delay after adding each reaction (37b7e2108)
  • Use last lts node version for testing (98719c065)
  • Try npm trusted publisher (ea33502c3)
  • Use npm trusted publisher for main releases (31a55437f)
  • Change wording (#32979)
  • Add github ai moderator (#33077)

❤️ Contributors

  • Daniel Roe (@danielroe)
  • abeer0 (@iiio2)
  • Julien Huang (@huang-julien)
  • kyumoon (@kyumoon)
  • Alexander Lichter (@TheAlexLichter)
  • Bobbie Goede (@BobbieGoede)
  • mustafa60x (@mustafa60x)
  • Matej Černý (@cernymatej)
  • Alex Liu (@Mini-ghost)
  • Amitav Chris Mostafa (@semibroiled)
  • Romain Hamel (@romhml)
  • Jacky Lam (@jackylamhk)
  • Mukund Shah (@mukundshah)
  • Luke Nelson (@luc122c)
  • letianpailove (@letianpailove)
  • Erwan Jugand (@erwanjugand)
  • Alexander (@TheColorman)
  • Ryota Watanabe (@wattanx)
  • Yizack Rangel (@Yizack)
@nuxt/ui

v4.0.0-alpha.1

📚 Documentation

You can check out the new docs for v4 on https://ui4.nuxt.com while in alpha.

🚨 Breaking Changes

  • components: rename nullify modifier to nullable and add optional (#4838)
  • module: update compatibility to nuxt 4

Read the migration guide to v4.

🚀 Features

  • Icon: allow passing a component instead of a name (#4766) (61b603f)

🐛 Bug Fixes

  • AuthForm: use error from form field (#4738) (00dfb6b)
  • BlogPost: ensure date slot renders (#4743) (4514880)
  • ChangelogVersion/ChangelogVersions: handle RTL mode (#4777) (f91c408)
  • ContentSearch/DashboardSearch: make ui.modal work (946c2ec)
  • module: add @source on components (a16465f), closes #4773
  • PageCard: improve keyboard accessibility (#4733) (3029568)
  • ProseImg: ensure unique motion layout id for images (#4720) (9480a0b)
  • unplugin: handle components overrides in subdirectories (#4781) (69ee75e)

New Contributors

Full Changelog: https://github.com/nuxt/ui/compare/v4.0.0-alpha.0...v4.0.0-alpha.1

@nuxt/ui

v3.3.3

🚀 Features

  • useFormField: export form errors injection key (#4808) (ec2bc0a)

🐛 Bug Fixes

  • components: broken types for update:model-value event (#4853) (7133f50)
  • Form: default slot types (#4758) (a32cc37)
  • Form: update Form interface to accept RegExp (#4821) (0c2d390)
  • InputMenu/Select/SelectMenu: show placeholder when model value is falsy (#4825) (90b5daf)
  • InputMenu: prevent focus-outside event on content (77b6b9a)
  • Link: ensure target _blank is flagged as external for Inertia (#4746) (520b277)
  • Table: ensure colspan calc for loading and empty states (#4826) (bdcc8c4)

New Contributors

Full Changelog: https://github.com/nuxt/ui/compare/v3.3.2...v3.3.3