Packages

@remix-run/ui

0.13.0 · 23 Oct 2026MIT19.4k / weekRepositoryHomepagenpmAtom feed

Upgrading @remix-run/ui from 0.7.0 to 0.13.0

7 releases in betweenevery note read

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

Release by release

  1. 0.13.0

    23 Oct 20261 new · 2 fixes
    • new

      Check the user's current motion preference with prefersReducedMotion() from @remix-run/ui/animation. It returns false during server rendering or when matchMedia is 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:

  2. 0.12.0 – 0.12.12 releases, nothing new or fixed in the notes

  3. 0.11.0

    28 Sep 20262 new · 6 fixes
    • 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: true from the default browser resolver for all frame loads, including top-frame navigation and reloads. Named frames also send X-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 with renderToString can be navigated by the client runtime (see #11808).

  4. 0.10.0

    18 Sep 20264 fixes
    • 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 the on() mixin for events; the explicit innerHTML API 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.

  5. 0.9.0

    8 Sep 20262 new · 4 fixes
    • new

      Client entries can now provide import maps through resolveClientEntry(). The <ImportMap> component from remix/ui/server combines 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 a processClientEntryPreloads callback to handle preloads for client entries discovered after the initial page load. Use it with remix/multiple-import-maps-polyfill to 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 a handle.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.sourceElement support 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 3xx and 4xx status 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).

  6. 0.8.0

    31 Aug 20261 new · 8 fixes
    • new

      Added a browser-only SPA response protocol to remix/ui for associating bodyless route responses with Remix UI nodes. Application code uses the higher-level render() and run() APIs from remix/spa.

    • fixed

      Prevent aborted renderToStream requests with multiple blocking Frames 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 clientEntry hydration bursts interactive while still surfacing component names and counts for diagnosis.

    • fixed

      Fixed mix prop types to accept argument-bearing mixins authored for a base element type on compatible subtype elements.