Skip to content
Putting technology to work.
Insights to guide decisions and action.

Search articles

vinext 1.0: deciding before moving Next.js off Vercel

Table of contents · 6 items

Your Next.js corporate site or web app, built by a web agency, runs on Vercel. Your other sites and DNS are consolidated on Cloudflare, so could hosting move there too? If you are thinking along those lines, there is now another candidate: "vinext", developed by Cloudflare. According to npm records, 1.0.0 was published on September 28, 2026, and 1.0.1 on October 1.

On the other hand, vinext's README states at the very top that it is "not yet a replacement for every application or production workload" and names OpenNext as a more mature option. Rather than deciding to switch based on the 1.0 version number alone, we organize the material for the decision from the README, the changelog, and the results of running it on a Next.js 16 test app.

vinext is "the Next.js API rebuilt on Vite"

According to the README, vinext does not use the output of next build; instead, it reimplements the Next.js APIs (routing, server rendering, next/* modules and so on) on top of the Vite build tool. It says it supports the App Router and Pages Router, React Server Components, Server Actions, middleware, route handlers, ISR and static export. It targets Next.js 16.x and does not handle APIs that were deprecated in older versions.

The main deployment target is Cloudflare Workers. For other targets (Vercel, Netlify, AWS Amplify, Deno Deploy, Node.js servers and so on), you deploy by adding a Vite plugin called Nitro. It is not a fork of Next.js.

According to npm's publication records, it reached 1.0.0 after 14 beta releases, starting with beta.0 on July 4, 2026. The 1.0.0 changelog lists changes such as caching only the pages that Next.js treats as static, having vinext check report which next.config entries are ignored or applied, and switching the initial Cloudflare setup to the new "cf" CLI.

What the README lists as "not there yet"

The README's "Known gaps" section lists the following items as work in progress.

  • Cache Components and Partial Prerendering: "use cache" is only partially implemented, and the behavior of cacheComponents may not match Next.js
  • Build-time image and font optimization: On Cloudflare, images can be optimized at request time, but Next.js's build-time image processing is not reproduced
  • Native modules during App Router development: sharp, resvg, satori and others may fail on the development server
  • Settings tied to the deployment target: preferredRegion is ignored, and runtime does not choose where code runs

Separately, the README explicitly states that Vercel-specific features (@vercel/og for the edge runtime, Vercel Analytics, Vercel KV/Blob/Postgres) will not be supported going forward. On production use, its "Can I use this in production?" entry answers "You can, with caution."

Four ways to move off Vercel

The descriptions of the options are based on vinext's README. We did not open the official OpenNext or Next.js documentation for this article, so please check the details of each in their official materials.

OptionHow it worksPositioning in vinext's README
Stay on VercelAs isNot mentioned (used in this article as the baseline for comparison)
Self-hosting Next.jsNode.js server, Docker, static export"The easiest option if you want to keep Next.js and run it somewhere else"
OpenNextConverts next build output for each platform"More mature and covers more of the API", "a safe, proven choice"
vinextReimplements the Next.js API on ViteFaster builds and smaller output, but does not cover the edges of Next.js's features

In the editorial team's view, choosing vinext makes sense when you have a reason to change the toolchain itself, such as wanting to move to the Vite tool ecosystem or to use Cloudflare Workers bindings directly. We also covered developments in Vite-based development environments in our Vite+ article.

Running it on a Next.js 16 test app

On October 2, 2026, in the editorial team's test environment (Linux, Node v22.22.0, npm 10.9.4), we took the App Router template generated by create-next-app (Next.js 16.3.8, using next/image and next/font/google), added one route handler that returns JSON, and tested it. vinext was version 1.0.1.

check rewrites nothing

npx vinext@1.0.1 check finished in about 13 seconds without changing any files (no git diff). The result was "100% compatible (6 supported, 0 partial, 0 issues)".

We then added two of the items the README lists as gaps and ran it again: cacheComponents: true in next.config.ts, and preferredRegion = "hnd1" and "use cache" on a new page. The result dropped to "94% compatible" and cacheComponents — experimental support; behavior is incomplete was displayed. However, nothing was displayed for preferredRegion. Passing check is no substitute for reading the README's Known gaps.

init stopped on the React version

The next step, vinext init --platform=node, stopped while adding dependencies. The npm error was ERESOLVE could not resolve: the react-server-dom-webpack@19.3.0 it tried to add requires React 19.3.0 or later, while the template's React was 19.2.8. By the time it stopped, it had already added scripts and "type": "module" to package.json, created vite.config.ts, and appended to .gitignore. Changes remain even if it stops partway, so try it on a git branch.

After upgrading React and React DOM to 19.3.0 and trying again, init completed.

Diagram showing the git diff after running vinext init (for Node): three scripts, type: module and dependencies added to package.json, a newly created vite.config.ts, and additions to .gitignore, with no changes to next.config.ts, tsconfig.json or the app directory, along with the results of the build and startup checks

As the README describes, next.config.ts, tsconfig.json and the contents of app/ were unchanged, and existing Next.js scripts such as npm run dev also remained as they were. The three scripts added were dev:vinext, build:vinext and start:vinext. It also detected CSS Modules and added vite-css-modules.

Building and starting

npm run build:vinext (Vite 8.3.2) completed, and the server started with npm run start:vinext returned HTTP 200 for both the page and the route handler. However, the route list at the end of the build showed / as "? Unknown", with a note that "use of dynamic APIs such as headers() or cookies() cannot be detected at build time". When the same app is built with next build, / is "○ (Static)". The benchmarks section of the README also explains that Next.js generates pages statically at build time, whereas vinext renders on the server for each request by default.

For Cloudflare, decide on the caching approach first

init with --platform=cloudflare stopped and asked us to choose caching and image optimization options. It told us to specify the CDN cache (response-store, workers-cache, static-assets, data-cache), the data cache (kv or none) and image optimization (cloudflare-images or none), and then run it again. When we reran it with static-assets, no data cache and no image optimization, cloudflare.config.ts was created, and / was prerendered at build time and shown as "○ Static". In the local preview, the page and route handler also returned 200.

The added dependencies included 2.0.0 beta versions of cf@1.0.0-beta.10 and @cloudflare/vite-plugin. Even though vinext itself is at 1.0, the tools used to deploy to Cloudflare are still in beta. We cover cf in our article on Cloudflare's cf beta and Wrangler. We did not try an actual deployment to Cloudflare.

What to check before deciding to switch (editorial proposal)

  1. Next.js version: vinext targets 16.x. For sites on 15 or earlier, first check whether you need to update Next.js itself
  2. Checking the features you use against the Known gaps: Check whether you use "use cache", build-time optimization of next/image, OG image generation with sharp or satori, or Vercel-specific services. OG image generation is also an area we touched on in our article on the September Next.js vulnerabilities
  3. Run vinext check and vinext init on a branch: Review the diff in git and share what was added with your web agency
  4. Whether pages are static or dynamic: In the build's route list, check whether the pages you want to serve statically are marked "Static". For Cloudflare, your choice of caching approach affects this
  5. Who will maintain it: vinext is a separate implementation from Next.js. Confirm whether your web agency can take on investigation and workarounds when bugs occur

Which to choose

This is the editorial team's summary based on the materials and testing covered so far.

StatusEditorial proposal
No major complaints about Vercel's cost or operationsStay. Don't make leaving Vercel a goal in itself
Want to keep Next.js and run it on self-managed serversConsider self-hosting Next.js first
Want to move to Cloudflare without losing featuresConsider OpenNext first
Want to make active use of Cloudflare Workers features or Vite; on Next.js 16 and not affected by the Known gapsTry vinext on a branch, and decide after checking how static pages are handled and the dependency versions

Pitfall

  • Treating check's "100%" as a certificate of compatibility. Even settings the README says are ignored, such as preferredRegion, were not flagged
  • Pages that were static become server-rendered on every request after deployment. This affects page speed and the number of executions
  • Reading 1.0 as "the same behavior as Next.js". The README says it does not reproduce behavior that is not documented by Next.js

On October 2, 2026, we directly opened and checked the README of cloudflare/vinext, the CHANGELOG of packages/vinext (main branch), and vinext's publication records in the npm registry. check, init, build and startup were each run once in the editorial team's test environment (Linux, Node v22.22.0, npm 10.9.4) against a test app made by adding one route handler to the create-next-app template (Next.js 16.3.8). We have not verified migrating a real business site, deploying to Cloudflare, how OpenNext or self-hosted Next.js behave, or comparisons of page speed or cost.

If you are reviewing the hosting of a Next.js site or planning its architecture as part of a redesign, talk to GleamHub.

Sources

Share this articleXFacebook
Kakeru Suzuki

Fascinated by the possibilities of technology, has had a deep interest in programming and digital art since student days

Turn this article's theme into your company's next step

Starting from what you want to achieve with your website.

We organize user goals, required features, and ongoing maintenance structures to determine the first steps in development and improvement.

  • Website objectives
  • Features and usability
  • Post-launch operations
Consult on web development and improvements

You can consult with us from the initial conceptual stage. Details from this article will be carried over to the inquiry form.

Receive the latest articles via email · Read the web production guide
Free download

Complete Guide to Web Production: Costs, Vendor Selection & Traffic Acquisition [2026 Edition]

We have compiled cost benchmarks, vendor selection criteria, and traffic acquisition strategies into a PDF.

The PDF and newsletter emails are currently in Japanese.

You will also be subscribed to our newsletter. You can unsubscribe at any time.