{"record":{"id":"5340e2db01519cb0","repo":"remix-run/react-router","slug":"the-future-v8-passthroughrequests-flag-has-been","errorCode":null,"errorMessage":"The `future.v8_passThroughRequests` flag has been removed because pass-through requests are now the default behavior","messagePattern":"The `future\\.v8_passThroughRequests` flag has been removed because pass-through requests are now the default behavior","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/react-router-dev/config/config.ts","lineNumber":719,"sourceCode":"      \"v8_splitRouteModules\" in futureConfig\n    ) {\n      return err(\n        \"The `future.v8_splitRouteModules` flag has been moved to a top-level `config.splitRouteModules` field (default `true`)\",\n      );\n    }\n    if (\n      \"unstable_viteEnvironmentApi\" in futureConfig ||\n      \"v8_viteEnvironmentApi\" in futureConfig\n    ) {\n      return err(\n        \"The `future.v8_viteEnvironmentApi` flag has been removed because Vite Environment API usage is now always enabled\",\n      );\n    }\n    if (\n      \"unstable_passThroughRequests\" in futureConfig ||\n      \"v8_passThroughRequests\" in futureConfig\n    ) {\n      return err(\n        \"The `future.v8_passThroughRequests` flag has been removed because pass-through requests are now the default behavior\",\n      );\n    }\n    if (\n      \"unstable_middleware\" in futureConfig ||\n      \"v8_middleware\" in futureConfig\n    ) {\n      return err(\n        \"The `future.v8_middleware` flag has been removed because middleware is now always enabled\",\n      );\n    }\n    if (\n      \"unstable_trailingSlashAwareDataRequests\" in futureConfig ||\n      \"v8_trailingSlashAwareDataRequests\" in futureConfig\n    ) {\n      return err(\n        \"The `future.v8_trailingSlashAwareDataRequests` flag has been removed because trailing slash-aware data requests are now the default behavior\",\n      );","sourceCodeStart":701,"sourceCodeEnd":737,"githubUrl":"https://github.com/remix-run/react-router/blob/6beaca39526d5716c3c112ebb0782765baa5a9ce/packages/react-router-dev/config/config.ts#L701-L737","documentation":"Fatal config-validation error: readConfig rejects any react-router.config.ts whose `future` object still declares `unstable_passThroughRequests` or `v8_passThroughRequests`. Pass-through requests (the dev/preview server forwarding non-app requests like /assets/* instead of handling them as app routes) are now the default and only behavior, so the flag was deleted. Its mere presence — even set to false — aborts the run.","triggerScenarios":"Any readConfig-consuming command (`react-router dev`, `react-router build`, `react-router typegen`) with `future: { v8_passThroughRequests: ... }` or `future: { unstable_passThroughRequests: ... }` in the resolved config, including values inherited via presets or an `extends` chain.","commonSituations":"Apps migrating from v7 that explicitly opted into pass-through requests to fix dev-server asset 404s; configs shared across monorepo packages still carrying the old key; upgrading without reading the breaking-changes list.","solutions":["Remove the `v8_passThroughRequests` / `unstable_passThroughRequests` key from the `future` object — pass-through is the default now","If the key comes from a shared preset or extends file, fix it there instead of locally","Re-run typegen/typecheck to flush out stale flag references in types","Remove the other removed v8_* future flags in the same pass to avoid hitting the sibling errors one by one"],"exampleFix":"// before - react-router.config.ts\nexport default {\n  future: { v8_passThroughRequests: true },\n} satisfies Config;\n\n// after\nexport default {} satisfies Config; // pass-through requests are the default behavior","handlingStrategy":"validation","validationCode":"// fail fast on the removed flag before running CLI commands\nimport fs from \"node:fs\";\nlet cfg = fs.readFileSync(\"react-router.config.ts\", \"utf8\");\nif (/unstable_passThroughRequests|v8_passThroughRequests/.test(cfg)) {\n  throw new Error(\"Remove `future.v8_passThroughRequests` — pass-through is the default now\");\n}","typeGuard":"function isCurrentFutureConfig(f: unknown): boolean {\n  return typeof f === \"object\" && f !== null &&\n    !(\"v8_passThroughRequests\" in f) && !(\"unstable_passThroughRequests\" in f);\n}","tryCatchPattern":"try {\n  await runReactRouterCli(\"dev\");\n} catch (e) {\n  if (e instanceof Error && e.message.includes(\"v8_passThroughRequests\")) {\n    // auto-strip the key, notify, and retry the command once\n  } else throw e;\n}","preventionTips":["After any version bump, grep react-router.config.ts (and presets/extends files) for `future.` keys you didn't add this release","Enforce config shape with `satisfies Config` so removed keys become compile errors","Delete flags as soon as their behavior becomes default instead of carrying them forward"],"tags":["config","future-flags","dev-server","upgrade","build-error"],"backgroundTag":"removed-feature-flag","analyzedSha":"6beaca39526d5716c3c112ebb0782765baa5a9ce","analyzedAt":"2026-08-18T18:04:14.938Z","contentChangedAt":"2026-08-18T18:04:14.938Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}