{"record":{"id":"50dda9c777de6be5","repo":"remix-run/react-router","slug":"the-prerender-unstable-concurrency-config-field","errorCode":null,"errorMessage":"The `prerender.unstable_concurrency` config field has been stabilized as `prerender.concurrency`","messagePattern":"The `prerender\\.unstable_concurrency` config field has been stabilized as `prerender\\.concurrency`","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/react-router-dev/config/config.ts","lineNumber":566,"sourceCode":"  if (prerender) {\n    let isValidPrerenderPathsConfig = (p: unknown) =>\n      typeof p === \"boolean\" || typeof p === \"function\" || Array.isArray(p);\n\n    let isValidPrerenderConfig =\n      isValidPrerenderPathsConfig(prerender) ||\n      (typeof prerender === \"object\" &&\n        \"paths\" in prerender &&\n        isValidPrerenderPathsConfig(prerender.paths));\n\n    if (!isValidPrerenderConfig) {\n      return err(\n        \"The `prerender`/`prerender.paths` config must be a boolean, an array \" +\n          \"of string paths, or a function returning a boolean or array of string paths.\",\n      );\n    }\n\n    if (typeof prerender === \"object\" && \"unstable_concurrency\" in prerender) {\n      return err(\n        \"The `prerender.unstable_concurrency` config field has been stabilized as `prerender.concurrency`\",\n      );\n    }\n\n    let isValidConcurrencyConfig =\n      typeof prerender != \"object\" ||\n      !(\"concurrency\" in prerender) ||\n      (typeof prerender.concurrency === \"number\" &&\n        Number.isInteger(prerender.concurrency) &&\n        prerender.concurrency > 0);\n\n    if (!isValidConcurrencyConfig) {\n      return err(\n        \"The `prerender.concurrency` config must be a positive integer if specified.\",\n      );\n    }\n  }\n","sourceCodeStart":548,"sourceCodeEnd":584,"githubUrl":"https://github.com/remix-run/react-router/blob/6beaca39526d5716c3c112ebb0782765baa5a9ce/packages/react-router-dev/config/config.ts#L548-L584","documentation":"`prerender` is an object containing `unstable_concurrency`, which was stabilized and renamed to `prerender.concurrency`. The config layer detects the old key (this check runs before concurrency validation) and returns this migration error so you update the field name instead of the flag being silently ignored.","triggerScenarios":"A config that sets `prerender: { unstable_concurrency: 4 }` (or the older `prerender: { unstable_concurrency: ... }` from docs/examples of a previous release) after upgrading to a version where the field stabilized as `concurrency`.","commonSituations":"Upgrading @react-router/dev and hitting the renamed field; following outdated documentation or old GitHub discussions; config files copied from projects pinned to an earlier version.","solutions":["Rename `unstable_concurrency` to `concurrency` inside the `prerender` object.","Check the current docs/changelog for other renamed prerender options while upgrading.","Optionally omit the field entirely if the default concurrency is acceptable."],"exampleFix":"// before\nexport default { prerender: { unstable_concurrency: 4 } };\n\n// after\nexport default { prerender: { concurrency: 4 } };","handlingStrategy":"validation","validationCode":"const RENAMED: Array<[string, string]> = [[\"unstable_concurrency\", \"concurrency\"]];\nfor (const [from, to] of RENAMED) {\n  if (from in (prerenderConfig ?? {})) {\n    throw new Error(`Rename prerender.${from} -> prerender.${to}`);\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["After upgrading @react-router/dev, grep the config for `unstable_` keys — stabilized fields get renamed.","Read the release notes / changesets for config renames before pinning a new version.","Prefer omitting tuning flags unless you need them; defaults usually suffice."],"tags":["config","prerender","migration","renamed-option"],"backgroundTag":"renamed-config-option","analyzedSha":"6beaca39526d5716c3c112ebb0782765baa5a9ce","analyzedAt":"2026-08-18T18:04:14.938Z","contentChangedAt":"2026-08-18T18:04:14.938Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}