{"record":{"id":"296d0cdc7297e55c","repo":"vercel/next.js","slug":"revalidate-0-configured-segment","errorCode":null,"errorMessage":"revalidate: 0 configured ${segment}","messagePattern":"revalidate: 0 configured (.+?)","errorType":"exception","errorClass":"DynamicServerError","httpStatus":null,"severity":"error","filePath":"packages/next/src/server/app-render/create-component-tree.tsx","lineNumber":381,"sourceCode":"        // A request store doesn't have a revalidate property.\n        break\n      // createComponentTree is not called for these stores:\n      case 'cache':\n      case 'private-cache':\n      case 'prerender-client':\n      case 'validation-client':\n      case 'unstable-cache':\n      case 'generate-static-params':\n        break\n      default:\n        workUnitStore satisfies never\n    }\n\n    if (!workStore.forceStatic && isPrerendering && defaultRevalidate === 0) {\n      const dynamicUsageDescription = `revalidate: 0 configured ${segment}`\n      workStore.dynamicUsageDescription = dynamicUsageDescription\n\n      throw new DynamicServerError(dynamicUsageDescription)\n    }\n  }\n\n  // Read unstable_dynamicStaleTime from page modules (not layouts) and track it on\n  // the store's stale field. This affects the segment cache stale time via\n  // the StaleTimeIterable.\n  if (\n    isPage &&\n    typeof layoutOrPageMod?.unstable_dynamicStaleTime === 'number'\n  ) {\n    const pageStaleTime = layoutOrPageMod.unstable_dynamicStaleTime\n    switch (workUnitStore.type) {\n      case 'prerender':\n      case 'prerender-runtime':\n      case 'prerender-legacy':\n        if (workUnitStore.stale > pageStaleTime) {\n          workUnitStore.stale = pageStaleTime\n        }","sourceCodeStart":363,"sourceCodeEnd":399,"githubUrl":"https://github.com/vercel/next.js/blob/43273a1d21a35646ec43230e05727e18ac258396/packages/next/src/server/app-render/create-component-tree.tsx#L363-L399","documentation":"Not an error by itself: createComponentTreeInternal assigns this string to workStore.dynamicUsageDescription when, during prerendering (and not under forceStatic), a segment declares revalidate: 0 (i.e. always-dynamic caching). Recording the description here is what later produces the static-generation bailout error explaining which segment opted the route out of static rendering.","triggerScenarios":"Thrown at packages/next/src/server/app-render/create-component-tree.tsx:381 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use `revalidate: false` instead of `revalidate: 0`; 0 is not a valid revalidate value for this segment."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"43273a1d21a35646ec43230e05727e18ac258396","analyzedAt":"2026-08-19T02:10:13.922Z","contentChangedAt":"2026-08-19T02:10:13.922Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}