remix-run/remix
 Watch   
 Star   
 Fork   
10 days ago
remix

node-fetch-server v0.14.0

Minor Changes

  • Added a trustProxy option to createRequestListener() and createRequest() so apps behind trusted reverse proxies can construct request.url from Forwarded, X-Forwarded-Host, and X-Forwarded-Proto headers. createRequestListener() also uses trusted Forwarded and X-Forwarded-For values for handler client address information (see #10874).

Patch Changes

  • 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).
10 days ago
remix

remix v3.0.0-beta.5

Pre-release Changes

  • Added package.json exports:

    • remix/ui/accordion to re-export APIs from @remix-run/ui/accordion
    • remix/ui/accordion/primitives to re-export APIs from @remix-run/ui/accordion/primitives
    • remix/ui/anchor to re-export APIs from @remix-run/ui/anchor
    • remix/ui/breadcrumbs to re-export APIs from @remix-run/ui/breadcrumbs
    • remix/ui/button to re-export APIs from @remix-run/ui/button
    • remix/ui/checkbox to re-export APIs from @remix-run/ui/checkbox
    • remix/ui/combobox to re-export APIs from @remix-run/ui/combobox
    • remix/ui/combobox/primitives to re-export APIs from @remix-run/ui/combobox/primitives
    • remix/ui/input to re-export APIs from @remix-run/ui/input
    • remix/ui/listbox to re-export APIs from @remix-run/ui/listbox
    • remix/ui/menu to re-export APIs from @remix-run/ui/menu
    • remix/ui/menu/primitives to re-export APIs from @remix-run/ui/menu/primitives
    • remix/ui/popover to re-export APIs from @remix-run/ui/popover
    • remix/ui/radio to re-export APIs from @remix-run/ui/radio
    • remix/ui/select to re-export APIs from @remix-run/ui/select
    • remix/ui/select/primitives to re-export APIs from @remix-run/ui/select/primitives
    • remix/ui/tabs to re-export APIs from @remix-run/ui/tabs
    • remix/ui/tabs/primitives to re-export APIs from @remix-run/ui/tabs/primitives
    • remix/ui/toggle to re-export APIs from @remix-run/ui/toggle
    • remix/ui/toggle/primitives to re-export APIs from @remix-run/ui/toggle/primitives

    Removed helper re-exports from remix/ui:

    • flashAttribute
    • hiddenTypeahead
    • matchNextItemBySearchText
    • onKeyDown
    • SearchValue
    • wait
    • waitForCssTransition

    Updated remix/route-pattern exports for the RoutePattern API:

    • Added getRoutePatternCaptures, RoutePatternCapture, and RoutePatternJSON to remix/route-pattern
    • Added CreateHrefErrorDetails to remix/route-pattern/href
    • Added MatchParamMeta to remix/route-pattern/match

    Removed package.json exports:

    • remix/components/accordion
    • remix/components/accordion/primitives
    • remix/components/anchor
    • remix/components/breadcrumbs
    • remix/components/button
    • remix/components/checkbox
    • remix/components/checkbox/primitives
    • remix/components/combobox
    • remix/components/combobox/primitives
    • remix/components/input
    • remix/components/listbox
    • remix/components/menu
    • remix/components/menu/primitives
    • remix/components/popover
    • remix/components/select
    • remix/components/select/primitives
    • remix/ui/glyph
    • remix/ui/scroll-lock
    • remix/ui/separator
    • remix/ui/theme
  • Added the trustProxy option to remix/node-fetch-server for apps behind trusted reverse proxies that need request.url and handler client address information to reflect trusted Forwarded and X-Forwarded-* headers.

  • Bumped @remix-run/* dependencies:

10 days ago
remix

assets v0.4.4

Patch Changes

10 days ago
remix

session-middleware v0.3.4

Patch Changes

10 days ago
remix

response v0.3.7

Patch Changes

10 days ago
remix

ui v0.4.0

Minor Changes

  • 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 Button or 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/checkbox for styling native checkbox inputs.

    Checkbox controls use the same keyboard focus shadow as input() controls and support an optional visual state for 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:

    • flashAttribute
    • hiddenTypeahead
    • matchNextItemBySearchText
    • onKeyDown
    • SearchValue
    • wait
    • waitForCssTransition

    Removed the @remix-run/ui/scroll-lock subpath export. Scroll locking is now an internal popover implementation detail.

  • Added a default input() mixin exported from @remix-run/ui/input for standalone native inputs, plus input.root() and input.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/radio for 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 the remix/ui/* entrypoints.

  • Added tabs and tabs/primitives exports 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 and toggle/primitives for 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 })]} />

Patch Changes

  • Forward the frame's name as the resolve target when a named <Frame> is resolved on the client

    Only 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 — called resolveFrame without it. Frames that branch on the target (for example via an X-Remix-Target header) now receive the correct content instead of the no-target response.

  • Fixed hydration for multiple clientEntry components in the same module

  • Adopt a Fragment-nested <Frame>'s server-rendered hydration marker at clientEntry boundaries

    A <Frame> that is the first child of a bare Fragment returned by a clientEntry now adopts its streamed hydration marker instead of taking the fresh-insert path, which previously re-fetched src on the client and duplicated the streamed subtree. A <Frame> wrapped in a host element already hydrated cleanly.

10 days ago
remix

static-middleware v0.4.13

Patch Changes

10 days ago
remix

method-override-middleware v0.1.12

Patch Changes

10 days ago
remix

route-pattern v0.23.0

Minor Changes

  • BREAKING CHANGE: RoutePattern no longer exposes its parsed internals. Construct patterns with RoutePattern.parse(), and use pattern.source, pattern.toString(), or pattern.toJSON() instead of reading parsed internals such as pattern.pathname.tokens, pattern.hostname, or pattern.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 RoutePatternCapture and RoutePatternJSON from @remix-run/route-pattern, CreateHrefErrorDetails from @remix-run/route-pattern/href, and MatchParamMeta from @remix-run/route-pattern/match.

Patch Changes

  • Fixed several route pattern matching and href generation edge cases: ignoreCase now applies consistently to pathname matching, key-only search constraints keep generated hrefs matchable, pathname params use encodeURIComponent segment 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 never in CreateHrefArgs, MatchParams, and JoinPatterns, while broad string patterns remain usable.

10 days ago
remix

mime v0.4.2

Patch Changes

  • Fixed detectMimeType() so custom MIME types registered with multi-part extensions, such as be.pit, are detected from filenames like filename.be.pit (see #11099).