Next.js 15 changes the contract on dynamic APIs. If your MVP still assumes sync params and cookies(), upgrades will break builds | not runtime flakiness, hard TypeScript failures.
Breaking: Async params
// Next.js 14
export default function Page({ params }: { params: { slug: string } }) {
const { slug } = params;
}
// Next.js 15
export default async function Page({
params,
}: { params: Promise<{ slug: string }> }) {
const { slug } = await params;
}Breaking: cookies() and headers()
const cookieStore = await cookies();
const hdrs = await headers();Fetch caching
Default fetch caching behavior changed. Audit everyfetch() | add explicit cache ornext: { revalidate: 3600 } for marketing content;no-store for user-specific data.
Migration Checklist
- Upgrade Next + React together per release notes
- Grep for
params.in pages and fix async - Await cookies/headers in Server Components and route handlers
- Run
npm run buildon CI before merging - Smoke test Stripe webhooks and Supabase auth callbacks
Need this shipped in production, not just in a blog post? Start your MVP.
