Next.js 15 App Router: What Changed and Why It Matters
A practical breakdown of the biggest App Router changes in Next.js 15.
Next.js 15 is a meaningful release — not just incremental improvements, but a genuine shift in how the framework handles caching, rendering, and the React boundary.
Caching is Opt-In Now
The biggest breaking change: fetch requests are no longer cached by default. In Next.js 14, every fetch was cached unless you explicitly opted out. In 15, nothing is cached unless you add { cache: 'force-cache' }. This makes behaviour more predictable and easier to reason about.
// Next.js 15 — you must opt in to caching
const res = await fetch('/api/data', { cache: 'force-cache' }); // cached
const res2 = await fetch('/api/data'); // not cachedReact 19 Support
Next.js 15 ships with React 19 support, including the new use() hook, server actions improvements, and the form component. The biggest practical win is improved hydration error messages — they now tell you exactly which element caused the mismatch.
Turbopack Stable
Turbopack is now stable for next dev. In this portfolio, dev server startup went from 3.2s to 0.8s after switching. next build still uses Webpack by default, but you can opt into Turbopack builds with --turbopack.
Damantha Jasinghe
Full-stack developer & bot builder from Sri Lanka. CEO of SD Bots. Writing about Telegram, APIs, and modern web dev.
View portfolio