No significant changes
🚀 Enhancements
- Make features configurable (#246)
🩹 Fixes
- Revert unocss config (#250)
🏡 Chore
- Use npmx.dev links (#249)
✅ Tests
- Patch test-utils and force dev mode (#248)
❤️ Contributors
- Julien Huang (@huang-julien)
🚀 Features
- llms: Add related links to raw markdown endpoint - by @HugoRCD in https://github.com/nuxt/content/issues/3724 (fadaf)
🐞 Bug Fixes
syntax errorwith datetime fields and standardize date/datetime formats - by @maximepvrt in https://github.com/nuxt/content/issues/3698 (eb9f8)- Disable title extraction when
contentHeading === false- by @farnabaz in https://github.com/nuxt/content/issues/3725 (f5a46) - api: Do not forward accept encoding header - by @dargmuesli in https://github.com/nuxt/content/issues/3701 (1d92b)
- collection: Use UTF-8 byte length for SQL query size check - by @yodakaEngineer in https://github.com/nuxt/content/issues/3717 (9f840)
- llms: Avoid
import(variableName)pattern - by @larbish in https://github.com/nuxt/content/issues/3733 (89c0b) - queryCollectionSearchSections: Fix options types - by @hendrikheil in https://github.com/nuxt/content/issues/3705 (b3fa0)
- ssr: Local content components on Cloudflare Workers - by @onmax in https://github.com/nuxt/content/issues/3704 (7cff2)
View changes on GitHub
🩹 Fixes
- lazy-load: Fix potential TMZ violation (#243)
💅 Refactors
- Move from NuxtApp augment to NuxtPayload (#240)
❤️ Contributors
- Julien Huang (@huang-julien)
🐞 Bug Fixes
- Protect against broken new URL when proxying - by @harlan-zw (cb7ff)
View changes on GitHub
🚀 Features
- posthog: Support proxy mode - by @harlan-zw (6c467)
- proxy: Granular per-script privacy controls - by @harlan-zw in https://github.com/nuxt/scripts/issues/611 (ec2a6)
🐞 Bug Fixes
- Broken bare domain path matching - by @harlan-zw (58fe9)
View changes on GitHub
🚀 Features
- Replace
promptswith@clack/prompts- by @KazariEX in https://github.com/nuxt/devtools/issues/935 (1aa3d)
🐞 Bug Fixes
- Attributes error penetration warning - by @doyuli in https://github.com/nuxt/devtools/issues/930 (706a7)
- devtools: Scope storage watchers to avoid EMFILE - by @onmax in https://github.com/nuxt/devtools/issues/934 (902c6)
- wizard: Typos - by @doyuli in https://github.com/nuxt/devtools/issues/931 (0216c)
View changes on GitHub
🚀 Features
- Add SSR social media embeds for X and Instagram - by @harlan-zw and Claude Opus 4.5 in https://github.com/nuxt/scripts/issues/590 (aa542)
- Experimental nuxt/partytown support - by @harlan-zw and Claude Opus 4.5 in https://github.com/nuxt/scripts/issues/576 (b67c9)
- First-party proxy mode with privacy anonymization - by @harlan-zw, Claude Opus 4.5 and Copilot Autofix powered by AI in https://github.com/nuxt/scripts/issues/577 (3bc81)
🐞 Bug Fixes
- Safer resolve of triggers via nuxt.config - by @harlan-zw (73870)
- Import from
@nuxt/schema- by @danielroe in https://github.com/nuxt/scripts/issues/600 (1addd) - Explicit opt-in for proxy mode - by @harlan-zw (ef5f4)
- Migrate to unplugin v3 - by @harlan-zw (409a8)
- Better registry key matching - by @harlan-zw (23c75)
- proxy:
- tiktok:
- Missing global - by @harlan-zw (8b391)
🏎 Performance
- Migrate plugins to oxc-walker (parseAndWalk) - by @harlan-zw in https://github.com/nuxt/scripts/issues/610 (abb95)
View changes on GitHub
✨ Highlights
🎨 New Theme component
The Theme component lets you override the theme of all child components without modifying each one individually. Pass an object to the ui prop where keys are component names and values are their slot class overrides:
<UTheme
:ui="{
button: {
base: 'rounded-full'
},
input: {
base: 'rounded-full'
}
}"
>
<UButton label="Button" color="neutral" variant="outline" />
<UInput placeholder="Search..." />
</UTheme>
The Theme component doesn't render any HTML element. It uses Vue's
provide/injectunder the hood, so overrides propagate through the entire component tree regardless of nesting depth. Theme components can be nested (innermost wins) and theuiprop on individual components always takes priority.
🌈 New neutral colors
Thanks to Tailwind CSS v4.2, four new neutral color options are now available: taupe, mauve, mist and olive. Configure them through the ui.neutral option in your app.config.ts.
🚫 Duplicate toast prevention
The Toaster now automatically prevents duplicate toasts and displays a pulse animation when a duplicate is triggered, providing a cleaner notification experience: https://ui.nuxt.com/docs/components/toast#deduplicated-toasts
https://github.com/user-attachments/assets/e356affa-d170-4b7e-8a80-217132ee88e1
🚀 Features
- DashboardSidebar/Header: add
autoCloseprop (#6089) (2663deb) - EditorDragHandle: proxy
nested/nestedOptionsprops and emithoverevent (#5960) (ed60193) - Form: add HTML5 validation to programmatic submit (#6002) (ed552fc)
- module: add support for taupe / mauve / mist / olive neutral colors (#6081) (bc49d3f)
- NavigationMenu: allow tooltip usage in
horizontalorientation (#5682) (f46b504) - NavigationMenu: handle
chipin items (#6064) (401a2c0) - ScrollArea: add
skipMeasurementvirtualize option (#5721) (548b711) - Select/SelectMenu: add hover effects on
outlineandsubtlevariants (94b0c31) - Theme: new component (#4387) (c97047d)
- Toaster: prevent duplicate toasts and add pulse animation (3f6581a)
🐛 Bug Fixes
- BlogPost/ChangelogVersion: use
ImgHTMLAttributestype for image prop (#6007) (0185856) - ChatMessages: allow message props to override role defaults (#6000) (f64ec17)
- ChatMessages: prevent flash at top before scrolling to bottom on mount (4bdcb83)
- Checkbox/Switch: prevent
data-stateconflict when used inside Tooltip (2bb1a8b), closes #3599 - CheckboxGroup: update
update:modelValueemit type (#5927) (64d2e88) - ColorModeImage: add baseURL support for public paths (#6006) (db510f3)
- components: add
fixedprop to prevent responsive text size reduction (#6074) (8f5f44c) - components: nullable and optional type support (#6060) (cd3432b)
- components: prevent iOS auto-zoom on input fields with font-size below 16px (#6040) (1262016)
- ContentNavigation: pass nested child data to slots (#6043) (e67f77e)
- defineShortcuts: add alt key guard (#6020) (8451f45)
- defineShortcuts: allow shifted special character shortcuts (08facc0)
- Drawer/Modal/Popover/Slideover: prevent unexpected close on touch when interacting with other overlays (#5695) (e2c038c)
- Editor: handle placeholder in RTL mode (#5977) (3cc16e3)
- EditorMentionMenu: use
charprop as mention prefix instead of always@(0b9b097), closes #6035 - EditorToolbar: proxy size prop to dropdown menu (8f8d989)
- InputMenu/InputNumber/SelectMenu: proxy
sizeto buttons (1ec1698), closes #5958 - InputMenu/Select/SelectMenu: exclude cosmetic items from model value type (#6044) (22cf1ea)
- InputMenu/SelectMenu: sort filtered items by match relevance (058c66b), closes #4672
- InputMenu: prevent focus on trailing button (88073b6)
- module: update icon
cssLayeroption fromcomponentstobase(#6076) (e8bc322) - NavigationMenu: allow clicking trailing slot in horizontal orientation (7f9996f), closes #5192 #6083
- NavigationMenu: unique auto-generated item values for grouped items (7b317d9)
- PricingPlan: truncate title (#6041) (8e86c51)
- Select: remove useless
byprop (14dceaf) - Table: improve perfs with
shallowRefwhen watch deep is disabled (#6023) (bc06ce2) - Toast: allow
updateto keep toast open and reset duration (82afa0a) - Toast: improve animation smoothness (#6065) (ee2c0a5)
- types: improve
DotPathKeysaccuracy andGetItemKeysperformance (#6077) (6f7af3e) - useEditorMenu: rank filtered results by relevance (f53484a)
🌐 Locales
👋 New Contributors
- @LouisHaftmann made their first contribution in https://github.com/nuxt/ui/pull/5927
- @quentingiraud-ugo made their first contribution in https://github.com/nuxt/ui/pull/5695
- @imfaizanyousaf made their first contribution in https://github.com/nuxt/ui/pull/5966
- @solidprinciples made their first contribution in https://github.com/nuxt/ui/pull/5960
- @saurlax made their first contribution in https://github.com/nuxt/ui/pull/6000
- @veeceey made their first contribution in https://github.com/nuxt/ui/pull/6007
- @cngJo made their first contribution in https://github.com/nuxt/ui/pull/6009
- @KazariEX made their first contribution in https://github.com/nuxt/ui/pull/6020
- @danielkasperczyk made their first contribution in https://github.com/nuxt/ui/pull/6043
- @mateusznarowski made their first contribution in https://github.com/nuxt/ui/pull/6081
- @karladler made their first contribution in https://github.com/nuxt/ui/pull/6076
Full Changelog: https://github.com/nuxt/ui/compare/v4.4.0...v4.5.0
🐞 Bug Fixes
- Prevent race condition of running checker module before eslint config is written - by @sebbayer in https://github.com/nuxt/eslint/issues/653 (69aa4)
View changes on GitHub
🩹 Fixes
- Skip hydration check if client only component (#227)
- lazy-load: Prefer cloning component over wrapping component (#232)
- client: Add empty unocss config object (#233)
- lazy-load: Use NuxtComponent name for auto-imports (#235)
✅ Tests
- Add basic sse tests (#228)
❤️ Contributors
- Julien Huang (@huang-julien)
🚀 Enhancements
🩹 Fixes
- Return correct data in endpoint (#218)
- Use component filename if auto import for lazy-load hint (#219)
- Move uid generation server side (#222)
💅 Refactors
- Move to extensible hints handlers (#208)
- Assign handler to context instead of waiting for hook result (#213)
- Simplify handlers (#216)
🏡 Chore
- playground: Remove relative path to use '@nuxt/hint' (#205)
- README: Add lazy-load hints to README (#225)
🤖 CI
- renovate: Extend nuxt configuration (#206)
❤️ Contributors
- Julien Huang (@huang-julien)
- Jonas Thelemann e-mail@jonas-thelemann.de
0.14.0 is the next minor release.
🚨 Breaking changes
Default font format is now woff2 only
Font providers previously returned multiple formats (woff2, woff, truetype, etc.). The default behavior now only resolves woff2 fonts, which is supported by all modern browsers.
Your @font-face declarations will typically have fewer src entries, reducing CSS size. In most cases this is a transparent improvement.
To restore the previous behavior or add additional formats:
export default defineNuxtConfig({
fonts: {
defaults: {
formats: ['woff2', 'woff', 'ttf'],
},
},
})
Available values: 'woff2', 'woff', 'ttf', 'otf', 'eot'.
Cache invalidation
Font metadata caches are now isolated per provider and per provider options. After upgrading, your font metadata cache (node_modules/.cache/nuxt/fonts/) will be invalidated and fonts will be re-fetched on the next build. This is a one-time occurrence.
✨ Features
Resolve fonts from node_modules
A new built-in npm provider can resolve fonts installed as npm packages. If no other provider matches a font family, @nuxt/fonts will now attempt to find it in your node_modules via CDN metadata.
export default defineNuxtConfig({
fonts: {
npm: {
// options for the npm provider (optional)
},
},
})
Font format resolution
You can control which font formats are resolved via the new defaults.formats option:
export default defineNuxtConfig({
fonts: {
defaults: {
formats: ['woff2'], // default
},
},
})
Provider-specific font family options
You can now pass provider-specific options when configuring individual font families:
export default defineNuxtConfig({
fonts: {
families: [
{
name: 'My Font',
provider: 'google',
providerOptions: {
google: {
// provider-specific options for this family
},
},
},
],
},
})
throwOnError option
Configure whether font resolution errors should throw or warn:
export default defineNuxtConfig({
fonts: {
throwOnError: true, // default: false
},
})
lightningcss support
If your Nuxt project uses Vite's lightningcss mode for CSS processing (for example, if you're using rolldown-vite!), injected @font-face declarations are now minified with lightningcss instead of esbuild.
🩹 Fixes
- Prevent font flashes in development — The dev font proxy now returns
Cache-Control: public, max-age=31536000, immutableheaders, preventing font flashes during HMR on SSR frameworks. - Broader CSS file matching — Font family injection now matches additional CSS-like file patterns (Vue SFC
&lang.cssquery strings and inline style IDs), aligning with fontless behavior. - Adobe provider race condition — Fixed a race condition in the Adobe (Typekit) provider where concurrent font resolution could clear the font family map mid-flight, causing Adobe fonts to silently fail. (fix in unifont 0.7.4)
- Prioritize sliced woff2 over full ttf — When both formats are available, woff2 subsets are now correctly prioritized over full ttf files. (fix in unifont 0.7.2)
- Bunny provider subset filtering — The Bunny font provider now correctly filters by subsets. (fix in unifont 0.7.0)
👉 Changelog
🚀 Enhancements
- Upgrade to the latest versions fontless + unifont (3d634b0)
- Support lightningcss transforms (171c9a4)
- Add support for resolving fonts from local
node_modules(#781)
🩹 Fixes
- Prevent font flashes in development (0ec437e)
- Include more css-ish files when injecting font-families (6e8e343)
- deps: Bump unifont + reenable adobe tests (9d7715d)
📖 Documentation
- Add nuxt.care health badge (8f0a978)
🏡 Chore
✅ Tests
- Update snapshots for adobe preloads (035091a)
🤖 CI
- Pin github actions to full-length commit shas (18e3ff7)
❤️ Contributors
- Daniel Roe (@danielroe)
- Bjorn Lu (@bluwy)
👉 Changelog
🚀 Enhancements
- Add
fonts:public-asset-contexthook (#758)
🩹 Fixes
- Use
$fetchfor proxy support when downloading fonts (#732)
📖 Documentation
- Fix Nuxt badge icon (#742)
🏡 Chore
- Update pnpm to 10.21 and enable trust policy (7b25049)
- Revert pnpm trust policy and restore provenance action (6d16adb)
- Include .nuxt types + migrate to ts projects (2daad4e)
🤖 CI
- Use new dependency review shared workflow (635bc79)
- Use correct var (25b8fa1)
- Try pinning to a commit hash (f40c07c)
- Pass base-ref + head-ref to reusable workflow (e8ffe84)
- Update name + hash (8d1165b)
- Simplify (08b8fcb)
❤️ Contributors
- Daniel Roe (@danielroe)
- Harlan Wilton (@harlan-zw)
- IO-Fire (@IO-Fire)
- Luke Nelson (@luc122c)
🚀 Features
- Upgrade vite-devtools - by @antfu (5c4a0)
- Enhance inspect panel, add copy visual info for agents - by @antfu and @atinux in https://github.com/nuxt/devtools/issues/928 (6bb25)
🐞 Bug Fixes
- devtools: Call
devtools:initializedhook after all modules run - by @danielroe in https://github.com/nuxt/devtools/issues/919 (36628)
View changes on GitHub
🐞 Bug Fixes
- Downgrade
@eslint/js, fix #647 - by @antfu in https://github.com/nuxt/eslint/issues/647 (2c1c1)
View changes on GitHub
🚀 Features
- Relax peer deps range to support ESLint v10, fix #642 - by @antfu in https://github.com/nuxt/eslint/issues/642 (305a9)
View changes on GitHub
4.3.1 is a regularly scheduled patch release.
👉 Changelog
🩹 Fixes
- nuxt: Correct reference format of server builder (#34177)
- nuxt: Add status/statusText getters to NuxtError (#34188)
- nuxt: Don't inject shared types for differing auto-imports (#34191)
- schema: Add direnv and vendor to default ignore (#34190)
- nuxt: Focus hash links after navigation (#34193)
- nuxt: Exclude head runtime from unhead imports transform (#34195)
- kit: Include prereleases in semver satisfy check (#34210)
- nitro: Encode unicode paths in
x-nitro-prerenderheader (#34202) - nuxt: Watch
server/forbuilder:watchhook (#34208) - nitro: Preserve
error.messagefor fatal errors (#34226) - Only enable dynamic imports when ts plugin (#34205)
- webpack: Use H3Error for 403 in dev server (#34233)
- nuxt: Ensure NuxtError extends Error type (#34242)
- vite: Use H3Error for 404 in dev server (#34225)
- nuxt: Add backwards compat for
#appbarrel export in keyed functions (#34199) - nuxt: Track + re-add custom routes on hmr (#32044)
- nuxt: Keep vnode when leaving deeper nested route (#33778)
- vite: Prevent CSS flickering in dev mode after config changes (#33856)
- nuxt: Do not start view transition if there is no route (#33723)
- nuxt: Call deferHydration done on NuxtPage unmount (#34152)
- nuxt: Handle invalid
datetime in` (#33992) - nuxt: Preserve middleware error status in 404 fallback (#34148)
- nitro: Do not augment
nuxt/schema(#34255) - nuxt: Cache manifest files to preserve buildId (#34002)
- nuxt: Don't decode query string in SSR context URL (#34252)
- nuxt: Allow specifying moduleDependencies by
meta.name(#34263) - nuxt: Resolve
#componentsimport mapping conflict for packages outside rootDir (#34139) - vite,webpack: Use node.res to send 403/404 (#34266)
- nitro,nuxt: Align path encoding with vue-router (#34265)
- nitro: Augment
nuxt/schemaonce more (552bbd8d1)
💅 Refactors
- nuxt: Prefer
genObjectKeyto omit unnecessary quotes (#34245) - nuxt: Use
ComponentPropshelper to extract layout props (#34248)
📖 Documentation
- Update roadmap dates (#34166)
- Correct default value of
nitroAutoImports(#34182) - Clarify shared type context limitations for custom imports (#34194)
- Fix broken links (#34223)
- Document payload extraction for ISR/SWR routes (#34222)
- Update default aliases in configuration reference (#34237)
- Update example of email validation (#34247)
- Align server alias examples with
#serverandrootDir(#34259) - Add documentation for
keyedComposables(#34201)
🏡 Chore
✅ Tests
- Vitest v4 compatibility (825b2c202)
- Add runtime tests for deeply nested
<NuxtPage>navigation (048efc030)
❤️ Contributors
- Daniel Roe (@danielroe)
- Matej Černý (@cernymatej)
- Octavio Araiza (@8ctavio)
- Muhammad Yasir Ghaffar (@M-YasirGhaffar)
- mrkaashee (@mrkaashee)
- Max (@onmax)
- Bobbie Goede (@BobbieGoede)
- 纸鹿/Zhilu (@L33Z22L11)
- Florian Heuberger (@Flo0806)
- 山吹色御守 (@KazariEX)
- ExXTreMe315 (@ExXTreMe315)
- Eugene (@FlexIDK)
- abeer0 (@iiio2)
- Jonas Thelemann (@dargmuesli)
- Erwan Jugand (@erwanjugand)