diff --git a/CHANGELOG.md b/CHANGELOG.md
index 19e802c8099..d83f90dc6d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,22 +13,24 @@ We manage release notes in this file instead of the paginated Github Releases Pa
Table of Contents
- [Remix Releases](#remix-releases)
+ - [v2.15.0-pre.0](#v2150-pre0)
+ - [Patch Changes](#patch-changes)
- [v2.14.0](#v2140)
- [Minor Changes](#minor-changes)
- - [Patch Changes](#patch-changes)
+ - [Patch Changes](#patch-changes-1)
- [Updated Dependencies](#updated-dependencies)
- [Changes by Package](#changes-by-package)
- [v2.13.1](#v2131)
- - [Patch Changes](#patch-changes-1)
+ - [Patch Changes](#patch-changes-2)
- [v2.13.0](#v2130)
- [What's Changed](#whats-changed)
- [Stabilized APIs](#stabilized-apis)
- [Minor Changes](#minor-changes-1)
- - [Patch Changes](#patch-changes-2)
+ - [Patch Changes](#patch-changes-3)
- [Updated Dependencies](#updated-dependencies-1)
- [Changes by Package](#changes-by-package-1)
- [v2.12.1](#v2121)
- - [Patch Changes](#patch-changes-3)
+ - [Patch Changes](#patch-changes-4)
- [Changes by Package](#changes-by-package-2)
- [v2.12.0](#v2120)
- [What's Changed](#whats-changed-1)
@@ -36,72 +38,72 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [Improved Single Fetch Type Safety (unstable)](#improved-single-fetch-type-safety-unstable)
- [Updates to Single Fetch Revalidation Behavior (unstable)](#updates-to-single-fetch-revalidation-behavior-unstable)
- [Minor Changes](#minor-changes-2)
- - [Patch Changes](#patch-changes-4)
+ - [Patch Changes](#patch-changes-5)
- [Updated Dependencies](#updated-dependencies-2)
- [Changes by Package](#changes-by-package-3)
- [v2.11.2](#v2112)
- - [Patch Changes](#patch-changes-5)
+ - [Patch Changes](#patch-changes-6)
- [Updated Dependencies](#updated-dependencies-3)
- [Changes by Package](#changes-by-package-4)
- [v2.11.1](#v2111)
- - [Patch Changes](#patch-changes-6)
+ - [Patch Changes](#patch-changes-7)
- [Changes by Package](#changes-by-package-5)
- [v2.11.0](#v2110)
- [What's Changed](#whats-changed-2)
- [Renamed `unstable_fogOfWar` future flag to `unstable_lazyRouteDiscovery` (unstable)](#renamed-unstable_fogofwar-future-flag-to-unstable_lazyroutediscovery-unstable)
- [Removed `response` stub in Single Fetch (unstable)](#removed-response-stub-in-single-fetch-unstable)
- [Minor Changes](#minor-changes-3)
- - [Patch Changes](#patch-changes-7)
+ - [Patch Changes](#patch-changes-8)
- [Updated Dependencies](#updated-dependencies-4)
- [Changes by Package](#changes-by-package-6)
- [v2.10.3](#v2103)
- - [Patch Changes](#patch-changes-8)
+ - [Patch Changes](#patch-changes-9)
- [Updated Dependencies](#updated-dependencies-5)
- [Changes by Package](#changes-by-package-7)
- [v2.10.2](#v2102)
- - [Patch Changes](#patch-changes-9)
+ - [Patch Changes](#patch-changes-10)
- [Changes by Package](#changes-by-package-8)
- [v2.10.1](#v2101)
- - [Patch Changes](#patch-changes-10)
+ - [Patch Changes](#patch-changes-11)
- [Updated Dependencies](#updated-dependencies-6)
- [Changes by Package](#changes-by-package-9)
- [v2.10.0](#v2100)
- [What's Changed](#whats-changed-3)
- [Lazy Route Discovery (a.k.a. "Fog of War")](#lazy-route-discovery-aka-fog-of-war)
- [Minor Changes](#minor-changes-4)
- - [Patch Changes](#patch-changes-11)
+ - [Patch Changes](#patch-changes-12)
- [Updated Dependencies](#updated-dependencies-7)
- [Changes by Package](#changes-by-package-10)
- [v2.9.2](#v292)
- [What's Changed](#whats-changed-4)
- [Updated Type-Safety for Single Fetch](#updated-type-safety-for-single-fetch)
- - [Patch Changes](#patch-changes-12)
+ - [Patch Changes](#patch-changes-13)
- [Updated Dependencies](#updated-dependencies-8)
- [Changes by Package](#changes-by-package-11)
- [v2.9.1](#v291)
- - [Patch Changes](#patch-changes-13)
+ - [Patch Changes](#patch-changes-14)
- [Changes by Package](#changes-by-package-12)
- [v2.9.0](#v290)
- [What's Changed](#whats-changed-5)
- [Single Fetch (unstable)](#single-fetch-unstable)
- [Undici](#undici)
- [Minor Changes](#minor-changes-5)
- - [Patch Changes](#patch-changes-14)
+ - [Patch Changes](#patch-changes-15)
- [Updated Dependencies](#updated-dependencies-9)
- [Changes by Package](#changes-by-package-13)
- [v2.8.1](#v281)
- - [Patch Changes](#patch-changes-15)
+ - [Patch Changes](#patch-changes-16)
- [Updated Dependencies](#updated-dependencies-10)
- [Changes by Package](#changes-by-package-14)
- [v2.8.0](#v280)
- [Minor Changes](#minor-changes-6)
- - [Patch Changes](#patch-changes-16)
+ - [Patch Changes](#patch-changes-17)
- [Updated Dependencies](#updated-dependencies-11)
- [Changes by Package](#changes-by-package-15)
- [2.7.2](#272)
- - [Patch Changes](#patch-changes-17)
- - [2.7.1](#271)
- [Patch Changes](#patch-changes-18)
+ - [2.7.1](#271)
+ - [Patch Changes](#patch-changes-19)
- [v2.7.0](#v270)
- [What's Changed](#whats-changed-6)
- [Stabilized Vite Plugin](#stabilized-vite-plugin)
@@ -109,18 +111,18 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [Basename support](#basename-support)
- [Cloudflare Proxy as a Vite Plugin](#cloudflare-proxy-as-a-vite-plugin)
- [Minor Changes](#minor-changes-7)
- - [Patch Changes](#patch-changes-19)
+ - [Patch Changes](#patch-changes-20)
- [Updated Dependencies](#updated-dependencies-12)
- [Changes by Package](#changes-by-package-16)
- [v2.6.0](#v260)
- [What's Changed](#whats-changed-7)
- [Unstable Vite Plugin updates](#unstable-vite-plugin-updates)
- [Minor Changes](#minor-changes-8)
- - [Patch Changes](#patch-changes-20)
+ - [Patch Changes](#patch-changes-21)
- [Updated Dependencies](#updated-dependencies-13)
- [Changes by Package](#changes-by-package-17)
- [v2.5.1](#v251)
- - [Patch Changes](#patch-changes-21)
+ - [Patch Changes](#patch-changes-22)
- [Updated Dependencies](#updated-dependencies-14)
- [Changes by Package](#changes-by-package-18)
- [v2.5.0](#v250)
@@ -128,11 +130,11 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [SPA Mode (unstable)](#spa-mode-unstable)
- [Server Bundles (unstable)](#server-bundles-unstable)
- [Minor Changes](#minor-changes-9)
- - [Patch Changes](#patch-changes-22)
+ - [Patch Changes](#patch-changes-23)
- [Updated Dependencies](#updated-dependencies-15)
- [Changes by Package](#changes-by-package-19)
- [v2.4.1](#v241)
- - [Patch Changes](#patch-changes-23)
+ - [Patch Changes](#patch-changes-24)
- [Updated Dependencies](#updated-dependencies-16)
- [Changes by Package](#changes-by-package-20)
- [v2.4.0](#v240)
@@ -141,11 +143,11 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [`future.v3_relativeSplatPath`](#futurev3_relativesplatpath)
- [Vite Updates (Unstable)](#vite-updates-unstable)
- [Minor Changes](#minor-changes-10)
- - [Patch Changes](#patch-changes-24)
+ - [Patch Changes](#patch-changes-25)
- [Updated Dependencies](#updated-dependencies-17)
- [Changes by Package](#changes-by-package-21)
- [v2.3.1](#v231)
- - [Patch Changes](#patch-changes-25)
+ - [Patch Changes](#patch-changes-26)
- [Updated Dependencies](#updated-dependencies-18)
- [Changes by Package](#changes-by-package-22)
- [v2.3.0](#v230)
@@ -153,7 +155,7 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [Stabilized `useBlocker`](#stabilized-useblocker)
- [`unstable_flushSync` API](#unstable_flushsync-api)
- [Minor Changes](#minor-changes-11)
- - [Patch Changes](#patch-changes-26)
+ - [Patch Changes](#patch-changes-27)
- [Updated Dependencies](#updated-dependencies-19)
- [Changes by Package](#changes-by-package-23)
- [v2.2.0](#v220)
@@ -162,7 +164,7 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [New Fetcher APIs](#new-fetcher-apis)
- [Persistence Future Flag](#persistence-future-flag)
- [Minor Changes](#minor-changes-12)
- - [Patch Changes](#patch-changes-27)
+ - [Patch Changes](#patch-changes-28)
- [Updated Dependencies](#updated-dependencies-20)
- [Changes by Package](#changes-by-package-24)
- [v2.1.0](#v210)
@@ -170,11 +172,11 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [View Transitions](#view-transitions)
- [Stable `createRemixStub`](#stable-createremixstub)
- [Minor Changes](#minor-changes-13)
- - [Patch Changes](#patch-changes-28)
+ - [Patch Changes](#patch-changes-29)
- [Updated Dependencies](#updated-dependencies-21)
- [Changes by Package](#changes-by-package-25)
- [v2.0.1](#v201)
- - [Patch Changes](#patch-changes-29)
+ - [Patch Changes](#patch-changes-30)
- [Changes by Package 🔗](#changes-by-package-)
- [v2.0.0](#v200)
- [Breaking Changes](#breaking-changes)
@@ -238,6 +240,23 @@ Date: YYYY-MM-DD
-->
+## v2.15.0-pre.0
+
+Date: 2025-11-19
+
+### Patch Changes
+
+- Stabilize the `future.v3_routeConfig` future flag, replacing `future.unstable_routeConfig`. This enables support for `routes.ts` to assist with the migration to React Router v7. ([#10236](https://github.com/remix-run/remix/pull/10236))
+
+ Note that if you had already enabled the `future.unstable_routeConfig` flag, your route config in `app/routes.ts` is no longer defined via the `routes` export and must now be defined via the default export.
+
+ ```diff
+ import { type RouteConfig } from "@remix-run/route-config";
+
+ -export const routes: RouteConfig = [];
+ +export default [] satisfies RouteConfig;
+ ```
+
## v2.14.0
Date: 2024-11-08
diff --git a/docs/start/future-flags.md b/docs/start/future-flags.md
index 025c1c5c04c..94d92badf22 100644
--- a/docs/start/future-flags.md
+++ b/docs/start/future-flags.md
@@ -511,7 +511,29 @@ function handleBrowserRequest(/* ... */) {
}
```
-## unstable_routeConfig
+## v3_lazyRouteDiscovery
+
+**Background**
+
+With this flag, Remix no longer sends the full route manifest up to the client on initial load. Instead, Remix only sends the server-rendered routes up in the manifest and then fetches the remaining routes as the user navigated around the application. Additional details are available in the [docs][lazy-route-discovery] and the [blog post][lazy-route-discovery-blog-post]
+
+👉 **Enable the Flag**
+
+```ts filename=vite.config.ts
+remix({
+ future: {
+ v3_lazyRouteDiscovery: true,
+ },
+});
+```
+
+**Update your Code**
+
+You shouldn't need to make any changes to your application code for this feature to work.
+
+You may find some usage for the new [``][discover-prop] API if you wish to disable eager route discovery on certain links.
+
+## v3_routeConfig
@@ -521,7 +543,7 @@ This flag requires the [Vite plugin][vite-plugin].
Config-based routing is the new default in React Router v7, configured via the `routes.ts` file in the app directory. Support for `routes.ts` and its related APIs in Remix are designed as a migration path to help minimize the number of changes required when moving your Remix project over to React Router v7. While some new packages have been introduced within the `@remix-run` scope, these new packages only exist to keep the code in `routes.ts` as similar as possible to the equivalent code for React Router v7.
-When the `unstable_routeConfig` future flag is enabled, Remix's built-in file system routing will be disabled and your project will opted into React Router v7's config-based routing. If you prefer to keep using Remix's file-based routing we cover how to enable it in `routes.ts` below.
+When the `v3_routeConfig` future flag is enabled, Remix's built-in file system routing will be disabled and your project will opted into React Router v7's config-based routing. To opt back in to file system routing, this can be explicitly configured within `routes.ts` as we'll cover below.
**Update your code**
@@ -532,7 +554,7 @@ To migrate Remix's file system routing and route config to the equivalent setup
```ts filename=vite.config.ts
remix({
future: {
- unstable_routeConfig: true,
+ v3_routeConfig: true,
},
});
```
@@ -556,7 +578,7 @@ touch app/routes.ts
```ts filename=app/routes.ts
import type { RouteConfig } from "@remix-run/route-config";
-export const routes: RouteConfig = [];
+export default [] satisfies RouteConfig;
```
This is a good way to check that your new `routes.ts` file is being picked up successfully. Your app should now be rendering a blank page since there aren't any routes defined yet.
@@ -575,7 +597,7 @@ This package matches the API of React Router v7's `@react-router/fs-routes`, mak
import { flatRoutes } from "@remix-run/fs-routes";
import type { RouteConfig } from "@remix-run/route-config";
-export const routes: RouteConfig = flatRoutes();
+export default flatRoutes() satisfies RouteConfig;
```
👉 **If you used the `routes` config option, add `@remix-run/routes-option-adapter` and use it in `routes.ts`**
@@ -601,9 +623,9 @@ import { type RouteConfig } from "@remix-run/route-config";
import { remixRoutesOptionAdapter } from "@remix-run/routes-option-adapter";
import { flatRoutes } from "remix-flat-routes";
-export const routes: RouteConfig = remixRoutesOptionAdapter(
- (defineRoutes) => flatRoutes("routes", defineRoutes)
-);
+export default remixRoutesOptionAdapter((defineRoutes) =>
+ flatRoutes("routes", defineRoutes)
+) satisfies RouteConfig;
```
Or, if you were using the `routes` option to define config-based routes:
@@ -613,18 +635,16 @@ import { flatRoutes } from "@remix-run/fs-routes";
import { type RouteConfig } from "@remix-run/route-config";
import { remixRoutesOptionAdapter } from "@remix-run/routes-option-adapter";
-export const routes: RouteConfig = remixRoutesOptionAdapter(
- (defineRoutes) => {
- return defineRoutes((route) => {
- route("/", "home/route.tsx", { index: true });
- route("about", "about/route.tsx");
- route("", "concerts/layout.tsx", () => {
- route("trending", "concerts/trending.tsx");
- route(":city", "concerts/city.tsx");
- });
+export default remixRoutesOptionAdapter((defineRoutes) => {
+ return defineRoutes((route) => {
+ route("/", "home/route.tsx", { index: true });
+ route("about", "about/route.tsx");
+ route("", "concerts/layout.tsx", () => {
+ route("trending", "concerts/trending.tsx");
+ route(":city", "concerts/city.tsx");
});
- }
-);
+ });
+}) satisfies RouteConfig;
```
If you're defining config-based routes in this way, you might want to consider migrating to the new route config API since it's more streamlined while still being very similar to the old API. For example, the routes above would look like this:
@@ -637,14 +657,14 @@ import {
index,
} from "@remix-run/route-config";
-export const routes: RouteConfig = [
+export default [
index("home/route.tsx"),
route("about", "about/route.tsx"),
layout("concerts/layout.tsx", [
route("trending", "concerts/trending.tsx"),
route(":city", "concerts/city.tsx"),
]),
-];
+] satisfies RouteConfig;
```
Note that if you need to mix and match different route config approaches, they can be merged together into a single array of routes. The `RouteConfig` type ensures that everything is still valid.
@@ -655,13 +675,13 @@ import type { RouteConfig } from "@remix-run/route-config";
import { route } from "@remix-run/route-config";
import { remixRoutesOptionAdapter } from "@remix-run/routes-option-adapter";
-export const routes: RouteConfig = [
+export default [
...(await flatRoutes({ rootDirectory: "fs-routes" })),
...(await remixRoutesOptionAdapter(/* ... */)),
route("/hello", "routes/hello.tsx"),
-];
+] satisfies RouteConfig;
```
## Deprecations
diff --git a/integration/helpers/vite-cloudflare-template/package.json b/integration/helpers/vite-cloudflare-template/package.json
index abc7e42f0d9..aa0e7e6a26d 100644
--- a/integration/helpers/vite-cloudflare-template/package.json
+++ b/integration/helpers/vite-cloudflare-template/package.json
@@ -11,9 +11,9 @@
"typecheck": "tsc"
},
"dependencies": {
- "@remix-run/cloudflare": "2.14.0",
- "@remix-run/cloudflare-pages": "2.14.0",
- "@remix-run/react": "2.14.0",
+ "@remix-run/cloudflare": "2.15.0",
+ "@remix-run/cloudflare-pages": "2.15.0",
+ "@remix-run/react": "2.15.0",
"isbot": "^4.1.0",
"miniflare": "^3.20231030.4",
"react": "^18.2.0",
diff --git a/integration/helpers/vite.ts b/integration/helpers/vite.ts
index c3095a9e6d4..cf6cc609dbf 100644
--- a/integration/helpers/vite.ts
+++ b/integration/helpers/vite.ts
@@ -43,7 +43,7 @@ export const viteConfig = {
export default {
${await viteConfig.server(args)}
plugins: [remix(${
- args.routeConfig ? "{ future: { unstable_routeConfig: true } }" : ""
+ args.routeConfig ? "{ future: { v3_routeConfig: true } }" : ""
})]
}
`;
diff --git a/integration/vite-fs-routes-test.ts b/integration/vite-fs-routes-test.ts
index 856c61ba5e3..207feca3622 100644
--- a/integration/vite-fs-routes-test.ts
+++ b/integration/vite-fs-routes-test.ts
@@ -24,7 +24,7 @@ test.describe("fs-routes", () => {
export default defineConfig({
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
})],
});
`,
@@ -33,7 +33,7 @@ test.describe("fs-routes", () => {
import { flatRoutes } from "@remix-run/fs-routes";
import { remixRoutesOptionAdapter } from "@remix-run/routes-option-adapter";
- export const routes: RouteConfig = [
+ export default [
...await flatRoutes({
rootDirectory: "fs-routes",
ignoredRouteFiles: ["**/ignored-route.*"],
@@ -46,7 +46,7 @@ test.describe("fs-routes", () => {
route("/routes/option/adapter/route", "routes-option-adapter-route.tsx")
});
})
- ];
+ ] satisfies RouteConfig;
`,
"app/root.tsx": js`
import { Links, Meta, Outlet, Scripts } from "@remix-run/react";
@@ -257,7 +257,7 @@ test.describe("emits warnings for route conflicts", async () => {
export default defineConfig({
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
})],
});
`,
@@ -265,9 +265,9 @@ test.describe("emits warnings for route conflicts", async () => {
import { type RouteConfig } from "@remix-run/route-config";
import { flatRoutes } from "@remix-run/fs-routes";
- export const routes: RouteConfig = flatRoutes({
+ export default flatRoutes({
rootDirectory: "fs-routes",
- });
+ }) satisfies RouteConfig;
`,
"fs-routes/_dashboard._index.tsx": js`
export default function () {
@@ -331,7 +331,7 @@ test.describe("", () => {
export default defineConfig({
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
})],
});
`,
@@ -339,9 +339,9 @@ test.describe("", () => {
import { type RouteConfig } from "@remix-run/route-config";
import { flatRoutes } from "@remix-run/fs-routes";
- export const routes: RouteConfig = flatRoutes({
+ export default flatRoutes({
rootDirectory: "fs-routes",
- });
+ }) satisfies RouteConfig;
`,
"app/fs-routes/_index/route.tsx": js``,
"app/fs-routes/_index/utils.ts": js``,
@@ -380,7 +380,7 @@ test.describe("pathless routes and route collisions", () => {
export default defineConfig({
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
})],
});
`,
@@ -388,9 +388,9 @@ test.describe("pathless routes and route collisions", () => {
import { type RouteConfig } from "@remix-run/route-config";
import { flatRoutes } from "@remix-run/fs-routes";
- export const routes: RouteConfig = flatRoutes({
+ export default flatRoutes({
rootDirectory: "fs-routes",
- });
+ }) satisfies RouteConfig;
`,
"app/root.tsx": js`
import { Link, Outlet, Scripts, useMatches } from "@remix-run/react";
diff --git a/integration/vite-route-config-test.ts b/integration/vite-route-config-test.ts
index f5f63d2c2fa..daf2e1a25be 100644
--- a/integration/vite-route-config-test.ts
+++ b/integration/vite-route-config-test.ts
@@ -43,7 +43,7 @@ test.describe("route config", () => {
export default {
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
})]
}
`,
@@ -64,12 +64,12 @@ test.describe("route config", () => {
export default {
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
routes: () => {},
})]
}
`,
- "app/routes.ts": `export const routes = [];`,
+ "app/routes.ts": `export default [];`,
});
let buildResult = viteBuild({ cwd });
expect(buildResult.status).toBe(1);
@@ -88,12 +88,12 @@ test.describe("route config", () => {
export default {
${await viteConfig.server({ port })}
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
routes: () => {},
})]
}
`,
- "app/routes.ts": `export const routes = [];`,
+ "app/routes.ts": `export default [];`,
});
let devError: Error | undefined;
try {
@@ -113,7 +113,7 @@ test.describe("route config", () => {
export default {
plugins: [remix({
- future: { unstable_routeConfig: true },
+ future: { v3_routeConfig: true },
})]
}
`,
@@ -161,9 +161,9 @@ test.describe("route config", () => {
"app/routes.ts": js`
import { type RouteConfig, index } from "@remix-run/route-config";
- export const routes: RouteConfig = [
+ export default [
index("test-route-1.tsx"),
- ];
+ ] satisfies RouteConfig;
`,
"app/test-route-1.tsx": `
export default function TestRoute1() {
@@ -220,14 +220,14 @@ test.describe("route config", () => {
port,
}),
"app/routes.ts": js`
- export { routes } from "./actual-routes";
+ export { default } from "./actual-routes";
`,
"app/actual-routes.ts": js`
import { type RouteConfig, index } from "@remix-run/route-config";
- export const routes: RouteConfig = [
+ export default [
index("test-route-1.tsx"),
- ];
+ ] satisfies RouteConfig;
`,
"app/test-route-1.tsx": `
export default function TestRoute1() {
@@ -286,9 +286,9 @@ test.describe("route config", () => {
"app/routes.ts": js`
import { type RouteConfig, index } from "@remix-run/route-config";
- export const routes: RouteConfig = [
+ export default [
index("test-route-1.tsx"),
- ];
+ ] satisfies RouteConfig;
`,
"app/test-route-1.tsx": `
export default function TestRoute1() {
@@ -354,9 +354,9 @@ test.describe("route config", () => {
import path from "node:path";
import { type RouteConfig, index } from "@remix-run/route-config";
- export const routes: RouteConfig = [
+ export default [
index(path.resolve(import.meta.dirname, "test-route.tsx")),
- ];
+ ] satisfies RouteConfig;
`,
"app/test-route.tsx": `
export default function TestRoute() {
diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md
index 8f0ee4ed477..c1341d12b65 100644
--- a/packages/create-remix/CHANGELOG.md
+++ b/packages/create-remix/CHANGELOG.md
@@ -1,4 +1,6 @@
-# create-remix
+# `create-remix`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json
index fc2cb53f8d9..2359321db55 100644
--- a/packages/create-remix/package.json
+++ b/packages/create-remix/package.json
@@ -1,6 +1,6 @@
{
"name": "create-remix",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Create a new Remix app",
"homepage": "https://remix.run",
"bugs": {
diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md
index c373e27b5f9..7a63b1253b4 100644
--- a/packages/remix-architect/CHANGELOG.md
+++ b/packages/remix-architect/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/architect
+# `@remix-run/architect`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/node@2.15.0`
## 2.14.0
diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json
index cf18f7e6745..f79b5c6ab40 100644
--- a/packages/remix-architect/package.json
+++ b/packages/remix-architect/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/architect",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Architect server request handler for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md
index d7fb9b400b1..bb8e8d47484 100644
--- a/packages/remix-cloudflare-pages/CHANGELOG.md
+++ b/packages/remix-cloudflare-pages/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/cloudflare-pages
+# `@remix-run/cloudflare-pages`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/cloudflare@2.15.0`
## 2.14.0
diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json
index 7b800235c99..02350eb90cf 100644
--- a/packages/remix-cloudflare-pages/package.json
+++ b/packages/remix-cloudflare-pages/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/cloudflare-pages",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Cloudflare Pages request handler for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md
index 2607bae15bc..af2d23f11cf 100644
--- a/packages/remix-cloudflare-workers/CHANGELOG.md
+++ b/packages/remix-cloudflare-workers/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/cloudflare-workers
+# `@remix-run/cloudflare-workers`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/cloudflare@2.15.0`
## 2.14.0
diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json
index ec028a97223..65502327175 100644
--- a/packages/remix-cloudflare-workers/package.json
+++ b/packages/remix-cloudflare-workers/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/cloudflare-workers",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Cloudflare worker request handler for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md
index ac1204dbd94..d5c4522b9b5 100644
--- a/packages/remix-cloudflare/CHANGELOG.md
+++ b/packages/remix-cloudflare/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/cloudflare
+# `@remix-run/cloudflare`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/server-runtime@2.15.0`
## 2.14.0
diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json
index d56d9d50692..5231899666e 100644
--- a/packages/remix-cloudflare/package.json
+++ b/packages/remix-cloudflare/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/cloudflare",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Cloudflare platform abstractions for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-css-bundle/CHANGELOG.md b/packages/remix-css-bundle/CHANGELOG.md
index db8db0df198..31c053a18e8 100644
--- a/packages/remix-css-bundle/CHANGELOG.md
+++ b/packages/remix-css-bundle/CHANGELOG.md
@@ -1,4 +1,6 @@
-# @remix-run/css-bundle
+# `@remix-run/css-bundle`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/remix-css-bundle/package.json b/packages/remix-css-bundle/package.json
index 0eb1102658a..3f8824dfd12 100644
--- a/packages/remix-css-bundle/package.json
+++ b/packages/remix-css-bundle/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/css-bundle",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "CSS bundle href when using CSS bundling features in Remix",
"homepage": "https://remix.run",
"bugs": {
diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md
index e317023448b..e17a8915ea5 100644
--- a/packages/remix-deno/CHANGELOG.md
+++ b/packages/remix-deno/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/deno
+# `@remix-run/deno`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/server-runtime@2.15.0`
## 2.14.0
diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json
index 63c39a0bf80..1945f85be4a 100644
--- a/packages/remix-deno/package.json
+++ b/packages/remix-deno/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/deno",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Deno platform abstractions for Remix",
"homepage": "https://remix.run",
"main": "./index.ts",
diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md
index 364abeefb6e..77dd97f2b90 100644
--- a/packages/remix-dev/CHANGELOG.md
+++ b/packages/remix-dev/CHANGELOG.md
@@ -1,4 +1,23 @@
-# @remix-run/dev
+# `@remix-run/dev`
+
+## 2.15.0
+
+### Patch Changes
+
+- Stabilize the `future.v3_routeConfig` future flag, replacing `future.unstable_routeConfig`. This enables support for `routes.ts` to assist with the migration to React Router v7. ([#10236](https://github.com/remix-run/remix/pull/10236))
+
+ Note that if you had already enabled the `future.unstable_routeConfig` flag, your route config in `app/routes.ts` is no longer defined via the `routes` export and must now be defined via the default export.
+
+ ```diff
+ import { type RouteConfig } from "@remix-run/route-config";
+
+ -export const routes: RouteConfig = [];
+ +export default [] satisfies RouteConfig;
+ ```
+
+- Updated dependencies:
+ - `@remix-run/node@2.15.0`
+ - `@remix-run/server-runtime@2.15.0`
## 2.14.0
diff --git a/packages/remix-dev/__tests__/readConfig-test.ts b/packages/remix-dev/__tests__/readConfig-test.ts
index ca4c9a050a4..f24e37ecf5e 100644
--- a/packages/remix-dev/__tests__/readConfig-test.ts
+++ b/packages/remix-dev/__tests__/readConfig-test.ts
@@ -37,10 +37,10 @@ describe("readConfig", () => {
"entryServerFilePath": Any,
"future": {
"unstable_optimizeDeps": false,
- "unstable_routeConfig": false,
"v3_fetcherPersist": false,
"v3_lazyRouteDiscovery": false,
"v3_relativeSplatPath": false,
+ "v3_routeConfig": false,
"v3_singleFetch": false,
"v3_throwAbortReason": false,
},
diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts
index 61980caf071..4dd453ea5f7 100644
--- a/packages/remix-dev/config.ts
+++ b/packages/remix-dev/config.ts
@@ -48,10 +48,10 @@ interface FutureConfig {
v3_fetcherPersist: boolean;
v3_relativeSplatPath: boolean;
v3_throwAbortReason: boolean;
+ v3_routeConfig: boolean;
v3_singleFetch: boolean;
v3_lazyRouteDiscovery: boolean;
unstable_optimizeDeps: boolean;
- unstable_routeConfig: boolean;
}
type NodeBuiltinsPolyfillOptions = Pick<
@@ -579,7 +579,7 @@ export async function resolveConfig(
root: { path: "", id: "root", file: rootRouteFile },
};
- if (appConfig.future?.unstable_routeConfig) {
+ if (appConfig.future?.v3_routeConfig) {
invariant(routesViteNodeContext);
invariant(vite);
@@ -612,7 +612,7 @@ export async function resolveConfig(
await routesViteNodeContext.runner.executeFile(
path.join(appDirectory, routeConfigFile)
)
- ).routes;
+ ).default;
let routeConfig = await routeConfigExport;
@@ -719,10 +719,10 @@ export async function resolveConfig(
v3_fetcherPersist: appConfig.future?.v3_fetcherPersist === true,
v3_relativeSplatPath: appConfig.future?.v3_relativeSplatPath === true,
v3_throwAbortReason: appConfig.future?.v3_throwAbortReason === true,
+ v3_routeConfig: appConfig.future?.v3_routeConfig === true,
v3_singleFetch: appConfig.future?.v3_singleFetch === true,
v3_lazyRouteDiscovery: appConfig.future?.v3_lazyRouteDiscovery === true,
unstable_optimizeDeps: appConfig.future?.unstable_optimizeDeps === true,
- unstable_routeConfig: appConfig.future?.unstable_routeConfig === true,
};
if (appConfig.future) {
@@ -732,6 +732,7 @@ export async function resolveConfig(
"unstable_cssSideEffectImports",
"unstable_dev",
"unstable_postcss",
+ "unstable_routeConfig",
"unstable_tailwind",
"unstable_vanillaExtract",
"v2_errorBoundary",
@@ -741,6 +742,12 @@ export async function resolveConfig(
"v2_routeConvention",
];
+ if ("unstable_routeConfig" in userFlags) {
+ logger.warn(
+ "The `unstable_routeConfig` future flag has been stabilized as `v3_routeConfig`."
+ );
+ }
+
if ("v2_dev" in userFlags) {
if (userFlags.v2_dev === true) {
deprecatedFlags.push("v2_dev");
diff --git a/packages/remix-dev/config/routes.ts b/packages/remix-dev/config/routes.ts
index cbf90b5f9d3..ede75497de9 100644
--- a/packages/remix-dev/config/routes.ts
+++ b/packages/remix-dev/config/routes.ts
@@ -175,7 +175,7 @@ export function validateRouteConfig({
if (!routeConfig) {
return {
valid: false,
- message: `No "routes" export defined in "${routeConfigFile}.`,
+ message: `Route config must be the default export in "${routeConfigFile}".`,
};
}
diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json
index 256ec8e4009..f33c560ea4d 100644
--- a/packages/remix-dev/package.json
+++ b/packages/remix-dev/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/dev",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Dev tools and CLI for Remix",
"homepage": "https://remix.run",
"bugs": {
@@ -108,8 +108,8 @@
"wrangler": "^3.28.2"
},
"peerDependencies": {
- "@remix-run/react": "^2.14.0",
- "@remix-run/serve": "^2.14.0",
+ "@remix-run/react": "^2.15.0",
+ "@remix-run/serve": "^2.15.0",
"typescript": "^5.1.0",
"vite": "^5.1.0",
"wrangler": "^3.28.2"
diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md
index a9275fddc6d..f6279d7de68 100644
--- a/packages/remix-eslint-config/CHANGELOG.md
+++ b/packages/remix-eslint-config/CHANGELOG.md
@@ -1,4 +1,6 @@
-# @remix-run/eslint-config
+# `@remix-run/eslint-config`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json
index 31998c18883..edeaf47c36f 100644
--- a/packages/remix-eslint-config/package.json
+++ b/packages/remix-eslint-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/eslint-config",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "ESLint configuration for Remix projects",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md
index 9597d9889cb..4da605158b5 100644
--- a/packages/remix-express/CHANGELOG.md
+++ b/packages/remix-express/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/express
+# `@remix-run/express`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/node@2.15.0`
## 2.14.0
diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json
index 3924c094939..526557bb841 100644
--- a/packages/remix-express/package.json
+++ b/packages/remix-express/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/express",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Express server request handler for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-fs-routes/CHANGELOG.md b/packages/remix-fs-routes/CHANGELOG.md
index cb2ce0e555e..af7ad7c0970 100644
--- a/packages/remix-fs-routes/CHANGELOG.md
+++ b/packages/remix-fs-routes/CHANGELOG.md
@@ -1,4 +1,6 @@
-# @remix-run/fs-routes
+# `@remix-run/fs-routes`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/remix-fs-routes/package.json b/packages/remix-fs-routes/package.json
index 7ce5ef05da3..5a99f3ba8cb 100644
--- a/packages/remix-fs-routes/package.json
+++ b/packages/remix-fs-routes/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/fs-routes",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Config-based file system routing conventions, for use within routes.ts",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
@@ -22,8 +22,8 @@
"typescript": "^5.1.6"
},
"peerDependencies": {
- "@remix-run/dev": "^2.14.0",
- "@remix-run/route-config": "^2.14.0",
+ "@remix-run/dev": "^2.15.0",
+ "@remix-run/route-config": "^2.15.0",
"typescript": "^5.1.0"
},
"peerDependenciesMeta": {
diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md
index db4c1207f80..d8fadf28a0c 100644
--- a/packages/remix-node/CHANGELOG.md
+++ b/packages/remix-node/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/node
+# `@remix-run/node`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/server-runtime@2.15.0`
## 2.14.0
diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json
index d8dafce3e2b..60d4c0df05d 100644
--- a/packages/remix-node/package.json
+++ b/packages/remix-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/node",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Node.js platform abstractions for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md
index ed50a322ec4..dc52d88fb6e 100644
--- a/packages/remix-react/CHANGELOG.md
+++ b/packages/remix-react/CHANGELOG.md
@@ -1,4 +1,11 @@
-# @remix-run/react
+# `@remix-run/react`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/server-runtime@2.15.0`
## 2.14.0
diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json
index 00c82f2e6c2..48f130345df 100644
--- a/packages/remix-react/package.json
+++ b/packages/remix-react/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/react",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "React DOM bindings for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-route-config/CHANGELOG.md b/packages/remix-route-config/CHANGELOG.md
index 9412824540d..83c7ba25789 100644
--- a/packages/remix-route-config/CHANGELOG.md
+++ b/packages/remix-route-config/CHANGELOG.md
@@ -1,4 +1,6 @@
-# @remix-run/route-config
+# `@remix-run/route-config`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/remix-route-config/package.json b/packages/remix-route-config/package.json
index ea7fc5c0a4f..cb552c01c60 100644
--- a/packages/remix-route-config/package.json
+++ b/packages/remix-route-config/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/route-config",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Config-based routing utilities, for use within routes.ts",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
@@ -26,7 +26,7 @@
"vite": "5.1.8"
},
"peerDependencies": {
- "@remix-run/dev": "^2.14.0",
+ "@remix-run/dev": "^2.15.0",
"typescript": "^5.1.0"
},
"peerDependenciesMeta": {
diff --git a/packages/remix-routes-option-adapter/CHANGELOG.md b/packages/remix-routes-option-adapter/CHANGELOG.md
index 3cb8237d08a..639b95d93a7 100644
--- a/packages/remix-routes-option-adapter/CHANGELOG.md
+++ b/packages/remix-routes-option-adapter/CHANGELOG.md
@@ -1,4 +1,6 @@
-# @remix-run/routes-option-adapter
+# `@remix-run/routes-option-adapter`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/remix-routes-option-adapter/package.json b/packages/remix-routes-option-adapter/package.json
index 9014078441d..e1eed28eb42 100644
--- a/packages/remix-routes-option-adapter/package.json
+++ b/packages/remix-routes-option-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/routes-option-adapter",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Adapter for Remix's \"routes\" config option, for use within routes.ts",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
@@ -22,8 +22,8 @@
"typescript": "^5.1.6"
},
"peerDependencies": {
- "@remix-run/dev": "^2.14.0",
- "@remix-run/route-config": "^2.14.0",
+ "@remix-run/dev": "^2.15.0",
+ "@remix-run/route-config": "^2.15.0",
"typescript": "^5.1.0"
},
"peerDependenciesMeta": {
diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md
index 70fc78ce6fd..b016900552d 100644
--- a/packages/remix-serve/CHANGELOG.md
+++ b/packages/remix-serve/CHANGELOG.md
@@ -1,4 +1,12 @@
-# @remix-run/serve
+# `@remix-run/serve`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/express@2.15.0`
+ - `@remix-run/node@2.15.0`
## 2.14.0
diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json
index 77b8e2defab..38752ea1fdc 100644
--- a/packages/remix-serve/package.json
+++ b/packages/remix-serve/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/serve",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Production application server for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md
index b27911cf3e5..9b9dfd50919 100644
--- a/packages/remix-server-runtime/CHANGELOG.md
+++ b/packages/remix-server-runtime/CHANGELOG.md
@@ -1,4 +1,6 @@
-# @remix-run/server-runtime
+# `@remix-run/server-runtime`
+
+## 2.15.0
## 2.14.0
diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json
index 459d1bb2786..c9373fc86e1 100644
--- a/packages/remix-server-runtime/package.json
+++ b/packages/remix-server-runtime/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/server-runtime",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Server runtime for Remix",
"bugs": {
"url": "https://github.com/remix-run/remix/issues"
diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md
index 9dd27a10cda..30bc2eda8e6 100644
--- a/packages/remix-testing/CHANGELOG.md
+++ b/packages/remix-testing/CHANGELOG.md
@@ -1,4 +1,12 @@
-# @remix-run/testing
+# `@remix-run/testing`
+
+## 2.15.0
+
+### Patch Changes
+
+- Updated dependencies:
+ - `@remix-run/node@2.15.0`
+ - `@remix-run/react@2.15.0`
## 2.14.0
diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json
index 78efab644f7..9987627f8f8 100644
--- a/packages/remix-testing/package.json
+++ b/packages/remix-testing/package.json
@@ -1,6 +1,6 @@
{
"name": "@remix-run/testing",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "Testing utilities for Remix apps",
"homepage": "https://remix.run",
"bugs": {
diff --git a/packages/remix/CHANGELOG.md b/packages/remix/CHANGELOG.md
index 31432239c24..8ec9b176ee2 100644
--- a/packages/remix/CHANGELOG.md
+++ b/packages/remix/CHANGELOG.md
@@ -1,3 +1,3 @@
-# remix
+# `remix`
See the `CHANGELOG.md` in individual Remix packages for all changes.
diff --git a/packages/remix/package.json b/packages/remix/package.json
index 1c73da5d284..b28209b93b0 100644
--- a/packages/remix/package.json
+++ b/packages/remix/package.json
@@ -1,6 +1,6 @@
{
"name": "remix",
- "version": "2.14.0",
+ "version": "2.15.0",
"description": "A framework for building better websites",
"homepage": "https://remix.run",
"bugs": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f0b20e33a11..00a209a327f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -557,13 +557,13 @@ importers:
integration/helpers/vite-cloudflare-template:
dependencies:
'@remix-run/cloudflare':
- specifier: 2.14.0
+ specifier: 2.15.0
version: link:../../../packages/remix-cloudflare
'@remix-run/cloudflare-pages':
- specifier: 2.14.0
+ specifier: 2.15.0
version: link:../../../packages/remix-cloudflare-pages
'@remix-run/react':
- specifier: 2.14.0
+ specifier: 2.15.0
version: link:../../../packages/remix-react
isbot:
specifier: ^4.1.0
@@ -880,7 +880,7 @@ importers:
specifier: workspace:*
version: link:../remix-node
'@remix-run/react':
- specifier: ^2.14.0
+ specifier: ^2.15.0
version: link:../remix-react
'@remix-run/router':
specifier: 1.21.0