Build Better Websites. Create modern, resilient user experiences with web fundamentals.
by remix-runTypeScript
Last 12 weeks · 170 commits
3 of 6 standards met
Replaces https://github.com/remix-run/remix/pull/11629 Adds a first-class client-rendered SPA boundary without changing the fetch router's standard to contract. Add and the entrypoint with two application-facing APIs: installs middleware, and connects an ordinary fetch router to the browser UI runtime. Keep the in-memory SPA response carrier behind the render middleware. It is browser-only, lazily creates its , and throws if used in a non-browser environment. Reuse top-frame navigation for the initial route, links, forms, history traversal, cancellation, named-frame targeting, and same-origin redirects with Fetch method semantics and a 10-redirect limit. Make include the initial top-frame reload, with an optional live Remix node fallback displayed while that route resolves. Add package docs, release notes, browser/server coverage, and a Vite SPA demo covering deep links, superseded navigations, contextual form pending UI, and push/replace history behavior.
Controller middleware applies only to actions directly owned by that controller. This adds an explicit mount-scoped middleware boundary so shared policy continues across multiple controllers and nested mounts. Adds a backwards-compatible overload Runs middleware in router, outer mount, inner mount, controller, then action order Runs mount middleware only after a descendant route matches, preserving fallthrough for unknown paths Infers middleware-provided context and mount params in descendant inline actions and controllers Includes a focused parent/child/grandchild demo of controller-local and mount-wide middleware execution A route refactor can accidentally remove middleware without changing the URL: Mount middleware keeps the boundary intact across the refactor:
Remix UI now provides a default browser frame resolver, so apps using no longer need to repeat the standard boilerplate. Enable enhanced link and form navigation when a custom is omitted Allow to leave link and form navigation to the browser and make manual frame reloads reject explicitly Fetch frame HTML with the submitted method and abort signal, using for , CRLF-delimited plain text for , and for Stream returned bodies for statuses below 500, including 4xx responses, while rejecting 5xx responses without replacing the current frame content Remove redundant resolvers from demos and documentation while preserving the frame-navigation demo's custom validation and error UI policy The default resolver is equivalent to: Apps can still provide when they need custom headers, request encoding, redirects, or error presentation.
This adds an additional field to the object returned from . These are collected and automatically added to the head during server rendering, and are dynamically injected at runtime for client entries introduced by non-blocking or reloaded frames. This allows their module graphs to begin loading before hydration imports the entry module, avoiding dependency waterfalls.
Repository: remix-run/remix. Description: Build Better Websites. Create modern, resilient user experiences with web fundamentals. Stars: 33314, Forks: 2787. Primary language: TypeScript. Languages: TypeScript (99.7%), JavaScript (0.2%), CSS (0%), Shell (0%), HTML (0%). License: MIT. Homepage: https://remix.run Latest release: ui@0.5.0 (3d ago). Open PRs: 37, open issues: 27. Last activity: 2d ago. Community health: 62%. Top contributors: mjackson, brophdawg11, remix-run-bot, ryanflorence, chaance, pcattori, MichaelDeBoey, mcansh, markdalgleish, github-actions[bot] and others.