October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk4 min

Next.js “params should be awaited”: Find and Fix Every Sync Read

The “params should be awaited” message means an App Router request value is being read synchronously. Here’s how to fix it and check the rest of your routes.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

If you see “params should be awaited” in a Next.js App Router project, find where code reads the Promise-based params value before unwrapping it. In server code, use await params; in a synchronous Client Component, use React’s use(params). Next.js 15 temporarily allowed some synchronous reads for migration compatibility, but Next.js 16 removed that compatibility.

What the error means

Next.js changed request-time APIs that depend on incoming request information from synchronous values to Promises. The change covers params passed to pages and layouts, as well as page searchParams and related APIs. Reading a field directly, such as params.slug, or enumerating, spreading, or iterating the object before unwrapping it can trigger the warning or error. The official documentation describes the change as making these APIs asynchronous in Next.js 15: Dynamic APIs are Asynchronous.

As an Amazon Associate I earn from qualifying purchases.

The precise behavior depends on version and configuration. In Next.js 15, synchronous access was deprecated but temporarily supported for migration; with cacheComponents enabled, it is an error. In Next.js 16, synchronous access is no longer supported. The related prerender error reference explains the Cache Components case: Synchronous access to params.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fix it in server code with await

For a Server Component page or layout, make the component function asynchronous, await params, and only then use its fields. Update the prop type to a Promise as well:

export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
  const { slug } = await params
  return <h1>{slug}</h1>
}

Apply the same rule in a Route Handler: its context supplies params as a Promise, so await it before reading route values. The official references show the expected shapes for Route Handlers and Dynamic Routes.

Fix it in a synchronous Client Component with use

A Client Component cannot itself be an async component. If it must remain synchronous, import React’s use and unwrap the Promise before accessing a field:

'use client'
import { use } from 'react'

export default function Page({ params }: { params: Promise<{ slug: string }> }) {
  const { slug } = use(params)
  return <h1>{slug}</h1>
}

Choose based on the component boundary: use await in server code and use in a synchronous Client Component. The Next.js error reference documents both approaches: Dynamic APIs are Asynchronous.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Find every synchronous access

The first stack frame may not identify every affected call site. Search the App Router project for direct property reads and operations that inspect the object before it is unwrapped. Also follow helper calls and re-exports: the route file may export a component defined elsewhere.

  • Direct reads such as params.id or params.slug.
  • Destructuring before awaiting, such as const { id } = params.
  • Object spread, Object.keys(params), or iteration over params.
  • Helpers that receive params and immediately inspect it.
  • Components re-exported from another module, where the actual page or layout definition resides.

Then check each route entry point and related API; changing one page does not migrate the rest of the application.

Audit the other affected route APIs

The async change is not limited to a page’s body. Check layouts, Route Handlers, default files, and code that produces metadata or viewport information. Page searchParams is asynchronous too. Special image and icon route APIs are also included in the upgrade guidance.

  • Metadata: update generateMetadata and any code that reads request-dependent route values.
  • Viewport: check generateViewport for synchronous access.
  • Special routes: inspect image and icon-related route files covered by the migration guide.
  • Page queries: await searchParams in server code or unwrap it with use where a synchronous Client Component consumes it.

See the official Next.js 15 upgrade guide for migration scope and examples.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Update route prop types

Change old plain-object annotations to Promise-based types. For example, a page receiving a slug should declare params: Promise<{ slug: string }>. Next.js also provides generated route helpers, including PageProps, LayoutProps, and RouteContext, for route-specific typing. Type generation runs during next dev and next build, or can be invoked with next typegen. The Page reference describes the generated page props.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Use the codemod, then review its changes

The official codemod can migrate many dynamic API usages, but it cannot safely infer every component’s role or rewrite every case. Run it from the project root:

npx @next/codemod@latest next-async-request-api .
  1. Review the resulting diff and confirm that each migrated route has the correct server or client pattern and Promise-based type.
  2. Search the project for @next-codemod-error and resolve each remaining manual-migration case.
  3. Only change a comment prefix to @next-codemod-ignore when the flagged case genuinely needs no action.
  4. Run the project’s normal development or build checks to catch unresolved migration comments and type errors.

The codemod and remaining-comment behavior are documented in the Next.js codemods guide.

Consider when you unwrap request data

Awaiting a request-time value only where it is needed can leave more of a page eligible for static rendering. By contrast, using page searchParams reads request-time data and opts the page into dynamic rendering; with Cache Components, where that value is accessed affects how much can be prerendered. Avoid unwrapping earlier than necessary when the value is only needed by part of a page. See the Page reference for the rendering implications of searchParams.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Check your version before interpreting the message

Next.js version or setting What to expect What to do
Next.js 14 and earlier params was synchronous. When upgrading, adopt the Promise-based API shape.
Next.js 15 Synchronous access was temporarily supported for migration but deprecated; with cacheComponents enabled, it is an error. Use await or React use rather than relying on compatibility behavior.
Next.js 16 Synchronous access to request-time APIs such as params and page searchParams has been removed. Use the async API and update route typing.

The migration behavior is covered by the Next.js 15 upgrade guide and Next.js 16 upgrade guide.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.