Next.js keeps shipping. Version 15 brought some significant changes — and a few breaking ones. Here's the complete rundown.
cookies(), headers(), and params are now async:
// ❌ Old (sync)
import { cookies } from 'next/headers';
const cookieStore = cookies();
// ✅ New (async)
import { cookies } from 'next/headers';
const cookieStore = await cookies();This change enables better server infrastructure optimization.
next dev (Stable)Turbopack is now the default dev server. Speed improvements:
Finally stable and battle-tested.
Fetch requests are NOT cached by default anymore:
// Next.js 14 — cached by default
fetch('/api/data');
// Next.js 15 — no cache by default
fetch('/api/data'); // equivalent to { cache: 'no-store' }
// Opt in explicitly
fetch('/api/data', { cache: 'force-cache' });This aligns Next.js with how most developers expect HTTP to work.
Full React 19 compatibility including:
use() hook for promise unwrappinguseOptimistic<form> behaviorafter() APIRun code after the response is sent — perfect for logging and analytics:
import { after } from 'next/server';
export async function GET() {
after(async () => {
// Runs after response, doesn't block the user
await logRequest();
});
return Response.json({ data: 'hello' });
}npx @next/codemod@canary upgrade latest for auto-migrationscookies(), headers(), params to asyncNext.js 15 is a solid release. The caching changes especially make the mental model cleaner. Worth upgrading.