Next.js 15 — Stable release with breaking async APIs and caching changes
Key Points
- Async Request APIs — breaking
- GET Route Handlers uncached by default
- React 19 support (RC)
Summary
Next.js 15 is stable and production-ready. The release focuses on stability, performance, and major platform changes: async request APIs (breaking), new caching semantics (breaking for GET route handlers and client router cache), React 19 support (RC), tooling improvements (codemod CLI, Turbopack stable), and several developer experience updates (improved hydration errors, static route indicator, instrumentation API, and experimental React Compiler).
Key Points
- Upgrade tools: use the new codemod CLI to smooth upgrades:
npx @next/codemod@canary upgrade latest. You can also update packages manually withnpm install next@latest react@rc react-dom@rc. - Breaking changes (migrate ASAP):
- Async Request APIs: APIs that access request-specific data (
cookies,headers,draftMode,paramsin layouts/pages/routes/defaults,generateMetadata,generateViewport, andsearchParamsin pages) are becoming async. A codemodnpx @next/codemod@canary next-async-request-apiis available; synchronous access will warn until the next major. - Caching semantics: GET Route Handlers are uncached by default and the Client Router Cache uses a
staleTimeof 0 for Page segments. Opt back in with route config (e.g.export const dynamic = 'force-static') or the experimentalstaleTimesconfig innext.config.ts.
- Async Request APIs: APIs that access request-specific data (
- React and compiler:
- App Router runs on React 19 RC; Pages Router remains compatible with React 18 to ease migration. Running both React versions in one app is not recommended.
- Experimental React Compiler support is available (Babel plugin for now).
- Dev tooling and performance:
- Turbopack Dev (
next dev --turbo) is stable with large gains in startup and Fast Refresh times. - Improved hydration error UI shows source and suggestions to debug faster.
- Static Route Indicator in dev highlights static vs dynamic routes to aid optimization.
- Turbopack Dev (
- New / improved APIs and platform features:
- Experimental
unstable_afterallows scheduling work after a response finishes streaming (enable viaexperimental.afterinnext.config.ts). instrumentation.jsAPI is stable for server lifecycle observability.- Enhanced forms (
next/form), TypeScript support fornext.config.ts, bundling external packages config (stable), ESLint 9 support, server-action security improvements, and additional self-hosting Cache-Control controls.
- Experimental
Migration checklist (practical steps)
- Run the codemod CLI:
npx @next/codemod@canary upgrade latestandnpx @next/codemod@canary next-async-request-api. - Audit usages of
cookies,headers,params,searchParams, anddraftModeand convert to async patterns where required. - Determine caching needs: opt into static caching with
export const dynamic = 'force-static'for route handlers or configureexperimental.staleTimesinnext.config.ts. - Test with Turbopack Dev for faster iteration; keep an eye on React version alignment between App and Pages Routers.
- Read the upgrade guides for Next.js 15 and React 19 for detailed steps and edge cases.
For engineers: focus on the async request API migration and caching opt-ins first, use the codemod to automate most changes, and verify CI/local test suites under the new defaults.