Shareable release notes

next.js

vercel/next.jsBuilt with ShipDiff

Share on X

Every shipped update, patch, and improvement in one public feed. Read the timeline, copy the link, and let your product updates keep marketing your product for you.

Entries

3

Last updated

April 14, 2025

Format

Features, fixes, improvements, breaking changes

v15.3.0April 14, 2025Latest

Turbopack for Production Builds, new Client Instrumentation Hook

Section

Features

  • Turbopack now supports production builds (next build --turbopack). Opt in to faster, incremental bundling for your CI pipelines
  • New instrumentation.js client-side hook lets you initialize third-party observability SDKs once before React hydration
  • next/image gains a new quality config option accepting a function, enabling per-image optimization strategies
  • App Router now supports generateSitemaps returning more than 50,000 entries via streaming

Section

Improvements

  • Turbopack cold starts are 30–40% faster compared to v15.2 through improved module graph parallelism
  • next dev memory footprint reduced by ~15% for large monorepos with many route segments
  • Build output now shows a structured breakdown of Server Components, Client Components, and edge middleware sizes
  • next/font self-hosted fallback CSS is now tree-shaken from the client bundle when the font is never used

Section

Fixes

  • Fixed a hydration mismatch when headers() was called inside a Server Component that was also used in a @parallel slot
  • useSearchParams() no longer triggers an infinite re-render cycle when used inside a Suspense boundary with startTransition
  • Resolved incorrect static optimization for routes that call cookies() inside a deeply nested layout
  • Fixed next/link prefetch incorrectly firing for external href values in certain edge-runtime deployments
v15.1.0December 10, 2024

after() API is now stable, improved error recovery

Section

Features

  • after() is promoted from experimental to stable — schedule side-effects (analytics, logging, cache invalidation) that run after the response is sent without blocking the user
  • forbidden() and unauthorized() functions are now available in Server Actions and Route Handlers to return 403 / 401 responses declaratively
  • <Form> component gains a replace prop to replace history entries instead of pushing, useful for filter and search UIs

Section

Improvements

  • Error overlay redesigned with a clearer source-frame layout, inline git blame, and a direct link to open the offending file in VS Code
  • next/dynamic lazy-loading boundaries now display skeleton placeholders in the Next.js dev overlay instead of blank regions
  • Static generation errors now surface the specific segment path that failed rather than a generic build message
  • next start production server startup time reduced by ~20% by deferring route-manifest parsing

Section

Fixes

  • revalidatePath and revalidateTag no longer incorrectly skip sibling segments when called from a shared layout
  • Fixed a regression in v15.0 where notFound() thrown inside a generateStaticParams export caused an unhandled promise rejection
  • Resolved an issue where metadata.robots set to { index: false } was not applied when the page was also ISR-cached
  • cookies().set() in Server Actions no longer silently drops SameSite=None; Secure when the deployment is behind a reverse proxy
v15.0.0October 21, 2024

React 19 support, Turbopack Dev stable, async Request APIs

Section

Features

  • React 19 support — Next.js 15 ships with full React 19 compatibility including the new use() hook, optimistic updates, and form actions
  • Turbopack Dev is stablenext dev --turbopack is now the recommended dev server; up to 76.7% faster local server startup and 96.3% faster code updates in large apps
  • Async Request APIscookies(), headers(), params, and searchParams are now async. Synchronous access still works but is deprecated and will be removed in v16
  • `<Form>` component — new built-in component that extends <form> with prefetching, client-side navigation, and progressive enhancement out of the box
  • `next/after` (experimental) — run code after a response finishes streaming without blocking it, ideal for logging and analytics

Section

Breaking Changes

  • Caching defaults changed: fetch requests and Route Handlers are no longer cached by default. Opt into caching explicitly with { cache: "force-cache" } or export const dynamic = "force-static"
  • GET Route Handlers are no longer automatically static; add export const dynamic = "force-static" to restore previous behavior
  • <Link> no longer renders an <a> child by default — remove any <a> tags nested directly inside <Link>
  • Minimum Node.js version bumped to 18.18.0

Section

Improvements

  • Bundler chunk splitting strategy overhauled — production JS payloads reduced by an average of 20% for typical App Router applications
  • next/image remote pattern matching now supports wildcards in hostname segments (e.g. *.example.com)
  • TypeScript errors in next.config.ts are now surfaced as build errors rather than warnings

Section

Fixes

  • Fixed a race condition where concurrent Server Action invocations could reuse a stale router cache entry
  • useFormStatus now correctly reflects pending state when a Server Action is called from a nested <form>
  • Resolved incorrect viewport meta tag output when both metadata.viewport and the legacy themeColor were set
Share & Embed

Auto-generate changelogs in CI — powered by ShipDiff.

Add a badge to your repo or embed this feed on your site. Every click sends developers straight to your latest release notes.

Badge preview

README badge

Markdown badge

Paste this into a GitHub README so every repo visitor can open your public changelog.

[![Changelog](https://shipdiff.nanocorp.app/badge.svg)](https://shipdiff.nanocorp.app/changelog/00000000-0000-0000-0000-000000000002)

Website embed

Iframe embed

Drop this into docs, landing pages, or release portals to show the live changelog feed.

<iframe src="https://shipdiff.nanocorp.app/changelog/00000000-0000-0000-0000-000000000002?embed=true" width="100%" height="640" style="border:0;border-radius:16px;overflow:hidden;background:#06060a;" loading="lazy" title="next.js changelog by ShipDiff"></iframe>

Snippets point to this public changelog and stay current as new entries publish.

Want a changelog like this for your repo? Generate one free with GitHub.

Generate one free with GitHub →