fix(deps): update all-dependencies #1

Merged
Renovate-Clanker merged 1 commits from renovate/all-dependencies into main 2026-03-01 13:01:47 +07:00
Collaborator

This PR contains the following updates:

Package Change Age Confidence
@react-router/dev (source) 7.7.17.13.1 age confidence
@react-router/node (source) 7.7.17.13.1 age confidence
@react-router/serve (source) 7.7.17.13.1 age confidence
@tailwindcss/vite (source) 4.1.114.2.1 age confidence
@types/node (source) 20.19.920.19.35 age confidence
@types/react (source) 19.1.919.2.14 age confidence
@types/react-dom (source) 19.1.719.2.3 age confidence
isbot (source) 5.1.295.1.35 age confidence
lucide-react (source) ^0.536.0^0.575.0 age confidence
react (source) 19.1.119.2.4 age confidence
react-dom (source) 19.1.119.2.4 age confidence
react-router (source) 7.7.17.13.1 age confidence
tailwindcss (source) 4.1.114.2.1 age confidence
tw-animate-css 1.3.61.4.0 age confidence
typescript (source) 5.9.25.9.3 age confidence

Release Notes

remix-run/react-router (@​react-router/dev)

v7.13.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.1
    • @react-router/node@7.13.1
    • @react-router/serve@7.13.1

v7.13.0

Compare Source

Patch Changes

v7.12.0

Compare Source

Minor Changes
  • Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the react-router.config.ts config allowedActionOrigins field. (#​14708)
Patch Changes
  • Fix Maximum call stack size exceeded errors when HMR is triggered against code with cyclic imports (#​14522)

  • fix(vite): Skip SSR middleware in preview server for SPA mode (#​14673)

  • [UNSTABLE] Add a new future.unstable_trailingSlashAwareDataRequests flag to provide consistent behavior of request.pathname inside middleware, loader, and action functions on document and data requests when a trailing slash is present in the browser URL. (#​14644)

    Currently, your HTTP and request pathnames would be as follows for /a/b/c and /a/b/c/

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c.data /a/b/c ⚠️

    With this flag enabled, these pathnames will be made consistent though a new _.data format for client-side .data requests:

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c/_.data ⬅️ /a/b/c/

    This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic.

    Enabling this flag also changes the format of client side .data requests from /_root.data to /_.data when navigating to / to align with the new format. This does not impact the request pathname which is still / in all cases.

  • Updated dependencies:

    • react-router@7.12.0
    • @react-router/node@7.12.0
    • @react-router/serve@7.12.0

v7.11.0

Compare Source

Minor Changes
Patch Changes
  • rsc framework mode manual chunking for react and react-router deps (#​14655)
  • add support for throwing redirect Response's at RSC render time (#​14596)
  • support custom entrypoints for RSC framework mode (#​14643)
  • routeRSCServerRequest replace fetchServer with serverResponse (#​14597)
  • rsc framewlrk mode - optimize react-server-dom-webpack if in project package.json (#​14656)
  • Updated dependencies:
    • react-router@7.11.0
    • @react-router/serve@7.11.0
    • @react-router/node@7.11.0

v7.10.1

Compare Source

Patch Changes
  • Import ESM package pkg-types with a dynamic import() to fix issues on Node 20.18 (#​14624)
  • Update valibot dependency to ^1.2.0 to address GHSA-vqpr-j7v3-hqw9 (#​14608)
  • Updated dependencies:
    • react-router@7.10.1
    • @react-router/node@7.10.1
    • @react-router/serve@7.10.1

v7.10.0

Compare Source

Minor Changes
  • Stabilize future.v8_splitRouteModules, replacing future.unstable_splitRouteModules (#​14595)

    • ⚠️ This is a breaking change if you have begun using future.unstable_splitRouteModules. Please update your react-router.config.ts.
  • Stabilize future.v8_viteEnvironmentApi, replacing future.unstable_viteEnvironmentApi (#​14595)

    • ⚠️ This is a breaking change if you have begun using future.unstable_viteEnvironmentApi. Please update your react-router.config.ts.
Patch Changes
  • Load environment variables before evaluating routes.ts (#​14446)

    For example, you can now compute your routes based on VITE_-prefixed environment variables:

    # .env
    VITE_ENV_ROUTE=my-route
    
    // app/routes.ts
    import { type RouteConfig, route } from "@​react-router/dev/routes";
    
    const routes: RouteConfig = [];
    if (import.meta.env.VITE_ENV_ROUTE === "my-route") {
      routes.push(route("my-route", "routes/my-route.tsx"));
    }
    
    export default routes;
    
  • Updated dependencies:

    • react-router@7.10.0
    • @react-router/node@7.10.0
    • @react-router/serve@7.10.0

v7.9.6

Compare Source

Patch Changes
  • Use a dynamic import() to load ESM-only p-map dependency to avoid issues on Node 20.18 and below (#​14492)
  • Short circuit HEAD document requests before calling renderToPipeableStream in the default entry.server.tsx to more closely align with the spec (#​14488)
  • Updated dependencies:
    • react-router@7.9.6
    • @react-router/node@7.9.6
    • @react-router/serve@7.9.6

v7.9.5

Compare Source

Patch Changes
  • Introduce a prerender.unstable_concurrency option, to support running the prerendering concurrently, potentially speeding up the build. (#​14380)
  • Move RSCHydratedRouter and utils to /dom export. (#​14457)
  • Ensure route navigation doesn't remove CSS link elements used by dynamic imports (#​14463)
  • Typegen: only register route module types for routes within the app directory (#​14439)
  • Updated dependencies:
    • react-router@7.9.5
    • @react-router/node@7.9.5
    • @react-router/serve@7.9.5

v7.9.4

Compare Source

Patch Changes
  • Update valibot dependency to ^1.1.0 (#​14379)

  • New (unstable) useRoute hook for accessing data from specific routes (#​14407)

    For example, let's say you have an admin route somewhere in your app and you want any child routes of admin to all have access to the loaderData and actionData from admin.

    // app/routes/admin.tsx
    import { Outlet } from "react-router";
    
    export const loader = () => ({ message: "Hello, loader!" });
    
    export const action = () => ({ count: 1 });
    
    export default function Component() {
      return (
        <div>
          {/* ... */}
          <Outlet />
          {/* ... */}
        </div>
      );
    }
    

    You might even want to create a reusable widget that all of the routes nested under admin could use:

    import { unstable_useRoute as useRoute } from "react-router";
    
    export function AdminWidget() {
      // How to get `message` and `count` from `admin` route?
    }
    

    In framework mode, useRoute knows all your app's routes and gives you TS errors when invalid route IDs are passed in:

    export function AdminWidget() {
      const admin = useRoute("routes/dmin");
      //                      ^^^^^^^^^^^
    }
    

    useRoute returns undefined if the route is not part of the current page:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
    }
    

    Note: the root route is the exception since it is guaranteed to be part of the current page.
    As a result, useRoute never returns undefined for root.

    loaderData and actionData are marked as optional since they could be accessed before the action is triggered or after the loader threw an error:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
      const { loaderData, actionData } = admin;
      console.log(loaderData);
      //          ^? { message: string } | undefined
      console.log(actionData);
      //          ^? { count: number } | undefined
    }
    

    If instead of a specific route, you wanted access to the current route's loaderData and actionData, you can call useRoute without arguments:

    export function AdminWidget() {
      const currentRoute = useRoute();
      currentRoute.loaderData;
      currentRoute.actionData;
    }
    

    This usage is equivalent to calling useLoaderData and useActionData, but consolidates all route data access into one hook: useRoute.

    Note: when calling useRoute() (without a route ID), TS has no way to know which route is the current route.
    As a result, loaderData and actionData are typed as unknown.
    If you want more type-safety, you can either narrow the type yourself with something like zod or you can refactor your app to pass down typed props to your AdminWidget:

    export function AdminWidget({
      message,
      count,
    }: {
      message: string;
      count: number;
    }) {
      /* ... */
    }
    
  • Updated dependencies:

    • react-router@7.9.4
    • @react-router/node@7.9.4
    • @react-router/serve@7.9.4

v7.9.3

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.3
    • @react-router/node@7.9.3
    • @react-router/serve@7.9.3

v7.9.2

Compare Source

Patch Changes
  • Fix preset future flags being ignored during config resolution (#​14369)

    Fixes a bug where future flags defined by presets were completely ignored. The config resolution was incorrectly reading from reactRouterUserConfig.future instead of the merged userAndPresetConfigs.future, causing all preset-defined future flags to be lost.

    This fix ensures presets can properly enable experimental features as intended by the preset system design.

  • Add unstable support for RSC Framework Mode (#​14336)

  • Switch internal vite plugin Response logic to use @remix-run/node-fetch-server (#​13927)

  • Updated dependencies:

    • react-router@7.9.2
    • @react-router/serve@7.9.2
    • @react-router/node@7.9.2

v7.9.1

Compare Source

Patch Changes
  • Fix internal Future interface naming from middleware -> v8_middleware (#​14327)
  • Updated dependencies:
    • react-router@7.9.1
    • @react-router/node@7.9.1
    • @react-router/serve@7.9.1

v7.9.0

Compare Source

Minor Changes
Patch Changes
  • Updated dependencies:
    • react-router@7.9.0
    • @react-router/node@7.9.0
    • @react-router/serve@7.9.0

v7.8.2

Compare Source

Patch Changes
  • fix: memory leak in default entry.server (#​14200)
  • Updated dependencies:
    • react-router@7.8.2
    • @react-router/node@7.8.2
    • @react-router/serve@7.8.2

v7.8.1

Compare Source

Patch Changes
  • Update generated Route.MetaArgs type so loaderData is only potentially undefined when an ErrorBoundary export is present (#​14173)
  • Updated dependencies:
    • react-router@7.8.1
    • @react-router/node@7.8.1
    • @react-router/serve@7.8.1

v7.8.0

Compare Source

Patch Changes
  • Fix rename without mkdir in Vite plugin (#​14105)
  • Updated dependencies:
    • react-router@7.8.0
    • @react-router/node@7.8.0
    • @react-router/serve@7.8.0
remix-run/react-router (@​react-router/node)

v7.13.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.1

v7.13.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.0

v7.12.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.12.0

v7.11.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.11.0

v7.10.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.10.1

v7.10.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.10.0

v7.9.6

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.6

v7.9.5

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.5

v7.9.4

Compare Source

Patch Changes
  • Validate format of incoming session ids in createFileSessionStorage (#​14426)
  • Updated dependencies:
    • react-router@7.9.4

v7.9.3

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.3

v7.9.2

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.2

v7.9.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.1

v7.9.0

Compare Source

Minor Changes
Patch Changes
  • Updated dependencies:
    • react-router@7.9.0

v7.8.2

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.8.2

v7.8.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.8.1

v7.8.0

Compare Source

Patch Changes
  • [UNSTABLE] Change getLoadContext signature (type GetLoadContextFunction) when future.unstable_middleware is enabled so that it returns an unstable_RouterContextProvider instance instead of a Map used to contruct the instance internally (#​14097)

    • This also removes the type unstable_InitialContext export
    • ⚠️ This is a breaking change if you have adopted middleware and are using a custom server with a getLoadContext function
  • Updated dependencies:

    • react-router@7.8.0
remix-run/react-router (@​react-router/serve)

v7.13.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.1
    • @react-router/node@7.13.1
    • @react-router/express@7.13.1

v7.13.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.0
    • @react-router/node@7.13.0
    • @react-router/express@7.13.0

v7.12.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.12.0
    • @react-router/node@7.12.0
    • @react-router/express@7.12.0

v7.11.0

Compare Source

Patch Changes
  • support custom entrypoints for RSC framework mode (#​14643)
  • Update compression and morgan dependencies to address on-headers CVE: GHSA-76c9-3jph-rj3q (#​14652)
  • Updated dependencies:
    • react-router@7.11.0
    • @react-router/node@7.11.0
    • @react-router/express@7.11.0

v7.10.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.10.1
    • @react-router/node@7.10.1
    • @react-router/express@7.10.1

v7.10.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.10.0
    • @react-router/node@7.10.0
    • @react-router/express@7.10.0

v7.9.6

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.6
    • @react-router/node@7.9.6
    • @react-router/express@7.9.6

v7.9.5

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.5
    • @react-router/node@7.9.5
    • @react-router/express@7.9.5

v7.9.4

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.4
    • @react-router/node@7.9.4
    • @react-router/express@7.9.4

v7.9.3

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.3
    • @react-router/node@7.9.3
    • @react-router/express@7.9.3

v7.9.2

Compare Source

Patch Changes
  • disable compression for RSC responses for now (#​14381)
  • Updated dependencies:
    • react-router@7.9.2
    • @react-router/node@7.9.2
    • @react-router/express@7.9.2

v7.9.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.1
    • @react-router/node@7.9.1
    • @react-router/express@7.9.1

v7.9.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.0
    • @react-router/express@7.9.0
    • @react-router/node@7.9.0

v7.8.2

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.8.2
    • @react-router/node@7.8.2
    • @react-router/express@7.8.2

v7.8.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.8.1
    • @react-router/node@7.8.1
    • @react-router/express@7.8.1

v7.8.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.8.0
    • @react-router/express@7.8.0
    • @react-router/node@7.8.0
tailwindlabs/tailwindcss (@​tailwindcss/vite)

v4.2.1

Compare Source

Fixed
  • Allow trailing dash in functional utility names for backwards compatibility (#​19696)
  • Properly detect classes containing . characters within curly braces in MDX files (#​19711)

v4.2.0

Compare Source

Added
  • Add mauve, olive, mist, and taupe color palettes to the default theme (#​19627)
  • Add @tailwindcss/webpack package to run Tailwind CSS as a webpack plugin (#​19610)
  • Add pbs-* and pbe-* utilities for padding-block-start and padding-block-end (#​19601)
  • Add mbs-* and mbe-* utilities for margin-block-start and margin-block-end (#​19601)
  • Add scroll-pbs-* and scroll-pbe-* utilities for scroll-padding-block-start and scroll-padding-block-end (#​19601)
  • Add scroll-mbs-* and scroll-mbe-* utilities for scroll-margin-block-start and scroll-margin-block-end (#​19601)
  • Add border-bs-* and border-be-* utilities for border-block-start and border-block-end (#​19601)
  • Add inline-*, min-inline-*, max-inline-* utilities for inline-size, min-inline-size, and max-inline-size (#​19612)
  • Add block-*, min-block-*, max-block-* utilities for block-size, min-block-size, and max-block-size (#​19612)
  • Add inset-s-*, inset-e-*, inset-bs-*, inset-be-* utilities for inset-inline-start, inset-inline-end, inset-block-start, and inset-block-end (#​19613)
  • Add font-features-* utility for font-feature-settings (#​19623)
Fixed
  • Prevent double @supports wrapper for color-mix values (#​19450)
  • Allow whitespace around @source inline() argument (#​19461)
  • Emit comment when source maps are saved to files when using @tailwindcss/cli (#​19447)
  • Detect utilities containing capital letters followed by numbers (#​19465)
  • Fix class extraction for Rails' strict locals (#​19525)
  • Align @utility name validation with Oxide scanner rules (#​19524)
  • Fix infinite loop when using @variant inside @custom-variant (#​19633)
  • Allow multiples of .25 in aspect-* fractions (e.g. aspect-8.5/11) (#​19688)
  • Ensure changes to external files listed via @source trigger a full page reload when using @tailwindcss/vite (#​19670)
  • Improve performance of Oxide scanner in bigger projects by reducing file system walks (#​19632)
  • Ensure import aliases in Astro v5 work without crashing when using @tailwindcss/vite (#​19677)
  • Allow escape characters in @utility names to improve support with formatters such as Biome (#​19626)
  • Fix incorrect canonicalization results when canonicalizing multiple times (#​19675)
  • Add .jj to default ignored content directories (#​19687)
Deprecated
  • Deprecate start-* and end-* utilities in favor of inset-s-* and inset-e-* utilities (#​19613)

v4.1.18

Compare Source

Fixed
  • Ensure validation of source(…) happens relative to the file it is in (#​19274)
  • Include filename and line numbers in CSS parse errors (#​19282)
  • Skip comments in Ruby files when checking for class names (#​19243)
  • Skip over arbitrary property utilities with a top-level ! in the value (#​19243)
  • Support environment API in @tailwindcss/vite (#​18970)
  • Preserve case of theme keys from JS configs and plugins (#​19337)
  • Write source maps correctly on the CLI when using --watch (#​19373)
  • Handle special defaults (like ringColor.DEFAULT) in JS configs (#​19348)
  • Improve backwards compatibility for content theme key from JS configs (#​19381)
  • Upgrade: Handle future and experimental config keys (#​19344)
  • Try to canonicalize any arbitrary utility to a bare value (#​19379)
  • Validate candidates similarly to Oxide (#​19397)
  • Canonicalization: combine text-* and leading-* classes (#​19396)
  • Correctly handle duplicate CLI arguments (#​19416)
  • Don’t emit color-mix fallback rules inside @keyframes (#​19419)
  • CLI: Don't hang when output is /dev/stdout (#​19421)

v4.1.17

Compare Source

Fixed
  • Substitute @variant inside legacy JS APIs (#​19263)
  • Prevent occasional crash on Windows when loaded into a worker thread (#​19242)

v4.1.16

Compare Source

Fixed
  • Discard candidates with an empty data type (#​19172)
  • Fix canonicalization of arbitrary variants with attribute selectors (#​19176)
  • Fix invalid colors due to nested & (#​19184)
  • Improve canonicalization for & > :pseudo and & :pseudo arbitrary variants (#​19178)

v4.1.15

Compare Source

Fixed
  • Fix Safari devtools rendering issue due to color-mix fallback (#​19069)
  • Suppress Lightning CSS warnings about :deep, :slotted, and :global (#​19094)
  • Fix resolving theme keys when starting with the name of another theme key in JS configs and plugins (#​19097)
  • Allow named groups in combination with not-*, has-*, and in-* (#​19100)
  • Prevent important utilities from affecting other utilities (#​19110)
  • Don’t index into strings with the theme(…) function (#​19111)
  • Fix parsing issue when \t is used in at-rules (#​19130)
  • Upgrade: Canonicalize utilities containing 0 values (#​19095)
  • Upgrade: Migrate deprecated break-words to wrap-break-word (#​19157)
Changed

v4.1.14

Compare Source

Fixed
  • Handle ' syntax in ClojureScript when extracting classes (#​18888)
  • Handle @variant inside @custom-variant (#​18885)
  • Merge suggestions when using @utility (#​18900)
  • Ensure that file system watchers created when using the CLI are always cleaned up (#​18905)
  • Do not generate grid-column utilities when configuring grid-column-start or grid-column-end (#​18907)
  • Do not generate grid-row utilities when configuring grid-row-start or grid-row-end (#​18907)
  • Prevent duplicate CSS when overwriting a static utility with a theme key (#​18056)
  • Show Lightning CSS warnings (if any) when optimizing/minifying (#​18918)
  • Use default export condition for @tailwindcss/vite (#​18948)
  • Re-throw errors from PostCSS nodes (#​18373)
  • Detect classes in markdown inline directives (#​18967)
  • Ensure files with only @theme produce no output when built (#​18979)
  • Support Maud templates when extracting classes (#​18988)
  • Upgrade: Do not migrate variant = 'outline' during upgrades (#​18922)
  • Upgrade: Show version mismatch (if any) when running upgrade tool (#​19028)
  • Upgrade: Ensure first class inside className is migrated (#​19031)
  • Upgrade: Migrate classes inside *ClassName and *Class attributes (#​19031)

v4.1.13

Compare Source

Changed
  • Drop warning from browser build (#​18731)
  • Drop exact duplicate declarations when emitting CSS (#​18809)
Fixed
  • Don't transition visibility when using transition (#​18795)
  • Discard matched variants with unknown named values (#​18799)
  • Discard matched variants with non-string values (#​18799)
  • Show suggestions for known matchVariant values (#​18798)
  • Replace deprecated clip with clip-path in sr-only (#​18769)
  • Hide internal fields from completions in matchUtilities (#​18820)
  • Ignore .vercel folders by default (can be overridden by @source … rules) (#​18855)
  • Consider variants starting with @- to be invalid (e.g. @-2xl:flex) (#​18869)
  • Do not allow custom variants to start or end with a - or _ (#​18867, #​18872)
  • Upgrade: Migrate aria theme keys to @custom-variant (#​18815)
  • Upgrade: Migrate data theme keys to @custom-variant (#​18816)
  • Upgrade: Migrate supports theme keys to @custom-variant (#​18817)

v4.1.12

Compare Source

Fixed
  • Don't consider the global important state in @apply (#​18404)
  • Add missing suggestions for flex-<number> utilities (#​18642)
  • Fix trailing ) from interfering with extraction in Clojure keywords (#​18345)
  • Detect classes inside Elixir charlist, word list, and string sigils (#​18432)
  • Track source locations through @plugin and @config (#​18345)
  • Allow boolean values of process.env.DEBUG in @tailwindcss/node (#​18485)
  • Ignore consecutive semicolons in the CSS parser (#​18532)
  • Center the dropdown icon added to an input with a paired datalist by default (#​18511)
  • Extract candidates in Slang templates (#​18565)
  • Improve error messages when encountering invalid functional utility names (#​18568)
  • Discard CSS AST objects with false or undefined properties (#​18571)
  • Allow users to disable URL rebasing in @tailwindcss/postcss via transformAssetUrls: false (#​18321)
  • Fix false-positive migrations in addEventListener and JavaScript variable names (#​18718)
  • Fix Standalone CLI showing default Bun help when run via symlink on Windows (#​18723)
  • Read from --border-color-* theme keys in divide-* utilities for backwards compatibility (#​18704)
  • Don't scan .hdr and .exr files for classes by default (#​18734)
omrilotan/isbot (isbot)

v5.1.35

Compare Source

  • [Pattern] Pattern updates

v5.1.34

Compare Source

  • [Pattern] Pattern updates

v5.1.33

Compare Source

  • [Pattern] Pattern updates

v5.1.32

Compare Source

  • [Pattern] Pattern updates

v5.1.31

Compare Source

  • [Pattern] Pattern updates

v5.1.30

Compare Source

  • [Pattern] Pattern updates
lucide-icons/lucide (lucide-react)

v0.575.0: Version 0.575.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.573.0...0.575.0

v0.574.0: Version 0.574.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.572.0...0.574.0

v0.573.0: Version 0.573.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.572.0...0.573.0

v0.572.0: Version 0.572.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.571.0...0.572.0

v0.571.0: Version 0.571.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.570.0...0.571.0

v0.570.0: Version 0.570.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.569.0...0.570.0

v0.569.0: Version 0.569.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.568.0...0.569.0

v0.568.0: Version 0.568.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.567.0...0.568.0

v0.567.0: Version 0.567.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.566.0...0.567.0

v0.566.0: Version 0.566.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.565.0...0.566.0

v0.565.0: Version 0.565.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.564.0...0.565.0

v0.564.0: Version 0.564.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.563.1...0.564.0

v0.563.0: Version 0.563.0

Compare Source

What's Changed

aria-hidden is by default added to icons components in all packages. This was already added to lucide-react before.
Making icons accessible, you can add an aria-label or a title. See docs about accessibility.

All changes

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.562.0...0.563.0

v0.562.0: Version 0.562.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.561.0...0.562.0

v0.561.0: Version 0.561.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.560.0...0.561.0

v0.560.0: Version 0.560.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.559.0...0.560.0

v0.559.0: Version 0.559.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.558.0...0.559.0

v0.558.0: Version 0.558.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.557.0...0.558.0

v0.557.0: Version 0.557.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.556.0...0.557.0

v0.556.0: Version 0.556.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.555.0...0.556.0

v0.555.0: Version 0.555.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.554.0...0.555.0

v0.554.0: Version 0.554.0

Compare Source

What's Changed

Breaking change

For lucide-react and lucide-solid, imports for Fingerprint icon are changed to FingerprintPattern.

Lucide React
- import { Fingerprint } from "lucide-react";
+ import { FingerprintPattern } from "lucide-react";
Lucide Solid
- import { Fingerprint } from "lucide/solid";
+ import { FingerprintPattern } from "lucide/solid";

// Or

- import Fingerprint from "lucide/solid/icons/fingerprint";
+ import FingerprintPattern from "lucide/solid/icons/fingerprint-pattern";

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.553.0...0.554.0

v0.553.0: Version 0.553.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.552.0...0.553.0

v0.552.0: Version 0.552.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.551.0...0.552.0

v0.551.0: Version 0.551.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.550.0...0.551.0

v0.550.0: Version 0.550.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.549.0...0.550.0

v0.549.0: Version 0.549.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.548.0...0.549.0

v0.548.0: Version 0.548.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.547.0...0.548.0

v0.547.0: Version 0.547.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.546.0...0.547.0

v0.546.0: Version 0.546.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.545.0...0.546.0

v0.545.0: Version 0.545.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.544.0...0.545.0

v0.544.0: Version 0.544.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.543.0...0.544.0

v0.543.0: Version 0.543.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.542.0...0.543.0

v0.542.0: Version 0.542.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.541.0...0.542.0

v0.541.0: Version 0.541.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.540.0...0.541.0

v0.540.0: Version 0.540.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.539.0...0.540.0

v0.539.0: Version 0.539.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.538.0...0.539.0

v0.538.0: Version 0.538.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.537.0...0.538.0

v0.537.0: Version 0.537.0

Compare Source

What's Changed

Full Changelog: https://github.com/lucide-icons/lucide/compare/0.536.0...0.537.0

facebook/react (react)

v19.2.4: 19.2.4 (January 26th, 2026)

Compare Source

React Server Components

v19.2.3: 19.2.3 (December 11th, 2025)

Compare Source

React Server Components

v19.2.2: 19.2.2 (December 11th, 2025)

Compare Source

React Server Components

v19.2.1

Compare Source

React Server Components

v19.2.0

Compare Source

Below is a list of all new features, APIs, and bug fixes.

Read the React 19.2 release post for more information.

New React Features
  • <Activity>: A new API to hide and restore the UI and internal state of its children.
  • useEffectEvent is a React Hook that lets you extract non-reactive logic into an Effect Event.
  • cacheSignal (for RSCs) lets your know when the cache() lifetime is over.
  • React Performance tracks appear on the Performance panel’s timeline in your browser developer tools
New React DOM Features
  • Added resume APIs for partial pre-rendering with Web Streams:
  • Added resume APIs for partial pre-rendering with Node Streams:
  • Updated prerender APIs to return a postponed state that can be passed to the resume APIs.
Notable changes
  • React DOM now batches suspense boundary reveals, matching the behavior of client side rendering. This change is especially noticeable when animating the reveal of Suspense boundaries e.g. with the upcoming <ViewTransition> Component. React will batch as much reveals as possible before the first paint while trying to hit popular first-contentful paint metrics.
  • Add Node Web Streams (prerender, renderToReadableStream) to server-side-rendering APIs for Node.js
  • Use underscore instead of : IDs generated by useId
All Changes
React
React DOM
React Server Components
React Reconciler

v19.1.5: 19.1.5 (January 26th, 2026)

Compare Source

React Server Components

v19.1.4: 19.1.4 (December 11th, 2025)

Compare Source

React Server Components

v19.1.3: 19.1.3 (December 11th, 2025)

Compare Source

React Server Components

v19.1.2

Compare Source

React Server Components
remix-run/react-router (react-router)

v7.13.1

Compare Source

Patch Changes
  • fix null reference exception in bad codepath leading to invalid route tree comparisons (#​14780)

  • fix: clear timeout when turbo-stream encoding completes (#​14810)

  • Improve error message when Origin header is invalid (#​14743)

  • Fix matchPath optional params matching without a "/" separator. (#​14689)

    • matchPath("/users/:id?", "/usersblah") now returns null.
    • matchPath("/test_route/:part?", "/test_route_more") now returns null.
  • add RSC unstable_getRequest (#​14758)

  • Fix HydrateFallback rendering during initial lazy route discovery with matching splat route (#​14740)

  • [UNSTABLE] Add support for <Link unstable_mask> in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. (#​14716)

    // routes/gallery.tsx
    export function clientLoader({ request }: Route.LoaderArgs) {
      let sp = new URL(request.url).searchParams;
      return {
        images: getImages(),
        // When the router location has the image param, load the modal data
        modalImage: sp.has("image") ? getImage(sp.get("image")!) : null,
      };
    }
    
    export default function Gallery({ loaderData }: Route.ComponentProps) {
      return (
        <>
          <GalleryGrid>
            {loaderData.images.map((image) => (
              <Link
                key={image.id}
                {/* Navigate the router to /galley?image=N */}}
                to={`/gallery?image=${image.id}`}
                {/* But display /images/N in the URL bar */}}
                unstable_mask={`/images/${image.id}`}
              >
                <img src={image.url} alt={image.alt} />
              </Link>
            ))}
          </GalleryGrid>
    
          {/* When the modal data exists, display the modal */}
          {data.modalImage ? (
            <dialog open>
              <img src={data.modalImage.url} alt={data.modalImage.alt} />
            </dialog>
          ) : null}
        </>
      );
    }
    

    Notes:

    • The masked location, if present, will be available on useLocation().unstable_mask so you can detect whether you are currently masked or not.
    • Masked URLs only work for SPA use cases, and will be removed from history.state during SSR.
    • This provides a first-class API to mask URLs in Data Mode to achieve the same behavior you could do in Declarative Mode via manual backgroundLocation management.
  • RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 (#​14755)

  • Preserve query parameters and hash on manifest version mismatch reload (#​14813)

v7.13.0

Compare Source

Minor Changes
  • Add crossOrigin prop to Links component (#​14687)
Patch Changes
  • Fix double slash normalization for useNavigate colon urls (#​14718)
  • Update failed origin checks to return a 400 status instead of a 500 (#​14737)
  • Bugfix #​14666: Inline criticalCss is missing nonce (#​14691)
  • Loosen allowedActionOrigins glob check so ** matches all domains (#​14722)

v7.12.0

Compare Source

Minor Changes
  • Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the react-router.config.ts config allowedActionOrigins field. (#​14708)
Patch Changes
  • Fix generatePath when used with suffixed params (i.e., "/books/:id.json") (#​14269)

  • Export UNSAFE_createMemoryHistory and UNSAFE_createHashHistory alongside UNSAFE_createBrowserHistory for consistency. These are not intended to be used for new apps but intended to help apps usiong unstable_HistoryRouter migrate from v6->v7 so they can adopt the newer APIs. (#​14663)

  • Escape HTML in scroll restoration keys (#​14705)

  • Validate redirect locations (#​14706)

  • [UNSTABLE] Pass <Scripts nonce> value through to the underlying importmap script tag when using future.unstable_subResourceIntegrity (#​14675)

  • [UNSTABLE] Add a new future.unstable_trailingSlashAwareDataRequests flag to provide consistent behavior of request.pathname inside middleware, loader, and action functions on document and data requests when a trailing slash is present in the browser URL. (#​14644)

    Currently, your HTTP and request pathnames would be as follows for /a/b/c and /a/b/c/

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c.data /a/b/c ⚠️

    With this flag enabled, these pathnames will be made consistent though a new _.data format for client-side .data requests:

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c/_.data ⬅️ /a/b/c/

    This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic.

    Enabling this flag also changes the format of client side .data requests from /_root.data to /_.data when navigating to / to align with the new format. This does not impact the request pathname which is still / in all cases.

  • Preserve clientLoader.hydrate=true when using <HydratedRouter unstable_instrumentations> (#​14674)

v7.11.0

Compare Source

Minor Changes
  • Stabilize <HydratedRouter onError>/<RouterProvider onError> (#​14546)
Patch Changes
  • add support for throwing redirect Response's at RSC render time (#​14596)

  • Support for throwing data() and Response from server component render phase. Response body is not serialized as async work is not allowed as error encoding phase. If you wish to transmit data to the boundary, throw data() instead. (#​14632)

  • Fix unstable_useTransitions prop on <Router> component to permit omission for backewards compatibility (#​14646)

  • routeRSCServerRequest replace fetchServer with serverResponse (#​14597)

  • [UNSTABLE] Add a new unstable_defaultShouldRevalidate flag to various APIs to allow opt-ing out of standard revalidation behaviors. (#​14542)

    If active routes include a shouldRevalidate function, then your value will be passed as defaultShouldRevalidate in those function so that the route always has the final revalidation determination.

    • <Form method="post" unstable_defaultShouldRevalidate={false}>
    • submit(data, { method: "post", unstable_defaultShouldRevalidate: false })
    • <fetcher.Form method="post" unstable_defaultShouldRevalidate={false}>
    • fetcher.submit(data, { method: "post", unstable_defaultShouldRevalidate: false })

    This is also available on non-submission APIs that may trigger revalidations due to changing search params:

    • <Link to="/" unstable_defaultShouldRevalidate={false}>
    • navigate("/?foo=bar", { unstable_defaultShouldRevalidate: false })
    • setSearchParams(params, { unstable_defaultShouldRevalidate: false })
  • Allow redirects to be returned from client side middleware (#​14598)

  • Handle dataStrategy implementations that return insufficient result sets by adding errors for routes without any available result (#​14627)

v7.10.1

Compare Source

Patch Changes
  • Update the useOptimistic stub we provide for React 18 users to use a stable setter function to avoid potential useEffect loops - specifically when using <Link viewTransition> (#​14628)

v7.10.0

Compare Source

Minor Changes
  • Stabilize fetcher.reset() (#​14545)

    • ⚠️ This is a breaking change if you have begun using fetcher.unstable_reset()
  • Stabilize the dataStrategy match.shouldRevalidateArgs/match.shouldCallHandler() APIs. (#​14592)

    • The match.shouldLoad API is now marked deprecated in favor of these more powerful alternatives

    • If you're using this API in a custom dataStrategy today, you can swap to the new API at your convenience:

      // Before
      const matchesToLoad = matches.filter((m) => m.shouldLoad);
      
      // After
      const matchesToLoad = matches.filter((m) => m.shouldCallHandler());
      
    • match.shouldRevalidateArgs is the argument that will be passed to the route shouldRevaliate function

    • Combined with the parameter accepted by match.shouldCallHandler, you can define a custom revalidation behavior for your dataStrategy:

    const matchesToLoad = matches.filter((m) => {
      const defaultShouldRevalidate = customRevalidationBehavior(
        match.shouldRevalidateArgs,
      );
      return m.shouldCallHandler(defaultShouldRevalidate);
      // The argument here will override the internal `defaultShouldRevalidate` value
    });
    
Patch Changes
  • Fix a Framework Mode bug where the defaultShouldRevalidate parameter to shouldRevalidate would not be correct after action returned a 4xx/5xx response (true when it should have been false) (#​14592)

    • If your shouldRevalidate function relied on that parameter, you may have seen unintended revalidations
  • Fix fetcher.submit failing with plain objects containing a tagName property (#​14534)

  • [UNSTABLE] Add unstable_pattern to the parameters for client side unstable_onError, refactor how it's called by RouterProvider to avoid potential strict mode issues (#​14573)

  • Add new unstable_useTransitions flag to routers to give users control over the usage of React.startTransition and React.useOptimistic. (#​14524)

    • Framework Mode + Data Mode:
      • <HydratedRouter unstable_transition>/<RouterProvider unstable_transition>
      • When left unset (current default behavior)
        • Router state updates are wrapped in React.startTransition
        • ⚠️ This can lead to buggy behaviors if you are wrapping your own navigations/fetchers in React.startTransition
        • You should set the flag to true if you run into this scenario to get the enhanced useOptimistic behavior (requires React 19)
      • When set to true
        • Router state updates remain wrapped in React.startTransition (as they are without the flag)
        • Link/Form navigations will be wrapped in React.startTransition
        • A subset of router state info will be surfaced to the UI during navigations via React.useOptimistic (i.e., useNavigation(), useFetchers(), etc.)
          • ⚠️ This is a React 19 API so you must also be React 19 to opt into this flag for Framework/Data Mode
      • When set to false
        • The router will not leverage React.startTransition or React.useOptimistic on any navigations or state changes
    • Declarative Mode
      • <BrowserRouter unstable_useTransitions>
      • When left unset
        • Router state updates are wrapped in React.startTransition
      • When set to true
        • Router state updates remain wrapped in React.startTransition (as they are without the flag)
        • Link/Form navigations will be wrapped in React.startTransition
      • When set to false
        • the router will not leverage React.startTransition on any navigations or state changes
  • Fix the promise returned from useNavigate in Framework/Data Mode so that it properly tracks the duration of popstate navigations (i.e., navigate(-1)) (#​14524)

  • Fix internal type error in useRoute types that surfaces when skipLibCheck is disabled (#​14577)

  • Preserve statusText on the ErrorResponse instance when throwing data() from a route handler (#​14555)

  • Optimize href() to avoid backtracking regex on splat (#​14329)

v7.9.6

Compare Source

Patch Changes
  • [UNSTABLE] Add location/params as arguments to client-side unstable_onError to permit enhanced error reporting. (#​14509)

    ⚠️ This is a breaking change if you've already adopted unstable_onError. The second errorInfo parameter is now an object with location and params:

    // Before
    function errorHandler(error: unknown, errorInfo?: React.errorInfo) {
      /*...*/
    }
    
    // After
    function errorHandler(
      error: unknown,
      info: {
        location: Location;
        params: Params;
        errorInfo?: React.ErrorInfo;
      },
    ) {
      /*...*/
    }
    
  • Properly handle ancestor thrown middleware errors before next() on fetcher submissions (#​14517)

  • Fix issue with splat routes interfering with multiple calls to patchRoutesOnNavigation (#​14487)

  • Normalize double-slashes in resolvePath (#​14529)

v7.9.5

Compare Source

Patch Changes
  • Move RSCHydratedRouter and utils to /dom export. (#​14457)

  • useRoute: return type-safe handle (#​14462)

    For example:

    // app/routes/admin.tsx
    const handle = { hello: "world" };
    
    // app/routes/some-other-route.tsx
    export default function Component() {
      const admin = useRoute("routes/admin");
      if (!admin) throw new Error("Not nested within 'routes/admin'");
      console.log(admin.handle);
      //                ^? { hello: string }
    }
    
  • Ensure action handlers run for routes with middleware even if no loader is present (#​14443)

  • Add unstable_instrumentations API to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches (#​14412)

    • Framework Mode:
      • entry.server.tsx: export const unstable_instrumentations = [...]
      • entry.client.tsx: <HydratedRouter unstable_instrumentations={[...]} />
    • Data Mode
      • createBrowserRouter(routes, { unstable_instrumentations: [...] })

    This also adds a new unstable_pattern parameter to loaders/actions/middleware which contains the un-interpolated route pattern (i.e., /blog/:slug) which is useful for aggregating performance metrics by route

v7.9.4

Compare Source

Patch Changes
  • handle external redirects in from server actions (#​14400)

  • New (unstable) useRoute hook for accessing data from specific routes (#​14407)

    For example, let's say you have an admin route somewhere in your app and you want any child routes of admin to all have access to the loaderData and actionData from admin.

    // app/routes/admin.tsx
    import { Outlet } from "react-router";
    
    export const loader = () => ({ message: "Hello, loader!" });
    
    export const action = () => ({ count: 1 });
    
    export default function Component() {
      return (
        <div>
          {/* ... */}
          <Outlet />
          {/* ... */}
        </div>
      );
    }
    

    You might even want to create a reusable widget that all of the routes nested under admin could use:

    import { unstable_useRoute as useRoute } from "react-router";
    
    export function AdminWidget() {
      // How to get `message` and `count` from `admin` route?
    }
    

    In framework mode, useRoute knows all your app's routes and gives you TS errors when invalid route IDs are passed in:

    export function AdminWidget() {
      const admin = useRoute("routes/dmin");
      //                      ^^^^^^^^^^^
    }
    

    useRoute returns undefined if the route is not part of the current page:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
    }
    

    Note: the root route is the exception since it is guaranteed to be part of the current page.
    As a result, useRoute never returns undefined for root.

    loaderData and actionData are marked as optional since they could be accessed before the action is triggered or after the loader threw an error:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
      const { loaderData, actionData } = admin;
      console.log(loaderData);
      //          ^? { message: string } | undefined
      console.log(actionData);
      //          ^? { count: number } | undefined
    }
    

    If instead of a specific route, you wanted access to the current route's loaderData and actionData, you can call useRoute without arguments:

    export function AdminWidget() {
      const currentRoute = useRoute();
      currentRoute.loaderData;
      currentRoute.actionData;
    }
    

    This usage is equivalent to calling useLoaderData and useActionData, but consolidates all route data access into one hook: useRoute.

    Note: when calling useRoute() (without a route ID), TS has no way to know which route is the current route.
    As a result, loaderData and actionData are typed as unknown.
    If you want more type-safety, you can either narrow the type yourself with something like zod or you can refactor your app to pass down typed props to your AdminWidget:

    export function AdminWidget({
      message,
      count,
    }: {
      message: string;
      count: number;
    }) {
      /* ... */
    }
    

v7.9.3

Compare Source

Patch Changes
  • Do not try to use turbo-stream to decode CDN errors that never reached the server (#​14385)

    • We used to do this but lost this check with the adoption of single fetch
  • Fix Data Mode regression causing a 404 during initial load in when middleware exists without any loader functions (#​14393)

v7.9.2

Compare Source

Patch Changes
    • Update client-side router to run client middleware on initial load even if no loaders exist (#​14348)
    • Update createRoutesStub to run route middleware
      • You will need to set the <RoutesStub future={{ v8_middleware: true }} /> flag to enable the proper context type
  • Update Lazy Route Discovery manifest requests to use a singular comma-separated paths query param instead of repeated p query params (#​14321)

    • This is because Cloudflare has a hard limit of 100 URL search param key/value pairs when used as a key for caching purposes
    • If more that 100 paths were included, the cache key would be incomplete and could produce false-positive cache hits
  • [UNSTABLE] Add fetcher.unstable_reset() API (#​14206)

  • Made useOutlet element reference have stable identity in-between route chages (#​13382)

  • feat: enable full transition support for the rsc router (#​14362)

  • In RSC Data Mode, handle SSR'd client errors and re-try in the browser (#​14342)

  • Support middleware prop on <Route> for usage with a data router via createRoutesFromElements (#​14357)

  • Handle encoded question mark and hash characters in ancestor splat routes (#​14249)

  • Fail gracefully on manifest version mismatch logic if sessionStorage access is blocked (#​14335)

v7.9.1

Compare Source

Patch Changes
  • Fix internal Future interface naming from middleware -> v8_middleware (#​14327)

v7.9.0

Compare Source

Minor Changes
Patch Changes
  • Escape HTML in meta() JSON-LD content (#​14316)
  • Add react-server Await component implementation (#​14261)
  • In RSC Data Mode when using a custom basename, fix hydration errors for routes that only have client loaders (#​14264)
  • Make href function available in a react-server context (#​14262)
  • decode each time getPayload() is called to allow for "in-context" decoding and hoisting of contextual assets (#​14248)
  • href() now correctly processes routes that have an extension after the parameter or are a single optional parameter. (#​13797)

v7.8.2

Compare Source

Patch Changes
  • [UNSTABLE] Remove Data Mode future.unstable_middleware flag from createBrowserRouter (#​14213)

    • This is only needed as a Framework Mode flag because of the route modules and the getLoadContext type behavior change
    • In Data Mode, it's an opt-in feature because it's just a new property on a route object, so there's no behavior changes that necessitate a flag
  • [UNSTABLE] Add <RouterProvider unstable_onError>/<HydratedRouter unstable_onError> prop for client side error reporting (#​14162)

  • server action revalidation opt out via $SKIP_REVALIDATION field (#​14154)

  • Properly escape interpolated param values in generatePath() (#​13530)

  • Maintain ReadonlyMap and ReadonlySet types in server response data. (#​13092)

  • [UNSTABLE] Delay serialization of .data redirects to 202 responses until after middleware chain (#​14205)

  • Fix TypeError if you throw from patchRoutesOnNavigation when no partial matches exist (#​14198)

  • Fix basename usage without a leading slash in data routers (#​11671)

  • [UNSTABLE] Update client middleware so it returns the data strategy results allowing for more advanced post-processing middleware (#​14151)

v7.8.1

Compare Source

Patch Changes
  • Fix usage of optional path segments in nested routes defined using absolute paths (#​14135)
  • Bubble client pre-next middleware error to the shallowest ancestor that needs to load, not strictly the shallowest ancestor with a loader (#​14150)
  • Fix optional static segment matching in matchPath (#​11813)
  • Fix prerendering when a basename is set with ssr:false (#​13791)
  • Provide isRouteErrorResponse utility in react-server environments (#​14166)
  • Propagate non-redirect Responses thrown from middleware to the error boundary on document/data requests (#​14182)
  • Handle meta and links Route Exports in RSC Data Mode (#​14136)
  • Properly convert returned/thrown data() values to Response instances via Response.json() in resource routes and middleware (#​14159, #​14181)

v7.8.0

Compare Source

Minor Changes
  • Add nonce prop to Links & PrefetchPageLinks (#​14048)
  • Add loaderData arguments/properties alongside existing data arguments/properties to provide consistency and clarity between loaderData and actionData across the board (#​14047)
    • Updated types: Route.MetaArgs, Route.MetaMatch, MetaArgs, MetaMatch, Route.ComponentProps.matches, UIMatch
    • @deprecated warnings have been added to the existing data properties to point users to new loaderData properties, in preparation for removing the data properties in a future major release
Patch Changes
  • Prevent "Did not find corresponding fetcher result" console error when navigating during a fetcher.submit revalidation (#​14114)

  • Bubble client-side middleware errors prior to next to the appropriate ancestor error boundary (#​14138)

  • Switch Lazy Route Discovery manifest URL generation to usea standalone URLSearchParams instance instead of URL.searchParams to avoid a major performance bottleneck in Chrome (#​14084)

  • Adjust internal RSC usage of React.use to avoid Webpack compilation errors when using React 18 (#​14113)

  • Remove dependency on @types/node in TypeScript declaration files (#​14059)

  • Fix types for UIMatch to reflect that the loaderData/data properties may be undefined (#​12206)

    • When an ErrorBoundary is being rendered, not all active matches will have loader data available, since it may have been their loader that threw to trigger the boundary
    • The UIMatch.data type was not correctly handing this and would always reflect the presence of data, leading to the unexpected runtime errors when an ErrorBoundary was rendered
    • ⚠️ This may cause some type errors to show up in your code for unguarded match.data accesses - you should properly guard for undefined values in those scenarios.
    // app/root.tsx
    export function loader() {
      someFunctionThatThrows(); // ❌ Throws an Error
      return { title: "My Title" };
    }
    
    export function Layout({ children }: { children: React.ReactNode }) {
      let matches = useMatches();
      let rootMatch = matches[0] as UIMatch<Awaited<ReturnType<typeof loader>>>;
      //  ^ rootMatch.data is incorrectly typed here, so TypeScript does not
      //    complain if you do the following which throws an error at runtime:
      let { title } = rootMatch.data; // 💥
    
      return <html>...</html>;
    }
    
  • [UNSTABLE] Ensure resource route errors go through handleError w/middleware enabled (#​14078)

  • [UNSTABLE] Propagate returned Response from server middleware if next wasn't called (#​14093)

  • [UNSTABLE] Allow server middlewares to return data() values which will be converted into a Response (#​14093)

  • [UNSTABLE] Update middleware error handling so that the next function never throws and instead handles any middleware errors at the proper ErrorBoundary and returns the Response up through the ancestor next function (#​14118)

  • [UNSTABLE] When middleware is enabled, make the context parameter read-only (via Readonly<unstable_RouterContextProvider>) so that TypeScript will not allow you to write arbitrary fields to it in loaders, actions, or middleware. (#​14097)

  • [UNSTABLE] Rename and alter the signature/functionality of the unstable_respond API in staticHandler.query/staticHandler.queryRoute (#​14103)

    • The API has been renamed to unstable_generateMiddlewareResponse for clarity
    • The main functional change is that instead of running the loaders/actions before calling unstable_respond and handing you the result, we now pass a query/queryRoute function as a parameter and you execute the loaders/actions inside your callback, giving you full access to pre-processing and error handling
    • The query version of the API now has a signature of (query: (r: Request) => Promise<StaticHandlerContext | Response>) => Promise<Response>
    • The queryRoute version of the API now has a signature of (queryRoute: (r: Request) => Promise<Response>) => Promise<Response>
    • This allows for more advanced usages such as running logic before/after calling query and direct error handling of errors thrown from query
    • ⚠️ This is a breaking change if you've adopted the staticHandler unstable_respond API
    let response = await staticHandler.query(request, {
      requestContext: new unstable_RouterContextProvider(),
      async unstable_generateMiddlewareResponse(query) {
        try {
          // At this point we've run middleware top-down so we need to call the
          // handlers and generate the Response to bubble back up the middleware
          let result = await query(request);
          if (isResponse(result)) {
            return result; // Redirects, etc.
          }
          return await generateHtmlResponse(result);
        } catch (error: unknown) {
          return generateErrorResponse(error);
        }
      },
    });
    
  • [UNSTABLE] Convert internal middleware implementations to use the new unstable_generateMiddlewareResponse API (#​14103)

  • [UNSTABLE] Change getLoadContext signature (type GetLoadContextFunction) when future.unstable_middleware is enabled so that it returns an unstable_RouterContextProvider instance instead of a Map used to contruct the instance internally (#​14097)

    • This also removes the type unstable_InitialContext export
    • ⚠️ This is a breaking change if you have adopted middleware and are using a custom server with a getLoadContext function
  • [UNSTABLE] Run client middleware on client navigations even if no loaders exist (#​14106)

  • [UNSTABLE] Change the unstable_getContext signature on RouterProvider/HydratedRouter/unstable_RSCHydratedRouter so that it returns an unstable_RouterContextProvider instance instead of a Map used to contruct the instance internally (#​14097)

    • ⚠️ This is a breaking change if you have adopted the unstable_getContext prop
  • [UNSTABLE] proxy server action side-effect redirects from actions for document and callServer requests (#​14131)

  • [UNSTABLE] Fix RSC Data Mode issue where routes that return false from shouldRevalidate would be replaced by an <Outlet /> (#​14071)

Wombosvideo/tw-animate-css (tw-animate-css)

v1.4.0

Compare Source

Changelog

902e37a: fix: remove support for prefix, add new export for prefixed version. Closes #​58.
fab2a5b: chore: bump version to 1.4.0 and update dependencies
c20dc32: fix(build): make transform.ts accept two arguments

⚠️ BREAKING CHANGE ⚠️

Support for Tailwind CSS's prefix option was moved to tw-animate-css/prefix because it was breaking the --spacing function. Users requiring prefixes should replace their import:

- import "tw-animate-css";
+ import "tw-animate-css/prefix";

I do not plan to introduce breaking changes like this to non-major releases in the future. But because more people use spacing rather than prefixes, reverting the previous version's (obviously breaking) change seems reasonable.

v1.3.8

Compare Source

Changelog

  • b5ff23a: fix: add support for global CSS variable prefix. Closes #​48
  • 03e5f12: feat: add support for ng-primitives height variables #​56 (thanks @​immohammadjaved)
  • b076cfb: docs: fix various issues in accordion and collapsible docs
  • 9485e33: chore: bump version to 1.3.8 and update dependencies

⚠️ BREAKING CHANGE ⚠️

Adding support for prefixes broke custom spacing. It is recommended that you skip this version if you do not use Tailwind CSS's prefix option, and use v1.4.0 instead. If you are actually using prefixes, you can use a special version supporting prefixes:

- import "tw-animate-css"; /* Version with spacing support */
+ import "tw-animate-css/prefix"; /* Version with prefix support */

I do not plan to fix the incompatibility between the spacing and prefix versions due to time constraints. Feel free to investigate and open a pull request if you manage to fix it.

v1.3.7

Compare Source

Changelog

microsoft/TypeScript (typescript)

v5.9.3: TypeScript 5.9.3

Compare Source

Note: this tag was recreated to point at the correct commit. The npm package contained the correct content.

For release notes, check out the release announcement

Downloads are available on:


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Renovate Bot.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@react-router/dev](https://reactrouter.com) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dev)) | [`7.7.1` → `7.13.1`](https://renovatebot.com/diffs/npm/@react-router%2fdev/7.7.1/7.13.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@react-router%2fdev/7.13.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-router%2fdev/7.7.1/7.13.1?slim=true) | | [@react-router/node](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-node)) | [`7.7.1` → `7.13.1`](https://renovatebot.com/diffs/npm/@react-router%2fnode/7.7.1/7.13.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@react-router%2fnode/7.13.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-router%2fnode/7.7.1/7.13.1?slim=true) | | [@react-router/serve](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-serve)) | [`7.7.1` → `7.13.1`](https://renovatebot.com/diffs/npm/@react-router%2fserve/7.7.1/7.13.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@react-router%2fserve/7.13.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@react-router%2fserve/7.7.1/7.13.1?slim=true) | | [@tailwindcss/vite](https://tailwindcss.com) ([source](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)) | [`4.1.11` → `4.2.1`](https://renovatebot.com/diffs/npm/@tailwindcss%2fvite/4.1.11/4.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@tailwindcss%2fvite/4.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@tailwindcss%2fvite/4.1.11/4.2.1?slim=true) | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)) | [`20.19.9` → `20.19.35`](https://renovatebot.com/diffs/npm/@types%2fnode/20.19.9/20.19.35) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fnode/20.19.35?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fnode/20.19.9/20.19.35?slim=true) | | [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`19.1.9` → `19.2.14`](https://renovatebot.com/diffs/npm/@types%2freact/19.1.9/19.2.14) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/19.2.14?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/19.1.9/19.2.14?slim=true) | | [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)) | [`19.1.7` → `19.2.3`](https://renovatebot.com/diffs/npm/@types%2freact-dom/19.1.7/19.2.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact-dom/19.2.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact-dom/19.1.7/19.2.3?slim=true) | | [isbot](https://isbot.js.org) ([source](https://github.com/omrilotan/isbot)) | [`5.1.29` → `5.1.35`](https://renovatebot.com/diffs/npm/isbot/5.1.29/5.1.35) | ![age](https://developer.mend.io/api/mc/badges/age/npm/isbot/5.1.35?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/isbot/5.1.29/5.1.35?slim=true) | | [lucide-react](https://lucide.dev) ([source](https://github.com/lucide-icons/lucide/tree/HEAD/packages/lucide-react)) | [`^0.536.0` → `^0.575.0`](https://renovatebot.com/diffs/npm/lucide-react/0.536.0/0.575.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/lucide-react/0.575.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/lucide-react/0.536.0/0.575.0?slim=true) | | [react](https://react.dev/) ([source](https://github.com/facebook/react/tree/HEAD/packages/react)) | [`19.1.1` → `19.2.4`](https://renovatebot.com/diffs/npm/react/19.1.1/19.2.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/react/19.2.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react/19.1.1/19.2.4?slim=true) | | [react-dom](https://react.dev/) ([source](https://github.com/facebook/react/tree/HEAD/packages/react-dom)) | [`19.1.1` → `19.2.4`](https://renovatebot.com/diffs/npm/react-dom/19.1.1/19.2.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/react-dom/19.2.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-dom/19.1.1/19.2.4?slim=true) | | [react-router](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router)) | [`7.7.1` → `7.13.1`](https://renovatebot.com/diffs/npm/react-router/7.7.1/7.13.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/react-router/7.13.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router/7.7.1/7.13.1?slim=true) | | [tailwindcss](https://tailwindcss.com) ([source](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss)) | [`4.1.11` → `4.2.1`](https://renovatebot.com/diffs/npm/tailwindcss/4.1.11/4.2.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/4.2.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/4.1.11/4.2.1?slim=true) | | [tw-animate-css](https://github.com/Wombosvideo/tw-animate-css) | [`1.3.6` → `1.4.0`](https://renovatebot.com/diffs/npm/tw-animate-css/1.3.6/1.4.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/tw-animate-css/1.4.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tw-animate-css/1.3.6/1.4.0?slim=true) | | [typescript](https://www.typescriptlang.org/) ([source](https://github.com/microsoft/TypeScript)) | [`5.9.2` → `5.9.3`](https://renovatebot.com/diffs/npm/typescript/5.9.2/5.9.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/typescript/5.9.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typescript/5.9.2/5.9.3?slim=true) | --- ### Release Notes <details> <summary>remix-run/react-router (@&#8203;react-router/dev)</summary> ### [`v7.13.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#7131) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.13.0...@react-router/dev@7.13.1) ##### Patch Changes - Updated dependencies: - `react-router@7.13.1` - `@react-router/node@7.13.1` - `@react-router/serve@7.13.1` ### [`v7.13.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#7130) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.12.0...@react-router/dev@7.13.0) ##### Patch Changes - Bump [@&#8203;remix-run/node-fetch-server](https://github.com/remix-run/node-fetch-server) dep ([#&#8203;14704](https://github.com/remix-run/react-router/pull/14704)) - Updated dependencies: - `react-router@7.13.0` - `@react-router/node@7.13.0` - `@react-router/serve@7.13.0` ### [`v7.12.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#7120) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.11.0...@react-router/dev@7.12.0) ##### Minor Changes - Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the `react-router.config.ts` config `allowedActionOrigins` field. ([#&#8203;14708](https://github.com/remix-run/react-router/pull/14708)) ##### Patch Changes - Fix `Maximum call stack size exceeded` errors when HMR is triggered against code with cyclic imports ([#&#8203;14522](https://github.com/remix-run/react-router/pull/14522)) - fix(vite): Skip SSR middleware in preview server for SPA mode ([#&#8203;14673](https://github.com/remix-run/react-router/pull/14673)) - \[UNSTABLE] Add a new `future.unstable_trailingSlashAwareDataRequests` flag to provide consistent behavior of `request.pathname` inside `middleware`, `loader`, and `action` functions on document and data requests when a trailing slash is present in the browser URL. ([#&#8203;14644](https://github.com/remix-run/react-router/pull/14644)) Currently, your HTTP and `request` pathnames would be as follows for `/a/b/c` and `/a/b/c/` | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | | **Document** | `/a/b/c` | `/a/b/c` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ----------------- | ------------------------ | | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ⚠️ | With this flag enabled, these pathnames will be made consistent though a new `_.data` format for client-side `.data` requests: | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | | **Document** | `/a/b/c` | `/a/b/c` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ------------------ | ------------------------ | | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | | **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ | This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic. Enabling this flag also changes the format of client side `.data` requests from `/_root.data` to `/_.data` when navigating to `/` to align with the new format. This does not impact the `request` pathname which is still `/` in all cases. - Updated dependencies: - `react-router@7.12.0` - `@react-router/node@7.12.0` - `@react-router/serve@7.12.0` ### [`v7.11.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#7110) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.10.1...@react-router/dev@7.11.0) ##### Minor Changes - feat: add `vite preview` support ([#&#8203;14507](https://github.com/remix-run/react-router/pull/14507)) ##### Patch Changes - rsc framework mode manual chunking for react and react-router deps ([#&#8203;14655](https://github.com/remix-run/react-router/pull/14655)) - add support for throwing redirect Response's at RSC render time ([#&#8203;14596](https://github.com/remix-run/react-router/pull/14596)) - support custom entrypoints for RSC framework mode ([#&#8203;14643](https://github.com/remix-run/react-router/pull/14643)) - `routeRSCServerRequest` replace `fetchServer` with `serverResponse` ([#&#8203;14597](https://github.com/remix-run/react-router/pull/14597)) - rsc framewlrk mode - optimize react-server-dom-webpack if in project package.json ([#&#8203;14656](https://github.com/remix-run/react-router/pull/14656)) - Updated dependencies: - `react-router@7.11.0` - `@react-router/serve@7.11.0` - `@react-router/node@7.11.0` ### [`v7.10.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#7101) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.10.0...@react-router/dev@7.10.1) ##### Patch Changes - Import ESM package `pkg-types` with a dynamic `import()` to fix issues on Node 20.18 ([#&#8203;14624](https://github.com/remix-run/react-router/pull/14624)) - Update `valibot` dependency to `^1.2.0` to address [GHSA-vqpr-j7v3-hqw9](https://github.com/advisories/GHSA-vqpr-j7v3-hqw9) ([#&#8203;14608](https://github.com/remix-run/react-router/pull/14608)) - Updated dependencies: - `react-router@7.10.1` - `@react-router/node@7.10.1` - `@react-router/serve@7.10.1` ### [`v7.10.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#7100) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.6...@react-router/dev@7.10.0) ##### Minor Changes - Stabilize `future.v8_splitRouteModules`, replacing `future.unstable_splitRouteModules` ([#&#8203;14595](https://github.com/remix-run/react-router/pull/14595)) - ⚠️ This is a breaking change if you have begun using `future.unstable_splitRouteModules`. Please update your `react-router.config.ts`. - Stabilize `future.v8_viteEnvironmentApi`, replacing `future.unstable_viteEnvironmentApi` ([#&#8203;14595](https://github.com/remix-run/react-router/pull/14595)) - ⚠️ This is a breaking change if you have begun using `future.unstable_viteEnvironmentApi`. Please update your `react-router.config.ts`. ##### Patch Changes - Load environment variables before evaluating `routes.ts` ([#&#8203;14446](https://github.com/remix-run/react-router/pull/14446)) For example, you can now compute your routes based on [`VITE_`-prefixed environment variables](https://vite.dev/guide/env-and-mode#env-variables): ```txt # .env VITE_ENV_ROUTE=my-route ``` ```ts // app/routes.ts import { type RouteConfig, route } from "@&#8203;react-router/dev/routes"; const routes: RouteConfig = []; if (import.meta.env.VITE_ENV_ROUTE === "my-route") { routes.push(route("my-route", "routes/my-route.tsx")); } export default routes; ``` - Updated dependencies: - `react-router@7.10.0` - `@react-router/node@7.10.0` - `@react-router/serve@7.10.0` ### [`v7.9.6`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#796) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.5...@react-router/dev@7.9.6) ##### Patch Changes - Use a dynamic `import()` to load ESM-only `p-map` dependency to avoid issues on Node 20.18 and below ([#&#8203;14492](https://github.com/remix-run/react-router/pull/14492)) - Short circuit `HEAD` document requests before calling `renderToPipeableStream` in the default `entry.server.tsx` to more closely align with the [spec](https://httpwg.org/specs/rfc9110.html#HEAD) ([#&#8203;14488](https://github.com/remix-run/react-router/pull/14488)) - Updated dependencies: - `react-router@7.9.6` - `@react-router/node@7.9.6` - `@react-router/serve@7.9.6` ### [`v7.9.5`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#795) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.4...@react-router/dev@7.9.5) ##### Patch Changes - Introduce a `prerender.unstable_concurrency` option, to support running the prerendering concurrently, potentially speeding up the build. ([#&#8203;14380](https://github.com/remix-run/react-router/pull/14380)) - Move RSCHydratedRouter and utils to `/dom` export. ([#&#8203;14457](https://github.com/remix-run/react-router/pull/14457)) - Ensure route navigation doesn't remove CSS `link` elements used by dynamic imports ([#&#8203;14463](https://github.com/remix-run/react-router/pull/14463)) - Typegen: only register route module types for routes within the app directory ([#&#8203;14439](https://github.com/remix-run/react-router/pull/14439)) - Updated dependencies: - `react-router@7.9.5` - `@react-router/node@7.9.5` - `@react-router/serve@7.9.5` ### [`v7.9.4`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#794) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.3...@react-router/dev@7.9.4) ##### Patch Changes - Update `valibot` dependency to `^1.1.0` ([#&#8203;14379](https://github.com/remix-run/react-router/pull/14379)) - New (unstable) `useRoute` hook for accessing data from specific routes ([#&#8203;14407](https://github.com/remix-run/react-router/pull/14407)) For example, let's say you have an `admin` route somewhere in your app and you want any child routes of `admin` to all have access to the `loaderData` and `actionData` from `admin.` ```tsx // app/routes/admin.tsx import { Outlet } from "react-router"; export const loader = () => ({ message: "Hello, loader!" }); export const action = () => ({ count: 1 }); export default function Component() { return ( <div> {/* ... */} <Outlet /> {/* ... */} </div> ); } ``` You might even want to create a reusable widget that all of the routes nested under `admin` could use: ```tsx import { unstable_useRoute as useRoute } from "react-router"; export function AdminWidget() { // How to get `message` and `count` from `admin` route? } ``` In framework mode, `useRoute` knows all your app's routes and gives you TS errors when invalid route IDs are passed in: ```tsx export function AdminWidget() { const admin = useRoute("routes/dmin"); // ^^^^^^^^^^^ } ``` `useRoute` returns `undefined` if the route is not part of the current page: ```tsx export function AdminWidget() { const admin = useRoute("routes/admin"); if (!admin) { throw new Error(`AdminWidget used outside of "routes/admin"`); } } ``` Note: the `root` route is the exception since it is guaranteed to be part of the current page. As a result, `useRoute` never returns `undefined` for `root`. `loaderData` and `actionData` are marked as optional since they could be accessed before the `action` is triggered or after the `loader` threw an error: ```tsx export function AdminWidget() { const admin = useRoute("routes/admin"); if (!admin) { throw new Error(`AdminWidget used outside of "routes/admin"`); } const { loaderData, actionData } = admin; console.log(loaderData); // ^? { message: string } | undefined console.log(actionData); // ^? { count: number } | undefined } ``` If instead of a specific route, you wanted access to the *current* route's `loaderData` and `actionData`, you can call `useRoute` without arguments: ```tsx export function AdminWidget() { const currentRoute = useRoute(); currentRoute.loaderData; currentRoute.actionData; } ``` This usage is equivalent to calling `useLoaderData` and `useActionData`, but consolidates all route data access into one hook: `useRoute`. Note: when calling `useRoute()` (without a route ID), TS has no way to know which route is the current route. As a result, `loaderData` and `actionData` are typed as `unknown`. If you want more type-safety, you can either narrow the type yourself with something like `zod` or you can refactor your app to pass down typed props to your `AdminWidget`: ```tsx export function AdminWidget({ message, count, }: { message: string; count: number; }) { /* ... */ } ``` - Updated dependencies: - `react-router@7.9.4` - `@react-router/node@7.9.4` - `@react-router/serve@7.9.4` ### [`v7.9.3`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#793) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.2...@react-router/dev@7.9.3) ##### Patch Changes - Updated dependencies: - `react-router@7.9.3` - `@react-router/node@7.9.3` - `@react-router/serve@7.9.3` ### [`v7.9.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#792) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.1...@react-router/dev@7.9.2) ##### Patch Changes - Fix preset future flags being ignored during config resolution ([#&#8203;14369](https://github.com/remix-run/react-router/pull/14369)) Fixes a bug where future flags defined by presets were completely ignored. The config resolution was incorrectly reading from `reactRouterUserConfig.future` instead of the merged `userAndPresetConfigs.future`, causing all preset-defined future flags to be lost. This fix ensures presets can properly enable experimental features as intended by the preset system design. - Add unstable support for RSC Framework Mode ([#&#8203;14336](https://github.com/remix-run/react-router/pull/14336)) - Switch internal vite plugin Response logic to use `@remix-run/node-fetch-server` ([#&#8203;13927](https://github.com/remix-run/react-router/pull/13927)) - Updated dependencies: - `react-router@7.9.2` - `@react-router/serve@7.9.2` - `@react-router/node@7.9.2` ### [`v7.9.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#791) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.9.0...@react-router/dev@7.9.1) ##### Patch Changes - Fix internal `Future` interface naming from `middleware` -> `v8_middleware` ([#&#8203;14327](https://github.com/remix-run/react-router/pull/14327)) - Updated dependencies: - `react-router@7.9.1` - `@react-router/node@7.9.1` - `@react-router/serve@7.9.1` ### [`v7.9.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#790) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.8.2...@react-router/dev@7.9.0) ##### Minor Changes - Stabilize middleware and context APIs. ([#&#8203;14215](https://github.com/remix-run/react-router/pull/14215)) We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use: - [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider) - [`createContext`](https://reactrouter.com/api/utils/createContext) - `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option - `<HydratedRouter>` [`getContext`](https://reactrouter.com/api/framework-routers/HydratedRouter#getcontext) prop Please see the [Middleware Docs](https://reactrouter.com/how-to/middleware), the [Middleware RFC](https://github.com/remix-run/remix/discussions/7642), and the [Client-side Context RFC](https://github.com/remix-run/react-router/discussions/9856) for more information. ##### Patch Changes - Updated dependencies: - `react-router@7.9.0` - `@react-router/node@7.9.0` - `@react-router/serve@7.9.0` ### [`v7.8.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#782) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.8.1...@react-router/dev@7.8.2) ##### Patch Changes - fix: memory leak in default entry.server ([#&#8203;14200](https://github.com/remix-run/react-router/pull/14200)) - Updated dependencies: - `react-router@7.8.2` - `@react-router/node@7.8.2` - `@react-router/serve@7.8.2` ### [`v7.8.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#781) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.8.0...@react-router/dev@7.8.1) ##### Patch Changes - Update generated `Route.MetaArgs` type so `loaderData` is only potentially undefined when an `ErrorBoundary` export is present ([#&#8203;14173](https://github.com/remix-run/react-router/pull/14173)) - Updated dependencies: - `react-router@7.8.1` - `@react-router/node@7.8.1` - `@react-router/serve@7.8.1` ### [`v7.8.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dev/CHANGELOG.md#780) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/dev@7.7.1...@react-router/dev@7.8.0) ##### Patch Changes - Fix rename without mkdir in Vite plugin ([#&#8203;14105](https://github.com/remix-run/react-router/pull/14105)) - Updated dependencies: - `react-router@7.8.0` - `@react-router/node@7.8.0` - `@react-router/serve@7.8.0` </details> <details> <summary>remix-run/react-router (@&#8203;react-router/node)</summary> ### [`v7.13.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#7131) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.13.0...@react-router/node@7.13.1) ##### Patch Changes - Updated dependencies: - `react-router@7.13.1` ### [`v7.13.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#7130) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.12.0...@react-router/node@7.13.0) ##### Patch Changes - Updated dependencies: - `react-router@7.13.0` ### [`v7.12.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#7120) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.11.0...@react-router/node@7.12.0) ##### Patch Changes - Updated dependencies: - `react-router@7.12.0` ### [`v7.11.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#7110) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.10.1...@react-router/node@7.11.0) ##### Patch Changes - Updated dependencies: - `react-router@7.11.0` ### [`v7.10.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#7101) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.10.0...@react-router/node@7.10.1) ##### Patch Changes - Updated dependencies: - `react-router@7.10.1` ### [`v7.10.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#7100) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.6...@react-router/node@7.10.0) ##### Patch Changes - Updated dependencies: - `react-router@7.10.0` ### [`v7.9.6`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#796) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.5...@react-router/node@7.9.6) ##### Patch Changes - Updated dependencies: - `react-router@7.9.6` ### [`v7.9.5`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#795) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.4...@react-router/node@7.9.5) ##### Patch Changes - Updated dependencies: - `react-router@7.9.5` ### [`v7.9.4`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#794) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.3...@react-router/node@7.9.4) ##### Patch Changes - Validate format of incoming session ids in `createFileSessionStorage` ([#&#8203;14426](https://github.com/remix-run/react-router/pull/14426)) - Updated dependencies: - `react-router@7.9.4` ### [`v7.9.3`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#793) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.2...@react-router/node@7.9.3) ##### Patch Changes - Updated dependencies: - `react-router@7.9.3` ### [`v7.9.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#792) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.1...@react-router/node@7.9.2) ##### Patch Changes - Updated dependencies: - `react-router@7.9.2` ### [`v7.9.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#791) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.9.0...@react-router/node@7.9.1) ##### Patch Changes - Updated dependencies: - `react-router@7.9.1` ### [`v7.9.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#790) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.8.2...@react-router/node@7.9.0) ##### Minor Changes - Stabilize middleware and context APIs. ([#&#8203;14215](https://github.com/remix-run/react-router/pull/14215)) We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use: - [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider) - [`createContext`](https://reactrouter.com/api/utils/createContext) - `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option - `<HydratedRouter>` [`getContext`](https://reactrouter.com/api/framework-routers/HydratedRouter#getcontext) prop Please see the [Middleware Docs](https://reactrouter.com/how-to/middleware), the [Middleware RFC](https://github.com/remix-run/remix/discussions/7642), and the [Client-side Context RFC](https://github.com/remix-run/react-router/discussions/9856) for more information. ##### Patch Changes - Updated dependencies: - `react-router@7.9.0` ### [`v7.8.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#782) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.8.1...@react-router/node@7.8.2) ##### Patch Changes - Updated dependencies: - `react-router@7.8.2` ### [`v7.8.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#781) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.8.0...@react-router/node@7.8.1) ##### Patch Changes - Updated dependencies: - `react-router@7.8.1` ### [`v7.8.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-node/CHANGELOG.md#780) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/node@7.7.1...@react-router/node@7.8.0) ##### Patch Changes - \[UNSTABLE] Change `getLoadContext` signature (`type GetLoadContextFunction`) when `future.unstable_middleware` is enabled so that it returns an `unstable_RouterContextProvider` instance instead of a `Map` used to contruct the instance internally ([#&#8203;14097](https://github.com/remix-run/react-router/pull/14097)) - This also removes the `type unstable_InitialContext` export - ⚠️ This is a breaking change if you have adopted middleware and are using a custom server with a `getLoadContext` function - Updated dependencies: - `react-router@7.8.0` </details> <details> <summary>remix-run/react-router (@&#8203;react-router/serve)</summary> ### [`v7.13.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#7131) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.13.0...@react-router/serve@7.13.1) ##### Patch Changes - Updated dependencies: - `react-router@7.13.1` - `@react-router/node@7.13.1` - `@react-router/express@7.13.1` ### [`v7.13.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#7130) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.12.0...@react-router/serve@7.13.0) ##### Patch Changes - Updated dependencies: - `react-router@7.13.0` - `@react-router/node@7.13.0` - `@react-router/express@7.13.0` ### [`v7.12.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#7120) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.11.0...@react-router/serve@7.12.0) ##### Patch Changes - Updated dependencies: - `react-router@7.12.0` - `@react-router/node@7.12.0` - `@react-router/express@7.12.0` ### [`v7.11.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#7110) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.10.1...@react-router/serve@7.11.0) ##### Patch Changes - support custom entrypoints for RSC framework mode ([#&#8203;14643](https://github.com/remix-run/react-router/pull/14643)) - Update `compression` and `morgan` dependencies to address `on-headers` CVE: [GHSA-76c9-3jph-rj3q](https://github.com/advisories/GHSA-76c9-3jph-rj3q) ([#&#8203;14652](https://github.com/remix-run/react-router/pull/14652)) - Updated dependencies: - `react-router@7.11.0` - `@react-router/node@7.11.0` - `@react-router/express@7.11.0` ### [`v7.10.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#7101) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.10.0...@react-router/serve@7.10.1) ##### Patch Changes - Updated dependencies: - `react-router@7.10.1` - `@react-router/node@7.10.1` - `@react-router/express@7.10.1` ### [`v7.10.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#7100) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.6...@react-router/serve@7.10.0) ##### Patch Changes - Updated dependencies: - `react-router@7.10.0` - `@react-router/node@7.10.0` - `@react-router/express@7.10.0` ### [`v7.9.6`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#796) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.5...@react-router/serve@7.9.6) ##### Patch Changes - Updated dependencies: - `react-router@7.9.6` - `@react-router/node@7.9.6` - `@react-router/express@7.9.6` ### [`v7.9.5`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#795) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.4...@react-router/serve@7.9.5) ##### Patch Changes - Updated dependencies: - `react-router@7.9.5` - `@react-router/node@7.9.5` - `@react-router/express@7.9.5` ### [`v7.9.4`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#794) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.3...@react-router/serve@7.9.4) ##### Patch Changes - Updated dependencies: - `react-router@7.9.4` - `@react-router/node@7.9.4` - `@react-router/express@7.9.4` ### [`v7.9.3`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#793) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.2...@react-router/serve@7.9.3) ##### Patch Changes - Updated dependencies: - `react-router@7.9.3` - `@react-router/node@7.9.3` - `@react-router/express@7.9.3` ### [`v7.9.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#792) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.1...@react-router/serve@7.9.2) ##### Patch Changes - disable compression for RSC responses for now ([#&#8203;14381](https://github.com/remix-run/react-router/pull/14381)) - Updated dependencies: - `react-router@7.9.2` - `@react-router/node@7.9.2` - `@react-router/express@7.9.2` ### [`v7.9.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#791) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.9.0...@react-router/serve@7.9.1) ##### Patch Changes - Updated dependencies: - `react-router@7.9.1` - `@react-router/node@7.9.1` - `@react-router/express@7.9.1` ### [`v7.9.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#790) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.8.2...@react-router/serve@7.9.0) ##### Patch Changes - Updated dependencies: - `react-router@7.9.0` - `@react-router/express@7.9.0` - `@react-router/node@7.9.0` ### [`v7.8.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#782) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.8.1...@react-router/serve@7.8.2) ##### Patch Changes - Updated dependencies: - `react-router@7.8.2` - `@react-router/node@7.8.2` - `@react-router/express@7.8.2` ### [`v7.8.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#781) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.8.0...@react-router/serve@7.8.1) ##### Patch Changes - Updated dependencies: - `react-router@7.8.1` - `@react-router/node@7.8.1` - `@react-router/express@7.8.1` ### [`v7.8.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-serve/CHANGELOG.md#780) [Compare Source](https://github.com/remix-run/react-router/compare/@react-router/serve@7.7.1...@react-router/serve@7.8.0) ##### Patch Changes - Updated dependencies: - `react-router@7.8.0` - `@react-router/express@7.8.0` - `@react-router/node@7.8.0` </details> <details> <summary>tailwindlabs/tailwindcss (@&#8203;tailwindcss/vite)</summary> ### [`v4.2.1`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#421---2026-02-23) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.2.0...v4.2.1) ##### Fixed - Allow trailing dash in functional utility names for backwards compatibility ([#&#8203;19696](https://github.com/tailwindlabs/tailwindcss/pull/19696)) - Properly detect classes containing `.` characters within curly braces in MDX files ([#&#8203;19711](https://github.com/tailwindlabs/tailwindcss/pull/19711)) ### [`v4.2.0`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#420---2026-02-18) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.18...v4.2.0) ##### Added - Add mauve, olive, mist, and taupe color palettes to the default theme ([#&#8203;19627](https://github.com/tailwindlabs/tailwindcss/pull/19627)) - Add `@tailwindcss/webpack` package to run Tailwind CSS as a webpack plugin ([#&#8203;19610](https://github.com/tailwindlabs/tailwindcss/pull/19610)) - Add `pbs-*` and `pbe-*` utilities for `padding-block-start` and `padding-block-end` ([#&#8203;19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `mbs-*` and `mbe-*` utilities for `margin-block-start` and `margin-block-end` ([#&#8203;19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `scroll-pbs-*` and `scroll-pbe-*` utilities for `scroll-padding-block-start` and `scroll-padding-block-end` ([#&#8203;19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `scroll-mbs-*` and `scroll-mbe-*` utilities for `scroll-margin-block-start` and `scroll-margin-block-end` ([#&#8203;19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `border-bs-*` and `border-be-*` utilities for `border-block-start` and `border-block-end` ([#&#8203;19601](https://github.com/tailwindlabs/tailwindcss/pull/19601)) - Add `inline-*`, `min-inline-*`, `max-inline-*` utilities for `inline-size`, `min-inline-size`, and `max-inline-size` ([#&#8203;19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `block-*`, `min-block-*`, `max-block-*` utilities for `block-size`, `min-block-size`, and `max-block-size` ([#&#8203;19612](https://github.com/tailwindlabs/tailwindcss/pull/19612)) - Add `inset-s-*`, `inset-e-*`, `inset-bs-*`, `inset-be-*` utilities for `inset-inline-start`, `inset-inline-end`, `inset-block-start`, and `inset-block-end` ([#&#8203;19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) - Add `font-features-*` utility for `font-feature-settings` ([#&#8203;19623](https://github.com/tailwindlabs/tailwindcss/pull/19623)) ##### Fixed - Prevent double `@supports` wrapper for `color-mix` values ([#&#8203;19450](https://github.com/tailwindlabs/tailwindcss/pull/19450)) - Allow whitespace around `@source inline()` argument ([#&#8203;19461](https://github.com/tailwindlabs/tailwindcss/pull/19461)) - Emit comment when source maps are saved to files when using `@tailwindcss/cli` ([#&#8203;19447](https://github.com/tailwindlabs/tailwindcss/pull/19447)) - Detect utilities containing capital letters followed by numbers ([#&#8203;19465](https://github.com/tailwindlabs/tailwindcss/pull/19465)) - Fix class extraction for Rails' strict locals ([#&#8203;19525](https://github.com/tailwindlabs/tailwindcss/pull/19525)) - Align `@utility` name validation with Oxide scanner rules ([#&#8203;19524](https://github.com/tailwindlabs/tailwindcss/pull/19524)) - Fix infinite loop when using `@variant` inside `@custom-variant` ([#&#8203;19633](https://github.com/tailwindlabs/tailwindcss/pull/19633)) - Allow multiples of `.25` in `aspect-*` fractions (e.g. `aspect-8.5/11`) ([#&#8203;19688](https://github.com/tailwindlabs/tailwindcss/pull/19688)) - Ensure changes to external files listed via `@source` trigger a full page reload when using `@tailwindcss/vite` ([#&#8203;19670](https://github.com/tailwindlabs/tailwindcss/pull/19670)) - Improve performance of Oxide scanner in bigger projects by reducing file system walks ([#&#8203;19632](https://github.com/tailwindlabs/tailwindcss/pull/19632)) - Ensure import aliases in Astro v5 work without crashing when using `@tailwindcss/vite` ([#&#8203;19677](https://github.com/tailwindlabs/tailwindcss/issues/19677)) - Allow escape characters in `@utility` names to improve support with formatters such as Biome ([#&#8203;19626](https://github.com/tailwindlabs/tailwindcss/pull/19626)) - Fix incorrect canonicalization results when canonicalizing multiple times ([#&#8203;19675](https://github.com/tailwindlabs/tailwindcss/pull/19675)) - Add `.jj` to default ignored content directories ([#&#8203;19687](https://github.com/tailwindlabs/tailwindcss/pull/19687)) ##### Deprecated - Deprecate `start-*` and `end-*` utilities in favor of `inset-s-*` and `inset-e-*` utilities ([#&#8203;19613](https://github.com/tailwindlabs/tailwindcss/pull/19613)) ### [`v4.1.18`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4118---2025-12-11) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.17...v4.1.18) ##### Fixed - Ensure validation of `source(…)` happens relative to the file it is in ([#&#8203;19274](https://github.com/tailwindlabs/tailwindcss/pull/19274)) - Include filename and line numbers in CSS parse errors ([#&#8203;19282](https://github.com/tailwindlabs/tailwindcss/pull/19282)) - Skip comments in Ruby files when checking for class names ([#&#8203;19243](https://github.com/tailwindlabs/tailwindcss/pull/19243)) - Skip over arbitrary property utilities with a top-level `!` in the value ([#&#8203;19243](https://github.com/tailwindlabs/tailwindcss/pull/19243)) - Support environment API in `@tailwindcss/vite` ([#&#8203;18970](https://github.com/tailwindlabs/tailwindcss/pull/18970)) - Preserve case of theme keys from JS configs and plugins ([#&#8203;19337](https://github.com/tailwindlabs/tailwindcss/pull/19337)) - Write source maps correctly on the CLI when using `--watch` ([#&#8203;19373](https://github.com/tailwindlabs/tailwindcss/pull/19373)) - Handle special defaults (like `ringColor.DEFAULT`) in JS configs ([#&#8203;19348](https://github.com/tailwindlabs/tailwindcss/pull/19348)) - Improve backwards compatibility for `content` theme key from JS configs ([#&#8203;19381](https://github.com/tailwindlabs/tailwindcss/pull/19381)) - Upgrade: Handle `future` and `experimental` config keys ([#&#8203;19344](https://github.com/tailwindlabs/tailwindcss/pull/19344)) - Try to canonicalize any arbitrary utility to a bare value ([#&#8203;19379](https://github.com/tailwindlabs/tailwindcss/pull/19379)) - Validate candidates similarly to Oxide ([#&#8203;19397](https://github.com/tailwindlabs/tailwindcss/pull/19397)) - Canonicalization: combine `text-*` and `leading-*` classes ([#&#8203;19396](https://github.com/tailwindlabs/tailwindcss/pull/19396)) - Correctly handle duplicate CLI arguments ([#&#8203;19416](https://github.com/tailwindlabs/tailwindcss/pull/19416)) - Don’t emit color-mix fallback rules inside `@keyframes` ([#&#8203;19419](https://github.com/tailwindlabs/tailwindcss/pull/19419)) - CLI: Don't hang when output is `/dev/stdout` ([#&#8203;19421](https://github.com/tailwindlabs/tailwindcss/pull/19421)) ### [`v4.1.17`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4117---2025-11-06) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.16...v4.1.17) ##### Fixed - Substitute `@variant` inside legacy JS APIs ([#&#8203;19263](https://github.com/tailwindlabs/tailwindcss/pull/19263)) - Prevent occasional crash on Windows when loaded into a worker thread ([#&#8203;19242](https://github.com/tailwindlabs/tailwindcss/pull/19242)) ### [`v4.1.16`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4116---2025-10-23) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.15...v4.1.16) ##### Fixed - Discard candidates with an empty data type ([#&#8203;19172](https://github.com/tailwindlabs/tailwindcss/pull/19172)) - Fix canonicalization of arbitrary variants with attribute selectors ([#&#8203;19176](https://github.com/tailwindlabs/tailwindcss/pull/19176)) - Fix invalid colors due to nested `&` ([#&#8203;19184](https://github.com/tailwindlabs/tailwindcss/pull/19184)) - Improve canonicalization for `& > :pseudo` and `& :pseudo` arbitrary variants ([#&#8203;19178](https://github.com/tailwindlabs/tailwindcss/pull/19178)) ### [`v4.1.15`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4115---2025-10-20) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.14...v4.1.15) ##### Fixed - Fix Safari devtools rendering issue due to `color-mix` fallback ([#&#8203;19069](https://github.com/tailwindlabs/tailwindcss/pull/19069)) - Suppress Lightning CSS warnings about `:deep`, `:slotted`, and `:global` ([#&#8203;19094](https://github.com/tailwindlabs/tailwindcss/pull/19094)) - Fix resolving theme keys when starting with the name of another theme key in JS configs and plugins ([#&#8203;19097](https://github.com/tailwindlabs/tailwindcss/pull/19097)) - Allow named groups in combination with `not-*`, `has-*`, and `in-*` ([#&#8203;19100](https://github.com/tailwindlabs/tailwindcss/pull/19100)) - Prevent important utilities from affecting other utilities ([#&#8203;19110](https://github.com/tailwindlabs/tailwindcss/pull/19110)) - Don’t index into strings with the `theme(…)` function ([#&#8203;19111](https://github.com/tailwindlabs/tailwindcss/pull/19111)) - Fix parsing issue when `\t` is used in at-rules ([#&#8203;19130](https://github.com/tailwindlabs/tailwindcss/pull/19130)) - Upgrade: Canonicalize utilities containing `0` values ([#&#8203;19095](https://github.com/tailwindlabs/tailwindcss/pull/19095)) - Upgrade: Migrate deprecated `break-words` to `wrap-break-word` ([#&#8203;19157](https://github.com/tailwindlabs/tailwindcss/pull/19157)) ##### Changed - Remove the `postinstall` script from oxide (\[[#&#8203;19149](https://github.com/tailwindlabs/tailwindcss/issues/19149)])([#&#8203;19149](https://github.com/tailwindlabs/tailwindcss/pull/19149)) ### [`v4.1.14`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4114---2025-10-01) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.13...v4.1.14) ##### Fixed - Handle `'` syntax in ClojureScript when extracting classes ([#&#8203;18888](https://github.com/tailwindlabs/tailwindcss/pull/18888)) - Handle `@variant` inside `@custom-variant` ([#&#8203;18885](https://github.com/tailwindlabs/tailwindcss/pull/18885)) - Merge suggestions when using `@utility` ([#&#8203;18900](https://github.com/tailwindlabs/tailwindcss/pull/18900)) - Ensure that file system watchers created when using the CLI are always cleaned up ([#&#8203;18905](https://github.com/tailwindlabs/tailwindcss/pull/18905)) - Do not generate `grid-column` utilities when configuring `grid-column-start` or `grid-column-end` ([#&#8203;18907](https://github.com/tailwindlabs/tailwindcss/pull/18907)) - Do not generate `grid-row` utilities when configuring `grid-row-start` or `grid-row-end` ([#&#8203;18907](https://github.com/tailwindlabs/tailwindcss/pull/18907)) - Prevent duplicate CSS when overwriting a static utility with a theme key ([#&#8203;18056](https://github.com/tailwindlabs/tailwindcss/pull/18056)) - Show Lightning CSS warnings (if any) when optimizing/minifying ([#&#8203;18918](https://github.com/tailwindlabs/tailwindcss/pull/18918)) - Use `default` export condition for `@tailwindcss/vite` ([#&#8203;18948](https://github.com/tailwindlabs/tailwindcss/pull/18948)) - Re-throw errors from PostCSS nodes ([#&#8203;18373](https://github.com/tailwindlabs/tailwindcss/pull/18373)) - Detect classes in markdown inline directives ([#&#8203;18967](https://github.com/tailwindlabs/tailwindcss/pull/18967)) - Ensure files with only `@theme` produce no output when built ([#&#8203;18979](https://github.com/tailwindlabs/tailwindcss/pull/18979)) - Support Maud templates when extracting classes ([#&#8203;18988](https://github.com/tailwindlabs/tailwindcss/pull/18988)) - Upgrade: Do not migrate `variant = 'outline'` during upgrades ([#&#8203;18922](https://github.com/tailwindlabs/tailwindcss/pull/18922)) - Upgrade: Show version mismatch (if any) when running upgrade tool ([#&#8203;19028](https://github.com/tailwindlabs/tailwindcss/pull/19028)) - Upgrade: Ensure first class inside `className` is migrated ([#&#8203;19031](https://github.com/tailwindlabs/tailwindcss/pull/19031)) - Upgrade: Migrate classes inside `*ClassName` and `*Class` attributes ([#&#8203;19031](https://github.com/tailwindlabs/tailwindcss/pull/19031)) ### [`v4.1.13`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4113---2025-09-03) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.12...v4.1.13) ##### Changed - Drop warning from browser build ([#&#8203;18731](https://github.com/tailwindlabs/tailwindcss/issues/18731)) - Drop exact duplicate declarations when emitting CSS ([#&#8203;18809](https://github.com/tailwindlabs/tailwindcss/issues/18809)) ##### Fixed - Don't transition `visibility` when using `transition` ([#&#8203;18795](https://github.com/tailwindlabs/tailwindcss/pull/18795)) - Discard matched variants with unknown named values ([#&#8203;18799](https://github.com/tailwindlabs/tailwindcss/pull/18799)) - Discard matched variants with non-string values ([#&#8203;18799](https://github.com/tailwindlabs/tailwindcss/pull/18799)) - Show suggestions for known `matchVariant` values ([#&#8203;18798](https://github.com/tailwindlabs/tailwindcss/pull/18798)) - Replace deprecated `clip` with `clip-path` in `sr-only` ([#&#8203;18769](https://github.com/tailwindlabs/tailwindcss/pull/18769)) - Hide internal fields from completions in `matchUtilities` ([#&#8203;18820](https://github.com/tailwindlabs/tailwindcss/pull/18820)) - Ignore `.vercel` folders by default (can be overridden by `@source …` rules) ([#&#8203;18855](https://github.com/tailwindlabs/tailwindcss/pull/18855)) - Consider variants starting with `@-` to be invalid (e.g. `@-2xl:flex`) ([#&#8203;18869](https://github.com/tailwindlabs/tailwindcss/pull/18869)) - Do not allow custom variants to start or end with a `-` or `_` ([#&#8203;18867](https://github.com/tailwindlabs/tailwindcss/pull/18867), [#&#8203;18872](https://github.com/tailwindlabs/tailwindcss/pull/18872)) - Upgrade: Migrate `aria` theme keys to `@custom-variant` ([#&#8203;18815](https://github.com/tailwindlabs/tailwindcss/pull/18815)) - Upgrade: Migrate `data` theme keys to `@custom-variant` ([#&#8203;18816](https://github.com/tailwindlabs/tailwindcss/pull/18816)) - Upgrade: Migrate `supports` theme keys to `@custom-variant` ([#&#8203;18817](https://github.com/tailwindlabs/tailwindcss/pull/18817)) ### [`v4.1.12`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4112---2025-08-13) [Compare Source](https://github.com/tailwindlabs/tailwindcss/compare/v4.1.11...v4.1.12) ##### Fixed - Don't consider the global important state in `@apply` ([#&#8203;18404](https://github.com/tailwindlabs/tailwindcss/pull/18404)) - Add missing suggestions for `flex-<number>` utilities ([#&#8203;18642](https://github.com/tailwindlabs/tailwindcss/pull/18642)) - Fix trailing `)` from interfering with extraction in Clojure keywords ([#&#8203;18345](https://github.com/tailwindlabs/tailwindcss/pull/18345)) - Detect classes inside Elixir charlist, word list, and string sigils ([#&#8203;18432](https://github.com/tailwindlabs/tailwindcss/pull/18432)) - Track source locations through `@plugin` and `@config` ([#&#8203;18345](https://github.com/tailwindlabs/tailwindcss/pull/18345)) - Allow boolean values of `process.env.DEBUG` in `@tailwindcss/node` ([#&#8203;18485](https://github.com/tailwindlabs/tailwindcss/pull/18485)) - Ignore consecutive semicolons in the CSS parser ([#&#8203;18532](https://github.com/tailwindlabs/tailwindcss/pull/18532)) - Center the dropdown icon added to an input with a paired datalist by default ([#&#8203;18511](https://github.com/tailwindlabs/tailwindcss/pull/18511)) - Extract candidates in Slang templates ([#&#8203;18565](https://github.com/tailwindlabs/tailwindcss/pull/18565)) - Improve error messages when encountering invalid functional utility names ([#&#8203;18568](https://github.com/tailwindlabs/tailwindcss/pull/18568)) - Discard CSS AST objects with `false` or `undefined` properties ([#&#8203;18571](https://github.com/tailwindlabs/tailwindcss/pull/18571)) - Allow users to disable URL rebasing in `@tailwindcss/postcss` via `transformAssetUrls: false` ([#&#8203;18321](https://github.com/tailwindlabs/tailwindcss/pull/18321)) - Fix false-positive migrations in `addEventListener` and JavaScript variable names ([#&#8203;18718](https://github.com/tailwindlabs/tailwindcss/pull/18718)) - Fix Standalone CLI showing default Bun help when run via symlink on Windows ([#&#8203;18723](https://github.com/tailwindlabs/tailwindcss/pull/18723)) - Read from `--border-color-*` theme keys in `divide-*` utilities for backwards compatibility ([#&#8203;18704](https://github.com/tailwindlabs/tailwindcss/pull/18704/)) - Don't scan `.hdr` and `.exr` files for classes by default ([#&#8203;18734](https://github.com/tailwindlabs/tailwindcss/pull/18734)) </details> <details> <summary>omrilotan/isbot (isbot)</summary> ### [`v5.1.35`](https://github.com/omrilotan/isbot/blob/HEAD/CHANGELOG.md#5135) [Compare Source](https://github.com/omrilotan/isbot/compare/v5.1.34...e9567311b30030d09b93605004c8cb53f3c08763) - \[Pattern] Pattern updates ### [`v5.1.34`](https://github.com/omrilotan/isbot/blob/HEAD/CHANGELOG.md#5134) [Compare Source](https://github.com/omrilotan/isbot/compare/v5.1.33...v5.1.34) - \[Pattern] Pattern updates ### [`v5.1.33`](https://github.com/omrilotan/isbot/blob/HEAD/CHANGELOG.md#5133) [Compare Source](https://github.com/omrilotan/isbot/compare/v5.1.32...v5.1.33) - \[Pattern] Pattern updates ### [`v5.1.32`](https://github.com/omrilotan/isbot/blob/HEAD/CHANGELOG.md#5132) [Compare Source](https://github.com/omrilotan/isbot/compare/v5.1.31...v5.1.32) - \[Pattern] Pattern updates ### [`v5.1.31`](https://github.com/omrilotan/isbot/blob/HEAD/CHANGELOG.md#5131) [Compare Source](https://github.com/omrilotan/isbot/compare/v5.1.30...v5.1.31) - \[Pattern] Pattern updates ### [`v5.1.30`](https://github.com/omrilotan/isbot/blob/HEAD/CHANGELOG.md#5130) [Compare Source](https://github.com/omrilotan/isbot/compare/v5.1.29...v5.1.30) - \[Pattern] Pattern updates </details> <details> <summary>lucide-icons/lucide (lucide-react)</summary> ### [`v0.575.0`](https://github.com/lucide-icons/lucide/releases/tag/0.575.0): Version 0.575.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.574.0...0.575.0) #### What's Changed - feat(icons): added `message-square-check` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4076](https://github.com/lucide-icons/lucide/pull/4076) - fix(lucide): Fix ESM Module output path in build by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;4084](https://github.com/lucide-icons/lucide/pull/4084) - feat(icons): added `metronome` icon by [@&#8203;edwloef](https://github.com/edwloef) in [#&#8203;4063](https://github.com/lucide-icons/lucide/pull/4063) - fix(icons): remove execution permission of SVG files by [@&#8203;duckafire](https://github.com/duckafire) in [#&#8203;4053](https://github.com/lucide-icons/lucide/pull/4053) - fix(icons): changed `file-pen-line` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3970](https://github.com/lucide-icons/lucide/pull/3970) - feat(icons): added `square-arrow-right-exit` and `square-arrow-right-enter` icons by [@&#8203;EthanHazel](https://github.com/EthanHazel) in [#&#8203;3958](https://github.com/lucide-icons/lucide/pull/3958) - fix(icons): renamed `flip-*` to `square-centerline-dashed-*` by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3945](https://github.com/lucide-icons/lucide/pull/3945) #### New Contributors - [@&#8203;edwloef](https://github.com/edwloef) made their first contribution in [#&#8203;4063](https://github.com/lucide-icons/lucide/pull/4063) - [@&#8203;duckafire](https://github.com/duckafire) made their first contribution in [#&#8203;4053](https://github.com/lucide-icons/lucide/pull/4053) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.573.0...0.575.0> ### [`v0.574.0`](https://github.com/lucide-icons/lucide/releases/tag/0.574.0): Version 0.574.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.573.0...0.574.0) #### What's Changed - fix(icons): changed `rocking-chair` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3445](https://github.com/lucide-icons/lucide/pull/3445) - fix(icons): flipped `coins` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3158](https://github.com/lucide-icons/lucide/pull/3158) - feat(icons): added `x-line-top` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2838](https://github.com/lucide-icons/lucide/pull/2838) - feat(icons): added `mouse-left` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) - feat(icons): added `mouse-right` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2787](https://github.com/lucide-icons/lucide/pull/2787) #### New Contributors - [@&#8203;marvfash](https://github.com/marvfash) made their first contribution in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.572.0...0.574.0> ### [`v0.573.0`](https://github.com/lucide-icons/lucide/releases/tag/0.573.0): Version 0.573.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.572.0...0.573.0) #### What's Changed - fix(icons): changed `rocking-chair` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3445](https://github.com/lucide-icons/lucide/pull/3445) - fix(icons): flipped `coins` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3158](https://github.com/lucide-icons/lucide/pull/3158) - feat(icons): added `x-line-top` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2838](https://github.com/lucide-icons/lucide/pull/2838) - feat(icons): added `mouse-left` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) - feat(icons): added `mouse-right` icon by [@&#8203;marvfash](https://github.com/marvfash) in [#&#8203;2787](https://github.com/lucide-icons/lucide/pull/2787) #### New Contributors - [@&#8203;marvfash](https://github.com/marvfash) made their first contribution in [#&#8203;2788](https://github.com/lucide-icons/lucide/pull/2788) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.572.0...0.573.0> ### [`v0.572.0`](https://github.com/lucide-icons/lucide/releases/tag/0.572.0): Version 0.572.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.571.0...0.572.0) #### What's Changed - feat(icons): added `message-circle-check` icon by [@&#8203;Shrinks99](https://github.com/Shrinks99) in [#&#8203;3770](https://github.com/lucide-icons/lucide/pull/3770) #### New Contributors - [@&#8203;Shrinks99](https://github.com/Shrinks99) made their first contribution in [#&#8203;3770](https://github.com/lucide-icons/lucide/pull/3770) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.571.0...0.572.0> ### [`v0.571.0`](https://github.com/lucide-icons/lucide/releases/tag/0.571.0): Version 0.571.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.570.0...0.571.0) #### What's Changed - fix(icons): rearange `circle`-icons path and circle order by [@&#8203;adamlindqvist](https://github.com/adamlindqvist) in [#&#8203;3746](https://github.com/lucide-icons/lucide/pull/3746) - feat(icons): added `shelving-unit` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3041](https://github.com/lucide-icons/lucide/pull/3041) #### New Contributors - [@&#8203;adamlindqvist](https://github.com/adamlindqvist) made their first contribution in [#&#8203;3746](https://github.com/lucide-icons/lucide/pull/3746) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.570.0...0.571.0> ### [`v0.570.0`](https://github.com/lucide-icons/lucide/releases/tag/0.570.0): Version 0.570.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.569.0...0.570.0) #### What's Changed - feat(icons): added `towel-rack` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3350](https://github.com/lucide-icons/lucide/pull/3350) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.569.0...0.570.0> ### [`v0.569.0`](https://github.com/lucide-icons/lucide/releases/tag/0.569.0): Version 0.569.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.568.0...0.569.0) #### What's Changed - fix(icons): changed `clipboard-pen` icon by [@&#8203;Spleefies](https://github.com/Spleefies) in [#&#8203;4006](https://github.com/lucide-icons/lucide/pull/4006) - feat(icons): add `mirror-round` and `mirror-rectangular` by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3832](https://github.com/lucide-icons/lucide/pull/3832) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.568.0...0.569.0> ### [`v0.568.0`](https://github.com/lucide-icons/lucide/releases/tag/0.568.0): Version 0.568.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.567.0...0.568.0) #### What's Changed - fix(icons): adjusted `clapperboard` so slash is no longer protruding by [@&#8203;torfmuer](https://github.com/torfmuer) in [#&#8203;3764](https://github.com/lucide-icons/lucide/pull/3764) - feat(icons): Add `git-merge-conflict` icon by [@&#8203;timmy471](https://github.com/timmy471) in [#&#8203;3008](https://github.com/lucide-icons/lucide/pull/3008) #### New Contributors - [@&#8203;torfmuer](https://github.com/torfmuer) made their first contribution in [#&#8203;3764](https://github.com/lucide-icons/lucide/pull/3764) - [@&#8203;timmy471](https://github.com/timmy471) made their first contribution in [#&#8203;3008](https://github.com/lucide-icons/lucide/pull/3008) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.567.0...0.568.0> ### [`v0.567.0`](https://github.com/lucide-icons/lucide/releases/tag/0.567.0): Version 0.567.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.566.0...0.567.0) #### What's Changed - chore(tags): added tags to `info` by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;4047](https://github.com/lucide-icons/lucide/pull/4047) - fix(icons): changed `gift` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3977](https://github.com/lucide-icons/lucide/pull/3977) - feat(icons): added `line-dot-right-horizontal` icon by [@&#8203;nathan-de-pachtere](https://github.com/nathan-de-pachtere) in [#&#8203;3742](https://github.com/lucide-icons/lucide/pull/3742) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.566.0...0.567.0> ### [`v0.566.0`](https://github.com/lucide-icons/lucide/releases/tag/0.566.0): Version 0.566.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.565.0...0.566.0) #### What's Changed - fix(icons): changed `forklift` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;4069](https://github.com/lucide-icons/lucide/pull/4069) - fix(icons): changed `rocket` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;4067](https://github.com/lucide-icons/lucide/pull/4067) - feat(icons): added `globe-off` icon by [@&#8203;TimNekk](https://github.com/TimNekk) in [#&#8203;4051](https://github.com/lucide-icons/lucide/pull/4051) #### New Contributors - [@&#8203;TimNekk](https://github.com/TimNekk) made their first contribution in [#&#8203;4051](https://github.com/lucide-icons/lucide/pull/4051) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.565.0...0.566.0> ### [`v0.565.0`](https://github.com/lucide-icons/lucide/releases/tag/0.565.0): Version 0.565.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.564.0...0.565.0) #### What's Changed - feat(icons): add `lens-concave` and `lens-convex` by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3831](https://github.com/lucide-icons/lucide/pull/3831) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.564.0...0.565.0> ### [`v0.564.0`](https://github.com/lucide-icons/lucide/releases/tag/0.564.0): Version 0.564.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.563.0...0.564.0) #### What's Changed - chore(docs): Improve SEO icon detail pages by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;4040](https://github.com/lucide-icons/lucide/pull/4040) - feat(icons): added `database-search` icon by [@&#8203;Spleefies](https://github.com/Spleefies) in [#&#8203;4003](https://github.com/lucide-icons/lucide/pull/4003) - fix(icons): changed `user-lock` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3971](https://github.com/lucide-icons/lucide/pull/3971) - fix(icons): changed `bug-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3972](https://github.com/lucide-icons/lucide/pull/3972) - fix(icons): changed `bell-dot` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3973](https://github.com/lucide-icons/lucide/pull/3973) - fix(icons): changed `bandage` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3967](https://github.com/lucide-icons/lucide/pull/3967) - fix(icons): changed `hard-drive` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3622](https://github.com/lucide-icons/lucide/pull/3622) - fix(icons): changed `git-branch` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3938](https://github.com/lucide-icons/lucide/pull/3938) - fix(icons): changed `file-cog` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3965](https://github.com/lucide-icons/lucide/pull/3965) - fix(icons): changed `cloud-alert` and `cloud-check` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3976](https://github.com/lucide-icons/lucide/pull/3976) - feat(icons): adds `user-key` and `user-round-key`, updates other `-key` icons to match by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4044](https://github.com/lucide-icons/lucide/pull/4044) #### New Contributors - [@&#8203;Spleefies](https://github.com/Spleefies) made their first contribution in [#&#8203;4003](https://github.com/lucide-icons/lucide/pull/4003) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.563.1...0.564.0> ### [`v0.563.0`](https://github.com/lucide-icons/lucide/releases/tag/0.563.0): Version 0.563.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.562.0...0.563.0) #### What's Changed `aria-hidden` is by default added to icons components in all packages. This was already added to `lucide-react` before. Making icons accessible, you can add an `aria-label` or a `title`. See docs about [accessibility](https://lucide.dev/guide/advanced/accessibility). #### All changes - chore(dev): Enable ligatures in font build configuration by [@&#8203;dcxo](https://github.com/dcxo) in [#&#8203;3876](https://github.com/lucide-icons/lucide/pull/3876) - chore(repo): add Android to brand stopwords by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3895](https://github.com/lucide-icons/lucide/pull/3895) - fix(site): add missing titles and a title template by [@&#8203;taimar](https://github.com/taimar) in [#&#8203;3920](https://github.com/lucide-icons/lucide/pull/3920) - fix(site): unify and improve the styling of input fields by [@&#8203;taimar](https://github.com/taimar) in [#&#8203;3919](https://github.com/lucide-icons/lucide/pull/3919) - fix(icons): changed `star-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3952](https://github.com/lucide-icons/lucide/pull/3952) - fix(icons): changed `tickets-plane` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3928](https://github.com/lucide-icons/lucide/pull/3928) - fix(icons): changed `monitor-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3962](https://github.com/lucide-icons/lucide/pull/3962) - fix(icons): changed `lasso` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3961](https://github.com/lucide-icons/lucide/pull/3961) - fix(icons): changed `cloud-off` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3942](https://github.com/lucide-icons/lucide/pull/3942) - docs(site): added lucide-web-components third-party package by [@&#8203;midesweb](https://github.com/midesweb) in [#&#8203;3948](https://github.com/lucide-icons/lucide/pull/3948) - chore(deps-dev): bump preact from 10.27.2 to 10.27.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3955](https://github.com/lucide-icons/lucide/pull/3955) - feat(icon): add globe-x icon with metadata by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3827](https://github.com/lucide-icons/lucide/pull/3827) - fix(icons): changed `waypoints` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3990](https://github.com/lucide-icons/lucide/pull/3990) - fix(icons): changed `bookmark` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2906](https://github.com/lucide-icons/lucide/pull/2906) - fix(icons): changed `message-square-dashed` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3959](https://github.com/lucide-icons/lucide/pull/3959) - fix(icons): changed `cloudy` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3966](https://github.com/lucide-icons/lucide/pull/3966) - fix(github-actions): resolved spelling mistake in gh issue close command by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;4000](https://github.com/lucide-icons/lucide/pull/4000) - Update LICENSE by [@&#8203;alxgraphy](https://github.com/alxgraphy) in [#&#8203;4009](https://github.com/lucide-icons/lucide/pull/4009) - feat(packages): Added aria-hidden fallback for decorative icons to all packages by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3604](https://github.com/lucide-icons/lucide/pull/3604) - chore(deps): bump lodash from 4.17.21 to 4.17.23 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;4020](https://github.com/lucide-icons/lucide/pull/4020) - chore(deps): bump lodash-es from 4.17.21 to 4.17.23 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;4019](https://github.com/lucide-icons/lucide/pull/4019) - Suggest anchoring to a specific lucide version when using a cdn by [@&#8203;drago1520](https://github.com/drago1520) in [#&#8203;3727](https://github.com/lucide-icons/lucide/pull/3727) - feat(docs): upgraded backers block by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;4014](https://github.com/lucide-icons/lucide/pull/4014) - fix(site): hide native search input clear "X" icon by [@&#8203;epifaniofrancisco](https://github.com/epifaniofrancisco) in [#&#8203;3933](https://github.com/lucide-icons/lucide/pull/3933) - feat(icons): added `printer-x` icon by [@&#8203;lt25106](https://github.com/lt25106) in [#&#8203;3941](https://github.com/lucide-icons/lucide/pull/3941) #### New Contributors - [@&#8203;dcxo](https://github.com/dcxo) made their first contribution in [#&#8203;3876](https://github.com/lucide-icons/lucide/pull/3876) - [@&#8203;midesweb](https://github.com/midesweb) made their first contribution in [#&#8203;3948](https://github.com/lucide-icons/lucide/pull/3948) - [@&#8203;alxgraphy](https://github.com/alxgraphy) made their first contribution in [#&#8203;4009](https://github.com/lucide-icons/lucide/pull/4009) - [@&#8203;drago1520](https://github.com/drago1520) made their first contribution in [#&#8203;3727](https://github.com/lucide-icons/lucide/pull/3727) - [@&#8203;lt25106](https://github.com/lt25106) made their first contribution in [#&#8203;3941](https://github.com/lucide-icons/lucide/pull/3941) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.562.0...0.563.0> ### [`v0.562.0`](https://github.com/lucide-icons/lucide/releases/tag/0.562.0): Version 0.562.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.561.0...0.562.0) #### What's Changed - fix(icons): changed `paint-bucket` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3880](https://github.com/lucide-icons/lucide/pull/3880) - fix(site): Fix and unify color-picker font-size by [@&#8203;taimar](https://github.com/taimar) in [#&#8203;3889](https://github.com/lucide-icons/lucide/pull/3889) - fix(react-native-web): only add className prop to parent Icon component by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3892](https://github.com/lucide-icons/lucide/pull/3892) - fix(lucide-react-native): remove icons namespace export to enable tree-shaking by [@&#8203;jtomaszewski](https://github.com/jtomaszewski) in [#&#8203;3868](https://github.com/lucide-icons/lucide/pull/3868) - feat(icons): added `toolbox` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3871](https://github.com/lucide-icons/lucide/pull/3871) #### New Contributors - [@&#8203;taimar](https://github.com/taimar) made their first contribution in [#&#8203;3889](https://github.com/lucide-icons/lucide/pull/3889) - [@&#8203;jtomaszewski](https://github.com/jtomaszewski) made their first contribution in [#&#8203;3868](https://github.com/lucide-icons/lucide/pull/3868) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.561.0...0.562.0> ### [`v0.561.0`](https://github.com/lucide-icons/lucide/releases/tag/0.561.0): Version 0.561.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.560.0...0.561.0) #### What's Changed - fix(site): Small adjustments color picker and add clear button search bar by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3851](https://github.com/lucide-icons/lucide/pull/3851) - feat(icons): added `stone` icon by [@&#8203;Alportan](https://github.com/Alportan) in [#&#8203;3850](https://github.com/lucide-icons/lucide/pull/3850) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.560.0...0.561.0> ### [`v0.560.0`](https://github.com/lucide-icons/lucide/releases/tag/0.560.0): Version 0.560.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.559.0...0.560.0) #### What's Changed - feat(icons): added `cannabis-off` icon by [@&#8203;NickVeles](https://github.com/NickVeles) in [#&#8203;3748](https://github.com/lucide-icons/lucide/pull/3748) #### New Contributors - [@&#8203;NickVeles](https://github.com/NickVeles) made their first contribution in [#&#8203;3748](https://github.com/lucide-icons/lucide/pull/3748) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.559.0...0.560.0> ### [`v0.559.0`](https://github.com/lucide-icons/lucide/releases/tag/0.559.0): Version 0.559.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.558.0...0.559.0) #### What's Changed - feat(icons): added `fishing-hook` icon by [@&#8203;7ender](https://github.com/7ender) in [#&#8203;3837](https://github.com/lucide-icons/lucide/pull/3837) #### New Contributors - [@&#8203;7ender](https://github.com/7ender) made their first contribution in [#&#8203;3837](https://github.com/lucide-icons/lucide/pull/3837) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.558.0...0.559.0> ### [`v0.558.0`](https://github.com/lucide-icons/lucide/releases/tag/0.558.0): Version 0.558.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.557.0...0.558.0) #### What's Changed - feat(icons): added `hd` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;2958](https://github.com/lucide-icons/lucide/pull/2958) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.557.0...0.558.0> ### [`v0.557.0`](https://github.com/lucide-icons/lucide/releases/tag/0.557.0): Version 0.557.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.556.0...0.557.0) #### What's Changed - fix(github/workflows/ci): fixes linting issues by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3858](https://github.com/lucide-icons/lucide/pull/3858) - fix(icons): changed `memory-stick` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3017](https://github.com/lucide-icons/lucide/pull/3017) - fix(icons): changed `microchip` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3018](https://github.com/lucide-icons/lucide/pull/3018) - chore(repo): Update Node version and overal cleanup by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3861](https://github.com/lucide-icons/lucide/pull/3861) - fix(icons): changed `paint-bucket` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3865](https://github.com/lucide-icons/lucide/pull/3865) - fix(icons): changed `brush-cleaning` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3863](https://github.com/lucide-icons/lucide/pull/3863) - fix(icons): Swap `thumbs-up` `thumbs-down` paths to fix fill issue by [@&#8203;theianjones](https://github.com/theianjones) in [#&#8203;3873](https://github.com/lucide-icons/lucide/pull/3873) - fix(icons): changed `tickets` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3859](https://github.com/lucide-icons/lucide/pull/3859) - feat(icons): added `layers-plus` icon by [@&#8203;juanisidoro](https://github.com/juanisidoro) in [#&#8203;3367](https://github.com/lucide-icons/lucide/pull/3367) - docs(dev): Fix code sample for vanilla JS by [@&#8203;wavebeem](https://github.com/wavebeem) in [#&#8203;3836](https://github.com/lucide-icons/lucide/pull/3836) - feat(icons): add `search-error` icon by [@&#8203;Veatec22](https://github.com/Veatec22) in [#&#8203;3292](https://github.com/lucide-icons/lucide/pull/3292) - feat(icons): Add `cloud-sync` and `cloud-backup` by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3466](https://github.com/lucide-icons/lucide/pull/3466) - feat(icons): added `circle-pile` icon by [@&#8203;nathan-de-pachtere](https://github.com/nathan-de-pachtere) in [#&#8203;3681](https://github.com/lucide-icons/lucide/pull/3681) - feat(icons): added `balloon` icon by [@&#8203;peteruithoven](https://github.com/peteruithoven) in [#&#8203;2519](https://github.com/lucide-icons/lucide/pull/2519) #### New Contributors - [@&#8203;theianjones](https://github.com/theianjones) made their first contribution in [#&#8203;3873](https://github.com/lucide-icons/lucide/pull/3873) - [@&#8203;juanisidoro](https://github.com/juanisidoro) made their first contribution in [#&#8203;3367](https://github.com/lucide-icons/lucide/pull/3367) - [@&#8203;wavebeem](https://github.com/wavebeem) made their first contribution in [#&#8203;3836](https://github.com/lucide-icons/lucide/pull/3836) - [@&#8203;Veatec22](https://github.com/Veatec22) made their first contribution in [#&#8203;3292](https://github.com/lucide-icons/lucide/pull/3292) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.556.0...0.557.0> ### [`v0.556.0`](https://github.com/lucide-icons/lucide/releases/tag/0.556.0): Version 0.556.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.555.0...0.556.0) #### What's Changed - feat(icon): add `book-search` icon ([#&#8203;3573](https://github.com/lucide-icons/lucide/issues/3573)) by [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) in [#&#8203;3580](https://github.com/lucide-icons/lucide/pull/3580) - chore(dependencies): Update dependencies by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3809](https://github.com/lucide-icons/lucide/pull/3809) - ci(workflows): Enable trusted publishing in release by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3808](https://github.com/lucide-icons/lucide/pull/3808) - feat(icons): added `scooter` icon by [@&#8203;Ahmed-Dghaies](https://github.com/Ahmed-Dghaies) in [#&#8203;3818](https://github.com/lucide-icons/lucide/pull/3818) - fix(icons): changed `plug` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3841](https://github.com/lucide-icons/lucide/pull/3841) - fix(icons): changed `thermometer-sun` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3773](https://github.com/lucide-icons/lucide/pull/3773) - fix(icons): Shrink square-scissors icons to match optical volume by [@&#8203;eden881](https://github.com/eden881) in [#&#8203;3603](https://github.com/lucide-icons/lucide/pull/3603) - feat(preview-comment): add symmetry preview by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3823](https://github.com/lucide-icons/lucide/pull/3823) - feat(icons): added `estimated-weight` icon by [@&#8203;nathan-de-pachtere](https://github.com/nathan-de-pachtere) in [#&#8203;3822](https://github.com/lucide-icons/lucide/pull/3822) - fix(icons): changed `flashlight` icons by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3843](https://github.com/lucide-icons/lucide/pull/3843) - fix(icons): changed `bubbles` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3774](https://github.com/lucide-icons/lucide/pull/3774) - feat(site): add brand stop words to icon search by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3824](https://github.com/lucide-icons/lucide/pull/3824) - feat(icons): added `van` icon by [@&#8203;Ahmed-Dghaies](https://github.com/Ahmed-Dghaies) in [#&#8203;3821](https://github.com/lucide-icons/lucide/pull/3821) #### New Contributors - [@&#8203;Muhammad-Aqib-Bashir](https://github.com/Muhammad-Aqib-Bashir) made their first contribution in [#&#8203;3580](https://github.com/lucide-icons/lucide/pull/3580) - [@&#8203;Ahmed-Dghaies](https://github.com/Ahmed-Dghaies) made their first contribution in [#&#8203;3818](https://github.com/lucide-icons/lucide/pull/3818) - [@&#8203;eden881](https://github.com/eden881) made their first contribution in [#&#8203;3603](https://github.com/lucide-icons/lucide/pull/3603) - [@&#8203;nathan-de-pachtere](https://github.com/nathan-de-pachtere) made their first contribution in [#&#8203;3822](https://github.com/lucide-icons/lucide/pull/3822) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.555.0...0.556.0> ### [`v0.555.0`](https://github.com/lucide-icons/lucide/releases/tag/0.555.0): Version 0.555.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.554.0...0.555.0) #### What's Changed - fix(icons): changed `calendars` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3795](https://github.com/lucide-icons/lucide/pull/3795) - fix(docs): correct package name and description for Flutter and Lustre package ([#&#8203;3701](https://github.com/lucide-icons/lucide/issues/3701)) by [@&#8203;epifaniofrancisco](https://github.com/epifaniofrancisco) in [#&#8203;3703](https://github.com/lucide-icons/lucide/pull/3703) - feat(angular): Angular V21 Support by [@&#8203;JeevanMahesha](https://github.com/JeevanMahesha) in [#&#8203;3807](https://github.com/lucide-icons/lucide/pull/3807) - chore(metadata): Adjust navigation category by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3461](https://github.com/lucide-icons/lucide/pull/3461) - feat(icons): Add `waves-arrow-up` and `waves-arrow-down` by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3463](https://github.com/lucide-icons/lucide/pull/3463) - fix(icons): changed `scale` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3800](https://github.com/lucide-icons/lucide/pull/3800) - feat(icons): added `form` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3558](https://github.com/lucide-icons/lucide/pull/3558) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.554.0...0.555.0> ### [`v0.554.0`](https://github.com/lucide-icons/lucide/releases/tag/0.554.0): Version 0.554.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.553.0...0.554.0) #### What's Changed - fix(icons): Rename fingerprint icon to fingerprint-pattern by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3767](https://github.com/lucide-icons/lucide/pull/3767) - feat(docs): added lucide-rails third-party package by [@&#8203;theiereman](https://github.com/theiereman) in [#&#8203;3769](https://github.com/lucide-icons/lucide/pull/3769) - fix(icons): changed `ampersand` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3771](https://github.com/lucide-icons/lucide/pull/3771) - fix(icons): changed `folder-git-2` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3790](https://github.com/lucide-icons/lucide/pull/3790) - fix(icons): update `anchor` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;2523](https://github.com/lucide-icons/lucide/pull/2523) - feat(icons): added `calendars` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3788](https://github.com/lucide-icons/lucide/pull/3788) #### Breaking change For `lucide-react` and `lucide-solid`, imports for `Fingerprint` icon are changed to `FingerprintPattern`. ##### Lucide React ```diff - import { Fingerprint } from "lucide-react"; + import { FingerprintPattern } from "lucide-react"; ``` ##### Lucide Solid ```diff - import { Fingerprint } from "lucide/solid"; + import { FingerprintPattern } from "lucide/solid"; // Or - import Fingerprint from "lucide/solid/icons/fingerprint"; + import FingerprintPattern from "lucide/solid/icons/fingerprint-pattern"; ``` #### New Contributors - [@&#8203;theiereman](https://github.com/theiereman) made their first contribution in [#&#8203;3769](https://github.com/lucide-icons/lucide/pull/3769) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.553.0...0.554.0> ### [`v0.553.0`](https://github.com/lucide-icons/lucide/releases/tag/0.553.0): Version 0.553.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.552.0...0.553.0) #### What's Changed - feat(icons): added `mouse-pointer-2-off` icon by [@&#8203;domingasp](https://github.com/domingasp) in [#&#8203;3570](https://github.com/lucide-icons/lucide/pull/3570) - fix(icons): changed `ruler-dimension-line` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3433](https://github.com/lucide-icons/lucide/pull/3433) - feat(docs): add keyboard shortcut for search by [@&#8203;dzonatan](https://github.com/dzonatan) in [#&#8203;3718](https://github.com/lucide-icons/lucide/pull/3718) - fix(lucide-preact): handle `className` prop by [@&#8203;ocavue](https://github.com/ocavue) in [#&#8203;3751](https://github.com/lucide-icons/lucide/pull/3751) - feat(icons): added chess pieces by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;1945](https://github.com/lucide-icons/lucide/pull/1945) #### New Contributors - [@&#8203;domingasp](https://github.com/domingasp) made their first contribution in [#&#8203;3570](https://github.com/lucide-icons/lucide/pull/3570) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.552.0...0.553.0> ### [`v0.552.0`](https://github.com/lucide-icons/lucide/releases/tag/0.552.0): Version 0.552.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.551.0...0.552.0) #### What's Changed - fix(icons/file): arcified folds by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3587](https://github.com/lucide-icons/lucide/pull/3587) - feat(icons): added `solar-panel` icon by [@&#8203;UsamaKhan](https://github.com/UsamaKhan) in [#&#8203;2780](https://github.com/lucide-icons/lucide/pull/2780) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.551.0...0.552.0> ### [`v0.551.0`](https://github.com/lucide-icons/lucide/releases/tag/0.551.0): Version 0.551.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.550.0...0.551.0) #### What's Changed - feat(icons): added `clock-check` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2402](https://github.com/lucide-icons/lucide/pull/2402) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.550.0...0.551.0> ### [`v0.550.0`](https://github.com/lucide-icons/lucide/releases/tag/0.550.0): Version 0.550.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.549.0...0.550.0) #### What's Changed - feat(icons): added `helicopter` icon by [@&#8203;liloudreams](https://github.com/liloudreams) in [#&#8203;2760](https://github.com/lucide-icons/lucide/pull/2760) #### New Contributors - [@&#8203;liloudreams](https://github.com/liloudreams) made their first contribution in [#&#8203;2760](https://github.com/lucide-icons/lucide/pull/2760) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.549.0...0.550.0> ### [`v0.549.0`](https://github.com/lucide-icons/lucide/releases/tag/0.549.0): Version 0.549.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.548.0...0.549.0) #### What's Changed - fix(docs): Replace `pnpm install` with `pnpm add` across documentation. by [@&#8203;josch87](https://github.com/josch87) in [#&#8203;3735](https://github.com/lucide-icons/lucide/pull/3735) - feat(docs): add new package for Go by [@&#8203;kaugesaar](https://github.com/kaugesaar) in [#&#8203;3736](https://github.com/lucide-icons/lucide/pull/3736) - feat(icons): added `git-branch-minus` icon by [@&#8203;joris-gallot](https://github.com/joris-gallot) in [#&#8203;3586](https://github.com/lucide-icons/lucide/pull/3586) #### New Contributors - [@&#8203;josch87](https://github.com/josch87) made their first contribution in [#&#8203;3735](https://github.com/lucide-icons/lucide/pull/3735) - [@&#8203;kaugesaar](https://github.com/kaugesaar) made their first contribution in [#&#8203;3736](https://github.com/lucide-icons/lucide/pull/3736) - [@&#8203;joris-gallot](https://github.com/joris-gallot) made their first contribution in [#&#8203;3586](https://github.com/lucide-icons/lucide/pull/3586) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.548.0...0.549.0> ### [`v0.548.0`](https://github.com/lucide-icons/lucide/releases/tag/0.548.0): Version 0.548.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.547.0...0.548.0) #### What's Changed - feat(docs): add new package for Slint by [@&#8203;cnlancehu](https://github.com/cnlancehu) in [#&#8203;3698](https://github.com/lucide-icons/lucide/pull/3698) - docs(site): add introductions for packages in documentation by [@&#8203;mattheskaiser](https://github.com/mattheskaiser) in [#&#8203;3643](https://github.com/lucide-icons/lucide/pull/3643) - Fix default prop by [@&#8203;ericfennis](https://github.com/ericfennis) in [#&#8203;3730](https://github.com/lucide-icons/lucide/pull/3730) - feat(icons): added `gamepad-directional` icon by [@&#8203;felipeajzanetti](https://github.com/felipeajzanetti) in [#&#8203;3693](https://github.com/lucide-icons/lucide/pull/3693) #### New Contributors - [@&#8203;cnlancehu](https://github.com/cnlancehu) made their first contribution in [#&#8203;3698](https://github.com/lucide-icons/lucide/pull/3698) - [@&#8203;mattheskaiser](https://github.com/mattheskaiser) made their first contribution in [#&#8203;3643](https://github.com/lucide-icons/lucide/pull/3643) - [@&#8203;felipeajzanetti](https://github.com/felipeajzanetti) made their first contribution in [#&#8203;3693](https://github.com/lucide-icons/lucide/pull/3693) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.547.0...0.548.0> ### [`v0.547.0`](https://github.com/lucide-icons/lucide/releases/tag/0.547.0): Version 0.547.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.546.0...0.547.0) #### What's Changed - fix(docs): update brand logo statement link in github action by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3630](https://github.com/lucide-icons/lucide/pull/3630) - chore(deps): bump astro from 5.5.2 to 5.14.4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3683](https://github.com/lucide-icons/lucide/pull/3683) - fix(packages/lucide): replace elements inside `<template>` ([#&#8203;2635](https://github.com/lucide-icons/lucide/issues/2635)) by [@&#8203;KhalidAlansary](https://github.com/KhalidAlansary) in [#&#8203;3576](https://github.com/lucide-icons/lucide/pull/3576) - feat(icons): added `birdhouse` icon by [@&#8203;hieu-onefold](https://github.com/hieu-onefold) in [#&#8203;3378](https://github.com/lucide-icons/lucide/pull/3378) #### New Contributors - [@&#8203;KhalidAlansary](https://github.com/KhalidAlansary) made their first contribution in [#&#8203;3576](https://github.com/lucide-icons/lucide/pull/3576) - [@&#8203;hieu-onefold](https://github.com/hieu-onefold) made their first contribution in [#&#8203;3378](https://github.com/lucide-icons/lucide/pull/3378) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.546.0...0.547.0> ### [`v0.546.0`](https://github.com/lucide-icons/lucide/releases/tag/0.546.0): Version 0.546.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.545.0...0.546.0) #### What's Changed - fix(icons): changed `receipt-text` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3553](https://github.com/lucide-icons/lucide/pull/3553) - fix(docs): removed duplicate text in intro text by [@&#8203;nielsswinkels](https://github.com/nielsswinkels) in [#&#8203;3673](https://github.com/lucide-icons/lucide/pull/3673) - feat(icons): add VS Code `squircle` base shape snippet by [@&#8203;danielbayley](https://github.com/danielbayley) in [#&#8203;3674](https://github.com/lucide-icons/lucide/pull/3674) - fix(icons): changed `sword` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3421](https://github.com/lucide-icons/lucide/pull/3421) - feat(icons): added `monitor-cloud` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3037](https://github.com/lucide-icons/lucide/pull/3037) #### New Contributors - [@&#8203;nielsswinkels](https://github.com/nielsswinkels) made their first contribution in [#&#8203;3673](https://github.com/lucide-icons/lucide/pull/3673) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.545.0...0.546.0> ### [`v0.545.0`](https://github.com/lucide-icons/lucide/releases/tag/0.545.0): Version 0.545.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.544.0...0.545.0) #### What's Changed - fix(icons): changed `flame` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3600](https://github.com/lucide-icons/lucide/pull/3600) - fix(icons): arcified `square-m` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3549](https://github.com/lucide-icons/lucide/pull/3549) - chore(deps-dev): bump vite from 6.3.5 to 6.3.6 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3611](https://github.com/lucide-icons/lucide/pull/3611) - fix(icons): changed `combine` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3200](https://github.com/lucide-icons/lucide/pull/3200) - fix(icons): changed `building-2` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3509](https://github.com/lucide-icons/lucide/pull/3509) - chore(deps): bump devalue from 5.1.1 to 5.3.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3638](https://github.com/lucide-icons/lucide/pull/3638) - feat(icons): Add `motorbike` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3371](https://github.com/lucide-icons/lucide/pull/3371) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.544.0...0.545.0> ### [`v0.544.0`](https://github.com/lucide-icons/lucide/releases/tag/0.544.0): Version 0.544.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.543.0...0.544.0) #### What's Changed - docs: update lucide-static documentation about raw string imports by [@&#8203;pascalduez](https://github.com/pascalduez) in [#&#8203;3524](https://github.com/lucide-icons/lucide/pull/3524) - feat(icons): added `ev-charger` icon by [@&#8203;UsamaKhan](https://github.com/UsamaKhan) in [#&#8203;2781](https://github.com/lucide-icons/lucide/pull/2781) #### New Contributors - [@&#8203;pascalduez](https://github.com/pascalduez) made their first contribution in [#&#8203;3524](https://github.com/lucide-icons/lucide/pull/3524) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.543.0...0.544.0> ### [`v0.543.0`](https://github.com/lucide-icons/lucide/releases/tag/0.543.0): Version 0.543.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.542.0...0.543.0) #### What's Changed - feat(preview-comment): put x-ray at top if there are more than 7 changed icons to prevent them from being cut of by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3589](https://github.com/lucide-icons/lucide/pull/3589) - fix(icons): changed `church` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;2971](https://github.com/lucide-icons/lucide/pull/2971) - chore(metadata): Added tags to `messages-square` by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3529](https://github.com/lucide-icons/lucide/pull/3529) - fix(icons): Optimise `bug` icons by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3574](https://github.com/lucide-icons/lucide/pull/3574) - fix(icons): changed list/text & derived icons by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3568](https://github.com/lucide-icons/lucide/pull/3568) - fix(icons): changed `panel-top-bottom-dashed` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3584](https://github.com/lucide-icons/lucide/pull/3584) - fix(icons): changed `message-square-quote` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3550](https://github.com/lucide-icons/lucide/pull/3550) - fix(meta): added tag to `ship` metadata by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3559](https://github.com/lucide-icons/lucide/pull/3559) - fix(meta): add tags to `id-card-lanyard` metadata by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3534](https://github.com/lucide-icons/lucide/pull/3534) - fix(icons): changed `calendar-cog` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3583](https://github.com/lucide-icons/lucide/pull/3583) - chore(deps): bump astro from 5.5.2 to 5.13.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3564](https://github.com/lucide-icons/lucide/pull/3564) - feat(packages): add new package for flutter by [@&#8203;vqh2602](https://github.com/vqh2602) in [#&#8203;3536](https://github.com/lucide-icons/lucide/pull/3536) - feat(icons): added `house-heart` icon by [@&#8203;danielbayley](https://github.com/danielbayley) in [#&#8203;3239](https://github.com/lucide-icons/lucide/pull/3239) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.542.0...0.543.0> ### [`v0.542.0`](https://github.com/lucide-icons/lucide/releases/tag/0.542.0): Version 0.542.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.541.0...0.542.0) #### What's Changed - feat(docs): add MDN Web Docs & Nuxt to showcase by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3590](https://github.com/lucide-icons/lucide/pull/3590) - feat(icons): added `list-chevrons-down-up` icon by [@&#8203;juliankellydesign](https://github.com/juliankellydesign) in [#&#8203;3492](https://github.com/lucide-icons/lucide/pull/3492) #### New Contributors - [@&#8203;juliankellydesign](https://github.com/juliankellydesign) made their first contribution in [#&#8203;3492](https://github.com/lucide-icons/lucide/pull/3492) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.541.0...0.542.0> ### [`v0.541.0`](https://github.com/lucide-icons/lucide/releases/tag/0.541.0): Version 0.541.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.540.0...0.541.0) #### What's Changed - feat(packages/lucide): added support for providing a custom root element by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3543](https://github.com/lucide-icons/lucide/pull/3543) - fix(icons): optimized `chrome` icon & renamed to `chromium` by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3572](https://github.com/lucide-icons/lucide/pull/3572) - fix(icons): changed `wallpaper` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3566](https://github.com/lucide-icons/lucide/pull/3566) - fix(icons): optimized `cog` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3548](https://github.com/lucide-icons/lucide/pull/3548) - fix(icons): changed `building` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3510](https://github.com/lucide-icons/lucide/pull/3510) - feat(dpi-preview): add previous version for easier comparison by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3532](https://github.com/lucide-icons/lucide/pull/3532) - feat(icons): added 'panel-dashed' variants + update tags on existing icons by [@&#8203;irvineacosta](https://github.com/irvineacosta) in [#&#8203;3500](https://github.com/lucide-icons/lucide/pull/3500) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.540.0...0.541.0> ### [`v0.540.0`](https://github.com/lucide-icons/lucide/releases/tag/0.540.0): Version 0.540.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.539.0...0.540.0) #### What's Changed - fix(license): add full text of Feather license by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3530](https://github.com/lucide-icons/lucide/pull/3530) - fix(icons): changed `umbrella` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3490](https://github.com/lucide-icons/lucide/pull/3490) - docs(site): added official statement on brand logos in Lucide by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3541](https://github.com/lucide-icons/lucide/pull/3541) - fix(icons): changed `camera` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3539](https://github.com/lucide-icons/lucide/pull/3539) - feat(icons): added `rose` icon by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;1972](https://github.com/lucide-icons/lucide/pull/1972) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.539.0...0.540.0> ### [`v0.539.0`](https://github.com/lucide-icons/lucide/releases/tag/0.539.0): Version 0.539.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.538.0...0.539.0) #### What's Changed - feat(icons): added `brick-wall-shield` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3476](https://github.com/lucide-icons/lucide/pull/3476) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.538.0...0.539.0> ### [`v0.538.0`](https://github.com/lucide-icons/lucide/releases/tag/0.538.0): Version 0.538.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.537.0...0.538.0) #### What's Changed - fix(icons): changed `apple` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3505](https://github.com/lucide-icons/lucide/pull/3505) - fix(icons): changed `store` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3501](https://github.com/lucide-icons/lucide/pull/3501) - fix(icons): changed `mic-off` icon by [@&#8203;lieonlion](https://github.com/lieonlion) in [#&#8203;2823](https://github.com/lucide-icons/lucide/pull/2823) - chore(deps): bump astro from 5.5.2 to 5.12.8 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;3523](https://github.com/lucide-icons/lucide/pull/3523) - fix(icons): deprecate rail-symbol by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;2862](https://github.com/lucide-icons/lucide/pull/2862) - feat(icons): added `kayak` icon by [@&#8203;jpjacobpadilla](https://github.com/jpjacobpadilla) in [#&#8203;3054](https://github.com/lucide-icons/lucide/pull/3054) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.537.0...0.538.0> ### [`v0.537.0`](https://github.com/lucide-icons/lucide/releases/tag/0.537.0): Version 0.537.0 [Compare Source](https://github.com/lucide-icons/lucide/compare/0.536.0...0.537.0) #### What's Changed - chore(metadata): Add tags to `x` icon by [@&#8203;jamiemlaw](https://github.com/jamiemlaw) in [#&#8203;3341](https://github.com/lucide-icons/lucide/pull/3341) - docs: add rule against war/violence related imagery by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3506](https://github.com/lucide-icons/lucide/pull/3506) - fix(icons): changed `spade` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3502](https://github.com/lucide-icons/lucide/pull/3502) - fix(icons): changed `school` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;2968](https://github.com/lucide-icons/lucide/pull/2968) - fix(site): fixes icon style customiser by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3511](https://github.com/lucide-icons/lucide/pull/3511) - fix(docs): fixed array length error in diff endpoint by [@&#8203;jguddas](https://github.com/jguddas) in [#&#8203;3498](https://github.com/lucide-icons/lucide/pull/3498) - feat(icons): added `circle-star` icon by [@&#8203;karsa-mistmere](https://github.com/karsa-mistmere) in [#&#8203;3507](https://github.com/lucide-icons/lucide/pull/3507) **Full Changelog**: <https://github.com/lucide-icons/lucide/compare/0.536.0...0.537.0> </details> <details> <summary>facebook/react (react)</summary> ### [`v19.2.4`](https://github.com/facebook/react/releases/tag/v19.2.4): 19.2.4 (January 26th, 2026) [Compare Source](https://github.com/facebook/react/compare/v19.2.3...v19.2.4) ##### React Server Components - Add more DoS mitigations to Server Actions, and harden Server Components ([#&#8203;35632](https://github.com/facebook/react/pull/35632) by [@&#8203;gnoff](https://github.com/gnoff), [@&#8203;lubieowoce](https://github.com/lubieowoce), [@&#8203;sebmarkbage](https://github.com/sebmarkbage), [@&#8203;unstubbable](https://github.com/unstubbable)) ### [`v19.2.3`](https://github.com/facebook/react/releases/tag/v19.2.3): 19.2.3 (December 11th, 2025) [Compare Source](https://github.com/facebook/react/compare/v19.2.2...v19.2.3) ##### React Server Components - Add extra loop protection to React Server Functions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;35351](https://github.com/facebook/react/pull/35351)) ### [`v19.2.2`](https://github.com/facebook/react/releases/tag/v19.2.2): 19.2.2 (December 11th, 2025) [Compare Source](https://github.com/facebook/react/compare/v19.2.1...v19.2.2) ##### React Server Components - Move `react-server-dom-webpack/*.unbundled` to private `react-server-dom-unbundled` ([@&#8203;eps1lon](https://github.com/eps1lon) [#&#8203;35290](https://github.com/facebook/react/pull/35290)) - Patch Promise cycles and toString on Server Functions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage), [@&#8203;unstubbable](https://github.com/unstubbable) [#&#8203;35289](https://github.com/facebook/react/pull/35289), [#&#8203;35345](https://github.com/facebook/react/pull/35345)) ### [`v19.2.1`](https://github.com/facebook/react/blob/HEAD/CHANGELOG.md#1921-Dec-3-2025) [Compare Source](https://github.com/facebook/react/compare/v19.2.0...v19.2.1) ##### React Server Components - Bring React Server Component fixes to Server Actions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;35277](https://github.com/facebook/react/pull/35277)) ### [`v19.2.0`](https://github.com/facebook/react/blob/HEAD/CHANGELOG.md#1920-October-1st-2025) [Compare Source](https://github.com/facebook/react/compare/v19.1.5...v19.2.0) Below is a list of all new features, APIs, and bug fixes. Read the [React 19.2 release post](https://react.dev/blog/2025/10/01/react-19-2) for more information. ##### New React Features - [`<Activity>`](https://react.dev/reference/react/Activity): A new API to hide and restore the UI and internal state of its children. - [`useEffectEvent`](https://react.dev/reference/react/useEffectEvent) is a React Hook that lets you extract non-reactive logic into an [Effect Event](https://react.dev/learn/separating-events-from-effects#declaring-an-effect-event). - [`cacheSignal`](https://react.dev/reference/react/cacheSignal) (for RSCs) lets your know when the `cache()` lifetime is over. - [React Performance tracks](https://react.dev/reference/dev-tools/react-performance-tracks) appear on the Performance panel’s timeline in your browser developer tools ##### New React DOM Features - Added resume APIs for partial pre-rendering with Web Streams: - [`resume`](https://react.dev/reference/react-dom/server/resume): to resume a prerender to a stream. - [`resumeAndPrerender`](https://react.dev/reference/react-dom/static/resumeAndPrerender): to resume a prerender to HTML. - Added resume APIs for partial pre-rendering with Node Streams: - [`resumeToPipeableStream`](https://react.dev/reference/react-dom/server/resumeToPipeableStream): to resume a prerender to a stream. - [`resumeAndPrerenderToNodeStream`](https://react.dev/reference/react-dom/static/resumeAndPrerenderToNodeStream): to resume a prerender to HTML. - Updated [`prerender`](https://react.dev/reference/react-dom/static/prerender) APIs to return a `postponed` state that can be passed to the `resume` APIs. ##### Notable changes - React DOM now batches suspense boundary reveals, matching the behavior of client side rendering. This change is especially noticeable when animating the reveal of Suspense boundaries e.g. with the upcoming `<ViewTransition>` Component. React will batch as much reveals as possible before the first paint while trying to hit popular first-contentful paint metrics. - Add Node Web Streams (`prerender`, `renderToReadableStream`) to server-side-rendering APIs for Node.js - Use underscore instead of `:` IDs generated by useId ##### All Changes ##### React - `<Activity />` was developed over many years, starting before `ClassComponent.setState` ([@&#8203;acdlite](https://github.com/acdlite) [@&#8203;sebmarkbage](https://github.com/sebmarkbage) and many others) - Stringify context as "SomeContext" instead of "SomeContext.Provider" ([@&#8203;kassens](https://github.com/kassens) [#&#8203;33507](https://github.com/facebook/react/pull/33507)) - Include stack of cause of React instrumentation errors with `%o` placeholder ([@&#8203;eps1lon](https://github.com/eps1lon) [#&#8203;34198](https://github.com/facebook/react/pull/34198)) - Fix infinite `useDeferredValue` loop in popstate event ([@&#8203;acdlite](https://github.com/acdlite) [#&#8203;32821](https://github.com/facebook/react/pull/32821)) - Fix a bug when an initial value was passed to `useDeferredValue` ([@&#8203;acdlite](https://github.com/acdlite) [#&#8203;34376](https://github.com/facebook/react/pull/34376)) - Fix a crash when submitting forms with Client Actions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;33055](https://github.com/facebook/react/pull/33055)) - Hide/unhide the content of dehydrated suspense boundaries if they resuspend ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;32900](https://github.com/facebook/react/pull/32900)) - Avoid stack overflow on wide trees during Hot Reload ([@&#8203;sophiebits](https://github.com/sophiebits) [#&#8203;34145](https://github.com/facebook/react/pull/34145)) - Improve Owner and Component stacks in various places ([@&#8203;sebmarkbage](https://github.com/sebmarkbage), [@&#8203;eps1lon](https://github.com/eps1lon): [#&#8203;33629](https://github.com/facebook/react/pull/33629), [#&#8203;33724](https://github.com/facebook/react/pull/33724), [#&#8203;32735](https://github.com/facebook/react/pull/32735), [#&#8203;33723](https://github.com/facebook/react/pull/33723)) - Add `cacheSignal` ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;33557](https://github.com/facebook/react/pull/33557)) ##### React DOM - Block on Suspensey Fonts during reveal of server-side-rendered content ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;33342](https://github.com/facebook/react/pull/33342)) - Use underscore instead of `:` for IDs generated by `useId` ([@&#8203;sebmarkbage](https://github.com/sebmarkbage), [@&#8203;eps1lon](https://github.com/eps1lon): [#&#8203;32001](https://github.com/facebook/react/pull/32001), [#&#8203;33342](https://github.com/facebook/react/pull/33342)[#&#8203;33099](https://github.com/facebook/react/pull/33099), [#&#8203;33422](https://github.com/facebook/react/pull/33422)) - Stop warning when ARIA 1.3 attributes are used ([@&#8203;Abdul-Omira](https://github.com/Abdul-Omira) [#&#8203;34264](https://github.com/facebook/react/pull/34264)) - Allow `nonce` to be used on hoistable styles ([@&#8203;Andarist](https://github.com/Andarist) [#&#8203;32461](https://github.com/facebook/react/pull/32461)) - Warn for using a React owned node as a Container if it also has text content ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;32774](https://github.com/facebook/react/pull/32774)) - s/HTML/text for for error messages if text hydration mismatches ([@&#8203;rickhanlonii](https://github.com/rickhanlonii) [#&#8203;32763](https://github.com/facebook/react/pull/32763)) - Fix a bug with `React.use` inside `React.lazy`-ed Component ([@&#8203;hi-ogawa](https://github.com/hi-ogawa) [#&#8203;33941](https://github.com/facebook/react/pull/33941)) - Enable the `progressiveChunkSize` option for server-side-rendering APIs ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;33027](https://github.com/facebook/react/pull/33027)) - Fix a bug with deeply nested Suspense inside Suspense fallback when server-side-rendering ([@&#8203;gnoff](https://github.com/gnoff) [#&#8203;33467](https://github.com/facebook/react/pull/33467)) - Avoid hanging when suspending after aborting while rendering ([@&#8203;gnoff](https://github.com/gnoff) [#&#8203;34192](https://github.com/facebook/react/pull/34192)) - Add Node Web Streams to server-side-rendering APIs for Node.js ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;33475](https://github.com/facebook/react/pull/33475)) ##### React Server Components - Preload `<img>` and `<link>` using hints before they're rendered ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;34604](https://github.com/facebook/react/pull/34604)) - Log error if production elements are rendered during development ([@&#8203;eps1lon](https://github.com/eps1lon) [#&#8203;34189](https://github.com/facebook/react/pull/34189)) - Fix a bug when returning a Temporary reference (e.g. a Client Reference) from Server Functions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;34084](https://github.com/facebook/react/pull/34084), [@&#8203;denk0403](https://github.com/denk0403) [#&#8203;33761](https://github.com/facebook/react/pull/33761)) - Pass line/column to `filterStackFrame` ([@&#8203;eps1lon](https://github.com/eps1lon) [#&#8203;33707](https://github.com/facebook/react/pull/33707)) - Support Async Modules in Turbopack Server References ([@&#8203;lubieowoce](https://github.com/lubieowoce) [#&#8203;34531](https://github.com/facebook/react/pull/34531)) - Add support for .mjs file extension in Webpack ([@&#8203;jennyscript](https://github.com/jennyscript) [#&#8203;33028](https://github.com/facebook/react/pull/33028)) - Fix a wrong missing key warning ([@&#8203;unstubbable](https://github.com/unstubbable) [#&#8203;34350](https://github.com/facebook/react/pull/34350)) - Make console log resolve in predictable order ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;33665](https://github.com/facebook/react/pull/33665)) ##### React Reconciler - [createContainer](https://github.com/facebook/react/blob/v19.2.0/packages/react-reconciler/src/ReactFiberReconciler.js#L255-L261) and [createHydrationContainer](https://github.com/facebook/react/blob/v19.2.0/packages/react-reconciler/src/ReactFiberReconciler.js#L305-L312) had their parameter order adjusted after `on*` handlers to account for upcoming experimental APIs ### [`v19.1.5`](https://github.com/facebook/react/releases/tag/v19.1.5): 19.1.5 (January 26th, 2026) [Compare Source](https://github.com/facebook/react/compare/v19.1.4...v19.1.5) ##### React Server Components - Add more DoS mitigations to Server Actions, and harden Server Components ([#&#8203;35632](https://github.com/facebook/react/pull/35632) by [@&#8203;gnoff](https://github.com/gnoff), [@&#8203;lubieowoce](https://github.com/lubieowoce), [@&#8203;sebmarkbage](https://github.com/sebmarkbage), [@&#8203;unstubbable](https://github.com/unstubbable)) ### [`v19.1.4`](https://github.com/facebook/react/releases/tag/v19.1.4): 19.1.4 (December 11th, 2025) [Compare Source](https://github.com/facebook/react/compare/v19.1.3...v19.1.4) ##### React Server Components - Add extra loop protection to React Server Functions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;35351](https://github.com/facebook/react/pull/35351)) ### [`v19.1.3`](https://github.com/facebook/react/releases/tag/v19.1.3): 19.1.3 (December 11th, 2025) [Compare Source](https://github.com/facebook/react/compare/v19.1.2...v19.1.3) ##### React Server Components - Move `react-server-dom-webpack/*.unbundled` to private `react-server-dom-unbundled` ([@&#8203;eps1lon](https://github.com/eps1lon) [#&#8203;35290](https://github.com/facebook/react/pull/35290)) - Patch Promise cycles and toString on Server Functions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage), [@&#8203;unstubbable](https://github.com/unstubbable) [#&#8203;35289](https://github.com/facebook/react/pull/35289), [#&#8203;35345](https://github.com/facebook/react/pull/35345)) ### [`v19.1.2`](https://github.com/facebook/react/blob/HEAD/CHANGELOG.md#1912-Dec-3-2025) [Compare Source](https://github.com/facebook/react/compare/v19.1.1...v19.1.2) ##### React Server Components - Bring React Server Component fixes to Server Actions ([@&#8203;sebmarkbage](https://github.com/sebmarkbage) [#&#8203;35277](https://github.com/facebook/react/pull/35277)) </details> <details> <summary>remix-run/react-router (react-router)</summary> ### [`v7.13.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#7131) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.13.0...react-router@7.13.1) ##### Patch Changes - fix null reference exception in bad codepath leading to invalid route tree comparisons ([#&#8203;14780](https://github.com/remix-run/react-router/pull/14780)) - fix: clear timeout when turbo-stream encoding completes ([#&#8203;14810](https://github.com/remix-run/react-router/pull/14810)) - Improve error message when Origin header is invalid ([#&#8203;14743](https://github.com/remix-run/react-router/pull/14743)) - Fix matchPath optional params matching without a "/" separator. ([#&#8203;14689](https://github.com/remix-run/react-router/pull/14689)) - matchPath("/users/:id?", "/usersblah") now returns null. - matchPath("/test\_route/:part?", "/test\_route\_more") now returns null. - add RSC unstable\_getRequest ([#&#8203;14758](https://github.com/remix-run/react-router/pull/14758)) - Fix `HydrateFallback` rendering during initial lazy route discovery with matching splat route ([#&#8203;14740](https://github.com/remix-run/react-router/pull/14740)) - \[UNSTABLE] Add support for `<Link unstable_mask>` in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. ([#&#8203;14716](https://github.com/remix-run/react-router/pull/14716)) ```tsx // routes/gallery.tsx export function clientLoader({ request }: Route.LoaderArgs) { let sp = new URL(request.url).searchParams; return { images: getImages(), // When the router location has the image param, load the modal data modalImage: sp.has("image") ? getImage(sp.get("image")!) : null, }; } export default function Gallery({ loaderData }: Route.ComponentProps) { return ( <> <GalleryGrid> {loaderData.images.map((image) => ( <Link key={image.id} {/* Navigate the router to /galley?image=N */}} to={`/gallery?image=${image.id}`} {/* But display /images/N in the URL bar */}} unstable_mask={`/images/${image.id}`} > <img src={image.url} alt={image.alt} /> </Link> ))} </GalleryGrid> {/* When the modal data exists, display the modal */} {data.modalImage ? ( <dialog open> <img src={data.modalImage.url} alt={data.modalImage.alt} /> </dialog> ) : null} </> ); } ``` Notes: - The masked location, if present, will be available on `useLocation().unstable_mask` so you can detect whether you are currently masked or not. - Masked URLs only work for SPA use cases, and will be removed from `history.state` during SSR. - This provides a first-class API to mask URLs in Data Mode to achieve the same behavior you could do in Declarative Mode via [manual `backgroundLocation` management](https://github.com/remix-run/react-router/tree/main/examples/modal). - RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 ([#&#8203;14755](https://github.com/remix-run/react-router/pull/14755)) - Preserve query parameters and hash on manifest version mismatch reload ([#&#8203;14813](https://github.com/remix-run/react-router/pull/14813)) ### [`v7.13.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#7130) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.12.0...react-router@7.13.0) ##### Minor Changes - Add `crossOrigin` prop to `Links` component ([#&#8203;14687](https://github.com/remix-run/react-router/pull/14687)) ##### Patch Changes - Fix double slash normalization for useNavigate colon urls ([#&#8203;14718](https://github.com/remix-run/react-router/pull/14718)) - Update failed origin checks to return a 400 status instead of a 500 ([#&#8203;14737](https://github.com/remix-run/react-router/pull/14737)) - Bugfix [#&#8203;14666](https://github.com/remix-run/react-router/issues/14666): Inline criticalCss is missing nonce ([#&#8203;14691](https://github.com/remix-run/react-router/pull/14691)) - Loosen `allowedActionOrigins` glob check so `**` matches all domains ([#&#8203;14722](https://github.com/remix-run/react-router/pull/14722)) ### [`v7.12.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#7120) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.11.0...react-router@7.12.0) ##### Minor Changes - Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the `react-router.config.ts` config `allowedActionOrigins` field. ([#&#8203;14708](https://github.com/remix-run/react-router/pull/14708)) ##### Patch Changes - Fix `generatePath` when used with suffixed params (i.e., "/books/:id.json") ([#&#8203;14269](https://github.com/remix-run/react-router/pull/14269)) - Export `UNSAFE_createMemoryHistory` and `UNSAFE_createHashHistory` alongside `UNSAFE_createBrowserHistory` for consistency. These are not intended to be used for new apps but intended to help apps usiong `unstable_HistoryRouter` migrate from v6->v7 so they can adopt the newer APIs. ([#&#8203;14663](https://github.com/remix-run/react-router/pull/14663)) - Escape HTML in scroll restoration keys ([#&#8203;14705](https://github.com/remix-run/react-router/pull/14705)) - Validate redirect locations ([#&#8203;14706](https://github.com/remix-run/react-router/pull/14706)) - \[UNSTABLE] Pass `<Scripts nonce>` value through to the underlying `importmap` `script` tag when using `future.unstable_subResourceIntegrity` ([#&#8203;14675](https://github.com/remix-run/react-router/pull/14675)) - \[UNSTABLE] Add a new `future.unstable_trailingSlashAwareDataRequests` flag to provide consistent behavior of `request.pathname` inside `middleware`, `loader`, and `action` functions on document and data requests when a trailing slash is present in the browser URL. ([#&#8203;14644](https://github.com/remix-run/react-router/pull/14644)) Currently, your HTTP and `request` pathnames would be as follows for `/a/b/c` and `/a/b/c/` | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | | **Document** | `/a/b/c` | `/a/b/c` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ----------------- | ------------------------ | | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ⚠️ | With this flag enabled, these pathnames will be made consistent though a new `_.data` format for client-side `.data` requests: | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | | **Document** | `/a/b/c` | `/a/b/c` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ------------------ | ------------------------ | | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | | **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ | This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic. Enabling this flag also changes the format of client side `.data` requests from `/_root.data` to `/_.data` when navigating to `/` to align with the new format. This does not impact the `request` pathname which is still `/` in all cases. - Preserve `clientLoader.hydrate=true` when using `<HydratedRouter unstable_instrumentations>` ([#&#8203;14674](https://github.com/remix-run/react-router/pull/14674)) ### [`v7.11.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#7110) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.10.1...react-router@7.11.0) ##### Minor Changes - Stabilize `<HydratedRouter onError>`/`<RouterProvider onError>` ([#&#8203;14546](https://github.com/remix-run/react-router/pull/14546)) ##### Patch Changes - add support for throwing redirect Response's at RSC render time ([#&#8203;14596](https://github.com/remix-run/react-router/pull/14596)) - Support for throwing `data()` and Response from server component render phase. Response body is not serialized as async work is not allowed as error encoding phase. If you wish to transmit data to the boundary, throw `data()` instead. ([#&#8203;14632](https://github.com/remix-run/react-router/pull/14632)) - Fix `unstable_useTransitions` prop on `<Router>` component to permit omission for backewards compatibility ([#&#8203;14646](https://github.com/remix-run/react-router/pull/14646)) - `routeRSCServerRequest` replace `fetchServer` with `serverResponse` ([#&#8203;14597](https://github.com/remix-run/react-router/pull/14597)) - \[UNSTABLE] Add a new `unstable_defaultShouldRevalidate` flag to various APIs to allow opt-ing out of standard revalidation behaviors. ([#&#8203;14542](https://github.com/remix-run/react-router/pull/14542)) If active routes include a `shouldRevalidate` function, then your value will be passed as `defaultShouldRevalidate` in those function so that the route always has the final revalidation determination. - `<Form method="post" unstable_defaultShouldRevalidate={false}>` - `submit(data, { method: "post", unstable_defaultShouldRevalidate: false })` - `<fetcher.Form method="post" unstable_defaultShouldRevalidate={false}>` - `fetcher.submit(data, { method: "post", unstable_defaultShouldRevalidate: false })` This is also available on non-submission APIs that may trigger revalidations due to changing search params: - `<Link to="/" unstable_defaultShouldRevalidate={false}>` - `navigate("/?foo=bar", { unstable_defaultShouldRevalidate: false })` - `setSearchParams(params, { unstable_defaultShouldRevalidate: false })` - Allow redirects to be returned from client side middleware ([#&#8203;14598](https://github.com/remix-run/react-router/pull/14598)) - Handle `dataStrategy` implementations that return insufficient result sets by adding errors for routes without any available result ([#&#8203;14627](https://github.com/remix-run/react-router/pull/14627)) ### [`v7.10.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#7101) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.10.0...react-router@7.10.1) ##### Patch Changes - Update the `useOptimistic` stub we provide for React 18 users to use a stable setter function to avoid potential `useEffect` loops - specifically when using `<Link viewTransition>` ([#&#8203;14628](https://github.com/remix-run/react-router/pull/14628)) ### [`v7.10.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#7100) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.6...react-router@7.10.0) ##### Minor Changes - Stabilize `fetcher.reset()` ([#&#8203;14545](https://github.com/remix-run/react-router/pull/14545)) - ⚠️ This is a breaking change if you have begun using `fetcher.unstable_reset()` - Stabilize the `dataStrategy` `match.shouldRevalidateArgs`/`match.shouldCallHandler()` APIs. ([#&#8203;14592](https://github.com/remix-run/react-router/pull/14592)) - The `match.shouldLoad` API is now marked deprecated in favor of these more powerful alternatives - If you're using this API in a custom `dataStrategy` today, you can swap to the new API at your convenience: ```tsx // Before const matchesToLoad = matches.filter((m) => m.shouldLoad); // After const matchesToLoad = matches.filter((m) => m.shouldCallHandler()); ``` - `match.shouldRevalidateArgs` is the argument that will be passed to the route `shouldRevaliate` function - Combined with the parameter accepted by `match.shouldCallHandler`, you can define a custom revalidation behavior for your `dataStrategy`: ```tsx const matchesToLoad = matches.filter((m) => { const defaultShouldRevalidate = customRevalidationBehavior( match.shouldRevalidateArgs, ); return m.shouldCallHandler(defaultShouldRevalidate); // The argument here will override the internal `defaultShouldRevalidate` value }); ``` ##### Patch Changes - Fix a Framework Mode bug where the `defaultShouldRevalidate` parameter to `shouldRevalidate` would not be correct after `action` returned a 4xx/5xx response (`true` when it should have been `false`) ([#&#8203;14592](https://github.com/remix-run/react-router/pull/14592)) - If your `shouldRevalidate` function relied on that parameter, you may have seen unintended revalidations - Fix `fetcher.submit` failing with plain objects containing a `tagName` property ([#&#8203;14534](https://github.com/remix-run/react-router/pull/14534)) - \[UNSTABLE] Add `unstable_pattern` to the parameters for client side `unstable_onError`, refactor how it's called by `RouterProvider` to avoid potential strict mode issues ([#&#8203;14573](https://github.com/remix-run/react-router/pull/14573)) - Add new `unstable_useTransitions` flag to routers to give users control over the usage of [`React.startTransition`](https://react.dev/reference/react/startTransition) and [`React.useOptimistic`](https://react.dev/reference/react/useOptimistic). ([#&#8203;14524](https://github.com/remix-run/react-router/pull/14524)) - Framework Mode + Data Mode: - `<HydratedRouter unstable_transition>`/`<RouterProvider unstable_transition>` - When left unset (current default behavior) - Router state updates are wrapped in `React.startTransition` - ⚠️ This can lead to buggy behaviors if you are wrapping your own navigations/fetchers in `React.startTransition` - You should set the flag to `true` if you run into this scenario to get the enhanced `useOptimistic` behavior (requires React 19) - When set to `true` - Router state updates remain wrapped in `React.startTransition` (as they are without the flag) - `Link`/`Form` navigations will be wrapped in `React.startTransition` - A subset of router state info will be surfaced to the UI *during* navigations via `React.useOptimistic` (i.e., `useNavigation()`, `useFetchers()`, etc.) - ⚠️ This is a React 19 API so you must also be React 19 to opt into this flag for Framework/Data Mode - When set to `false` - The router will not leverage `React.startTransition` or `React.useOptimistic` on any navigations or state changes - Declarative Mode - `<BrowserRouter unstable_useTransitions>` - When left unset - Router state updates are wrapped in `React.startTransition` - When set to `true` - Router state updates remain wrapped in `React.startTransition` (as they are without the flag) - `Link`/`Form` navigations will be wrapped in `React.startTransition` - When set to `false` - the router will not leverage `React.startTransition` on any navigations or state changes - Fix the promise returned from `useNavigate` in Framework/Data Mode so that it properly tracks the duration of `popstate` navigations (i.e., `navigate(-1)`) ([#&#8203;14524](https://github.com/remix-run/react-router/pull/14524)) - Fix internal type error in useRoute types that surfaces when skipLibCheck is disabled ([#&#8203;14577](https://github.com/remix-run/react-router/pull/14577)) - Preserve `statusText` on the `ErrorResponse` instance when throwing `data()` from a route handler ([#&#8203;14555](https://github.com/remix-run/react-router/pull/14555)) - Optimize href() to avoid backtracking regex on splat ([#&#8203;14329](https://github.com/remix-run/react-router/pull/14329)) ### [`v7.9.6`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#796) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.5...react-router@7.9.6) ##### Patch Changes - \[UNSTABLE] Add `location`/`params` as arguments to client-side `unstable_onError` to permit enhanced error reporting. ([#&#8203;14509](https://github.com/remix-run/react-router/pull/14509)) ⚠️ This is a breaking change if you've already adopted `unstable_onError`. The second `errorInfo` parameter is now an object with `location` and `params`: ```tsx // Before function errorHandler(error: unknown, errorInfo?: React.errorInfo) { /*...*/ } // After function errorHandler( error: unknown, info: { location: Location; params: Params; errorInfo?: React.ErrorInfo; }, ) { /*...*/ } ``` - Properly handle ancestor thrown middleware errors before `next()` on fetcher submissions ([#&#8203;14517](https://github.com/remix-run/react-router/pull/14517)) - Fix issue with splat routes interfering with multiple calls to patchRoutesOnNavigation ([#&#8203;14487](https://github.com/remix-run/react-router/pull/14487)) - Normalize double-slashes in `resolvePath` ([#&#8203;14529](https://github.com/remix-run/react-router/pull/14529)) ### [`v7.9.5`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#795) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.4...react-router@7.9.5) ##### Patch Changes - Move RSCHydratedRouter and utils to `/dom` export. ([#&#8203;14457](https://github.com/remix-run/react-router/pull/14457)) - useRoute: return type-safe `handle` ([#&#8203;14462](https://github.com/remix-run/react-router/pull/14462)) For example: ```ts // app/routes/admin.tsx const handle = { hello: "world" }; ``` ```ts // app/routes/some-other-route.tsx export default function Component() { const admin = useRoute("routes/admin"); if (!admin) throw new Error("Not nested within 'routes/admin'"); console.log(admin.handle); // ^? { hello: string } } ``` - Ensure action handlers run for routes with middleware even if no loader is present ([#&#8203;14443](https://github.com/remix-run/react-router/pull/14443)) - Add `unstable_instrumentations` API to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches ([#&#8203;14412](https://github.com/remix-run/react-router/pull/14412)) - Framework Mode: - `entry.server.tsx`: `export const unstable_instrumentations = [...]` - `entry.client.tsx`: `<HydratedRouter unstable_instrumentations={[...]} />` - Data Mode - `createBrowserRouter(routes, { unstable_instrumentations: [...] })` This also adds a new `unstable_pattern` parameter to loaders/actions/middleware which contains the un-interpolated route pattern (i.e., `/blog/:slug`) which is useful for aggregating performance metrics by route ### [`v7.9.4`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#794) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.3...react-router@7.9.4) ##### Patch Changes - handle external redirects in from server actions ([#&#8203;14400](https://github.com/remix-run/react-router/pull/14400)) - New (unstable) `useRoute` hook for accessing data from specific routes ([#&#8203;14407](https://github.com/remix-run/react-router/pull/14407)) For example, let's say you have an `admin` route somewhere in your app and you want any child routes of `admin` to all have access to the `loaderData` and `actionData` from `admin.` ```tsx // app/routes/admin.tsx import { Outlet } from "react-router"; export const loader = () => ({ message: "Hello, loader!" }); export const action = () => ({ count: 1 }); export default function Component() { return ( <div> {/* ... */} <Outlet /> {/* ... */} </div> ); } ``` You might even want to create a reusable widget that all of the routes nested under `admin` could use: ```tsx import { unstable_useRoute as useRoute } from "react-router"; export function AdminWidget() { // How to get `message` and `count` from `admin` route? } ``` In framework mode, `useRoute` knows all your app's routes and gives you TS errors when invalid route IDs are passed in: ```tsx export function AdminWidget() { const admin = useRoute("routes/dmin"); // ^^^^^^^^^^^ } ``` `useRoute` returns `undefined` if the route is not part of the current page: ```tsx export function AdminWidget() { const admin = useRoute("routes/admin"); if (!admin) { throw new Error(`AdminWidget used outside of "routes/admin"`); } } ``` Note: the `root` route is the exception since it is guaranteed to be part of the current page. As a result, `useRoute` never returns `undefined` for `root`. `loaderData` and `actionData` are marked as optional since they could be accessed before the `action` is triggered or after the `loader` threw an error: ```tsx export function AdminWidget() { const admin = useRoute("routes/admin"); if (!admin) { throw new Error(`AdminWidget used outside of "routes/admin"`); } const { loaderData, actionData } = admin; console.log(loaderData); // ^? { message: string } | undefined console.log(actionData); // ^? { count: number } | undefined } ``` If instead of a specific route, you wanted access to the *current* route's `loaderData` and `actionData`, you can call `useRoute` without arguments: ```tsx export function AdminWidget() { const currentRoute = useRoute(); currentRoute.loaderData; currentRoute.actionData; } ``` This usage is equivalent to calling `useLoaderData` and `useActionData`, but consolidates all route data access into one hook: `useRoute`. Note: when calling `useRoute()` (without a route ID), TS has no way to know which route is the current route. As a result, `loaderData` and `actionData` are typed as `unknown`. If you want more type-safety, you can either narrow the type yourself with something like `zod` or you can refactor your app to pass down typed props to your `AdminWidget`: ```tsx export function AdminWidget({ message, count, }: { message: string; count: number; }) { /* ... */ } ``` ### [`v7.9.3`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#793) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.2...react-router@7.9.3) ##### Patch Changes - Do not try to use `turbo-stream` to decode CDN errors that never reached the server ([#&#8203;14385](https://github.com/remix-run/react-router/pull/14385)) - We used to do this but lost this check with the adoption of single fetch - Fix Data Mode regression causing a 404 during initial load in when `middleware` exists without any `loader` functions ([#&#8203;14393](https://github.com/remix-run/react-router/pull/14393)) ### [`v7.9.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#792) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.1...react-router@7.9.2) ##### Patch Changes - - Update client-side router to run client `middleware` on initial load even if no loaders exist ([#&#8203;14348](https://github.com/remix-run/react-router/pull/14348)) - Update `createRoutesStub` to run route middleware - You will need to set the `<RoutesStub future={{ v8_middleware: true }} />` flag to enable the proper `context` type - Update Lazy Route Discovery manifest requests to use a singular comma-separated `paths` query param instead of repeated `p` query params ([#&#8203;14321](https://github.com/remix-run/react-router/pull/14321)) - This is because Cloudflare has a hard limit of 100 URL search param key/value pairs when used as a key for caching purposes - If more that 100 paths were included, the cache key would be incomplete and could produce false-positive cache hits - \[UNSTABLE] Add `fetcher.unstable_reset()` API ([#&#8203;14206](https://github.com/remix-run/react-router/pull/14206)) - Made useOutlet element reference have stable identity in-between route chages ([#&#8203;13382](https://github.com/remix-run/react-router/pull/13382)) - feat: enable full transition support for the rsc router ([#&#8203;14362](https://github.com/remix-run/react-router/pull/14362)) - In RSC Data Mode, handle SSR'd client errors and re-try in the browser ([#&#8203;14342](https://github.com/remix-run/react-router/pull/14342)) - Support `middleware` prop on `<Route>` for usage with a data router via `createRoutesFromElements` ([#&#8203;14357](https://github.com/remix-run/react-router/pull/14357)) - Handle encoded question mark and hash characters in ancestor splat routes ([#&#8203;14249](https://github.com/remix-run/react-router/pull/14249)) - Fail gracefully on manifest version mismatch logic if `sessionStorage` access is blocked ([#&#8203;14335](https://github.com/remix-run/react-router/pull/14335)) ### [`v7.9.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#791) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.9.0...react-router@7.9.1) ##### Patch Changes - Fix internal `Future` interface naming from `middleware` -> `v8_middleware` ([#&#8203;14327](https://github.com/remix-run/react-router/pull/14327)) ### [`v7.9.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#790) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.8.2...react-router@7.9.0) ##### Minor Changes - Stabilize middleware and context APIs. ([#&#8203;14215](https://github.com/remix-run/react-router/pull/14215)) We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use: - [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider) - [`createContext`](https://reactrouter.com/api/utils/createContext) - `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option - `<HydratedRouter>` [`getContext`](https://reactrouter.com/api/framework-routers/HydratedRouter#getcontext) prop Please see the [Middleware Docs](https://reactrouter.com/how-to/middleware), the [Middleware RFC](https://github.com/remix-run/remix/discussions/7642), and the [Client-side Context RFC](https://github.com/remix-run/react-router/discussions/9856) for more information. ##### Patch Changes - Escape HTML in `meta()` JSON-LD content ([#&#8203;14316](https://github.com/remix-run/react-router/pull/14316)) - Add react-server Await component implementation ([#&#8203;14261](https://github.com/remix-run/react-router/pull/14261)) - In RSC Data Mode when using a custom basename, fix hydration errors for routes that only have client loaders ([#&#8203;14264](https://github.com/remix-run/react-router/pull/14264)) - Make `href` function available in a react-server context ([#&#8203;14262](https://github.com/remix-run/react-router/pull/14262)) - decode each time `getPayload()` is called to allow for "in-context" decoding and hoisting of contextual assets ([#&#8203;14248](https://github.com/remix-run/react-router/pull/14248)) - `href()` now correctly processes routes that have an extension after the parameter or are a single optional parameter. ([#&#8203;13797](https://github.com/remix-run/react-router/pull/13797)) ### [`v7.8.2`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#782) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.8.1...react-router@7.8.2) ##### Patch Changes - \[UNSTABLE] Remove Data Mode `future.unstable_middleware` flag from `createBrowserRouter` ([#&#8203;14213](https://github.com/remix-run/react-router/pull/14213)) - This is only needed as a Framework Mode flag because of the route modules and the `getLoadContext` type behavior change - In Data Mode, it's an opt-in feature because it's just a new property on a route object, so there's no behavior changes that necessitate a flag - \[UNSTABLE] Add `<RouterProvider unstable_onError>`/`<HydratedRouter unstable_onError>` prop for client side error reporting ([#&#8203;14162](https://github.com/remix-run/react-router/pull/14162)) - server action revalidation opt out via $SKIP\_REVALIDATION field ([#&#8203;14154](https://github.com/remix-run/react-router/pull/14154)) - Properly escape interpolated param values in `generatePath()` ([#&#8203;13530](https://github.com/remix-run/react-router/pull/13530)) - Maintain `ReadonlyMap` and `ReadonlySet` types in server response data. ([#&#8203;13092](https://github.com/remix-run/react-router/pull/13092)) - \[UNSTABLE] Delay serialization of `.data` redirects to 202 responses until after middleware chain ([#&#8203;14205](https://github.com/remix-run/react-router/pull/14205)) - Fix `TypeError` if you throw from `patchRoutesOnNavigation` when no partial matches exist ([#&#8203;14198](https://github.com/remix-run/react-router/pull/14198)) - Fix `basename` usage without a leading slash in data routers ([#&#8203;11671](https://github.com/remix-run/react-router/pull/11671)) - \[UNSTABLE] Update client middleware so it returns the data strategy results allowing for more advanced post-processing middleware ([#&#8203;14151](https://github.com/remix-run/react-router/pull/14151)) ### [`v7.8.1`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#781) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.8.0...react-router@7.8.1) ##### Patch Changes - Fix usage of optional path segments in nested routes defined using absolute paths ([#&#8203;14135](https://github.com/remix-run/react-router/pull/14135)) - Bubble client pre-next middleware error to the shallowest ancestor that needs to load, not strictly the shallowest ancestor with a loader ([#&#8203;14150](https://github.com/remix-run/react-router/pull/14150)) - Fix optional static segment matching in `matchPath` ([#&#8203;11813](https://github.com/remix-run/react-router/pull/11813)) - Fix prerendering when a `basename` is set with `ssr:false` ([#&#8203;13791](https://github.com/remix-run/react-router/pull/13791)) - Provide `isRouteErrorResponse` utility in `react-server` environments ([#&#8203;14166](https://github.com/remix-run/react-router/pull/14166)) - Propagate non-redirect Responses thrown from middleware to the error boundary on document/data requests ([#&#8203;14182](https://github.com/remix-run/react-router/pull/14182)) - Handle `meta` and `links` Route Exports in RSC Data Mode ([#&#8203;14136](https://github.com/remix-run/react-router/pull/14136)) - Properly convert returned/thrown `data()` values to `Response` instances via `Response.json()` in resource routes and middleware ([#&#8203;14159](https://github.com/remix-run/react-router/pull/14159), [#&#8203;14181](https://github.com/remix-run/react-router/pull/14181)) ### [`v7.8.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router/CHANGELOG.md#780) [Compare Source](https://github.com/remix-run/react-router/compare/react-router@7.7.1...react-router@7.8.0) ##### Minor Changes - Add `nonce` prop to `Links` & `PrefetchPageLinks` ([#&#8203;14048](https://github.com/remix-run/react-router/pull/14048)) - Add `loaderData` arguments/properties alongside existing `data` arguments/properties to provide consistency and clarity between `loaderData` and `actionData` across the board ([#&#8203;14047](https://github.com/remix-run/react-router/pull/14047)) - Updated types: `Route.MetaArgs`, `Route.MetaMatch`, `MetaArgs`, `MetaMatch`, `Route.ComponentProps.matches`, `UIMatch` - `@deprecated` warnings have been added to the existing `data` properties to point users to new `loaderData` properties, in preparation for removing the `data` properties in a future major release ##### Patch Changes - Prevent *"Did not find corresponding fetcher result"* console error when navigating during a `fetcher.submit` revalidation ([#&#8203;14114](https://github.com/remix-run/react-router/pull/14114)) - Bubble client-side middleware errors prior to `next` to the appropriate ancestor error boundary ([#&#8203;14138](https://github.com/remix-run/react-router/pull/14138)) - Switch Lazy Route Discovery manifest URL generation to usea standalone `URLSearchParams` instance instead of `URL.searchParams` to avoid a major performance bottleneck in Chrome ([#&#8203;14084](https://github.com/remix-run/react-router/pull/14084)) - Adjust internal RSC usage of `React.use` to avoid Webpack compilation errors when using React 18 ([#&#8203;14113](https://github.com/remix-run/react-router/pull/14113)) - Remove dependency on `@types/node` in TypeScript declaration files ([#&#8203;14059](https://github.com/remix-run/react-router/pull/14059)) - Fix types for `UIMatch` to reflect that the `loaderData`/`data` properties may be `undefined` ([#&#8203;12206](https://github.com/remix-run/react-router/pull/12206)) - When an `ErrorBoundary` is being rendered, not all active matches will have loader data available, since it may have been their `loader` that threw to trigger the boundary - The `UIMatch.data` type was not correctly handing this and would always reflect the presence of data, leading to the unexpected runtime errors when an `ErrorBoundary` was rendered - ⚠️ This may cause some type errors to show up in your code for unguarded `match.data` accesses - you should properly guard for `undefined` values in those scenarios. ```tsx // app/root.tsx export function loader() { someFunctionThatThrows(); // ❌ Throws an Error return { title: "My Title" }; } export function Layout({ children }: { children: React.ReactNode }) { let matches = useMatches(); let rootMatch = matches[0] as UIMatch<Awaited<ReturnType<typeof loader>>>; // ^ rootMatch.data is incorrectly typed here, so TypeScript does not // complain if you do the following which throws an error at runtime: let { title } = rootMatch.data; // 💥 return <html>...</html>; } ``` - \[UNSTABLE] Ensure resource route errors go through `handleError` w/middleware enabled ([#&#8203;14078](https://github.com/remix-run/react-router/pull/14078)) - \[UNSTABLE] Propagate returned Response from server middleware if next wasn't called ([#&#8203;14093](https://github.com/remix-run/react-router/pull/14093)) - \[UNSTABLE] Allow server middlewares to return `data()` values which will be converted into a `Response` ([#&#8203;14093](https://github.com/remix-run/react-router/pull/14093)) - \[UNSTABLE] Update middleware error handling so that the `next` function never throws and instead handles any middleware errors at the proper `ErrorBoundary` and returns the `Response` up through the ancestor `next` function ([#&#8203;14118](https://github.com/remix-run/react-router/pull/14118)) - \[UNSTABLE] When middleware is enabled, make the `context` parameter read-only (via `Readonly<unstable_RouterContextProvider>`) so that TypeScript will not allow you to write arbitrary fields to it in loaders, actions, or middleware. ([#&#8203;14097](https://github.com/remix-run/react-router/pull/14097)) - \[UNSTABLE] Rename and alter the signature/functionality of the `unstable_respond` API in `staticHandler.query`/`staticHandler.queryRoute` ([#&#8203;14103](https://github.com/remix-run/react-router/pull/14103)) - The API has been renamed to `unstable_generateMiddlewareResponse` for clarity - The main functional change is that instead of running the loaders/actions before calling `unstable_respond` and handing you the result, we now pass a `query`/`queryRoute` function as a parameter and you execute the loaders/actions inside your callback, giving you full access to pre-processing and error handling - The `query` version of the API now has a signature of `(query: (r: Request) => Promise<StaticHandlerContext | Response>) => Promise<Response>` - The `queryRoute` version of the API now has a signature of `(queryRoute: (r: Request) => Promise<Response>) => Promise<Response>` - This allows for more advanced usages such as running logic before/after calling `query` and direct error handling of errors thrown from query - ⚠️ This is a breaking change if you've adopted the `staticHandler` `unstable_respond` API ```tsx let response = await staticHandler.query(request, { requestContext: new unstable_RouterContextProvider(), async unstable_generateMiddlewareResponse(query) { try { // At this point we've run middleware top-down so we need to call the // handlers and generate the Response to bubble back up the middleware let result = await query(request); if (isResponse(result)) { return result; // Redirects, etc. } return await generateHtmlResponse(result); } catch (error: unknown) { return generateErrorResponse(error); } }, }); ``` - \[UNSTABLE] Convert internal middleware implementations to use the new `unstable_generateMiddlewareResponse` API ([#&#8203;14103](https://github.com/remix-run/react-router/pull/14103)) - \[UNSTABLE] Change `getLoadContext` signature (`type GetLoadContextFunction`) when `future.unstable_middleware` is enabled so that it returns an `unstable_RouterContextProvider` instance instead of a `Map` used to contruct the instance internally ([#&#8203;14097](https://github.com/remix-run/react-router/pull/14097)) - This also removes the `type unstable_InitialContext` export - ⚠️ This is a breaking change if you have adopted middleware and are using a custom server with a `getLoadContext` function - \[UNSTABLE] Run client middleware on client navigations even if no loaders exist ([#&#8203;14106](https://github.com/remix-run/react-router/pull/14106)) - \[UNSTABLE] Change the `unstable_getContext` signature on `RouterProvider`/`HydratedRouter`/`unstable_RSCHydratedRouter` so that it returns an `unstable_RouterContextProvider` instance instead of a `Map` used to contruct the instance internally ([#&#8203;14097](https://github.com/remix-run/react-router/pull/14097)) - ⚠️ This is a breaking change if you have adopted the `unstable_getContext` prop - \[UNSTABLE] proxy server action side-effect redirects from actions for document and callServer requests ([#&#8203;14131](https://github.com/remix-run/react-router/pull/14131)) - \[UNSTABLE] Fix RSC Data Mode issue where routes that return `false` from `shouldRevalidate` would be replaced by an `<Outlet />` ([#&#8203;14071](https://github.com/remix-run/react-router/pull/14071)) </details> <details> <summary>Wombosvideo/tw-animate-css (tw-animate-css)</summary> ### [`v1.4.0`](https://github.com/Wombosvideo/tw-animate-css/releases/tag/v1.4.0) [Compare Source](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.8...v1.4.0) #### Changelog [`902e37a`](https://github.com/Wombosvideo/tw-animate-css/commit/902e37a019ffd165ba078e0b3c02634526c54bf0): fix: remove support for prefix, add new export for prefixed version. Closes [#&#8203;58](https://github.com/Wombosvideo/tw-animate-css/issues/58). [`fab2a5b`](https://github.com/Wombosvideo/tw-animate-css/commit/fab2a5bf817605be1976e159976718a83489fc1c): chore: bump version to 1.4.0 and update dependencies [`c20dc32`](https://github.com/Wombosvideo/tw-animate-css/commit/c20dc32e2b532a8e74546879b4ce7d9ce89ba710): fix(build): make transform.ts accept two arguments #### ⚠️ BREAKING CHANGE ⚠️ Support for Tailwind CSS's prefix option was moved to `tw-animate-css/prefix` because it was breaking the `--spacing` function. Users requiring prefixes should replace their import: ```diff - import "tw-animate-css"; + import "tw-animate-css/prefix"; ``` *I do not plan to introduce breaking changes like this to non-major releases in the future. But because more people use spacing rather than prefixes, reverting the previous version's (obviously breaking) change seems reasonable.* ### [`v1.3.8`](https://github.com/Wombosvideo/tw-animate-css/releases/tag/v1.3.8) [Compare Source](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.7...v1.3.8) #### Changelog - [`b5ff23a`](https://github.com/Wombosvideo/tw-animate-css/commit/b5ff23a): fix: add support for global CSS variable prefix. Closes [#&#8203;48](https://github.com/Wombosvideo/tw-animate-css/issues/48) - [`03e5f12`](https://github.com/Wombosvideo/tw-animate-css/commit/03e5f12): feat: add support for ng-primitives height variables [#&#8203;56](https://github.com/Wombosvideo/tw-animate-css/issues/56) (thanks [@&#8203;immohammadjaved](https://github.com/immohammadjaved)) - [`b076cfb`](https://github.com/Wombosvideo/tw-animate-css/commit/b076cfb): docs: fix various issues in accordion and collapsible docs - [`9485e33`](https://github.com/Wombosvideo/tw-animate-css/commit/9485e33): chore: bump version to 1.3.8 and update dependencies #### ⚠️ BREAKING CHANGE ⚠️ Adding support for prefixes broke custom spacing. It is recommended that you skip this version if you do not use Tailwind CSS's prefix option, and use v1.4.0 instead. If you are actually using prefixes, you can use a special version supporting prefixes: ```diff - import "tw-animate-css"; /* Version with spacing support */ + import "tw-animate-css/prefix"; /* Version with prefix support */ ``` *I do not plan to fix the incompatibility between the spacing and prefix versions due to time constraints. Feel free to investigate and open a pull request if you manage to fix it.* ### [`v1.3.7`](https://github.com/Wombosvideo/tw-animate-css/releases/tag/v1.3.7) [Compare Source](https://github.com/Wombosvideo/tw-animate-css/compare/v1.3.6...v1.3.7) #### Changelog - [`80dbfcc`](https://github.com/Wombosvideo/tw-animate-css/commit/80dbfcc): feat: add utilities for blur transitions [#&#8203;54](https://github.com/Wombosvideo/tw-animate-css/issues/54) (thanks [@&#8203;coffeeispower](https://github.com/coffeeispower)) - [`dc294f9`](https://github.com/Wombosvideo/tw-animate-css/commit/dc294f9): docs: add upcoming changes warning - [`c640bb8`](https://github.com/Wombosvideo/tw-animate-css/commit/c640bb8): chore: update dependencies and package manager version - [`9e63e34`](https://github.com/Wombosvideo/tw-animate-css/commit/9e63e34): chore: bump version to 1.3.7 </details> <details> <summary>microsoft/TypeScript (typescript)</summary> ### [`v5.9.3`](https://github.com/microsoft/TypeScript/releases/tag/v5.9.3): TypeScript 5.9.3 [Compare Source](https://github.com/microsoft/TypeScript/compare/v5.9.2...v5.9.3) Note: this tag was recreated to point at the correct commit. The npm package contained the correct content. For release notes, check out the [release announcement](https://devblogs.microsoft.com/typescript/announcing-typescript-5-9/) - [fixed issues query for Typescript 5.9.0 (Beta)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.9.0%22+is%3Aclosed+). - [fixed issues query for Typescript 5.9.1 (RC)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.9.1%22+is%3Aclosed+). - *No specific changes for TypeScript 5.9.2 (Stable)* - [fixed issues query for Typescript 5.9.3 (Stable)](https://github.com/Microsoft/TypeScript/issues?utf8=%E2%9C%93\&q=milestone%3A%22TypeScript+5.9.3%22+is%3Aclosed+). Downloads are available on: - [npm](https://www.npmjs.com/package/typescript) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My40Ni4zIiwidXBkYXRlZEluVmVyIjoiNDMuNDYuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Renovate-Clanker added 1 commit 2026-03-01 13:01:45 +07:00
Renovate-Clanker scheduled this pull request to auto merge when all checks succeed 2026-03-01 13:01:46 +07:00
Renovate-Clanker merged commit 910381db5d into main 2026-03-01 13:01:47 +07:00
Renovate-Clanker deleted branch renovate/all-dependencies 2026-03-01 13:01:48 +07:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: bagas/porto#1