Current status
Completed on this branch
- Bump
next@16.3.0, React 19, and matching@types/react* - Remove invalid
eslintkey fromweb/next.config.mjs(next lintis gone; oxlint stays) - Remove unused peer blockers:
next-cloudinary,react-accessible-accordion - Production build uses Turbopack (
next build; Next 16 default) - Top-level
turbopackconfig inweb/next.config.mjs(wasexperimental.turbopack) - Removed leftover
webpack()after Turbopack SVG/@alias rules covered all imports
Residual checklist
- Async Request APIs — no sync
cookies()/headers()/draftMode()/ serverparams/searchParamsusages found inweb/srcat upgrade time -
middleware.ts→proxy.ts— do not rename while Clerk still needs Edge; validate Node/proxyruntime before migrating (build warns thatmiddlewareis deprecated) -
revalidateTag— no usages found inweb/src -
cacheComponents/ Instant Navigations — enabled inweb/next.config.mjs(ENG-577). Productionnext buildis clean. Blockers were small: wrap service-consoleauth()in<Suspense fallback={null}>so the protected shell is not shown before platform-admin authorization, dropexport const runtime(Cache Components rejects anyruntimesegment config), and Suspense-bound layouts that callusePathname/useSearchParams. TheAuthenticatedProviderspathname gate usesfallback={children}so a postponedusePathname()keeps route content (or the route layout loading UI) in the PPR shell. The root layout uses a static background fallback so public/[slug]useParams()is not prerendered as that boundary’s fallback. Staff app paths shareprotectedAppRoutes.tsso/hotels,/assets, and the other single-segment staff pages do not look like public org slugs./dev/componentsis a client page so Cache Components does not SSRuseRefthere. Noinstant = falseopt-outs. Prefetch is production-only (next start/ deployed). - SVG /
webpack()innext.config.mjs— TurbopackresolveAlias+*.svgSVGR rules cover all imports; leftoverwebpack()removed - TypeScript —
typescriptis now real TS 7 for Next build +tsc; AST guard test imports@typescript/typescript6for the compiler API - Verify —
next buildgreen on Turbopack with Cache Components + Partial Prefetch. Web CI Playwright e2e (Clerk-backed) remains the auth/nav gate. Optional human smoke: sign-in + org switch.
Version-by-version reference
You can jump straight to 16.3; intermediate minors are not required. Almost all breaking work is in 16.0.16.0 — major (Oct 2025)
Official: blog, upgrade guide. Breaking / removals- React 19 required; Node ≥20.9; TypeScript ≥5.1
- Sync Request APIs removed — must
awaitcookies(),headers(),draftMode(),params,searchParams - Metadata image / sitemap generators:
params/idare Promises - Turbopack is default for
next devandnext build; customwebpack()fails the build unless you migrate config, pass--webpack, or keep Turbopack withnext build --turbopack(ignores leftoverwebpack()) experimental.turbopack→ top-levelturbopackexperimental.ppr/experimental_ppr/dynamicIOremoved →cacheComponentsnext lintremoved; AMP removed; runtime config APIs removed- Parallel route slots require explicit
default.js next/imagedefault changes (minimumCacheTTL,qualities,imageSizes, local IP, max redirects, local query strings)- Scroll no longer overrides global
scroll-behavior: smooth
middleware.ts→proxy.ts/ exportproxy(proxyis Node.js only; Edge needs deprecatedmiddlewarefor now)next/legacy/image,images.domains- Single-arg
revalidateTag(tag)→revalidateTag(tag, profile)orupdateTag()in Actions
- Cache Components, React Compiler (
reactCompiler),updateTag()/refresh(), routing/prefetch rewrite
16.1 — minor (Dec 2025)
Blog. Additive: Turbopack FS cache fornext dev (default on), bundle analyzer, next dev --inspect, transitive serverExternalPackages, next upgrade.
16.2 — minor (Mar 2026)
Blog. Additive: fasternext dev / rendering, adapters stable, debugging UX, unstable_catchError / unstable_retry, prefetch experimentals. Security patches through 16.2.6 are included in 16.3.
16.3 — minor (Aug 2026)
Blog. Largest release since 16.0; no major breakages for apps already on 16. Default wins: lower Turbopack memory, build FS cache, native Node streams SSR, agent docs /AGENTS.md, catchError, import.meta.glob, next/root-params, TS7 for typecheck in build.
Opt-in Instant Navigations: cacheComponents: true + partialPrefetching: true (future major default).
Watch: HMR path /_next/webpack-hmr → /_next/hmr if reverse proxies pin the old path.