gitextract_wusxnjs2/ ├── .browserslistrc ├── .changeset/ │ ├── README.md │ └── config.json ├── .eslintignore ├── .eslintrc ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── documentation_isse.yml │ ├── dependabot.yml │ └── workflows/ │ ├── close-feature-pr.yml │ ├── close-no-repro-issue.yml │ ├── close-no-repro-issues.yml │ ├── deduplicate-lock-file.yml │ ├── docs.yml │ ├── format.yml │ ├── integration-full.yml │ ├── integration-pr-ubuntu.yml │ ├── integration-pr-windows-macos.yml │ ├── no-response.yml │ ├── release-comment-manual.yml │ ├── release.yml │ ├── shared-build.yml │ ├── shared-integration.yml │ ├── support.yml │ └── test.yml ├── .gitignore ├── .npmrc ├── .nvmrc ├── .vscode/ │ └── settings.json ├── AGENTS.md ├── CHANGELOG.md ├── CLA.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── GOVERNANCE.md ├── LICENSE.md ├── README.md ├── SECURITY.md ├── build.utils.ts ├── contributors.yml ├── decisions/ │ ├── 0001-use-blocker.md │ ├── 0001-use-npm-to-manage-npm-dependencies-for-deno-projects.md │ ├── 0002-do-not-clone-request.md │ ├── 0002-lazy-route-modules.md │ ├── 0003-data-strategy.md │ ├── 0003-infer-types-for-useloaderdata-and-useactiondata-from-loader-and-action-via-generics.md │ ├── 0004-streaming-apis.md │ ├── 0005-remixing-react-router.md │ ├── 0006-linear-workflow.md │ ├── 0007-remix-on-react-router-6-4-0.md │ ├── 0008-only-support-js-conversion-for-app-code.md │ ├── 0009-do-not-rely-on-treeshaking-for-correctness.md │ ├── 0010-splitting-up-client-and-server-code-in-vite.md │ ├── 0011-routes-ts.md │ ├── 0012-type-inference.md │ ├── 0013-react-router-config-ts.md │ ├── 0014-context-middleware.md │ ├── 0015-observability.md │ └── template.md ├── docs/ │ ├── api/ │ │ ├── components/ │ │ │ ├── Await.md │ │ │ ├── Form.md │ │ │ ├── Link.md │ │ │ ├── Links.md │ │ │ ├── Meta.md │ │ │ ├── NavLink.md │ │ │ ├── Navigate.md │ │ │ ├── Outlet.md │ │ │ ├── PrefetchPageLinks.md │ │ │ ├── Route.md │ │ │ ├── Routes.md │ │ │ ├── Scripts.md │ │ │ ├── ScrollRestoration.md │ │ │ └── index.md │ │ ├── data-routers/ │ │ │ ├── RouterProvider.md │ │ │ ├── StaticRouterProvider.md │ │ │ ├── createBrowserRouter.md │ │ │ ├── createHashRouter.md │ │ │ ├── createMemoryRouter.md │ │ │ ├── createStaticHandler.md │ │ │ ├── createStaticRouter.md │ │ │ └── index.md │ │ ├── declarative-routers/ │ │ │ ├── BrowserRouter.md │ │ │ ├── HashRouter.md │ │ │ ├── HistoryRouter.md │ │ │ ├── MemoryRouter.md │ │ │ ├── Router.md │ │ │ ├── StaticRouter.md │ │ │ └── index.md │ │ ├── framework-conventions/ │ │ │ ├── client-modules.md │ │ │ ├── entry.client.tsx.md │ │ │ ├── entry.server.tsx.md │ │ │ ├── index.md │ │ │ ├── react-router.config.ts.md │ │ │ ├── root.tsx.md │ │ │ ├── routes.ts.md │ │ │ └── server-modules.md │ │ ├── framework-routers/ │ │ │ ├── HydratedRouter.md │ │ │ ├── ServerRouter.md │ │ │ └── index.md │ │ ├── hooks/ │ │ │ ├── index.md │ │ │ ├── useActionData.md │ │ │ ├── useAsyncError.md │ │ │ ├── useAsyncValue.md │ │ │ ├── useBeforeUnload.md │ │ │ ├── useBlocker.md │ │ │ ├── useFetcher.md │ │ │ ├── useFetchers.md │ │ │ ├── useFormAction.md │ │ │ ├── useHref.md │ │ │ ├── useInRouterContext.md │ │ │ ├── useLinkClickHandler.md │ │ │ ├── useLoaderData.md │ │ │ ├── useLocation.md │ │ │ ├── useMatch.md │ │ │ ├── useMatches.md │ │ │ ├── useNavigate.md │ │ │ ├── useNavigation.md │ │ │ ├── useNavigationType.md │ │ │ ├── useOutlet.md │ │ │ ├── useOutletContext.md │ │ │ ├── useParams.md │ │ │ ├── usePrompt.md │ │ │ ├── useResolvedPath.md │ │ │ ├── useRevalidator.md │ │ │ ├── useRouteError.md │ │ │ ├── useRouteLoaderData.md │ │ │ ├── useRoutes.md │ │ │ ├── useSearchParams.md │ │ │ ├── useSubmit.md │ │ │ └── useViewTransitionState.md │ │ ├── index.md │ │ ├── other-api/ │ │ │ ├── adapter.md │ │ │ ├── dev.md │ │ │ ├── index.md │ │ │ └── serve.md │ │ ├── rsc/ │ │ │ ├── RSCHydratedRouter.md │ │ │ ├── RSCStaticRouter.md │ │ │ ├── createCallServer.md │ │ │ ├── getRSCStream.md │ │ │ ├── index.md │ │ │ ├── matchRSCServerRequest.md │ │ │ └── routeRSCServerRequest.md │ │ └── utils/ │ │ ├── IsCookieFunction.md │ │ ├── IsSessionFunction.md │ │ ├── RouterContextProvider.md │ │ ├── createContext.md │ │ ├── createCookie.md │ │ ├── createCookieSessionStorage.md │ │ ├── createMemorySessionStorage.md │ │ ├── createPath.md │ │ ├── createRequestHandler.md │ │ ├── createRoutesFromElements.md │ │ ├── createRoutesStub.md │ │ ├── createSearchParams.md │ │ ├── createSession.md │ │ ├── createSessionStorage.md │ │ ├── data.md │ │ ├── generatePath.md │ │ ├── href.md │ │ ├── index.md │ │ ├── isCookie.md │ │ ├── isRouteErrorResponse.md │ │ ├── isSession.md │ │ ├── matchPath.md │ │ ├── matchRoutes.md │ │ ├── parsePath.md │ │ ├── redirect.md │ │ ├── redirectDocument.md │ │ ├── renderMatches.md │ │ ├── replace.md │ │ └── resolvePath.md │ ├── community/ │ │ ├── api-development-strategy.md │ │ ├── contributing.md │ │ └── index.md │ ├── elements.md │ ├── explanation/ │ │ ├── README │ │ ├── backend-for-frontend.md │ │ ├── code-splitting.md │ │ ├── concurrency.md │ │ ├── form-vs-fetcher.md │ │ ├── hot-module-replacement.md │ │ ├── hydration.md │ │ ├── index-query-param.md │ │ ├── index.md │ │ ├── lazy-route-discovery.md │ │ ├── location.md │ │ ├── progressive-enhancement.md │ │ ├── race-conditions.md │ │ ├── react-transitions.md │ │ ├── route-matching.md │ │ ├── server-client-execution.md │ │ ├── sessions-and-cookies.md │ │ ├── special-files.md │ │ ├── state-management.md │ │ └── type-safety.md │ ├── how-to/ │ │ ├── README │ │ ├── accessibility.md │ │ ├── client-data.md │ │ ├── data-strategy.md │ │ ├── error-boundary.md │ │ ├── error-reporting.md │ │ ├── fetchers.md │ │ ├── file-route-conventions.md │ │ ├── file-uploads.md │ │ ├── form-validation.md │ │ ├── headers.md │ │ ├── index.md │ │ ├── instrumentation.md │ │ ├── meta.md │ │ ├── middleware.md │ │ ├── navigation-blocking.md │ │ ├── optimize-revalidation.md │ │ ├── pre-rendering.md │ │ ├── presets.md │ │ ├── react-server-components.md │ │ ├── resource-routes.md │ │ ├── route-module-type-safety.md │ │ ├── search-params.md │ │ ├── security.md │ │ ├── server-bundles.md │ │ ├── spa.md │ │ ├── status.md │ │ ├── suspense.md │ │ ├── using-handle.md │ │ ├── view-transitions.md │ │ └── webhook.md │ ├── index.md │ ├── prettier.config.js │ ├── start/ │ │ ├── README │ │ ├── data/ │ │ │ ├── actions.md │ │ │ ├── custom.md │ │ │ ├── data-loading.md │ │ │ ├── index.md │ │ │ ├── installation.md │ │ │ ├── navigating.md │ │ │ ├── pending-ui.md │ │ │ ├── route-object.md │ │ │ ├── routing.md │ │ │ └── testing.md │ │ ├── declarative/ │ │ │ ├── index.md │ │ │ ├── installation.md │ │ │ ├── navigating.md │ │ │ ├── routing.md │ │ │ └── url-values.md │ │ ├── framework/ │ │ │ ├── actions.md │ │ │ ├── data-loading.md │ │ │ ├── deploying.md │ │ │ ├── index.md │ │ │ ├── installation.md │ │ │ ├── navigating.md │ │ │ ├── pending-ui.md │ │ │ ├── rendering.md │ │ │ ├── route-module.md │ │ │ ├── routing.md │ │ │ └── testing.md │ │ ├── index.md │ │ └── modes.md │ ├── tutorials/ │ │ ├── README │ │ ├── address-book.md │ │ ├── advanced-data-fetching.md │ │ ├── index.md │ │ └── quickstart.md │ └── upgrading/ │ ├── README │ ├── component-routes.md │ ├── future.md │ ├── index.md │ ├── remix.md │ ├── router-provider.md │ └── v6.md ├── examples/ │ ├── README.md │ ├── auth/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── auth.ts │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── auth-router-provider/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── auth.ts │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── basic/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── basic-data-router/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── custom-filter-link/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── snkrs.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── custom-link/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── custom-query-parsing/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ └── jsurl.d.ts │ │ └── vite.config.ts │ ├── data-router/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── todos.ts │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── error-boundaries/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── routes.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── lazy-loading/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── pages/ │ │ │ │ ├── About.tsx │ │ │ │ └── Dashboard.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── lazy-loading-router-provider/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ ├── pages/ │ │ │ │ ├── About.tsx │ │ │ │ └── Dashboard.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── modal/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── images.ts │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── modal-data-router/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── images.ts │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── modal-route-with-outlet/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── images.ts │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── multi-app/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── home/ │ │ │ ├── App.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ └── no-match.jsx │ │ ├── inbox/ │ │ │ ├── App.jsx │ │ │ ├── index.css │ │ │ ├── index.html │ │ │ ├── main.jsx │ │ │ ├── messages.js │ │ │ └── no-match.jsx │ │ ├── index.html │ │ ├── package.json │ │ ├── server.js │ │ └── vite.config.js │ ├── navigation-blocking/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.tsx │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── notes/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.jsx │ │ │ ├── index.css │ │ │ ├── main.jsx │ │ │ ├── notes.js │ │ │ ├── routes/ │ │ │ │ ├── new.jsx │ │ │ │ ├── note.jsx │ │ │ │ ├── notes.jsx │ │ │ │ └── root.jsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── route-objects/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── scroll-restoration/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── search-params/ │ │ ├── .gitignore │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── main.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── ssr/ │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── server.js │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── entry.client.tsx │ │ │ ├── entry.server.tsx │ │ │ ├── index.css │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.js │ ├── ssr-data-router/ │ │ ├── .stackblitzrc │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── server.js │ │ ├── src/ │ │ │ ├── App.tsx │ │ │ ├── entry.client.tsx │ │ │ ├── entry.server.tsx │ │ │ ├── index.css │ │ │ ├── lazy.tsx │ │ │ └── vite-env.d.ts │ │ ├── tsconfig.json │ │ └── vite.config.js │ └── view-transitions/ │ ├── .gitignore │ ├── .stackblitzrc │ ├── README.md │ ├── index.html │ ├── package.json │ ├── src/ │ │ ├── index.css │ │ ├── main.tsx │ │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vite.config.ts ├── integration/ │ ├── CHANGELOG.md │ ├── abort-signal-test.ts │ ├── action-test.ts │ ├── assets/ │ │ ├── toupload.txt │ │ └── touploadtoobig.txt │ ├── blocking-test.ts │ ├── browser-entry-test.ts │ ├── bug-report-test.ts │ ├── catch-boundary-data-test.ts │ ├── catch-boundary-test.ts │ ├── cli-test.ts │ ├── client-data-test.ts │ ├── custom-entry-server-test.ts │ ├── deduped-route-modules-test.ts │ ├── defer-loader-test.ts │ ├── defer-test.ts │ ├── error-boundary-test.ts │ ├── error-boundary-v2-test.ts │ ├── error-data-request-test.ts │ ├── error-sanitization-test.ts │ ├── fetch-globals-test.ts │ ├── fetcher-layout-test.ts │ ├── fetcher-test.ts │ ├── fog-of-war-test.ts │ ├── form-data-test.ts │ ├── form-test.ts │ ├── fs-routes-test.ts │ ├── headers-test.ts │ ├── helpers/ │ │ ├── cleanup.mjs │ │ ├── cloudflare-dev-proxy-template/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── entry.server.tsx │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ ├── create-fixture.ts │ │ ├── express.ts │ │ ├── fixtures.ts │ │ ├── playwright-fixture.ts │ │ ├── rsc-vite/ │ │ │ ├── .gitignore │ │ │ ├── package.json │ │ │ ├── server.js │ │ │ ├── src/ │ │ │ │ ├── config/ │ │ │ │ │ ├── basename.ts │ │ │ │ │ ├── get-context.ts │ │ │ │ │ └── request-context.ts │ │ │ │ ├── entry.browser.tsx │ │ │ │ ├── entry.rsc.tsx │ │ │ │ ├── entry.ssr.tsx │ │ │ │ ├── routes/ │ │ │ │ │ ├── home.tsx │ │ │ │ │ └── root.tsx │ │ │ │ └── routes.ts │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ ├── rsc-vite-framework/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── package.json │ │ │ ├── start.js │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ ├── stream.ts │ │ ├── templates.ts │ │ ├── vite-5-template/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── env.d.ts │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ ├── vite-6-template/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── env.d.ts │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ ├── vite-7-beta-template/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── env.d.ts │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ ├── vite-plugin-cloudflare-template/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── entry.server.tsx │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── package.json │ │ │ ├── react-router.config.ts │ │ │ ├── tsconfig.cloudflare.json │ │ │ ├── tsconfig.json │ │ │ ├── tsconfig.node.json │ │ │ ├── vite.config.ts │ │ │ ├── workers/ │ │ │ │ └── app.ts │ │ │ └── wrangler.toml │ │ ├── vite-rolldown-template/ │ │ │ ├── .gitignore │ │ │ ├── app/ │ │ │ │ ├── root.tsx │ │ │ │ ├── routes/ │ │ │ │ │ └── _index.tsx │ │ │ │ └── routes.ts │ │ │ ├── env.d.ts │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── vite.config.ts │ │ └── vite.ts │ ├── hook-useSubmit-test.ts │ ├── http-test.ts │ ├── layout-route-test.ts │ ├── link-test.ts │ ├── loader-test.ts │ ├── matches-test.ts │ ├── mdx-test.ts │ ├── middleware-test.ts │ ├── multiple-cookies-test.ts │ ├── navigation-state-test.ts │ ├── package.json │ ├── playwright.config.ts │ ├── prefetch-test.ts │ ├── react-router-serve-test.ts │ ├── redirects-test.ts │ ├── rendering-test.ts │ ├── request-test.ts │ ├── resource-routes-test.ts │ ├── revalidate-test.ts │ ├── root-route-test.ts │ ├── route-collisions-test.ts │ ├── route-config-test.ts │ ├── rsc/ │ │ ├── rsc-nojs-test.ts │ │ ├── rsc-test.ts │ │ └── utils.ts │ ├── scroll-test.ts │ ├── server-entry-test.ts │ ├── session-storage-denied-test.ts │ ├── set-cookie-revalidation-test.ts │ ├── single-fetch-test.ts │ ├── splat-routes-test.ts │ ├── split-route-modules-test.ts │ ├── sri-test.ts │ ├── transition-test.ts │ ├── tsconfig.json │ ├── typegen-test.ts │ ├── use-route-test.ts │ ├── vite-absolute-base-test.ts │ ├── vite-basename-test.ts │ ├── vite-build-test.ts │ ├── vite-cloudflare-test.ts │ ├── vite-css-lazy-loading-test.ts │ ├── vite-css-test.ts │ ├── vite-dev-custom-entry-test.ts │ ├── vite-dev-test.ts │ ├── vite-dot-client-test.ts │ ├── vite-dot-server-test.ts │ ├── vite-dotenv-test.ts │ ├── vite-hmr-hdr-rsc-test.ts │ ├── vite-hmr-hdr-test.ts │ ├── vite-loader-context-test.ts │ ├── vite-manifests-test.ts │ ├── vite-node-env-test.ts │ ├── vite-plugin-cloudflare-test.ts │ ├── vite-plugin-order-validation-test.ts │ ├── vite-prerender-test.ts │ ├── vite-presets-test.ts │ ├── vite-preview-test.ts │ ├── vite-route-added-test.ts │ ├── vite-route-exports-modified-offscreen-test.ts │ ├── vite-server-bundles-test.ts │ ├── vite-server-fs-allow-test.ts │ ├── vite-spa-mode-test.ts │ └── vite-unused-route-exports-test.ts ├── jest/ │ ├── jest.config.shared.js │ └── transform.js ├── package.json ├── packages/ │ ├── create-react-router/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── create-react-router-test.ts │ │ │ ├── fixtures/ │ │ │ │ ├── basic/ │ │ │ │ │ ├── .gitignore │ │ │ │ │ ├── README.md │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── root.tsx │ │ │ │ │ │ ├── routes/ │ │ │ │ │ │ │ └── home.tsx │ │ │ │ │ │ └── routes.ts │ │ │ │ │ ├── package.json │ │ │ │ │ ├── tsconfig.json │ │ │ │ │ └── vite.config.ts │ │ │ │ ├── blank/ │ │ │ │ │ └── package.json │ │ │ │ ├── template.tgz │ │ │ │ └── with-ignored-dir/ │ │ │ │ └── package.json │ │ │ ├── github-mocks.ts │ │ │ ├── msw-register.ts │ │ │ ├── msw.ts │ │ │ └── setupAfterEnv.ts │ │ ├── cli.ts │ │ ├── copy-template.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── loading-indicator.ts │ │ ├── package.json │ │ ├── prompt.ts │ │ ├── prompts-confirm.ts │ │ ├── prompts-multi-select.ts │ │ ├── prompts-prompt-base.ts │ │ ├── prompts-select.ts │ │ ├── prompts-text.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── utils.ts │ ├── react-router/ │ │ ├── .eslintrc.js │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── .eslintrc │ │ │ ├── Route-test.tsx │ │ │ ├── Router-basename-test.tsx │ │ │ ├── Router-test.tsx │ │ │ ├── Routes-location-test.tsx │ │ │ ├── Routes-test.tsx │ │ │ ├── __snapshots__/ │ │ │ │ └── route-matching-test.tsx.snap │ │ │ ├── absolute-path-matching-test.tsx │ │ │ ├── createRoutesFromChildren-test.tsx │ │ │ ├── data-memory-router-test.tsx │ │ │ ├── data-router-no-dom-test.tsx │ │ │ ├── descendant-routes-params-test.tsx │ │ │ ├── descendant-routes-splat-matching-test.tsx │ │ │ ├── descendant-routes-warning-test.tsx │ │ │ ├── dom/ │ │ │ │ ├── client-on-error-test.tsx │ │ │ │ ├── components/ │ │ │ │ │ └── LazyComponent.tsx │ │ │ │ ├── concurrent-mode-navigations-test.tsx │ │ │ │ ├── data-browser-router-legacy-formdata-test.tsx │ │ │ │ ├── data-browser-router-test.tsx │ │ │ │ ├── data-static-router-test.tsx │ │ │ │ ├── dom-export-test.tsx │ │ │ │ ├── fetcher-submit-tagname-test.tsx │ │ │ │ ├── flush-sync-navigations-test.tsx │ │ │ │ ├── link-click-test.tsx │ │ │ │ ├── link-href-test.tsx │ │ │ │ ├── link-push-test.tsx │ │ │ │ ├── nav-link-active-test.tsx │ │ │ │ ├── navigate-encode-params-test.tsx │ │ │ │ ├── partial-hydration-test.tsx │ │ │ │ ├── polyfills/ │ │ │ │ │ └── drop-FormData-submitter.ts │ │ │ │ ├── scroll-restoration-test.tsx │ │ │ │ ├── search-params-test.tsx │ │ │ │ ├── special-characters-test.tsx │ │ │ │ ├── ssr/ │ │ │ │ │ ├── components-test.tsx │ │ │ │ │ ├── links-test.tsx │ │ │ │ │ └── meta-test.tsx │ │ │ │ ├── static-link-test.tsx │ │ │ │ ├── static-location-test.tsx │ │ │ │ ├── static-navigate-test.tsx │ │ │ │ ├── stub-test.tsx │ │ │ │ ├── trailing-slashes-test.tsx │ │ │ │ ├── use-blocker-test.tsx │ │ │ │ ├── use-prompt-test.tsx │ │ │ │ └── useLinkClickHandler-test.tsx │ │ │ ├── generatePath-test.tsx │ │ │ ├── gh-issue-8127-test.tsx │ │ │ ├── gh-issue-8165-test.tsx │ │ │ ├── greedy-matching-test.tsx │ │ │ ├── href-test.ts │ │ │ ├── index-routes-test.tsx │ │ │ ├── layout-routes-test.tsx │ │ │ ├── matchPath-test.tsx │ │ │ ├── matchRoutes-test.tsx │ │ │ ├── navigate-test.tsx │ │ │ ├── params-decode-test.tsx │ │ │ ├── path-matching-test.tsx │ │ │ ├── react-transitions-test.tsx │ │ │ ├── resolvePath-test.tsx │ │ │ ├── route-depth-order-matching-test.tsx │ │ │ ├── route-matching-test.tsx │ │ │ ├── router/ │ │ │ │ ├── TestSequences/ │ │ │ │ │ ├── EncodedReservedCharacters.ts │ │ │ │ │ ├── GoBack.ts │ │ │ │ │ ├── GoForward.ts │ │ │ │ │ ├── InitialLocationDefaultKey.ts │ │ │ │ │ ├── InitialLocationHasKey.ts │ │ │ │ │ ├── Listen.ts │ │ │ │ │ ├── ListenPopOnly.ts │ │ │ │ │ ├── PushMissingPathname.ts │ │ │ │ │ ├── PushNewLocation.ts │ │ │ │ │ ├── PushRelativePathname.ts │ │ │ │ │ ├── PushRelativePathnameWarning.ts │ │ │ │ │ ├── PushSamePath.ts │ │ │ │ │ ├── PushState.ts │ │ │ │ │ ├── PushStateInvalid.ts │ │ │ │ │ ├── ReplaceNewLocation.ts │ │ │ │ │ ├── ReplaceSamePath.ts │ │ │ │ │ └── ReplaceState.ts │ │ │ │ ├── browser-test.ts │ │ │ │ ├── context-middleware-test.tsx │ │ │ │ ├── create-path-test.ts │ │ │ │ ├── data-strategy-test.ts │ │ │ │ ├── fetchers-test.ts │ │ │ │ ├── flush-sync-test.ts │ │ │ │ ├── hash-base-test.ts │ │ │ │ ├── hash-test.ts │ │ │ │ ├── instrumentation-test.ts │ │ │ │ ├── interruptions-test.ts │ │ │ │ ├── lazy-discovery-test.ts │ │ │ │ ├── lazy-test.ts │ │ │ │ ├── mask-test.ts │ │ │ │ ├── memory-test.ts │ │ │ │ ├── navigation-blocking-test.ts │ │ │ │ ├── navigation-test.ts │ │ │ │ ├── path-resolution-test.ts │ │ │ │ ├── redirects-test.ts │ │ │ │ ├── resolveTo-test.tsx │ │ │ │ ├── revalidate-test.ts │ │ │ │ ├── route-fallback-test.ts │ │ │ │ ├── router-memory-test.ts │ │ │ │ ├── router-test.ts │ │ │ │ ├── scroll-restoration-test.ts │ │ │ │ ├── should-revalidate-test.ts │ │ │ │ ├── ssr-test.ts │ │ │ │ ├── submission-test.ts │ │ │ │ ├── utils/ │ │ │ │ │ ├── custom-matchers.ts │ │ │ │ │ ├── data-router-setup.ts │ │ │ │ │ ├── urlDataStrategy.ts │ │ │ │ │ └── utils.ts │ │ │ │ └── view-transition-test.ts │ │ │ ├── same-component-lifecycle-test.tsx │ │ │ ├── server-runtime/ │ │ │ │ ├── actions-test.ts │ │ │ │ ├── cookies-test.ts │ │ │ │ ├── data-test.ts │ │ │ │ ├── handle-error-test.ts │ │ │ │ ├── handler-test.ts │ │ │ │ ├── markup-test.ts │ │ │ │ ├── responses-test.ts │ │ │ │ ├── server-test.ts │ │ │ │ ├── sessions-test.ts │ │ │ │ └── utils.ts │ │ │ ├── setup.ts │ │ │ ├── use-revalidator-test.tsx │ │ │ ├── useHref-basename-test.tsx │ │ │ ├── useHref-test.tsx │ │ │ ├── useLocation-test.tsx │ │ │ ├── useMatch-test.tsx │ │ │ ├── useNavigate-test.tsx │ │ │ ├── useOutlet-test.tsx │ │ │ ├── useParams-test.tsx │ │ │ ├── useResolvedPath-test.tsx │ │ │ ├── useRoutes-test.tsx │ │ │ ├── utils/ │ │ │ │ ├── MemoryNavigate.tsx │ │ │ │ ├── framework.ts │ │ │ │ ├── getHtml.ts │ │ │ │ ├── getWindow.ts │ │ │ │ ├── renderStrict.tsx │ │ │ │ ├── tick.ts │ │ │ │ └── waitForRedirect.tsx │ │ │ └── vendor/ │ │ │ └── turbo-stream-test.ts │ │ ├── dom-export.ts │ │ ├── index-react-server-client.ts │ │ ├── index-react-server.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── actions.ts │ │ │ ├── components.tsx │ │ │ ├── context.ts │ │ │ ├── dom/ │ │ │ │ ├── dom.ts │ │ │ │ ├── global.ts │ │ │ │ ├── lib.tsx │ │ │ │ ├── node-main.js │ │ │ │ ├── server.tsx │ │ │ │ └── ssr/ │ │ │ │ ├── components.tsx │ │ │ │ ├── data.ts │ │ │ │ ├── entry.ts │ │ │ │ ├── errorBoundaries.tsx │ │ │ │ ├── errors.ts │ │ │ │ ├── fallback.tsx │ │ │ │ ├── fog-of-war.ts │ │ │ │ ├── hydration.tsx │ │ │ │ ├── invariant.ts │ │ │ │ ├── links.ts │ │ │ │ ├── markup.ts │ │ │ │ ├── routeModules.ts │ │ │ │ ├── routes-test-stub.tsx │ │ │ │ ├── routes.tsx │ │ │ │ ├── server.tsx │ │ │ │ └── single-fetch.tsx │ │ │ ├── dom-export/ │ │ │ │ ├── dom-router-provider.tsx │ │ │ │ └── hydrated-router.tsx │ │ │ ├── errors.ts │ │ │ ├── hooks.tsx │ │ │ ├── href.ts │ │ │ ├── router/ │ │ │ │ ├── history.ts │ │ │ │ ├── instrumentation.ts │ │ │ │ ├── links.ts │ │ │ │ ├── router.ts │ │ │ │ └── utils.ts │ │ │ ├── rsc/ │ │ │ │ ├── browser.tsx │ │ │ │ ├── errorBoundaries.tsx │ │ │ │ ├── html-stream/ │ │ │ │ │ ├── browser.ts │ │ │ │ │ └── server.ts │ │ │ │ ├── route-modules.ts │ │ │ │ ├── server.rsc.ts │ │ │ │ └── server.ssr.tsx │ │ │ ├── server-runtime/ │ │ │ │ ├── .eslintrc.js │ │ │ │ ├── build.ts │ │ │ │ ├── cookies.ts │ │ │ │ ├── crypto.ts │ │ │ │ ├── data.ts │ │ │ │ ├── dev.ts │ │ │ │ ├── entry.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── headers.ts │ │ │ │ ├── invariant.ts │ │ │ │ ├── mode.ts │ │ │ │ ├── routeMatching.ts │ │ │ │ ├── routes.ts │ │ │ │ ├── server.ts │ │ │ │ ├── serverHandoff.ts │ │ │ │ ├── sessions/ │ │ │ │ │ ├── cookieStorage.ts │ │ │ │ │ └── memoryStorage.ts │ │ │ │ ├── sessions.ts │ │ │ │ ├── single-fetch.ts │ │ │ │ └── warnings.ts │ │ │ └── types/ │ │ │ ├── future.ts │ │ │ ├── internal.ts │ │ │ ├── params.ts │ │ │ ├── register.ts │ │ │ ├── route-data.ts │ │ │ ├── route-module-annotations.ts │ │ │ ├── route-module.ts │ │ │ ├── serializes-to.ts │ │ │ └── utils.ts │ │ ├── node-main-dom-export.js │ │ ├── node-main.js │ │ ├── package.json │ │ ├── tsconfig.dom.json │ │ ├── tsconfig.json │ │ ├── tsup.config.rsc.ts │ │ ├── tsup.config.ts │ │ ├── typedoc.mjs │ │ └── vendor/ │ │ └── turbo-stream-v2/ │ │ ├── flatten.ts │ │ ├── turbo-stream.ts │ │ ├── unflatten.ts │ │ └── utils.ts │ ├── react-router-architect/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── binaryTypes-test.ts │ │ │ └── server-test.ts │ │ ├── binaryTypes.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── server.ts │ │ ├── sessions/ │ │ │ └── arcTableSessionStorage.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── typedoc.mjs │ ├── react-router-cloudflare/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── sessions/ │ │ │ └── workersKVStorage.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ ├── typedoc.mjs │ │ └── worker.ts │ ├── react-router-dev/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── fixtures/ │ │ │ │ └── basic/ │ │ │ │ ├── .gitignore │ │ │ │ ├── app/ │ │ │ │ │ ├── root.tsx │ │ │ │ │ ├── routes/ │ │ │ │ │ │ └── _index.tsx │ │ │ │ │ └── routes.ts │ │ │ │ ├── package.json │ │ │ │ └── tsconfig.json │ │ │ ├── route-config-test.ts │ │ │ ├── setupAfterEnv.ts │ │ │ ├── styles-test.ts │ │ │ └── utils/ │ │ │ ├── captureError.ts │ │ │ ├── cli.ts │ │ │ ├── eol.ts │ │ │ ├── git.ts │ │ │ └── withApp.ts │ │ ├── bin.js │ │ ├── cli/ │ │ │ ├── commands.ts │ │ │ ├── detectPackageManager.ts │ │ │ ├── index.ts │ │ │ ├── run.ts │ │ │ └── useJavascript.ts │ │ ├── config/ │ │ │ ├── config.ts │ │ │ ├── default-rsc-entries/ │ │ │ │ ├── entry.client.tsx │ │ │ │ ├── entry.rsc.tsx │ │ │ │ └── entry.ssr.tsx │ │ │ ├── defaults/ │ │ │ │ ├── entry.client.tsx │ │ │ │ └── entry.server.node.tsx │ │ │ ├── format.ts │ │ │ ├── is-react-router-repo.ts │ │ │ └── routes.ts │ │ ├── config.ts │ │ ├── invariant.ts │ │ ├── jest.config.js │ │ ├── manifest.ts │ │ ├── module-sync-enabled/ │ │ │ ├── false.cjs │ │ │ ├── index.d.mts │ │ │ ├── index.mjs │ │ │ └── true.mjs │ │ ├── package.json │ │ ├── routes.ts │ │ ├── rsc-types.d.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ ├── typedoc.mjs │ │ ├── typegen/ │ │ │ ├── context.ts │ │ │ ├── generate.ts │ │ │ ├── index.ts │ │ │ ├── params.ts │ │ │ └── route.ts │ │ ├── vite/ │ │ │ ├── babel.ts │ │ │ ├── build.ts │ │ │ ├── cache.ts │ │ │ ├── cloudflare-dev-proxy.ts │ │ │ ├── cloudflare.ts │ │ │ ├── combine-urls-test.ts │ │ │ ├── combine-urls.ts │ │ │ ├── dev.ts │ │ │ ├── has-dependency.ts │ │ │ ├── has-rsc-plugin.ts │ │ │ ├── load-dotenv.ts │ │ │ ├── node-adapter.ts │ │ │ ├── optimize-deps-entries.ts │ │ │ ├── plugin.ts │ │ │ ├── plugins/ │ │ │ │ ├── prerender.ts │ │ │ │ ├── validate-plugin-order.ts │ │ │ │ └── warn-on-client-source-maps.ts │ │ │ ├── profiler.ts │ │ │ ├── remove-exports-test.ts │ │ │ ├── remove-exports.ts │ │ │ ├── resolve-file-url.ts │ │ │ ├── resolve-relative-route-file-path.ts │ │ │ ├── route-chunks-test.ts │ │ │ ├── route-chunks.ts │ │ │ ├── rsc/ │ │ │ │ ├── plugin.ts │ │ │ │ ├── virtual-route-config.ts │ │ │ │ └── virtual-route-modules.ts │ │ │ ├── ssr-externals.ts │ │ │ ├── static/ │ │ │ │ ├── refresh-utils.mjs │ │ │ │ └── rsc-refresh-utils.mjs │ │ │ ├── styles.ts │ │ │ ├── virtual-module.ts │ │ │ ├── vite-node.ts │ │ │ ├── vite.ts │ │ │ └── with-props.ts │ │ └── vite.ts │ ├── react-router-dom/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── index.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── react-router-express/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── server-test.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── server.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── typedoc.mjs │ ├── react-router-fs-routes/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── flatRoutes-test.ts │ │ │ └── routeManifestToRouteConfig-test.ts │ │ ├── flatRoutes.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── manifest.ts │ │ ├── normalizeSlashes.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── typedoc.mjs │ ├── react-router-node/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ └── sessions-test.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── server.ts │ │ ├── sessions/ │ │ │ └── fileStorage.ts │ │ ├── stream.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── typedoc.mjs │ ├── react-router-remix-routes-option-adapter/ │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── __tests__/ │ │ │ ├── defineRoutes-test.ts │ │ │ └── routeManifestToRouteConfig-test.ts │ │ ├── defineRoutes.ts │ │ ├── index.ts │ │ ├── jest.config.js │ │ ├── manifest.ts │ │ ├── normalizeSlashes.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── typedoc.mjs │ └── react-router-serve/ │ ├── CHANGELOG.md │ ├── README.md │ ├── bin.js │ ├── cli.ts │ ├── package.json │ ├── tsconfig.json │ ├── tsup.config.ts │ └── typedoc.mjs ├── patches/ │ ├── @changesets__assemble-release-plan.patch │ ├── @changesets__get-dependents-graph@1.3.6.patch │ └── @mdx-js__rollup.patch ├── playground/ │ ├── data/ │ │ ├── index.html │ │ ├── package.json │ │ ├── src/ │ │ │ └── main.tsx │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── framework/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── $.tsx │ │ │ │ ├── _index.tsx │ │ │ │ └── product.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── framework-express/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ └── _index.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── server.js │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── framework-rolldown-vite/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index.tsx │ │ │ │ └── product.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── framework-spa/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ └── _index.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── framework-vite-5/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index.tsx │ │ │ │ └── product.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── framework-vite-7-beta/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index.tsx │ │ │ │ └── product.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── middleware/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── contexts.ts │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index.tsx │ │ │ │ ├── client.a.b.tsx │ │ │ │ ├── client.a.tsx │ │ │ │ ├── server.a.b.tsx │ │ │ │ └── server.a.tsx │ │ │ └── routes.ts │ │ ├── dev-server.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── server.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ ├── tsconfig.vite.json │ │ └── vite.config.ts │ ├── rsc-vite/ │ │ ├── .gitignore │ │ ├── package.json │ │ ├── server.js │ │ ├── src/ │ │ │ ├── counter.tsx │ │ │ ├── entry.browser.tsx │ │ │ ├── entry.rsc.tsx │ │ │ ├── entry.ssr.tsx │ │ │ ├── routes/ │ │ │ │ ├── about/ │ │ │ │ │ ├── about.client.tsx │ │ │ │ │ └── about.tsx │ │ │ │ ├── child/ │ │ │ │ │ └── child.tsx │ │ │ │ ├── home/ │ │ │ │ │ ├── home.client.css │ │ │ │ │ ├── home.client.tsx │ │ │ │ │ ├── home.css │ │ │ │ │ └── home.tsx │ │ │ │ ├── parent/ │ │ │ │ │ └── parent.tsx │ │ │ │ ├── parent-index/ │ │ │ │ │ └── parent-index.tsx │ │ │ │ ├── redirect.ts │ │ │ │ ├── render-redirects.tsx │ │ │ │ └── root/ │ │ │ │ ├── root.client.tsx │ │ │ │ ├── root.css │ │ │ │ └── root.tsx │ │ │ └── routes.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── rsc-vite-framework/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── entry.rsc.ts │ │ │ ├── entry.ssr.ts │ │ │ ├── root.css │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index/ │ │ │ │ │ ├── actions.ts │ │ │ │ │ ├── route.tsx │ │ │ │ │ └── styles.css │ │ │ │ ├── _layout-a.route-a.tsx │ │ │ │ ├── _layout-a.tsx │ │ │ │ ├── _layout-b.route-b.tsx │ │ │ │ ├── _layout-b.tsx │ │ │ │ ├── client-loader/ │ │ │ │ │ ├── route.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── client-loader-hydrate/ │ │ │ │ │ ├── route.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── client-loader-without-server-loader/ │ │ │ │ │ ├── route.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── fixture.client-component/ │ │ │ │ │ └── route.tsx │ │ │ │ ├── fixture.server-component/ │ │ │ │ │ └── route.tsx │ │ │ │ ├── mdx/ │ │ │ │ │ ├── message.tsx │ │ │ │ │ └── route.mdx │ │ │ │ ├── mdx-glob.$post/ │ │ │ │ │ ├── posts/ │ │ │ │ │ │ ├── hello/ │ │ │ │ │ │ │ ├── hello-component.module.css │ │ │ │ │ │ │ ├── hello-component.tsx │ │ │ │ │ │ │ └── hello.mdx │ │ │ │ │ │ ├── posts.ts │ │ │ │ │ │ └── world/ │ │ │ │ │ │ ├── world-component.module.css │ │ │ │ │ │ ├── world-component.tsx │ │ │ │ │ │ └── world.mdx │ │ │ │ │ └── route.tsx │ │ │ │ ├── mdx-glob._index/ │ │ │ │ │ └── route.tsx │ │ │ │ ├── optimistic/ │ │ │ │ │ ├── actions.ts │ │ │ │ │ ├── form.tsx │ │ │ │ │ ├── liked.ts │ │ │ │ │ └── route.tsx │ │ │ │ └── server-loader/ │ │ │ │ ├── route.tsx │ │ │ │ └── styles.module.css │ │ │ └── routes.ts │ │ ├── mdx.d.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── start-vite-middleware.js │ │ ├── start.js │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── split-route-modules/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index.tsx │ │ │ │ ├── semi-splittable.tsx │ │ │ │ ├── splittable.tsx │ │ │ │ └── unsplittable.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── split-route-modules-spa/ │ │ ├── .gitignore │ │ ├── app/ │ │ │ ├── root.tsx │ │ │ ├── routes/ │ │ │ │ ├── _index.tsx │ │ │ │ ├── semi-splittable.tsx │ │ │ │ ├── splittable.tsx │ │ │ │ └── unsplittable.tsx │ │ │ └── routes.ts │ │ ├── package.json │ │ ├── react-router.config.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ └── vite-plugin-cloudflare/ │ ├── .gitignore │ ├── app/ │ │ ├── entry.server.tsx │ │ ├── root.tsx │ │ ├── routes/ │ │ │ ├── _index.tsx │ │ │ └── static.tsx │ │ └── routes.ts │ ├── package.json │ ├── react-router.config.ts │ ├── tsconfig.cloudflare.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ ├── vite.config.ts │ ├── workers/ │ │ └── app.ts │ └── wrangler.toml ├── pnpm-workspace.yaml ├── prettier.config.js ├── scripts/ │ ├── clean-v6-artifacts.sh │ ├── close-feature-pr.md │ ├── close-no-repro-issue.md │ ├── close-no-repro-issues.md │ ├── close-no-repro-issues.ts │ ├── constants.js │ ├── delete-pre-tags.sh │ ├── docs.ts │ ├── find-release-from-changeset.js │ ├── finish-stable-release.sh │ ├── playground.js │ ├── publish.js │ ├── remove-prerelease-changelogs.mjs │ ├── start-prerelease.sh │ ├── utils.js │ └── version.js ├── tutorials/ │ └── address-book/ │ ├── .gitignore │ ├── README.md │ ├── app/ │ │ ├── app.css │ │ ├── data.ts │ │ ├── root.tsx │ │ └── routes.ts │ ├── package.json │ ├── react-router.config.ts │ ├── tsconfig.json │ └── vite.config.ts └── typedoc.mjs