Minor Changes
-
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).When a frame response changes an installed import mapping or integrity value, Remix loads a fresh document so navigation after a deployment cannot mix old and new modules.
-
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).
Patch Changes
-
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 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).
Failed
frame.reload()calls no longer cause a second unhandled promise rejection when the caller already handles the error. -
Browsers without
NavigateEvent.sourceElementsupport now use full document navigation, so links and forms keep working when frame navigation is unavailable (see #11820). -
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).