nextjs - ✅(Solved) Fix Next 16: Suspense boundaries hang indefinitely for full prefetched (prefetch=true) links on Vercel after `rdcForNavigations` made default for `cacheComponents` - affects 16.0.0-canary.6 onwards including 16.0.0 stable [1 pull requests, 3 comments, 3 participants]

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…
GitHub stats
vercel/next.js#85162Fetched 2026-04-08 02:17:15
View on GitHub
Comments
3
Participants
3
Timeline
19
Reactions
5
Author
Timeline (top)
subscribed ×6commented ×3labeled ×3renamed ×2

Fix Action

Fix / Workaround

I have not tried patching Next.js to turn rdcForNavigations off again, but it crossed my mind 🙃

PR fix notes

PR #85411: remove unstable_forceStale prefetch option & restore prefetch={true} functionality

Description (problem / solution / changelog)

prefetch={true} with cacheComponents was opting into runtime prefetching, with unstable_forceStale preserving the old behavior of fetching the full (stale) data. However we only intended to expose runtime prefetching via the export const prefetch segment config.

This removes unstable_forceStale and restores previous prefetch={true} behavior. I've disabled some of the tests that were relying on the old link behavior for opting into runtime prefetching - we'll need to refactor those to use the segment opt-in or just remove them all together.

Fixes #85162 Closes NAR-320

Changed files

  • packages/next/src/client/app-dir/link.tsx (modified, +3/-12)
  • packages/next/src/client/link.tsx (modified, +1/-1)
  • test/e2e/app-dir/searchparams-reuse-loading/app/page.tsx (modified, +4/-4)
  • test/e2e/app-dir/searchparams-reuse-loading/app/with-middleware/page.tsx (modified, +2/-8)
  • test/e2e/app-dir/segment-cache/metadata/app/page.tsx (modified, +6/-9)
  • test/e2e/app-dir/segment-cache/metadata/segment-cache-metadata.test.ts (modified, +2/-2)
  • test/e2e/app-dir/segment-cache/prefetch-layout-sharing/app/page.tsx (modified, +0/-18)
  • test/e2e/app-dir/segment-cache/prefetch-layout-sharing/components/link-accordion.tsx (modified, +0/-2)
  • test/e2e/app-dir/segment-cache/prefetch-layout-sharing/prefetch-layout-sharing.test.ts (modified, +12/-7)
  • test/e2e/app-dir/segment-cache/prefetch-runtime/components/link-accordion.tsx (modified, +0/-2)
  • test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (modified, +9/-5)
  • test/e2e/app-dir/segment-cache/revalidation/app/refetch-on-new-base-tree/layout.tsx (modified, +9/-16)
  • test/e2e/app-dir/segment-cache/search-params/app/search-params/page.tsx (modified, +4/-4)
  • test/e2e/app-dir/segment-cache/staleness/app/page.tsx (modified, +2/-2)
  • test/e2e/app-dir/segment-cache/staleness/app/runtime-stale-10-minutes/page.tsx (modified, +2/-0)
  • test/e2e/app-dir/segment-cache/staleness/app/runtime-stale-5-minutes/page.tsx (modified, +2/-0)
  • test/e2e/next-link-errors/next-link-errors.test.ts (modified, +1/-1)

Code Example

Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 25.0.0: Wed Sep 17 21:41:26 PDT 2025; root:xnu-12377.1.9~141/RELEASE_ARM64_T6041
  Available memory (MB): 131072
  Available CPU cores: 16
Binaries:
  Node: 22.18.0
  npm: 10.9.3
  Yarn: 1.22.22
  pnpm: 10.18.3
Relevant Packages:
  next: 16.0.0-canary.16 // Latest available version is detected (16.0.0-canary.16).
  eslint-config-next: N/A
  react: 19.2.0
  react-dom: 19.2.0
  typescript: 5.9.3
Next.js Config:
  output: N/A
RAW_BUFFERClick to expand / collapse

Link to the code that reproduces this issue

https://github.com/rikbrown/nextjs-rdc-prefetch-hang-on-vercel

https://vercel-rdc-deep-dive-ql5p89xy5-rikinsearchofas-projects.vercel.app/en/static-page

To Reproduce

The provided reproduction consists of a top-level layout with several dynamic pages (and a static page). There is a loading.tsx boundary around most of the pages. Each dynamic page is configured to await connection() then sleep for a second to mimic a dynamic network request. In addition, there is one extra dynamic page which has no loading boundary, but instead implements it itself using Suspense.

  1. Deploy the application to Vercel (pnpm vercel deploy)
  2. Visit the application e.g. https://vercel-rdc-deep-dive-ql5p89xy5-rikinsearchofas-projects.vercel.app/en/static-page
  3. Click on link (prefetch=true) to dynamic-page-1: observe that the children UI hangs on "Page Loading..."
  4. Hard-refresh: observe that the children UI resolves after 1s to "Dynamic Page 1 Loaded"
  5. Click on the prefetch=auto or prefetch=false links and observe their associated pages load correctly after 1 second, or the static page link which loads instantly.
  6. Click on the dynamic-with-suspense link, which is also full prefetched, and observe that the page loads and hangs at the Suspense boundary (in fallback) - the same effect but proving not just a loading.tsx issue.

Current vs. Expected behavior

As described above, it seems like Suspense boundaries often hang indefinitely when deployed on Vercel when they act as the boundary for a dynamic segment. This occurs only when prefetch={true}: it does not occur with auto or no prefetching.

Provide environment information

This is my local environment, but it does not reproduce on next start. I can only reproduce this in Vercel (nb: have not tried any other cloud providers).

Update 10/22: can confirm this is an issue on the just-released Next 16 stable

Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 25.0.0: Wed Sep 17 21:41:26 PDT 2025; root:xnu-12377.1.9~141/RELEASE_ARM64_T6041
  Available memory (MB): 131072
  Available CPU cores: 16
Binaries:
  Node: 22.18.0
  npm: 10.9.3
  Yarn: 1.22.22
  pnpm: 10.18.3
Relevant Packages:
  next: 16.0.0-canary.16 // Latest available version is detected (16.0.0-canary.16).
  eslint-config-next: N/A
  react: 19.2.0
  react-dom: 19.2.0
  typescript: 5.9.3
Next.js Config:
  output: N/A

Which area(s) are affected? (Select all that apply)

Dynamic Routes, cacheComponents, Linking and Navigating, Partial Prerendering (PPR)

Which stage(s) are affected? (Select all that apply)

Vercel (Deployed)

Additional context

After bisecting this, I identified this change started affecting us when rdcForNavigations was made default in 16.0.0-canary.6. However, if I go back to canary.5 - it does not occur if rdcForNavigations is false, but does occur if I turn on the experimental flag.

I have not tried patching Next.js to turn rdcForNavigations off again, but it crossed my mind 🙃

The current code in the repo is deployed to https://vercel-rdc-deep-dive-cma0huu9z-rikinsearchofas-projects.vercel.app/en/static-page .

extent analysis

TL;DR

  • The issue can be potentially resolved by disabling the rdcForNavigations experimental flag or downgrading to a Next.js version prior to 16.0.0-canary.6.

Guidance

  • Investigate the impact of the rdcForNavigations flag on the application's behavior, as the issue seems to be related to this feature.
  • Try setting rdcForNavigations to false in the Next.js configuration to see if it resolves the issue.
  • If downgrading to a previous version of Next.js is feasible, test the application with a version prior to 16.0.0-canary.6 to confirm if the issue is indeed related to this version.
  • Monitor the application's behavior on Vercel after making these changes to verify if the issue is resolved.

Example

  • No specific code example is provided, as the issue seems to be related to the configuration and version of Next.js rather than a specific code snippet.

Notes

  • The issue only occurs on Vercel and not on local development environments, which might indicate a platform-specific problem.
  • The rdcForNavigations flag was introduced in 16.0.0-canary.6, and disabling it or downgrading to a previous version might resolve the issue.

Recommendation

  • Apply workaround: Disable the rdcForNavigations experimental flag or downgrade to a Next.js version prior to 16.0.0-canary.6, as this seems to be the most likely cause of the issue.

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

nextjs - ✅(Solved) Fix Next 16: Suspense boundaries hang indefinitely for full prefetched (prefetch=true) links on Vercel after `rdcForNavigations` made default for `cacheComponents` - affects 16.0.0-canary.6 onwards including 16.0.0 stable [1 pull requests, 3 comments, 3 participants]