nextjs - 💡(How to fix) Fix Turbopack passes `params` as a Promise instead of an object in dynamic App Router routes [1 comments, 2 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#86161Fetched 2026-04-08 02:12:13
View on GitHub
Comments
1
Participants
2
Timeline
9
Reactions
0
Timeline (top)
labeled ×5closed ×1commented ×1issue_type_added ×1

Error Message

  • Next.js throws the “params is a Promise” dynamic API error. Error: Route "/test/[id]" used params.id. params is a Promise and must be unwrapped with await or React.use() before accessing its properties.

Code Example

Operating System:
  Platform: win32
  Arch: x64
  Version: Windows 10 Home Single Language
  Available memory (MB): 12101
  Available CPU cores: 4
Binaries:
  Node: 22.17.0
  npm: 11.5.2
  Yarn: 1.22.22
  pnpm: N/A
Relevant Packages:
  next: 16.0.2-canary.19 // Latest available version is detected (16.0.2-canary.19).
  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/willardcsoriano/next-turbopack-params-bug

To Reproduce

  1. Clone the reproduction repository: git clone https://github.com/willardcsoriano/next-turbopack-params-bug

  2. Install dependencies: npm install

  3. Start the dev server: npm run dev

  4. Open the browser and visit: http://localhost:3000/test/dynamic-id

  5. Observe the server console logs:

    • params is a Promise instead of a plain object.
    • Next.js throws the “params is a Promise” dynamic API error.
  6. Compare with the “working” route: http://localhost:3000/test-working/dynamic-id

  7. BOTH routes fail in the same way, confirming it is not code-specific.

Current vs. Expected behavior

Expected Behavior

params should always be a plain object in App Router dynamic routes, e.g.:

{ id: "dynamic-id" }

The function signature: export default function Page({ params })

should receive the resolved params object, matching documented behavior.

Actual Behavior

Turbopack passes params as a Promise:

Promise { { id: "dynamic-id" }, ... }

This causes Next.js to throw:

Error: Route "/test/[id]" used params.id. params is a Promise and must be unwrapped with await or React.use() before accessing its properties.

Even though the application never used ...params, use(), or any dynamic API.

Logs confirm:

  • params is a Promise
  • params.id is undefined
  • Turbopack breaks route param hydration at runtime
  • Failures occur BEFORE any custom project code is executed

Additional Notes

This occurs even in a pure minimal reproduction created from the official “reproduction-template”, with zero custom config.

Provide environment information

Operating System:
  Platform: win32
  Arch: x64
  Version: Windows 10 Home Single Language
  Available memory (MB): 12101
  Available CPU cores: 4
Binaries:
  Node: 22.17.0
  npm: 11.5.2
  Yarn: 1.22.22
  pnpm: N/A
Relevant Packages:
  next: 16.0.2-canary.19 // Latest available version is detected (16.0.2-canary.19).
  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)

Turbopack, Server Actions, Pages Router, Route Handlers

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

next dev (local), Vercel (Deployed), next build (local), next start (local)

Additional context

Severity

This breaks all dynamic App Router Server Components using Turbopack in development.

Additional context

  • Issue does not happen in next build / production.
  • Issue does not happen in Webpack mode (NEXT_USE_TURBOPACK=0).
  • Issue happens in all dynamic routes, regardless of folder name.
  • Issue appears before any user code is evaluated.
  • Source map warnings appear repeatedly in the console, suggesting a deeper Turbopack compilation issue.

Version regression

Reverting to older canary versions appears to fix the issue, indicating a recent regression in Turbopack route parameter handling.

Deployment environment

Reproduced on:

  • Windows 11
  • Node.js 20
  • Next.js 16 canary
  • Turbopack enabled (default)

extent analysis

TL;DR

The most likely fix is to revert to an older canary version of Next.js, as the issue appears to be a recent regression in Turbopack route parameter handling.

Guidance

  • Revert to an older canary version of Next.js to fix the issue, as indicated by the version regression information.
  • Try disabling Turbopack by setting NEXT_USE_TURBOPACK=0 to see if the issue persists, which can help confirm if the problem is indeed related to Turbopack.
  • Verify that the issue is resolved by checking the server console logs for the absence of the "params is a Promise" error and ensuring that params is a plain object in App Router dynamic routes.
  • Be aware that this issue only occurs in development with Turbopack enabled and does not affect production builds.

Notes

The issue seems to be specific to the combination of Next.js 16.0.2-canary.19, Turbopack, and dynamic App Router Server Components, and reverting to an older version or disabling Turbopack may be the most straightforward solution until the regression is fixed.

Recommendation

Apply workaround: Revert to an older canary version of Next.js, as this has been indicated to fix the issue, and the problem appears to be a recent regression in Turbopack route parameter handling.

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