# Next.js 16 notes

Read `node_modules/next/dist/docs/` before writing routing or metadata code —
this version differs from older App Router conventions.

## Applies to Phase 3 (dynamic routes)

**`params` and `searchParams` are async.** Synchronous access was removed in 16.
Every dynamic route must await them:

```ts
// app/models/[slug]/page.tsx
export default async function Page({ params }: { params: Promise<{ slug: string }> }) {
  const { slug } = await params;
}
```

Same for `cookies()`, `headers()`, `draftMode()`, and `params` in
`generateMetadata`, `opengraph-image`, `icon`. `sitemap`'s `id` is async too.

`npx next typegen` generates `PageProps` / `LayoutProps` helpers.

## Other relevant changes

- Turbopack is the default bundler.
- `middleware.ts` is renamed to `proxy.ts`.
- Caching APIs changed: `revalidateTag`, `updateTag`, `refresh`, `cacheLife`,
  `cacheTag`. Check the docs before adding revalidation in Phase 3.
- `next/image`: `minimumCacheTTL`, `imageSizes`, `qualities` defaults changed;
  `images.domains` is deprecated in favour of `remotePatterns`.
- Parallel routes now require `default.js`.
