What's Changed
New Features
- Added ISR (Incremental Static Regeneration) caching support for App Router in production environments with stale-while-revalidate strategy
- Added Node execution context handling for improved compatibility
Bug Fixes
- Fixed Pages production config headers and redirects handling after middleware rewrites
- Fixed Pages API body parsing and
res.send(Buffer) behavior to align with Next.js
- Fixed router.pathname to return route pattern instead of resolved path
- Fixed object-form query array serialization in
next/link and next/router
- Fixed router.push/replace to properly honor the
as parameter
- Fixed Link component to skip locale prefix for absolute and protocol-relative hrefs
- Fixed App Router ISR invalidation to match Next.js behavior for fetch and path tags
- Fixed next/form submitter overrides and query-string GET URLs handling
- Fixed useSearchParams to return ReadonlyURLSearchParams as expected
- Fixed sitemap XML namespaces, video entries, and alternate-language links generation
- Fixed useRouter to honor beforePopState callback when component is mounted
- Fixed route rewrites and redirects to preserve repeated route and query parameters
- Fixed dynamic route discovery to reject conflicting dynamic route siblings
- Fixed Pages Router query arrays and hash preservation in asPath
- Fixed catch-all routes validation to reject non-terminal catch-all routes in both Pages and App routers
- Fixed RSC client references deduplication to prevent module duplication in development
- Fixed next/headers to implement proper readonly semantics and legacy sync compatibility
- Fixed RequestCookie behavior and getAll(name) method implementation
- Fixed middleware object matcher semantics to match Next.js i18n behavior
- Fixed Pages Router production hydration for inlined page modules
Performance
- Added local tag cache for KV operations to reduce round-trips on cache hits
- Improved fetch cache to register stale-while-revalidate refetch with waitUntil() for better performance
- Fixed ISR cache handler to properly await KV put operations and prevent perpetual STALE status
- Added cache key namespacing by buildId for better ISR cache management
Internal / Chores
- Refactored ExecutionContext AsyncLocalStorage to be the single source of truth
- Updated ISR implementation to use getRequestExecutionContext() from ALS in background regeneration
Contributors
@JaredStowell
@NathanDrake2406
@Divkix
@james-elicx