The React Framework
A floor, not a guess: counts only commits whose author, co-author trailer, or message explicitly credits an AI tool (Claude, Copilot, Cursor, aider, Codex…). Based on 30 mainline commits. Unattributed AI code isn't counted here — the full audit estimates that separately.
canaryBumped version numbers across all packages and internal dependencies to canary.78, updating the main Next.js package and all associated tooling packages in the monorepo.
Introduces a new experimental `serverComponentsHmrCancellation` configuration flag that will allow Next.js dev to cancel Server Components hot module reload refreshes when superseded by newer ones. The flag is now wired throughout the codebase (config schema, runtime config, build templates, and environment variables) but doesn't yet add any actual cancellation behavior.
Bumped all Next.js package versions from canary.76 to canary.77, including the main next package and all internal packages like @next/env, @next/font, @next/swc, and ESLint plugins. This is a routine canary release update across the monorepo.
Optimized the development validation process to avoid redundant full renders when only Static Shell Validation is needed. The code now uses lazy evaluation (thunks) to defer rendering work until required, reducing unnecessary IO and making the validation logic clearer and more maintainable.
Disabled conditional optimization in the SWC compiler to work around a bug where multiple conditional branches with different return values were being incorrectly merged into fewer branches, causing incorrect logic in navigation input validation.
Updated form handling documentation examples to use SubmitEvent instead of the deprecated FormEvent type in React 19.2.10+. All form submission handler code samples now reflect the new recommended import and type annotation.
Added 7 new Google fonts to the library including Alien Block, Geist Pixel, Montenegrin Gothic One, Pliant, and Yuyu variants, while updating font metadata and TypeScript declarations for improved font selection.
Fixed a bug where internal Next.js framework stack frames were leaking into error output in development. The fix improves how source maps are processed to properly ignore-list frames from original source files that are shipped with input source maps, ensuring they stay hidden in both terminal logs and the browser error overlay.
Removed runtime assertions for cache life profiles by making the type system guarantee that `cacheLifeProfiles` is always fully resolved and present, not optional. This simplifies the "use cache" code path by eliminating optional chaining checks and per-invocation validation that was redundant with config normalization.
Refactored server-only code to use `.browser` variant modules, eliminating runtime `typeof window` checks and reducing the browser bundle size. Three modules (`client-boundary-params`, `navigation-dynamic-rendering`, `server-async-storage`) now have separate browser and server implementations that are automatically aliased during the build process.
Module browser variants are now automatically detected instead of hardcoded, with new linting rules to prevent conditional require statements and missing `.browser` file pairs. A script generates compiler aliases for any detected `.browser` module siblings.
Bumped all Next.js package versions from 16.3.0-canary.75 to 16.3.0-canary.76 across the monorepo, including core packages, plugins, and polyfills, along with updated dependency references and lock file.
Fixed a bug where navigating while a Server Action was in flight would cause the router to revert back to the previous page once the action completed. The fix ensures that only actions at the head of the queue advance it, preventing discarded actions from interfering with in-flight navigations.
Corrected overly strict nested cache validation that incorrectly flagged non-nested `'use cache'` blocks when the default cache profile was configured with a short lifetime. The error now only fires when a nested cache actually shortens an outer cache and the default profile itself is prerenderable.
The default cache handler now skips saving cache entries with `expire: 0` in production, since they're regenerated on every read and never served from storage. This eliminates unnecessary writes and round-trips for dynamic, short-lived values. Development mode continues storing these entries to maintain cache warmth across reloads.
Disabled an overly aggressive optimization that was skipping CI jobs for mid-stack pull requests in native GitHub stacks, even when lower PRs were already merged. The logic will now only skip based on Graphite's optimizer decision.
Fixed a regression where calling router.push() followed by router.refresh() would replace the previous history entry instead of creating a new one, causing the browser back button to skip the previous page. The fix ensures that pending push operations are carried forward through refresh actions so the history stack behaves correctly.
Updated React and related packages from canary version ec0fca31-20260701 to 3508aee6-20260702, including React DOM, React Server DOM, and Scheduler. This includes updates to compiled React modules across multiple build targets (browser, node, edge, etc.).
Corrected the validation regex for cacheHandlers configuration to properly reject invalid handler names containing numbers, underscores, dots, or special characters. The regex now anchors the pattern to validate the entire handler name instead of just checking for the presence of allowed characters.
Fixed the Turbopack test jobs to properly run on ARM machines by updating the machine type configuration in the CI workflow. Two test jobs (turbopack-dev-react and turbopack-production-react) now correctly use the ARM-based runner instead of the standard x86 runner.
Improved recovery when the Instant Navigation DevTools lock is active on blocking routes (routes that don't render anything before dynamic content). In production, the page now serves a minimal recovery document that clears the lock via client-side script instead of relying on response headers that can't be set from cache; in development it still shows an error overlay; and in `next start` it now shows a readable message instead of a generic error page.
Full-page loads with the Instant Navigation Testing API now work on deployed sites, not just in development. The fix embeds the testing bootstrap script into the prerendered static shell so it's available when the cached page is served, rather than only injecting it during dynamic renders.
Fixed a race condition in Instant Navigation Testing where a cookie write could resurrect after being deleted, causing navigations to hang after exiting an instant scope. The deleted-event handler now clears any resurrected cookie immediately after releasing the lock to prevent stale cookies from being carried into hard reloads.
Fixed an issue where segment names matching Object.prototype members (like 'constructor' or 'toString') would not work correctly in the segment explorer. The fix uses null-prototype objects for the trie's children map to avoid prototype pollution.
Changed how Next.js schedules prefetches when multiple links enter the viewport at once (like on page load). Previously, links lowest in the document got highest priority; now links nearest the top are prioritized first, which is a more sensible default. Updated related tests to match the new scheduling order.
Fixed an issue where the page title would disappear when navigating to prefetched routes with dynamic metadata using Cache Components. The fix correctly determines whether a prefetched page's metadata is complete or still loading, so the title is properly applied instead of being dropped to empty.
Cache entries with short expiration times (like `expire: 0`) now persist across dev reloads instead of being treated as cache misses, matching the fast-reload behavior already in place for private caches. The change keeps entries alive for a minimum threshold in development only, while preserving their actual expiration time for staging decisions and production behavior.
Bumped all package versions from 16.3.0-canary.74 to 16.3.0-canary.75 across the monorepo, including Next.js core and all internal packages. Updated version references in lerna.json, package.json files, and lock files.
Removed the external 'release' npm package and replaced it with custom JavaScript scripts for managing GitHub releases. The new implementation uses direct GitHub API calls instead of a third-party package, reducing dependencies while maintaining release functionality.
The Instant Navigation Testing API test suite now runs on deployed environments in addition to local development, catching regressions that only appear when prefetched shells are served from cache rather than rendered per-request. Test routes and assertions were reorganized to accurately reflect behavior differences between local and deployed environments.
A Monday email with what shipped in next.js, in plain English. No account needed — drop your email and we'll tell you when it's live.
[](https://repowrapped.com/gh/vercel/next.js)<a href="https://repowrapped.com/gh/vercel/next.js"><img src="https://repowrapped.com/gh/vercel/next.js/badge.svg" alt="shipped this week" /></a>