Overview
Next.js 16.3 (released 2026-08-03; 16.3.8 was current on 2026-09-30) is the active line: 16.x is Active LTS and 15.x is Maintenance LTS. A 16 app uses the App Router on React 19.2+, Turbopack as the default bundler, and Node.js 20.9 or newer with TypeScript 5.1 or newer. Server components do the heavy lifting, server actions handle mutations, and caching is opt-in. This page holds the cross-cutting rules; each topic has its own page.
Server components by default, client islands at the edges
A file in app/ is a server component unless it starts with "use client". Push the directive to the smallest interactive leaf; wrapping a page in "use client" ships its whole subtree to the browser. See react-server-components and server-vs-client-components.
Mutate with server actions, not ad-hoc routes
Use a server action for any mutation a form or button triggers, and a [[frontend/nextjs-route-handlers|route.ts handler]] only for true HTTP endpoints: webhooks, public APIs, non-React clients, custom headers. Treat every action as a public endpoint that needs its own auth check.
Cache only what you mark
Set cacheComponents: true to make rendering dynamic by default and cache with "use cache", cacheLife, and cacheTag. Without the flag, fetch is uncached unless you opt in. Prefer Cache Components for new projects. Next.js 16.3 adds opt-in Instant Navigations (partialPrefetching: true alongside cacheComponents); the Next.js team says these behaviors become the default in a future major version.
// next.config.ts
export default { cacheComponents: true };Invalidate with updateTag in a server action and revalidateTag(tag, "max") elsewhere. The full model is in nextjs-caching.
Await every request API
params, searchParams, cookies(), headers(), and draftMode() are Promises. Next.js 15 allowed synchronous access with a warning; Next.js 16 removed it. See nextjs-async-dynamic-apis.
Drive metadata from the route
Export metadata or generateMetadata instead of writing <head> tags by hand. Render JSON-LD in the page body. See nextjs-metadata-api, technical, and structured-data.
Use layouts and route segments for shells
layout.tsx wraps its children and persists across navigations. loading.tsx and error.tsx give a segment its Suspense fallback and error boundary. (group) folders organize without changing the URL. @slot parallel routes need a default.js in every slot as of 16. See nextjs-app-router.
Run on Node.js
Use the Node.js runtime, which is the default. The Edge runtime is deprecated (remove export const runtime = "edge"), proxy.ts always runs on Node.js, and Cache Components requires Node.js. Keep middleware.ts only if a route still needs Edge during migration. See nextjs-middleware.
Know the 16 breaking changes before upgrading from 15
Run npx @next/codemod@canary upgrade latest, then npx @next/codemod@canary next-async-request-api . for any leftover synchronous access.
- Turbopack is the default for
next devandnext build. A customwebpackconfig fails the build; pass--webpackto keep webpack or migrate to the top-levelturbopackoption. middleware.tsis deprecated in favor ofproxy.ts.revalidateTagrequires a second argument; the one-argument form is deprecated.next lintand theeslintconfig option are removed; run ESLint or Biome directly.- AMP,
serverRuntimeConfig, andpublicRuntimeConfigare removed; use environment variables. next/imagechanged defaults and deprecatedpriority; see nextjs-image-optimization.
Stay on the latest patch
Next.js ships security releases on a regular cadence. The 2026-09-30 release fixed one high-severity and several lower-severity issues in 16.3.8 (Active LTS) and 15.5.27 (Maintenance LTS). Pin a patched version, and see react-server-components for the React Server Components advisories.