node-fetch-server v0.14.0
- Added a
trustProxyoption tocreateRequestListener()andcreateRequest()so apps behind trusted reverse proxies can constructrequest.urlfromForwarded,X-Forwarded-Host, andX-Forwarded-Protoheaders.createRequestListener()also uses trustedForwardedandX-Forwarded-Forvalues for handler client address information (see #10874).
- Reject request body reads when clients abort uploads, and avoid writing fallback error responses after streaming response headers are already committed (see #11533 and #11534).
remix v3.0.0-beta.5
-
Added
package.jsonexports:remix/ui/accordionto re-export APIs from@remix-run/ui/accordionremix/ui/accordion/primitivesto re-export APIs from@remix-run/ui/accordion/primitivesremix/ui/anchorto re-export APIs from@remix-run/ui/anchorremix/ui/breadcrumbsto re-export APIs from@remix-run/ui/breadcrumbsremix/ui/buttonto re-export APIs from@remix-run/ui/buttonremix/ui/checkboxto re-export APIs from@remix-run/ui/checkboxremix/ui/comboboxto re-export APIs from@remix-run/ui/comboboxremix/ui/combobox/primitivesto re-export APIs from@remix-run/ui/combobox/primitivesremix/ui/inputto re-export APIs from@remix-run/ui/inputremix/ui/listboxto re-export APIs from@remix-run/ui/listboxremix/ui/menuto re-export APIs from@remix-run/ui/menuremix/ui/menu/primitivesto re-export APIs from@remix-run/ui/menu/primitivesremix/ui/popoverto re-export APIs from@remix-run/ui/popoverremix/ui/radioto re-export APIs from@remix-run/ui/radioremix/ui/selectto re-export APIs from@remix-run/ui/selectremix/ui/select/primitivesto re-export APIs from@remix-run/ui/select/primitivesremix/ui/tabsto re-export APIs from@remix-run/ui/tabsremix/ui/tabs/primitivesto re-export APIs from@remix-run/ui/tabs/primitivesremix/ui/toggleto re-export APIs from@remix-run/ui/toggleremix/ui/toggle/primitivesto re-export APIs from@remix-run/ui/toggle/primitives
Removed helper re-exports from
remix/ui:flashAttributehiddenTypeaheadmatchNextItemBySearchTextonKeyDownSearchValuewaitwaitForCssTransition
Updated
remix/route-patternexports for theRoutePatternAPI:- Added
getRoutePatternCaptures,RoutePatternCapture, andRoutePatternJSONtoremix/route-pattern - Added
CreateHrefErrorDetailstoremix/route-pattern/href - Added
MatchParamMetatoremix/route-pattern/match
Removed
package.jsonexports:remix/components/accordionremix/components/accordion/primitivesremix/components/anchorremix/components/breadcrumbsremix/components/buttonremix/components/checkboxremix/components/checkbox/primitivesremix/components/comboboxremix/components/combobox/primitivesremix/components/inputremix/components/listboxremix/components/menuremix/components/menu/primitivesremix/components/popoverremix/components/selectremix/components/select/primitivesremix/ui/glyphremix/ui/scroll-lockremix/ui/separatorremix/ui/theme
-
Added the
trustProxyoption toremix/node-fetch-serverfor apps behind trusted reverse proxies that needrequest.urland handler client address information to reflect trustedForwardedandX-Forwarded-*headers. -
Bumped
@remix-run/*dependencies:assets@0.4.4async-context-middleware@0.3.4auth@0.2.6auth-middleware@0.2.4cli@0.3.4compression-middleware@0.1.12cop-middleware@0.1.7cors-middleware@0.1.7csrf-middleware@0.1.7fetch-proxy@0.8.4fetch-router@0.20.1file-storage@0.13.7file-storage-s3@0.1.4form-data-middleware@0.3.4form-data-parser@0.17.4fs@0.4.6lazy-file@5.0.6logger-middleware@0.3.4method-override-middleware@0.1.12mime@0.4.2node-fetch-server@0.14.0render-middleware@0.1.4response@0.3.7route-pattern@0.23.0session-middleware@0.3.4static-middleware@0.4.13ui@0.4.0
assets v0.4.4
-
Fixed asset route resolution for URL pathnames that contain percent-encoded file path characters, including scoped package names such as
%40remix-run. -
Bumped
@remix-run/*dependencies:
session-middleware v0.3.4
- Bumped
@remix-run/*dependencies:
response v0.3.7
- Bumped
@remix-run/*dependencies:
ui v0.4.0
-
BREAKING CHANGE: Replaced the styled button component API with a default
button()mixin exported from@remix-run/ui/button.Use the mixin directly on button-like hosts instead of importing
Buttonor composing the previous slot style exports:import button from '@remix-run/ui/button' <button mix={button()}>Edit order</button> <button mix={button({ size: 'lg', tone: 'primary' })}>Add product</button> <button mix={button({ tone: 'ghost' })}>Cancel</button>
-
Added a default
checkbox()mixin exported from@remix-run/ui/checkboxfor styling native checkbox inputs.Checkbox controls use the same keyboard focus shadow as
input()controls and support an optional visualstatefor app-owned checked, unchecked, and mixed states.import checkbox from '@remix-run/ui/checkbox' <input defaultChecked mix={checkbox()} name="permissions" value="read" /> <input indeterminate mix={checkbox({ size: 'lg', state: 'mixed' })} />
-
Added top-level component exports for headless primitives and styled components.
Primitive-only modules import directly from their component path, while modules with styled wrappers expose lower-level behavior under
/primitives:import button from '@remix-run/ui/button' import * as select from '@remix-run/ui/select/primitives'
BREAKING CHANGE: Removed the
@remix-run/ui/components/*subpath exports. Import component modules from@remix-run/ui/*instead.BREAKING CHANGE: Removed root helper exports that were only intended for first-party component internals:
flashAttributehiddenTypeaheadmatchNextItemBySearchTextonKeyDownSearchValuewaitwaitForCssTransition
Removed the
@remix-run/ui/scroll-locksubpath export. Scroll locking is now an internal popover implementation detail. -
Added a default
input()mixin exported from@remix-run/ui/inputfor standalone native inputs, plusinput.root()andinput.field()for icon-capable input layouts.import input from '@remix-run/ui/input' <input mix={input()} placeholder="Limit" /> <div mix={input.root()}> <SearchIcon /> <input mix={input.field()} placeholder="Search and filter products" /> </div>
-
Added a default
radio()mixin exported from@remix-run/ui/radiofor styling native radio inputs.Radio controls use the same keyboard focus shadow as
input()controls.import radio from '@remix-run/ui/radio' <input defaultChecked mix={radio()} name="shipping-speed" value="standard" /> <input mix={radio({ size: 'lg' })} name="shipping-speed" value="express" />
-
Added styled component subpath exports under
@remix-run/ui/*for accordion, breadcrumbs, checkbox, combobox, menu, and select. These are the package-owned implementations behind theremix/ui/*entrypoints. -
Added
tabsandtabs/primitivesexports for controlled and uncontrolled tab groups with toggle-slider active tabs, button-sized tab text, active-tab panels, keyboard activation, and bubbling tab change events.import { Tabs, TabList, Tab, TabPanel } from '@remix-run/ui/tabs' ;<Tabs defaultActiveTab="overview"> <TabList aria-label="Project sections"> <Tab name="overview">Overview</Tab> <Tab name="activity">Activity</Tab> </TabList> <TabPanel name="overview">Project summary.</TabPanel> <TabPanel name="activity">Recent changes.</TabPanel> </Tabs>
-
Added
toggle()styles andtoggle/primitivesfor boolean switch controls with medium and large sizes.import toggle from '@remix-run/ui/toggle' import * as togglePrimitive from '@remix-run/ui/toggle/primitives' <input defaultChecked mix={toggle({ size: 'lg' })} /> <button aria-label="Notifications" mix={[...toggle(), togglePrimitive.control({ defaultChecked: true })]} />
-
Forward the frame's name as the resolve target when a named
<Frame>is resolved on the clientOnly the reload and server resolve paths passed the frame's name; the client resolve path — a fresh client mount, or a
clientEntry-wrapped frame remounted when a non-root ancestor reloads — calledresolveFramewithout it. Frames that branch on the target (for example via anX-Remix-Targetheader) now receive the correct content instead of the no-target response. -
Fixed hydration for multiple
clientEntrycomponents in the same module -
Adopt a Fragment-nested
<Frame>'s server-rendered hydration marker atclientEntryboundariesA
<Frame>that is the first child of a bare Fragment returned by aclientEntrynow adopts its streamed hydration marker instead of taking the fresh-insert path, which previously re-fetchedsrcon the client and duplicated the streamed subtree. A<Frame>wrapped in a host element already hydrated cleanly.
static-middleware v0.4.13
- Bumped
@remix-run/*dependencies:
method-override-middleware v0.1.12
- Bumped
@remix-run/*dependencies:
route-pattern v0.23.0
-
BREAKING CHANGE:
RoutePatternno longer exposes its parsed internals. Construct patterns withRoutePattern.parse(), and usepattern.source,pattern.toString(), orpattern.toJSON()instead of reading parsed internals such aspattern.pathname.tokens,pattern.hostname, orpattern.search.Added
getRoutePatternCaptures(pattern)for supported capture introspection. It returns readonly{ part, type, name, optional }entries in source order so consumers can inspect the variables (:name) and wildcards (*name) declared in a pattern without relying on internal parser tokens.Exported
RoutePatternCaptureandRoutePatternJSONfrom@remix-run/route-pattern,CreateHrefErrorDetailsfrom@remix-run/route-pattern/href, andMatchParamMetafrom@remix-run/route-pattern/match.
-
Fixed several route pattern matching and href generation edge cases:
ignoreCasenow applies consistently to pathname matching, key-only search constraints keep generated hrefs matchable, pathname params useencodeURIComponentsegment encoding, hostname params reject URL-structural and control characters, optional joins no longer generate duplicate slashes, missing-param errors report every missing required param, optional variant duplicates are collapsed, port-only origins are rejected, and protocol/port constraints participate in specificity. -
Fixed route pattern helper types so literal pattern types follow the same grammar as runtime parsing. Invalid literal patterns now evaluate to
neverinCreateHrefArgs,MatchParams, andJoinPatterns, while broadstringpatterns remain usable.