`. Key forensic facts: - **Same source, built twice.** Only non-web commits sat between a healthy earlier deploy and the corrupt one; both deploys coexist. Rolling back to the earlier deploy fixed it with **no code change**. - **All assets intact.** Every `_next/static/chunks/*.js` referenced by the broken shell returns **200** — only the **prerendered HTML shell** is corrupt. - **Only the build-time static prerender is broken.** The dynamic (soft-navigation) RSC for `/` is complete (~160KB); navigating to `/` client-side works. Only a hard load of the static shell fails. - **Restored build cache correlation.** The broken deploy built on a restored turbopack build cache; a from-scratch (cache-cleared) rebuild of the same source produces a healthy shell. This points at the incremental `turbopackFileSystemCacheForBuild` path, which none of the related reports mention. **Expected:** a build that cannot emit a complete prerender for a route should **fail the build** (or fall back to dynamic), never write a truncated shell that is then cached and served `200`. ### Related issues #93889, #93890 (silent incomplete RSC payload on turbopack prerender), #86511, #92992 (`cacheComponents` blank page / postponed-state corruption). All open/unresolved; none mention the restored build cache. ### Provide environment information ``` Next.js: 16.2.6 (also reproduced on prior 16.x per production logs) Bundler: turbopack (next build) React: 19.2.x Node: 20 Deployment: Vercel (Production) Config: cacheComponents: true, experimental.turbopackFileSystemCacheForBuild: true ``` ### Which area(s) are affected? Partial Prerendering (PPR) / Cache Components, Turbopack, Output (build) ### Which stage(s) are affected? `next build` (prerender), Vercel (Deployed)","inLanguage":"en-US","datePublished":"2026-06-03T05:31:44Z","dateModified":"2026-06-03T05:31:44Z","mainEntityOfPage":{"@type":"WebPage","@id":"https://www.stepcodex.com/en/issue/next-js-turbopack-cache-components-build"},"author":{"@type":"Organization","name":"StepCodex","url":"https://www.stepcodex.com"},"publisher":{"@type":"Organization","name":"StepCodex","url":"https://www.stepcodex.com"},"articleSection":"nextjs","about":[{"@type":"Thing","name":"nextjs","url":"https://www.stepcodex.com/en/category/nextjs"}],"keywords":"Next.js 16 + turbopack + Cache Components: build emits a truncated prerendered HTML shell (no inlined RSC payload, no ) → blank page + \"Connection closed\", served with x-vercel-cache: HIT, nextjs, how to fix, fix, troubleshooting, root cause, solution, StepCodex","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":0}},{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.stepcodex.com/en/issue"},{"@type":"ListItem","position":2,"name":"nextjs","item":"https://www.stepcodex.com/en/category/nextjs"},{"@type":"ListItem","position":3,"name":"Next.js 16 + turbopack + Cache Components: build emits a truncated prerendered HTML shell (no inlined RSC payload, no ) → blank page + \"Connection closed\", served with x-vercel-cache: HIT","item":"https://www.stepcodex.com/en/issue/next-js-turbopack-cache-components-build"}]}]

nextjs - 💡(How to fix) Fix Next.js 16 + turbopack + Cache Components: build emits a truncated prerendered HTML shell (no inlined RSC payload, no </html>) → blank page + "Connection closed", served with x-vercel-cache: HIT

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Error Message

Uncaught (in promise) Error: Connection closed. at eo (<hash>-i.js:1) ← react-server-dom Flight client ... module evaluation @ <chunk>.js registerChunk @ turbopack-<hash>.js

Root Cause

Environmental / production-only — no isolated public reproduction (same situation as #93890). Filing with full production forensics from two coexisting Vercel deploys built from near-identical source — one corrupt, one healthy — because that is the strongest signal I can provide, plus a build-cache correlation the related issues don't mention.

Code Example

Uncaught (in promise) Error: Connection closed.
    at eo (<hash>-i.js:1)            ← react-server-dom Flight client
    ...
    module evaluation @ <chunk>.js
    registerChunk @ turbopack-<hash>.js

---

Next.js: 16.2.6  (also reproduced on prior 16.x per production logs)
Bundler: turbopack (next build)
React: 19.2.x
Node: 20
Deployment: Vercel (Production)
Config: cacheComponents: true, experimental.turbopackFileSystemCacheForBuild: true
RAW_BUFFERClick to expand / collapse

Link to the code that reproduces this issue

Environmental / production-only — no isolated public reproduction (same situation as #93890). Filing with full production forensics from two coexisting Vercel deploys built from near-identical source — one corrupt, one healthy — because that is the strongest signal I can provide, plus a build-cache correlation the related issues don't mention.

To Reproduce

  1. App Router on Next.js 16.2.6, React 19.2.x, next build with turbopack.
  2. next.config.js: cacheComponents: true and experimental.turbopackFileSystemCacheForBuild: true.
  3. The home route / is a PPR route: a server component rendering a client tree composed of several next/dynamic deferred children, with a loading.tsx streaming a skeleton shell.
  4. Deploy to Vercel as Production. The build runs incrementally on a restored cross-deploy turbopack build cache (build log line: Restored build cache from previous deployment (<id>)).
  5. The build reports success (◐ / Partial Prerender). At runtime, a hard load of / renders blank.

Current vs. Expected behavior

Current: the cached prerendered shell for / is truncated — ~64KB, containing the bootstrap <script>s but zero self.__next_f pushes (no inlined RSC payload) and no closing </html>; the body ends mid-document on a bare multipart boundary (--<hex>--). Response headers: HTTP 200, content-type: text/html, x-vercel-cache: HIT, x-nextjs-prerender: 1.

In the browser, the turbopack runtime evaluates chunks, the React Flight client reads the (empty) inlined RSC stream, and throws:

Uncaught (in promise) Error: Connection closed.
    at eo (<hash>-i.js:1)            ← react-server-dom Flight client
    ...
    module evaluation @ <chunk>.js
    registerChunk @ turbopack-<hash>.js

Hydration aborts and the page stays blank. A healthy build of the same route emits a ~306KB shell with 63 self.__next_f.push([1,"…"]) rows ending in …</script></body></html>.

Key forensic facts:

  • Same source, built twice. Only non-web commits sat between a healthy earlier deploy and the corrupt one; both deploys coexist. Rolling back to the earlier deploy fixed it with no code change.
  • All assets intact. Every _next/static/chunks/*.js referenced by the broken shell returns 200 — only the prerendered HTML shell is corrupt.
  • Only the build-time static prerender is broken. The dynamic (soft-navigation) RSC for / is complete (~160KB); navigating to / client-side works. Only a hard load of the static shell fails.
  • Restored build cache correlation. The broken deploy built on a restored turbopack build cache; a from-scratch (cache-cleared) rebuild of the same source produces a healthy shell. This points at the incremental turbopackFileSystemCacheForBuild path, which none of the related reports mention.

Expected: a build that cannot emit a complete prerender for a route should fail the build (or fall back to dynamic), never write a truncated shell that is then cached and served 200.

Related issues

#93889, #93890 (silent incomplete RSC payload on turbopack prerender), #86511, #92992 (cacheComponents blank page / postponed-state corruption). All open/unresolved; none mention the restored build cache.

Provide environment information

Next.js: 16.2.6  (also reproduced on prior 16.x per production logs)
Bundler: turbopack (next build)
React: 19.2.x
Node: 20
Deployment: Vercel (Production)
Config: cacheComponents: true, experimental.turbopackFileSystemCacheForBuild: true

Which area(s) are affected?

Partial Prerendering (PPR) / Cache Components, Turbopack, Output (build)

Which stage(s) are affected?

next build (prerender), Vercel (Deployed)

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING