# What changed in vinext

> 70 changes in vinext 1 from its official release notes, upgrade guides and advisories: 6 breaking, 2 security, 2 new APIs and options. Each one cited. Sources checked 2026-11-01. HTML: https://unstale.sh/npm/vinext/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## vinext 1

### Breaking changes

- cookies().get({ name }) is accepted, and read-only cookie mutators throw when called. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The App no longer retains every route handler request on the Node server. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Pages rendered dynamically are neither rendered in an automatic prefetch nor reused from one. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Entries for a tag revalidated with a cacheLife profile are served stale until they expire. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Defaults NODE_ENV to production. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Defaults NODE_ENV to production when starting the production server. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)

### Security

- Client reference scripts receive the CSP nonce. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Parallel slots and intercepted routes render their own unauthorized boundaries. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)

### New APIs and options

- Adds --vite-config to deploy. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Adds --ignore-wrangler-config for Cloudflare init. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)

### Performance

- next/image shim dependencies are pre-bundled for the Pages Cloudflare Worker. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The page and _app chunks are preloaded in the initial HTML. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Pages that do not use next/navigation no longer load the App Router runtime. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)

### Behavior and default changes

- A layout's children are retained above their own BFCache boundaries. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The catalog loader runs on experimental.messages catalogs. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The fetch cache is bypassed in draft mode. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- A full prefetch can be fulfilled from a recent navigation's visited response. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Pages applies next.config headers to res before Node API handlers run. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Data cache reads are skipped during on-demand revalidation. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Node streams passed to Pages API res.send are piped. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The incoming Request is kept when header filtering changes nothing. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- A single Response Store static Pages entry can be shared across hosts. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Server Actions run with their page's implicit tags. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Server render errors are logged in production. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Unclaimed cache hits under cached navigations advertise staleTimes.static. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- unstable_noStore() is a no-op under Cache Components. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Modules using use cache that are shipped inside node_modules are compiled. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Prefetch skips a URL that navigation would serve from its visited response. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- A single Workers Cache entry can be shared across hosts. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Client components that await at their top level can be streamed. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- An intercepted prefetch is classified by its intercepting page. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Plain links render on the server without client hooks. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- A navigation no longer waits for its page's metadata after a prefetched shell is available. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Defaults NODE_ENV to production. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Defaults NODE_ENV to production. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)

### Tooling

- Shim paths resolve through Vite so development loads one instance. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)

### Fixes and other changes

- Cached functions exported by name keep their arity. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- A page's resolved client stale time is stored instead of the pending marker. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The document is regenerated when a stale RSC request regenerates its page. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Init no longer writes native-module aliases to a missing empty-stub.js. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Copied history tree ids are scoped to their document. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- App Router errors reach error.tsx instead of the loading component. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Another root layout's not-found is kept out of matched routes. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Title templates now match Next.js behavior. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- A raw-body handler that destroys a stalled upload emits close. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- A refreshed parallel slot keeps its identity so refresh does not remount it. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Concurrent refreshes are dropped when another write has already replaced the revision. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Visible links are prefetched again only after router.refresh() finishes. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Static prefetches are kept when a Server Action calls refresh(). (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The title template rule now matches Next.js. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- The shim remains in use when next/image is user-aliased. (1.4.0) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.4.0)
- Client reference stylesheets and scripts use the configured crossOrigin; stylesheets are anonymous when it is unset. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- A segment's error boundary resets when the pathname changes. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- The legacy experimental.cacheComponents key is honored, including as an override during project detection. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- A route keeps its own title when rendering throws forbidden(). (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Built-in forbidden and unauthorized pages are rendered. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Parallel slots and intercepted routes render their own forbidden boundaries. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Pages Router not-found pages retain middleware Cache-Control. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Formats are inferred for extensionless Google font URLs. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Queued prefetches are dropped when their Link unmounts or leaves the viewport. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Ancestor loading boundaries render once below nested layouts, and sibling intercepting layouts can render while a synchronous page suspends. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Prefetches without a loading boundary render only the route tree. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Parallel slots and layouts now handle not-found signals in their own route tree, including nested and intercepted routes. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- A route keeps its own title when rendering throws notFound(). (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Accepts a single video or audio entry and renders emails, phone numbers, fax numbers, and alternate locales. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Config redirect Locations are percent-encoded like Next.js, and redirect statusCode is honored. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Contextual RSC requests reached through a rewrite are canonicalized. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Content remains on screen during response recovery for search transitions. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- A route keeps its own title when rendering throws unauthorized(). (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
- Reads the browser query after hydration. (1.3.1) — [release notes](https://github.com/cloudflare/vinext/releases/tag/vinext%401.3.1)
