GuideNext.jsReactTypeScript

Next.js 15 App Router: What Changed and Why It Matters

A practical breakdown of the biggest App Router changes in Next.js 15.

February 10, 20255 min readBy Damantha Jasinghe

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.

typescript
// 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 cached

React 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.

D

Damantha Jasinghe

Full-stack developer & bot builder from Sri Lanka. CEO of SD Bots. Writing about Telegram, APIs, and modern web dev.

View portfolio