Skip to content

fix(deps): update all non-major dependencies - #8

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-minor-patch
Open

renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-minor-patch

Conversation

@renovate

@renovate renovate Bot commented Sep 20, 2026 •

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@ai-sdk/mcp (source) 2.0.65 → 2.0.67 age confidence
@ai-sdk/openai-compatible (source) 3.0.62 → 3.0.63 age confidence
@ai-sdk/vue (source) 4.0.126 → 4.0.128 age confidence
@ark-ui/react (source) 5.39.2 → 5.39.3 age confidence
@ark-ui/solid (source) 5.39.2 → 5.39.3 age confidence
@ark-ui/svelte (source) 5.24.2 → 5.24.3 age confidence
@ark-ui/vue (source) 5.39.2 → 5.39.3 age confidence
@iconify-json/lucide 1.2.138 → 1.2.140 age confidence
@nuxt/kit (source) 4.5.2 → 4.6.0 age confidence
@nuxtjs/mcp-toolkit (source) 0.22.0 → 0.23.0 age confidence
@tanstack/react-table (source) 9.2.4 → 9.2.6 age confidence
@tanstack/solid-table (source) 9.2.4 → 9.2.6 age confidence
@tanstack/svelte-table (source) 9.2.4 → 9.2.6 age confidence
@tanstack/vue-table (source) 9.2.4 → 9.2.6 age confidence
@types/node (source) 26.6.3 → 26.6.4 age confidence
@zag-js/cascade-select (source) 1.44.0 → 1.45.0 age confidence
@zag-js/react (source) 1.44.0 → 1.45.0 age confidence
@zag-js/solid (source) 1.44.0 → 1.45.0 age confidence
@zag-js/svelte (source) 1.44.0 → 1.45.0 age confidence
@zag-js/vue (source) 1.44.0 → 1.45.0 age confidence
agents (source) 0.24.0 → 0.26.0 age confidence
ai (source) 7.0.126 → 7.0.128 age confidence
nuxt (source) 4.5.2 → 4.6.0 age confidence
nuxt-agent-discovery 0.7.0 → 0.7.1 age confidence
nuxt-og-image (source) 6.10.1 → 6.10.3 age confidence
pnpm (source) 10.34.5+sha512.a4ee05f2f73658255bd6a89859c065a45c28a57daefae2c893a168ee2b73168c37b91e83e57ea67654ad03f03031746430e8bce38e362e042605fb8abc80192e → 10.34.6 age confidence
style-dictionary (source) 5.5.5 → 5.6.0 age confidence
svelte (source) 5.57.1 → 5.57.2 age confidence
vue-tsc (source) 3.3.11 → 3.3.12 age confidence

Release Notes

vercel/ai (@​ai-sdk/mcp)

v2.0.67

Compare Source

Patch Changes

v2.0.66

Compare Source

Patch Changes
  • 3ff0f54: feat(mcp): add AuthorizationServerMismatchError for OAuth authorization server pin mismatches
vercel/ai (@​ai-sdk/openai-compatible)

v3.0.63

Compare Source

Patch Changes
vercel/ai (@​ai-sdk/vue)

v4.0.128

Compare Source

Patch Changes

v4.0.127

Compare Source

Patch Changes
chakra-ui/ark (@​ark-ui/react)

v5.39.3

Compare Source

Fixed
  • Align the last six parts that rendered a different element across adapters: Toggle.Indicator, AngleSlider.Marker,
    AngleSlider.ValueText and Listbox.ItemText render span, Popover.Title renders h2, and Svelte's
    NumberInput.Scrubber renders div.
    • Select: Export SelectIntlTranslations, SelectPositioningOptions, SelectScrollToIndexDetails and
      SelectSelectionDetails.
    • Clipboard: Export ClipboardValueChangeDetails.
    • DateInput: Export DateInputPlaceholderChangeDetails.
    • ImageCropper: Export ImageCropperRect.
    • QrCode: Export QrCodeValueChangeDetails.
    • Steps: Export StepInvalidDetails. In Vue, this fixes TS2883 ("cannot be named without a reference to …") when
      emitting declarations for a component that wraps one of these roots, for example a generic Select.Root wrapper
      built with pnpm.
    • Field: Fix Field.ErrorText not being announced by VoiceOver and Narrator. It is now linked via
      aria-describedby instead of aria-errormessage, since screen reader support for aria-errormessage is still
      incomplete.
      - expect(input).toHaveAccessibleErrorMessage('Error Info')
      + expect(input).toHaveAccessibleDescription(expect.stringContaining('Error Info'))
  • Fix Toaster dropping the group props it accepts. dir and getRootNode were typed on the component but never
    reached the group machine — the locale and environment contexts always won, and both props were spread onto the region
    element instead. The toast region's aria-label is now settable through a label prop, which is forwarded to
    getGroupProps.
  • Fix Tour.Spotlight disappearing immediately when the tour closes, so its exit animation can run.
  • Export the missing Tour types, including TourStepsChangeDetails for onStepsChange, and add flat Tour* aliases
    for the step, action, and callback detail types.
    • Initial Focus: initialFocusEl can now return false to open without moving focus. Returning null still uses
      the default.
      <Dialog.Root initialFocusEl={() => false} />

      Supported in Color Picker, Dialog, Drawer, Floating Panel, and Popover.

    • Image Cropper: Add api.setCrop(rect) to place the crop area programmatically, in viewport coordinates. The
      rect is constrained like initialCrop, and unlike api.reset() it keeps the current zoom, rotation, flip, and pan.
    • Pagination: Add api.type and api.getPageUrl(page), so custom parts can tell whether the controls are buttons
      or links and build a page's URL.
    • Carousel: Fix allowMouseDrag advancing a full page per pointer move in Vue.
    • Floating Panel
      • Fix strategy="absolute" placing the panel outside its boundary.
      • Fix the panel not following its boundary element when an ancestor scrolls.
    • Image Cropper: Fix Alt+Arrow resizing ignoring aspectRatio and cropShape="circle".
    • Listbox: Fix range selection anchoring on the highlighted item instead of the one you clicked. Shift+click with
      highlightOnHover now selects the full range, and Shift+arrow can reverse direction.
    • Popover: Fix autoFocus={false} being ignored for modal popovers.
    • Popover, Select, Menu, and other positioned parts: Fix a stylesheet z-index on the positioner being ignored
      when the content has no stacking level.
    • Presence: Fix an element with an exit animation staying mounted forever in Safari, invisible but still
      intercepting clicks.
    • Progress: Fix the formatter not updating when formatOptions changes to a subset of the previous options.
    • Splitter: Fix slow dragging in large documents.
    • Tabs: Fix programmatic tab selection triggering link navigation.
    • TOC: Fix onActiveChange reporting the previous activeIds and activeItems, which kept a controlled TOC
      stuck on the old section.
    • Tour: Fix the step card, spotlight and backdrop collapsing into the top-left corner when the step's target is
      replaced, and the backdrop leaving part of the page undimmed on resize.
    • Svelte: Fix derived_inert warnings when a component's cleanup runs after it unmounts.
    • General
      • Fix inline style values containing semicolons being cut off when props merge, such as quoted CSS custom properties
        and data URLs.
      • Fix Illegal invocation thrown on setup when a tool like Storybook has replaced HTMLElement.prototype.focus.
chakra-ui/ark (@​ark-ui/solid)

v5.39.3

Compare Source

Fixed
  • Align the last six parts that rendered a different element across adapters: Toggle.Indicator, AngleSlider.Marker,
    AngleSlider.ValueText and Listbox.ItemText render span, Popover.Title renders h2, and Svelte's
    NumberInput.Scrubber renders div.
    • Select: Export SelectIntlTranslations, SelectPositioningOptions, SelectScrollToIndexDetails and
      SelectSelectionDetails.
    • Clipboard: Export ClipboardValueChangeDetails.
    • DateInput: Export DateInputPlaceholderChangeDetails.
    • ImageCropper: Export ImageCropperRect.
    • QrCode: Export QrCodeValueChangeDetails.
    • Steps: Export StepInvalidDetails. In Vue, this fixes TS2883 ("cannot be named without a reference to …") when
      emitting declarations for a component that wraps one of these roots, for example a generic Select.Root wrapper
      built with pnpm.
    • Field: Fix Field.ErrorText not being announced by VoiceOver and Narrator. It is now linked via
      aria-describedby instead of aria-errormessage, since screen reader support for aria-errormessage is still
      incomplete.
      - expect(input).toHaveAccessibleErrorMessage('Error Info')
      + expect(input).toHaveAccessibleDescription(expect.stringContaining('Error Info'))
  • Fix Tour.Content unmounting before its exit animation finishes when using lazyMount and unmountOnExit.
    • TreeView: Fix TreeView.NodeCheckboxIndicator not updating when a node is checked or becomes indeterminate.
    • TreeView: Fix useTreeView losing the node type, so selectedNodes, expandedNodes and focusedNode are
      typed as T instead of TreeNode.
    • NumberInput: Fix NumberInput.ValueText rendering empty when used without children. It now displays the current
      value.
    • Select: Fix Select.ValueText ignoring custom children.
  • Fix Toaster dropping the group props it accepts. dir and getRootNode were typed on the component but never
    reached the group machine — the locale and environment contexts always won, and both props were spread onto the region
    element instead. The toast region's aria-label is now settable through a label prop, which is forwarded to
    getGroupProps.
  • Fix Tour.Spotlight disappearing immediately when the tour closes, so its exit animation can run.
  • Export the missing Tour types, including TourStepsChangeDetails for onStepsChange, and add flat Tour* aliases
    for the step, action, and callback detail types.
    • Initial Focus: initialFocusEl can now return false to open without moving focus. Returning null still uses
      the default.
      <Dialog.Root initialFocusEl={() => false} />

      Supported in Color Picker, Dialog, Drawer, Floating Panel, and Popover.

    • Image Cropper: Add api.setCrop(rect) to place the crop area programmatically, in viewport coordinates. The
      rect is constrained like initialCrop, and unlike api.reset() it keeps the current zoom, rotation, flip, and pan.
    • Pagination: Add api.type and api.getPageUrl(page), so custom parts can tell whether the controls are buttons
      or links and build a page's URL.
    • Carousel: Fix allowMouseDrag advancing a full page per pointer move in Vue.
    • Floating Panel
      • Fix strategy="absolute" placing the panel outside its boundary.
      • Fix the panel not following its boundary element when an ancestor scrolls.
    • Image Cropper: Fix Alt+Arrow resizing ignoring aspectRatio and cropShape="circle".
    • Listbox: Fix range selection anchoring on the highlighted item instead of the one you clicked. Shift+click with
      highlightOnHover now selects the full range, and Shift+arrow can reverse direction.
    • Popover: Fix autoFocus={false} being ignored for modal popovers.
    • Popover, Select, Menu, and other positioned parts: Fix a stylesheet z-index on the positioner being ignored
      when the content has no stacking level.
    • Presence: Fix an element with an exit animation staying mounted forever in Safari, invisible but still
      intercepting clicks.
    • Progress: Fix the formatter not updating when formatOptions changes to a subset of the previous options.
    • Splitter: Fix slow dragging in large documents.
    • Tabs: Fix programmatic tab selection triggering link navigation.
    • TOC: Fix onActiveChange reporting the previous activeIds and activeItems, which kept a controlled TOC
      stuck on the old section.
    • Tour: Fix the step card, spotlight and backdrop collapsing into the top-left corner when the step's target is
      replaced, and the backdrop leaving part of the page undimmed on resize.
    • Svelte: Fix derived_inert warnings when a component's cleanup runs after it unmounts.
    • General
      • Fix inline style values containing semicolons being cut off when props merge, such as quoted CSS custom properties
        and data URLs.
      • Fix Illegal invocation thrown on setup when a tool like Storybook has replaced HTMLElement.prototype.focus.
chakra-ui/ark (@​ark-ui/svelte)

v5.24.3

Compare Source

Fixed
  • Align the last six parts that rendered a different element across adapters: Toggle.Indicator, AngleSlider.Marker,
    AngleSlider.ValueText and Listbox.ItemText render span, Popover.Title renders h2, and Svelte's
    NumberInput.Scrubber renders div.
    • Select: Export SelectIntlTranslations, SelectPositioningOptions, SelectScrollToIndexDetails and
      SelectSelectionDetails.
    • Clipboard: Export ClipboardValueChangeDetails.
    • DateInput: Export DateInputPlaceholderChangeDetails.
    • ImageCropper: Export ImageCropperRect.
    • QrCode: Export QrCodeValueChangeDetails.
    • Steps: Export StepInvalidDetails. In Vue, this fixes TS2883 ("cannot be named without a reference to …") when
      emitting declarations for a component that wraps one of these roots, for example a generic Select.Root wrapper
      built with pnpm.
    • Field: Fix Field.ErrorText not being announced by VoiceOver and Narrator. It is now linked via
      aria-describedby instead of aria-errormessage, since screen reader support for aria-errormessage is still
      incomplete.
      - expect(input).toHaveAccessibleErrorMessage('Error Info')
      + expect(input).toHaveAccessibleDescription(expect.stringContaining('Error Info'))
    • AngleSlider: Fix AngleSlider.ValueText rendering empty when used without children. It now displays the current
      value in degrees.
  • Accept a render snippet on every Context component. 55 of the 63 take render; Avatar, Progress, QrCode and
    Timer took api, and Dialog, Drawer, Marquee and RadioGroup took children. Those eight now take render
    too, and keep api / children as deprecated aliases, so existing code keeps working.
  • Fix Dialog.Description and Popover.Description rendering a p element. React, Solid and Vue render a div, so a
    stylesheet or a nested block element written against one stack broke on the other.
  • Render FileUpload.ItemGroup as ul, Menu.Separator as hr, Slider.ValueText as span, and
    DatePicker.TableCellTrigger, Steps.List, TreeView.BranchTrigger and TreeView.Item as div, matching the other
    frameworks.
  • Fix bind:ref staying null when a component renders through asChild. The factory bound ref only on the element
    it renders itself, so in asChild mode the caller's element was never assigned. The props function now carries an
    attachment that sets ref to the child element, matching React, where the ref reaches the asChild child.
  • Export the Fieldset namespace's prop types under their namespaced names. Every other Svelte namespace aliases them —
    Field.RootProps, Dialog.RootProps, Accordion.ItemProps and so on — but fieldset.ts re-exported the flat
    FieldsetRootProps / FieldsetLegendProps names, so Fieldset.RootProps and its siblings did not resolve and the
    BaseProps variants were not exported at all. This matches the React package, whose Fieldset namespace already
    aliases both.
    • JsonTreeView: Fix bind:expandedValue, bind:selectedValue, bind:checkedValue and bind:focusedValue not
      syncing, and the tree not re-rendering when data changes. useJsonTreeView now also reacts to data changes.
    • Fix the asChild props function rejecting an SVG child. It returned HTMLAttributes<HTMLElement>, whose event
      handlers don't accept an SVGElement, so <svg {...props()}> failed to typecheck without a cast. It now returns
      attributes any element accepts, which keeps spreading a part's props onto a different element (a trigger rendered as
      <a>) working.
    • Export HTMLProps, HTMLTag, PolymorphicProps, PropsFn and RefAttribute, so wrappers can type their own
      polymorphic props the way @ark-ui/react exports HTMLArkProps and PolymorphicProps.
    • Fix Portal leaving its content in the DOM when unmounted immediately after mounting.
    • Fix Portal not moving its content when the container prop changes.
  • Fix Select.ValueText rendering its placeholder as a DOM attribute. The component spread every prop onto the
    underlying span, so the fallback text showed up as placeholder="…" in the markup. Listbox.ValueText and
    DatePicker.ValueText already split it out.
  • Fix Tabs.Content omitting the presence props. The content merged only the machine props, so it never carried
    data-state="open" | "closed" (the React, Solid and Vue implementations do) and it was hidden the moment the tab
    changed, cutting exit animations short.
  • Fix Tooltip.Root ignoring a controlled open prop. The root destructured open out of its props and never passed
    it to the machine, so <Tooltip.Root open={true}> (or a bind:open the parent drives) rendered a closed tooltip. The
    other popper roots (Dialog, Popover, HoverCard) already forward it.
  • Fix Toaster dropping the group props it accepts. dir and getRootNode were typed on the component but never
    reached the group machine — the locale and environment contexts always won, and both props were spread onto the region
    element instead. The toast region's aria-label is now settable through a label prop, which is forwarded to
    getGroupProps.
  • Fix Tour.Spotlight disappearing immediately when the tour closes, so its exit animation can run.
  • Export the missing Tour types, including TourStepsChangeDetails for onStepsChange, and add flat Tour* aliases
    for the step, action, and callback detail types.
    • Initial Focus: initialFocusEl can now return false to open without moving focus. Returning null still uses
      the default.
      <Dialog.Root initialFocusEl={() => false} />

      Supported in Color Picker, Dialog, Drawer, Floating Panel, and Popover.

    • Image Cropper: Add api.setCrop(rect) to place the crop area programmatically, in viewport coordinates. The
      rect is constrained like initialCrop, and unlike api.reset() it keeps the current zoom, rotation, flip, and pan.
    • Pagination: Add api.type and api.getPageUrl(page), so custom parts can tell whether the controls are buttons
      or links and build a page's URL.
    • Carousel: Fix allowMouseDrag advancing a full page per pointer move in Vue.
    • Floating Panel
      • Fix strategy="absolute" placing the panel outside its boundary.
      • Fix the panel not following its boundary element when an ancestor scrolls.
    • Image Cropper: Fix Alt+Arrow resizing ignoring aspectRatio and cropShape="circle".
    • Listbox: Fix range selection anchoring on the highlighted item instead of the one you clicked. Shift+click with
      highlightOnHover now selects the full range, and Shift+arrow can reverse direction.
    • Popover: Fix autoFocus={false} being ignored for modal popovers.
    • Popover, Select, Menu, and other positioned parts: Fix a stylesheet z-index on the positioner being ignored
      when the content has no stacking level.
    • Presence: Fix an element with an exit animation staying mounted forever in Safari, invisible but still
      intercepting clicks.
    • Progress: Fix the formatter not updating when formatOptions changes to a subset of the previous options.
    • Splitter: Fix slow dragging in large documents.
    • Tabs: Fix programmatic tab selection triggering link navigation.
    • TOC: Fix onActiveChange reporting the previous activeIds and activeItems, which kept a controlled TOC
      stuck on the old section.
    • Tour: Fix the step card, spotlight and backdrop collapsing into the top-left corner when the step's target is
      replaced, and the backdrop leaving part of the page undimmed on resize.
    • Svelte: Fix derived_inert warnings when a component's cleanup runs after it unmounts.
    • General
      • Fix inline style values containing semicolons being cut off when props merge, such as quoted CSS custom properties
        and data URLs.
      • Fix Illegal invocation thrown on setup when a tool like Storybook has replaced HTMLElement.prototype.focus.
chakra-ui/ark (@​ark-ui/vue)

v5.39.3

Compare Source

Fixed
  • Align the last six parts that rendered a different element across adapters: Toggle.Indicator, AngleSlider.Marker,
    AngleSlider.ValueText and Listbox.ItemText render span, Popover.Title renders h2, and Svelte's
    NumberInput.Scrubber renders div.
    • Select: Export SelectIntlTranslations, SelectPositioningOptions, SelectScrollToIndexDetails and
      SelectSelectionDetails.
    • Clipboard: Export ClipboardValueChangeDetails.
    • DateInput: Export DateInputPlaceholderChangeDetails.
    • ImageCropper: Export ImageCropperRect.
    • QrCode: Export QrCodeValueChangeDetails.
    • Steps: Export StepInvalidDetails. In Vue, this fixes TS2883 ("cannot be named without a reference to …") when
      emitting declarations for a component that wraps one of these roots, for example a generic Select.Root wrapper
      built with pnpm.
    • Field: Fix Field.ErrorText not being announced by VoiceOver and Narrator. It is now linked via
      aria-describedby instead of aria-errormessage, since screen reader support for aria-errormessage is still
      incomplete.
      - expect(input).toHaveAccessibleErrorMessage('Error Info')
      + expect(input).toHaveAccessibleDescription(expect.stringContaining('Error Info'))
    • Progress, QrCode: Fix Root not emitting valueChange and update:modelValue, so v-model stayed stale after
      setValue() from context.
    • QrCode: Fix QrCode.Context being undefined because it was exported under the wrong name.
  • Fix Toaster dropping the group props it accepts. dir and getRootNode were typed on the component but never
    reached the group machine — the locale and environment contexts always won, and both props were spread onto the region
    element instead. The toast region's aria-label is now settable through a label prop, which is forwarded to
    getGroupProps.
  • Fix Tour.Spotlight disappearing immediately when the tour closes, so its exit animation can run. It also now sets
    data-state.
  • Export the missing Tour types, including TourStepsChangeDetails for onStepsChange, and add flat Tour* aliases
    for the step, action, and callback detail types.
  • Fix aria-label and aria-labelledby being ignored on AngleSlider.Root, Slider.Root, Dialog.Root, Menu.Root,
    and Tooltip.Root. For example, <AngleSlider.Root aria-label="Rotation"> now names the thumb.
  • Fix Avatar.Image, ImageCropper.Image, Menu.Separator, and PasswordInput.Input rendering nothing when using
    asChild.
    • ImageCropper: Fix ImageCropper.Root ignoring all of its props, such as fixedCropArea, aspectRatio, and
      initialCrop.
    • Accordion: Fix Accordion.Item not inheriting disabled from Accordion.Root.
    • ColorPicker: Fix ColorPicker.Swatch and ColorPicker.ValueSwatch dropping the alpha channel by default.
    • DatePicker: Fix DatePicker.Input not committing the typed date on blur by default.
    • NavigationMenu: Fix NavigationMenu.Link not closing the menu when clicked.
    • Toc: Fix Toc.Root not auto-scrolling to the active item by default.
    • Select, Listbox, TreeView: Fix Context slot items typed as unknown inside generic wrapper components.
    • Fix Cannot find name '__VLS_Slots' type errors when skipLibCheck is disabled.
    • Highlight: Fix class, style and other attributes not being forwarded to the rendered <mark> elements.
    • JsonTreeView: Fix v-model:expanded-value, v-model:selected-value, v-model:checked-value and
      v-model:focused-value not updating, and the tree not re-rendering when data changes. useJsonTreeView now also
      reacts to data changes.
    • Combobox: Fix select event not being emitted when an item is selected.
    • Menu, Popover: Fix requestDismiss event not being emitted when a parent layer closes.
    • NumberInput: Fix NumberInput.ValueText rendering empty when used without a default slot. It now displays the
      current value.
    • Tour: Fix Tour.RootEmits declaring statusChange, stepChange and other machine events that Tour.Root
      never emits. It now only declares enterComplete and exitComplete. Pass onStatusChange, onStepChange and the
      other callbacks to useTour instead.
    • Presence: Fix the enterComplete and exitComplete event descriptions being swapped.
    • TreeView: Fix TreeView.RootEmits<T> and useTreeView losing the node type, so selectedNodes,
      expandedNodes and focusedNode are typed as T instead of TreeNode.
    • TreeView: Remove the fallback and indeterminate props from TreeView.NodeCheckboxIndicator. They were never
      rendered; use the #fallback and #indeterminate slots instead.
    • Initial Focus: initialFocusEl can now return false to open without moving focus. Returning null still uses
      the default.
      <Dialog.Root initialFocusEl={() => false} />

      Supported in Color Picker, Dialog, Drawer, Floating Panel, and Popover.

    • Image Cropper: Add api.setCrop(rect) to place the crop area programmatically, in viewport coordinates. The
      rect is constrained like initialCrop, and unlike api.reset() it keeps the current zoom, rotation, flip, and pan.
    • Pagination: Add api.type and api.getPageUrl(page), so custom parts can tell whether the controls are buttons
      or links and build a page's URL.
    • Carousel: Fix allowMouseDrag advancing a full page per pointer move in Vue.
    • Floating Panel
      • Fix strategy="absolute" placing the panel outside its boundary.
      • Fix the panel not following its boundary element when an ancestor scrolls.
    • Image Cropper: Fix Alt+Arrow resizing ignoring aspectRatio and cropShape="circle".
    • Listbox: Fix range selection anchoring on the highlighted item instead of the one you clicked. Shift+click with
      highlightOnHover now selects the full range, and Shift+arrow can reverse direction.
    • Popover: Fix autoFocus={false} being ignored for modal popovers.
    • Popover, Select, Menu, and other positioned parts: Fix a stylesheet z-index on the positioner being ignored
      when the content has no stacking level.
    • Presence: Fix an element with an exit animation staying mounted forever in Safari, invisible but still
      intercepting clicks.
    • Progress: Fix the formatter not updating when formatOptions changes to a subset of the previous options.
    • Splitter: Fix slow dragging in large documents.
    • Tabs: Fix programmatic tab selection triggering link navigation.
    • TOC: Fix onActiveChange reporting the previous activeIds and activeItems, which kept a controlled TOC
      stuck on the old section.
    • Tour: Fix the step card, spotlight and backdrop collapsing into the top-left corner when the step's target is
      replaced, and the backdrop leaving part of the page undimmed on resize.
    • Svelte: Fix derived_inert warnings when a component's cleanup runs after it unmounts.
    • General
      • Fix inline style values containing semicolons being cut off when props merge, such as quoted CSS custom properties
        and data URLs.
      • Fix Illegal invocation thrown on setup when a tool like Storybook has replaced HTMLElement.prototype.focus.
nuxt/nuxt (@​nuxt/kit)

v4.6.0

Compare Source

v4.6.0 is the next minor release.

📣 Some news

🖥️ Nuxt CLI v4

Alongside the release of Nuxt v4.6, today also brings a new major release of the Nuxt CLI: @nuxt/cli v4. It ships as a dependency of nuxt, so you'll get it automatically when you upgrade.

Most of what's new is in nuxt dev:

  • an interactive terminal UI, showing URLs, startup progress and keyboard shortcuts, with panels to dive into error logs, routes, network requests and more
  • the dev server gives you more info, such as why it reloaded or restarted, which nuxt.config keys changed, where the time went during a slow start or build, and how long each module took to set up
  • a CLI-level error channel rendered with my-bad (see below), powering things like automatically reloading when a syntax error in nuxt.config.ts is fixed
  • a lock file in .nuxt/, which lets a second nuxt dev (say, one started by an agent) take over or defer to the one you started, and powers new nuxt curl and nuxt task commands that talk to the running server

There's also a new nuxt docs "<query>" search, and nuxt preview --takeover can replace a running preview server. And in general nuxt/cli is a lot smaller and starts a lot faster:

v3.37 v4.0
@nuxt/cli install size 13.1 MB 3.5 MB -73%
@nuxt/cli dependencies 70 31 -56%
nuxt dev: first paint 330 ms 50 ms 6.6x faster
nuxt dev: port bound 338 ms 104 ms 3.2x faster
nuxt dev: memory at rest (Linux) 630 MB 440 MB -30%
nuxt-dev

Although this is a major version, none of the changes should be breaking for Nuxt v4 users: we require Node.js v22.21+, v24.11+ or v26+, we drop nuxt init and only support npm create nuxt@latest, and Nuxt 2 and @nuxt/bridge are no longer supported.

👉 Check out the full Nuxt CLI v4 release notes for everything that's changed.

💡 A server-agnostic Nuxt

The biggest thing about this release is our move towards making Nuxt server-agnostic.

I feel that freedom of choice is very much a fundamental value of the web, and one that unites the whole Nuxt team.

You can use pages/ (with vue-router) or not. You can use Vite, webpack or Rspack to bundle your code. You can pick from dozens of providers to deploy to, pick any image or font provider, choose any database adapter. In every case, the framework is the same.

The server side was different. #app composables imported h3 types, server code imported from h3 and nitropack, and every module that touched the server was tied to whichever major version of those packages Nuxt happened to depend on.

This has become particularly clear as we have been upgrading to new majors of h3 and nitro, which ship breaking changes with a cascading effect throughout the whole ecosystem.

👉 This release changes that.

Alongside explicitly defining our public API in nuxt/kit (which now does not refer to external packages), Nuxt now specifies our own types for the request event, route rules and typed $fetch, and we expose an import surface (nuxt/server) for the server utilities that will be needed by most apps.

This is the culmination of work we started almost a year ago, making it possible to use any server builder with Nuxt, not just Nitro (#​33462).

Of course, under the hood, nuxt/server is still powered by Nitro by default - though we are also announcing a second, experimental implementation, @nuxt/vite-server, which allows pure-Vite server builds using the Vite Environment API.

[!IMPORTANT]
We believe that Nitro is still the right choice for almost everyone.

🌟 We see a number of key benefits for nuxt/server.

  1. it smooths the upgrade to Nuxt 5, which moves to Nitro v3 and h3 v2. Server code written against nuxt/server on 4.6 runs unchanged there, so a module can ship one file for both.
  2. it decouples Nuxt from the Nitro release cycle. Because we 'own' the API, we can adapt to breaking changes in Nitro or h3 without requiring a future major - and we can release Nuxt majors without having to wait for upstream releases.
  3. it makes Nuxt's code more maintainable. It helps us preserve the separation of concerns between our API - /app and /server - and the bundler + server that you ultimately want to build your app.

... and there are a number of other benefits too, from a single type surface to being able to iterate more quickly on features.

Finally, I want to say a special thank-you to @​pi0, whose relentless focus on server agnosticism and work on h3, Nitro and web-standard server primitives over the last few years is what makes a portable RequestEvent possible at all. Thank you, Pooya. ❤️

Almost every feature in this release is already in the Nuxt 5 branch, and most of the remaining Nuxt 5 defaults can be tested today with future.compatibilityVersion: 5 (more details below!).

[!TIP]
Nuxt 3 reached end-of-life on July 31, 2026, so there is no 3.x release alongside this one. If you're still on v3, the upgrade guide is waiting for you.

👀 Highlights

🤷 If you've read this far I'm afraid I have bad news for you: there's a lot more still to say! Nuxt 4.6 is one of our biggest minor releases, with over 420 commits since v4.5.2.

... so, you might want to grab a coffee! ☕️

🧩 nuxt/server

It has been asked for for a long time, and it now exists (#​36275)!

nuxt/server is a new import source for server code: handlers, middleware and utilities - a complement to nuxt/app. Where nuxt/app is for the part of your application that also runs in the browser, nuxt/server is for the part that only runs on the server.

import { defineEventHandler, getQuery } from 'nuxt/server'

export default defineEventHandler((event) => {
  const { name } = getQuery<{ name?: string }>(event)
  return { message: `Hello, ${name ?? 'world'}!` }
})

The utilities use web standards and are typed against a portable RequestEvent:

event.req         // Request
event.url         // URL
event.res         // { status, statusText, headers }
event.res.headers // Headers
event.context     // per-request context

Under @nuxt/nitro-server they are backed by Nitro and h3, but you never import from either.

So the same handler runs under Nitro v2, Nitro v3 or @nuxt/vite-server, and a module that imports from nuxt/server doesn't need a peer dependency on h3 or nitropack.

We think this will make a big difference in smoothing out the upgrade to Nuxt v5 and Nitro v3.

There is a typing benefit too. We no longer hoist h3 or Nitro types into your app to type useRequestEvent, $fetch or route rules, which removes a source of type conflicts when versions differ (#​36212, #​36214, #​36293).

The surface is small, and covers what published modules and user code typically need: defineEventHandler, createError/isNuxtError, request URL, headers, query, body (plain and validated with any Standard Schema library or a function), cookies, redirects, response status, getRouterParam(s), getRequestIP, handleCors, getRouteRules, useRuntimeConfig, useAppConfig and sessions.

import { defineEventHandler, readValidatedBody } from 'nuxt/server'
import { z } from 'zod'

export default defineEventHandler(async (event) => {
  const user = await readValidatedBody(event, z.object({ name: z.string() }))
  return { created: user.name }
})

We encourage you to use web APIs (event.req.headers, for example), or raise an issue if there's functionality you're missing from nuxt/server 🙏

If you do need to step outside nuxt/server for a particular handler, don't worry! Nothing has been taken away: import defineEventHandler and the helpers you need from h3 or nitropack/runtime as before, and that handler works exactly as it did on Nuxt 4.5.

import { defineEventHandler, readMultipartFormData } from 'h3'

export default defineEventHandler(async (event) => {
  const parts = await readMultipartFormData(event)
  return { received: parts?.length ?? 0 }
})

[!IMPORTANT]
On Nuxt 4, the auto-imported defineEventHandler, getQuery, readBody and the rest are still h3's own helpers, which take a different shape of event. Import from nuxt/server explicitly, including defineEventHandler to use the new server runtime. If you mix the two, you'll see a NUXT_E8012 error which should tell you which import to change.

A few helpers also behave differently from their h3 v1 namesakes: sendRedirect returns the response rather than sending it, createError takes status and statusText, and response headers are set through event.res.headers. The upgrade guide has a table of the differences.

Nothing in this release requires a migration. But if you have server code you'd like to make portable ahead of Nuxt 5, this is the best way.

👉 Read the server imports guide.

🔐 appSecret and sessions

Nuxt now has a root application secret: runtimeConfig.appSecret, set with NUXT_APP_SECRET (#​35874, thanks to @​onmax). Modules and server features derive purpose-specific secrets from it with deriveSecret(purpose), so NUXT_APP_SECRET is the only secret you need to configure.

openssl rand -base64 32

In development Nuxt generates and persists one if none is configured (and warns the first time a derived secret is used). Builds never generate one.

The first thing to use it is a set of session helpers in nuxt/server (#​36358). Sessions are sealed into a cookie with iron, so there's no server-side storage to configure:

import { defineEventHandler, useSession } from 'nuxt/server'

export default defineEventHandler(async (event) => {
  const session = await useSession<{ visits: number }>(event)
  await session.update(data => ({ visits: (data.visits ?? 0) + 1 }))
  return { visits: session.data.visits }
})

[!NOTE]
As a reminder, runtime config keys prefixed with app (runtimeConfig.app, runtimeConfig.appSecret) are reserved for Nuxt.

🎯 Typed $fetch, rebuilt

$fetch and useFetch have been typed from your server routes for a long time. But the types were derived from Nitro's InternalApi interface, and past a few hundred routes they hit TypeScript's instantiation limit with the familiar TS2589: Type instantiation is excessively deep and possibly infinite.

We've rebuilt typed fetch on top of fetchdts (#​36238). Nuxt compiles your server routes into a route tree with an exact-match table for static paths and accessors specialised to your route set. Resolution cost now scales with call sites, not with route count:

routes before after
100 1,397,361 instantiations / 0.77s 51,558 / 0.26s
300 5,774,425 / 3.49s (TS2589) 51,558 / 0.16s
1000 12,831,467 / 7.44s (TS2589) 51,558 / 0.20s
3000 (200 call sites) 71,875,148 / 53.63s (TS2589) 101,678 / 0.62s

Peak memory for the same runs dropped from 946 MB to 140 MB. 🔥

Plus, the route set also carries the body, query and headers a handler validates, so calls are checked more tightly than before:

// server/api/users.post.ts validates { title: string, count: number }
await $fetch('/api/users', { method: 'post', body: { title: 'a', count: 1 } })
await $fetch('/api/users', { method: 'post', body: { title: 'a', count: 'no' } })
//                                                                ^ not assignable to number
await $fetch('/api/users', { method: 'post' })
//           ^ body is required

On Nuxt 4 this is opt-in, because there are small changes to type inference, and hand-written ServerRoutes augmentations need a small rewrite. It is the default in Nuxt 5.

export default defineNuxtConfig({
  experimental: {
    routeTypedFetch: true,
  },
})

There's also a new experimental.strictRouteTypes option to reject calls to paths that don't exist (otherwise these just return unknown), and an 'isomorphic' mode that types your pages as GET routes too if you want to be able to $fetch from the Vue renderer with type safety.

👉 Read more in the experimental features docs.

🐛 Better errors in development with my-bad

Server-side errors in development used to look like this:

ReferenceError: foo is not defined
    at Object.<anonymous> (/_nuxt/app/pages/i

> ❗ **Important**
> 
> ✂ PR body was truncated to here.


</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/bysages/elements).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xMDMuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjEzNC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

@renovate
renovate Bot force-pushed the renovate/all-minor-patch branch 18 times, most recently from e17fa42 to d4f6c2f Compare September 27, 2026 10:20
@renovate renovate Bot changed the title fix(deps): update all non-major dependencies fix(deps): update all non-major dependencies - autoclosed Sep 28, 2026
@renovate renovate Bot closed this Sep 28, 2026
@renovate
renovate Bot deleted the renovate/all-minor-patch branch September 28, 2026 11:01
@renovate renovate Bot changed the title fix(deps): update all non-major dependencies - autoclosed fix(deps): update all non-major dependencies Sep 29, 2026
@renovate renovate Bot reopened this Sep 29, 2026
@renovate
renovate Bot force-pushed the renovate/all-minor-patch branch 5 times, most recently from 38ce7dc to 953fd7e Compare October 1, 2026 18:07
@renovate renovate Bot changed the title fix(deps): update all non-major dependencies chore(deps): update pnpm to v10.34.6 Oct 1, 2026
@renovate
renovate Bot force-pushed the renovate/all-minor-patch branch from 953fd7e to 4d420de Compare October 1, 2026 21:50
@renovate renovate Bot changed the title chore(deps): update pnpm to v10.34.6 fix(deps): update all non-major dependencies Oct 1, 2026
@renovate
renovate Bot force-pushed the renovate/all-minor-patch branch 13 times, most recently from 590122d to 7a110b9 Compare October 6, 2026 01:29
@renovate
renovate Bot force-pushed the renovate/all-minor-patch branch from 7a110b9 to 347f607 Compare October 6, 2026 15:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants