What's New in Next.js 15 and What It Means for Your Website
Next.js 15 was released in October 2024, and it is one of the more significant updates since the App Router arrived. Some changes make sites faster and development smoother, while others are breaking changes that need attention before you upgrade. Here's a practical overview for anyone running a business website on Next.js.
React 19 Support
The App Router in Next.js 15 is built on React 19. That brings improvements such as Actions for handling form submissions, the useActionState hook for tracking pending and error states, and better hydration error messages that make it easier to see exactly what went wrong.
For most sites, this means simpler, more reliable forms. Contact forms, newsletter sign-ups and search boxes can be built with less custom JavaScript and work even before the page has fully loaded.
Caching Is No Longer On by Default
One of the most common complaints about Next.js 14 was that data was cached aggressively by default, which could lead to stale content and confusion. Next.js 15 reverses this:
fetchrequests are no longer cached by default.GETRoute Handlers are no longer cached by default.- The client-side router cache no longer reuses page data by default when navigating.
You can still opt into caching wherever it makes sense, but the default behaviour is now much more predictable. If your site relied on the old defaults for performance, review your data fetching and add caching explicitly.
Async Request APIs
APIs that depend on the incoming request, including cookies(), headers(), params and searchParams, are now asynchronous. Instead of reading them directly, you await them:
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
// ...
}
This change lets Next.js prepare as much of the page as possible before the request details are known, which opens the door to faster rendering in future. It is also the change most likely to break an existing site during the upgrade.
Turbopack for Development Is Stable
Running next dev --turbo now uses Turbopack, the Rust-based bundler, as a stable option. Local server start-up and code updates are significantly faster, especially on larger projects. Quicker feedback during development means changes get built, tested and shipped faster.
Other Useful Additions
next/form: a new<Form>component that enhances standard HTML forms with client-side navigation, ideal for search forms.- TypeScript config: you can now write your configuration as
next.config.ts. - Static route indicator: a visual indicator during development shows which routes are static and which are dynamic.
- ESLint 9 support and improved self-hosting options.
How to Upgrade Safely
The Next.js team provides a codemod that handles much of the work automatically:
npx @next/codemod@canary upgrade latest
Even so, I'd recommend:
- Upgrading on a separate branch, never directly on your live site.
- Checking every page that reads params, cookies or headers, as these are the most likely to break.
- Reviewing data fetching to make sure content that should be cached still is.
- Testing forms and any third-party integrations before going live.
Should You Upgrade?
If your site is on Next.js 14 and working well, there's no need to rush. But staying on older versions for too long makes future upgrades harder and means missing out on performance and security improvements. For new projects, Next.js 15 is the clear choice.
Need a hand upgrading or planning a new build? Take a look at my web development and website migration and upgrade services.