Release

v1.0.1
April 9, 2026·feae4cc...0895413

What's Changed

CLI & Tooling

  • Added a new next internal upload-trace command that uploads CPU profiles (.cpuprofile files) and Turbopack trace files from .next-profiles/ to Vercel Blob storage via https://api.nextjs.org/api/upload-trace, with progress reporting and file-header validation. The @vercel/blob package is now bundled into next/dist/compiled/@vercel/blob.
  • Added a --internal-trace CLI flag to next build and next dev that enables writing Turbopack trace files directly to .next-profiles/ (previously they went elsewhere).
  • CPU profiles generated by --experimental-cpu-prof now write to .next-profiles/ instead of .next/cpu-profiles/, consolidating all profiling artifacts under one directory.
  • The next dev server now watches for deletion of the .next output directory and automatically restarts the server if it is removed while running.
  • When a lockfile mismatch is detected at startup, the error message now explicitly suggests running the existing dev server rather than leaving users without clear guidance.
  • The macOS Rosetta 2 warning now includes additional context to help developers understand the performance implications.
  • The build process now sets a descriptive process name during next build, making it easier to identify Next.js builds in system process listings.

Build Output

  • The build output tree view no longer renders the route symbol (e.g., , ) on parent rows that act as headers for getStaticPaths-generated child routes; the symbol now appears only on the concrete child route rows where it is meaningful.
  • The build output now correctly distinguishes between fully-static routes and PPR-enabled routes within getStaticPaths groups, surfacing the right icon per route type in the printed tree.
  • App route strings in the router are now parsed correctly whether or not they include parallel-route slot names, fixing edge cases in dynamic route matching and fallback param handling.
  • Fallback route params in the app-page handler are now resolved correctly, fixing a case where params were mishandled for dynamic segments.

Experimental APIs

  • Added a new experimental.unstableIO flag that gates the unstable_io() API (exported from next/cache), providing a synchronous I/O primitive for use in specific rendering contexts.
  • Added experimental.swcEnvOptions config key, which passes SWC preset-env-style options to the compiler, enabling fine-grained control over transpilation targets (e.g., disabling automatic polyfill injection).

Type Generation

  • next typegen and next build now generate RootParams types derived from the actual dynamic segments in the app directory, available via next/root-params. This gives type-safe access to root layout params in TypeScript projects.

MCP Server (Developer Tools)

  • Added a get_compilation_issues tool to the Next.js MCP server that surfaces Turbopack compilation errors in a structured format, making them accessible to AI coding agents and IDE integrations via the Model Context Protocol.

Routing (next-routing)

  • The next-routing package now supports middleware matching and app-request URL normalization, including improved i18n route resolution, redirect handling, and _next/data URL normalization.

Route Handlers

  • Fixed a bug in Route Handlers (app directory) where devRequestTimingInternalsEnd was not correctly called, and Turbopack server-side HMR was broken for route handler modules.
  • Fixed a race condition in server-side HMR where metadata route registration could overwrite the page runtime HMR handler, causing page HMR to stop working after a metadata route was registered.

Rendering & Streaming

  • Improved the Node.js stream rendering path with explicit "fork points" in the prerender pipeline, reducing the chance of incorrect stream sharing between concurrent renders.
  • Fixed a styled-jsx race condition in the Pages Router where concurrent renders could cause styles to be lost from the final HTML output.
  • Edge runtime compatibility improved: modules importing node:stream now resolve correctly in edge contexts rather than throwing at runtime.
  • onRequestError instrumentation hook now correctly receives stale ISR revalidation errors from app-page routes.

Testing Utilities

  • unstable_getResponseFromNextConfig now correctly resolves function-valued config fields (e.g., headers, rewrites) before returning, fixing test utilities that relied on the resolved values.

Turbopack Internals

  • Prevented duplicate concurrent task restores in the turbo-tasks backend by introducing meta_restoring/data_restoring flags and synchronous event-based waiting, eliminating a class of data races during parallel cache restoration.
  • Fixed a crash in hashed-cell mode when a task completed with an error, restoring stability for incremental cache invalidation under error conditions.
  • Turbopack now deduplicates output assets on emit and reports a build issue when two different assets conflict at the same output path, preventing silent file overwrites.
  • Turbopack switched from immutable build tokens to path-prefix-based asset resolution, simplifying the internal asset addressing model.
  • Multiple turbo-persistence performance improvements: BlockCache is now bypassed for uncompressed mmap-backed blocks (reducing overhead), referenced BlockCache entries are pinned to prevent premature eviction, file syncing is optimized, the is_empty() check uses an AtomicBool to avoid lock contention, and the SST builder uses sorted inserts for better write performance.
  • Added EventListener::wait() for synchronous blocking in non-async backend operation contexts.

React

  • Updated the vendored React and React DOM builds from 74568e86 (2026-03-28) to 404b38c7 (2026-04-08).

Dependency Updates

  • SWC core upgraded from v57 to v58, swc_sourcemap from v9 to v10, and swc_plugin_runner from v24 to v25.

Error Messages & Documentation

  • Documentation links in error messages and compile-time diagnostics that previously pointed to /docs/canary/… have been updated to stable paths.
  • The blocking-route error message now explicitly mentions params and searchParams as common dynamic data sources, improving discoverability.
  • experimental.useCache is now marked @deprecated in the config type (superseded by the "use cache" directive).

This release spans canary versions 16.2.1-canary.19 through 16.2.1-canary.29, delivering new CLI tooling for profile uploads, experimental unstable_io and swcEnvOptions APIs, TypeScript root-params generation, build-output display fixes, and a broad set of Turbopack stability and performance improvements.

Generated with NoteshipAI — AI-powered changelogs from your git history

Generate your own for free →