@remix-run/ui
0.13.0 · 23 Oct 2026MIT19.4k / weekRepositoryHomepagenpmAtom feed
Upgrading @remix-run/ui from 0.1.0 to 0.13.0
15 releases in betweennotes for 14
- 13+
- changes to make
- 0
- advisories fixed
- 27+
- new
- 53+
- fixes
Counted from 14 of 15 release notes. Advisories are counted from the advisory database, in full.
Before you upgrade
Tick each one off as you go- breaking0.13.0
- breaking0.13.0
- breaking0.12.0
- breaking0.10.0
- breaking0.10.0
- breaking0.10.0
- breaking0.8.0
- breaking0.8.0
- breaking0.8.0
- breaking0.5.0
Release by release
- new
Check the user's current motion preference with
prefersReducedMotion()from@remix-run/ui/animation. It returnsfalseduring server rendering or whenmatchMediais unavailable, so it can be called safely from component render functions as well as browser event handlers. - fixed
Server rendering skips setup and render for animation mixins, keyboard and outside-click helpers, typeahead behavior, and popover anchor and focus helpers. Mixins that provide initial attributes, styles, or ARIA props still run on the server.
- fixed
Bumped
@remix-run/*dependencies:
- new
0.12.0 – 0.12.12 releases, nothing new or fixed in the notes
- new
Preserve client-owned attributes during frame reloads with
data-rmx-preserve-attrs="class data-theme"on any matched element, including<html>and<body>(see #11809). The named attributes keep their live values or absence while other attributes and children reconcile normally. The incoming HTML controls the list; clearing it or removing a name returns those attributes to normal reconciliation. - new
Allow client entry props to use ordinary interfaces, including nested objects whose properties are all optional (see #11918).
- fixed
Send
X-Remix-Frame: truefrom the default browser resolver for all frame loads, including top-frame navigation and reloads. Named frames also sendX-Remix-Target, allowing handlers to identify and target frame requests consistently across browser and server rendering (see #11941). - fixed
Treat marker-less HTML that starts with a doctype or
<html>as a document reload, so pages rendered withrenderToStringcan be navigated by the client runtime (see #11808).
- new
- fixed
Ignore invalid host prop names and reserved DOM mutation properties during server rendering and client reconciliation. Block
javascript:URLs in executable URL attributes while preserving other URL schemes and non-executable attributes. Use theon()mixin for events; the explicitinnerHTMLAPI and standard DOM,data-*,aria-*, SVG, and custom-element properties continue to work as before. - fixed
Fix duplicated text during hydration when a browser splits long server-rendered text into multiple DOM nodes, including chunks that span adjacent text children (see #11591).
- fixed
Avoid attaching duplicate event handlers when a client entry imports and renders another client entry, including through fragments and wrapper components. Preserve deferred removal and exit animations when removing nested client entries (see #11844).
- fixed
Restore the previous named frame from
handle.frames.get(name)when a more recently mounted frame with the same name unmounts.
- fixed
- new
Client entries can now provide import maps through
resolveClientEntry(). The<ImportMap>component fromremix/ui/servercombines your mappings with those from blocking client entries so the initial document contains one complete import map. New mappings from later frame responses are installed before their client entries load. Plain<script type="importmap">elements remain supported when you do not need to combine mappings (see #11706). - new
run()now accepts aprocessClientEntryPreloadscallback to handle preloads for client entries discovered after the initial page load. Use it withremix/multiple-import-maps-polyfillto preload modules in browsers that need the polyfill, returning an empty array to skip native modulepreload links. See the client entry setup example (see #11706). - fixed
handle.update()now warns and skips the extra render when called during component setup. Calls during rendering, or before the initial commit from outside setup, report a clear component error. Move these updates into an event handler or ahandle.queueTask()callback (see #11795). - fixed
Fixed delayed scroll resets and history scroll restoration during frame navigation. Scroll now updates once the destination and its blocking frames first render, without waiting for the rest of the streamed content or client entry hydration. Also fixed scroll jumps in Chromium and stale or repeated scroll changes during redirects and overlapping reloads (see #11755).
- fixed
Browsers without
NavigateEvent.sourceElementsupport now use full document navigation, so links and forms keep working when frame navigation is unavailable (see #11820). - fixed
Frames now render HTML responses with
3xxand4xxstatus codes, so form validation messages and error pages appear in the frame when using the default resolver. HTML content types are now recognized regardless of case (see #11823).
- new
- new
Added a browser-only SPA response protocol to
remix/uifor associating bodyless route responses with Remix UI nodes. Application code uses the higher-levelrender()andrun()APIs fromremix/spa. - fixed
Prevent aborted
renderToStreamrequests with multiple blockingFrames from producing unhandled promise rejections that can crash Node servers. - fixed
Changed the scheduler's cascading update guard to warn when many component updates happen in one event-loop turn and only throw the infinite-loop error when a single component instance repeatedly updates itself. This keeps large
clientEntryhydration bursts interactive while still surfacing component names and counts for diagnosis. - fixed
Fixed
mixprop types to accept argument-bearing mixins authored for a base element type on compatible subtype elements.
- new
- new
run()now uses a default browser frame resolver whenresolveFrameis omitted. Apps that supplied a resolver only to fetch frame HTML can remove it:
- new
- new
Allow
resolveClientEntry()to return module preload hrefs so client entries can preload their browser module graphs
- new