
Your Next.js app runs on Vercel and the invoice has crept past the $20 you signed up for, or you are about to launch a client site that the free Hobby plan doesn't allow. A VPS for a few euros a month looks like an easy saving, but the answer depends on how many people deploy, how much traffic you serve and who looks after the server. Below are Vercel's own prices, checked on 30 October 2026, what changes for Next.js on your own server, and a monthly bill worked out line by line.
Quick answer: Self-hosting pays off for a commercial Next.js site with steady traffic, if someone on the team can run a Linux server. Vercel's Hobby plan is free but for non-commercial use only. Pro is $20 a month with one deploying seat and $20 of usage credit, plus $20 per extra developer who deploys, a paid CDN tier once a month goes past 1 million requests or 1 TB, and usage beyond the credit, all in US dollars before VAT. A VPS costs the same however many people deploy. One next start process runs every Next.js feature, ISR, image optimization and Proxy (formerly Middleware) included; the extra work is the server itself. Stay on Vercel for a free hobby project, for traffic that swings hard or spans continents, or when nobody wants to maintain a server.
What Vercel Charges in October 2026
Vercel's pricing page lists Hobby, Pro and Enterprise, which has custom pricing. Prices are in US dollars and exclude VAT, which Vercel adds based on your billing address.
Hobby is free and restricted to "non-commercial personal use only". The fair use guidelines count payments, ads, selling a product or service, sites that exist mainly for affiliate links and being paid to build or host the site as commercial; donations are fine. Each month Hobby includes 1,000,000 CDN requests, 100 GB of Fast Data Transfer, 4 hours of Active CPU and 5,000 image transformations, among others. You can't buy more: over a limit, you usually wait until 30 days have passed (Hobby plan).
Pro has a $20 monthly platform fee that includes one deploying seat and $20 of usage credit, which expires at the end of each month. Each extra seat that can deploy costs $20 a month; read-only viewer seats are free. New Pro teams get the Flat Rate CDN by default and existing teams can opt in: a monthly capacity tier for CDN requests and Fast Data Transfer instead of a price per unit. Per the pricing FAQ every request counts, static files included:
| Flat Rate CDN tier | CDN requests a month | Data transfer a month |
|---|---|---|
| Included with Pro | 1 million | 1 TB |
| $20 a month | 10 million | 50 TB |
| $100 a month | 50 million | 50 TB |
| $300 a month | 150 million | 50 TB |
A one-day spike doesn't change the bill. A whole billing cycle over your capacity moves you up a tier from the next cycle, and above the top tier you pay on-demand rates. Sites that mainly distribute files or media aren't eligible.
Everything else is metered, including Fast Origin Transfer, the data between the CDN and your functions (CDN pricing). Functions are billed for CPU time while your code runs and for memory while requests are in progress (Fluid compute pricing), at 2 GB (1 vCPU) per instance by default (memory settings). Where rates vary by region, these are Frankfurt (fra1):
| Resource | On-demand rate |
|---|---|
| Active CPU | $0.184 per hour |
| Provisioned Memory | $0.0152 per GB-hour |
| Function invocations | $0.60 per million |
| ISR reads | $0.52 per million |
| ISR writes | $5.20 per million |
| Image Optimization transformations | $0.0601 per 1,000 |
| Fast Origin Transfer | $0.06 per GB |
| Builds on Elastic machines, the default for new Pro teams | from $0.0035 per CPU minute |
A 3-minute build on a 4-vCPU machine counts as 12 CPU minutes (managing builds). To cap the bill, Spend Management can pause every production deployment at an amount you choose. Vercel checks every few minutes, so the pause can lag, and visitors then see a 503 DEPLOYMENT_PAUSED error until you resume each project by hand.
Which Next.js Features Work the Same on a VPS
The Next.js platform guide puts the minimum plainly: "To run Next.js, your platform needs a Node.js server. That's it." One next start process handles Server Components, ISR, Partial Prerendering, Cache Components, Server Actions, Proxy and after(), and the only extra dependency is the sharp package for image optimization. The self-hosting guide lists what you set up around it:
| Feature | On one VPS with next start | What you add yourself |
|---|---|---|
| ISR and revalidation | Works; the cache lives on the server's disk | A shared cacheHandler once you run several instances |
Image Optimization (next/image) | Works with zero configuration | Watch memory: on glibc-based Linux, sharp recommends an allocator such as jemalloc |
| Proxy, called Middleware before Next.js 16 | Works with zero configuration | Nothing; it runs on Node.js by default |
| Streaming and Suspense | Works | Turn off buffering in nginx, for example with an X-Accel-Buffering: no header |
after() | Works | Stop the server with SIGINT or SIGTERM and allow 10 to 30 seconds for it to finish |
| Skew protection | Built into Vercel Pro | Set deploymentId; a browser on an old build then gets a full page reload |
| Preview URLs and rollbacks | Built into Vercel | Your own CI, or a self-hosted platform such as Coolify |
On one VPS every response comes from one server in one data center. To serve static files from a CDN, set assetPrefix and make sure the CDN respects the Cache-Control headers Next.js sends. Several instances behind a load balancer need three more things: a shared cache handler, a common deploymentId, and the same NEXT_SERVER_ACTIONS_ENCRYPTION_KEY on every instance, set at build time. Without that key, Server Actions fail with "Failed to find Server Action".
What You Take On With a VPS
Vercel's price includes the server work. On a self-managed VPS it is yours.
Node.js. Current Next.js needs Node.js 20.9 or newer (installation). The nodejs package is 18.19.1 in Ubuntu 24.04 and 18.20.4 in Debian 12, so install a current release from nodejs.org instead. Check before you build:
apt-cache policy nodejs # the version your distribution offers
node --version # the version you have installed
A build and a process. npm run build and npm run start work as they are. With output: 'standalone' in next.config.js, the build writes .next/standalone with a minimal server.js that runs without node_modules. It leaves out public and .next/static, so copy those in yourself, as the output docs show:
npm run build
cp -r public .next/standalone/ && cp -r .next/static .next/standalone/.next/
PORT=3000 HOSTNAME=127.0.0.1 node .next/standalone/server.js
Keep it running under a process manager, as in our PM2 production guide; our Next.js deployment guide covers the full setup.
nginx and deploys. Next.js recommends a reverse proxy such as nginx in front of the server to deal with malformed requests, slow connection attacks, payload size limits and rate limiting; our nginx guide adds a Let's Encrypt certificate. Vercel deploys every push to your production branch and gives other branches and pull requests preview URLs. On a VPS you build on the server, where the build competes with the live site for CPU and memory, or in CI, as in our GitHub Actions guide.
Upkeep and capacity. Operating system and Node.js updates, the firewall, SSH hardening, backups and a health check such as Uptime Kuma are yours too. Vercel's Fluid compute scales functions up as traffic grows; a VPS has the CPU and memory of its plan, and when that runs short you move to a bigger plan.
A Worked Monthly Cost Example
This example uses Vercel's published rates with assumed usage, not measurements, and leaves out small lines such as image cache reads and writes. Your own numbers are in the usage view of your Vercel dashboard or vercel usage.
Take a shop front end built by two developers that serves 3 million CDN requests and 300 GB a month. Its server-rendered pages make 1.2 million function invocations using 30 hours of Active CPU and 600 GB-hours of memory, which is 300 instance-hours at the default 2 GB, and send 60 GB from the functions to the CDN. ISR serves 2 million reads and 200,000 writes, next/image makes 10,000 transformations, and the team deploys 100 times with 3-minute builds on 4 vCPUs. On Pro, with Frankfurt rates:
| Item | How it is calculated | Per month |
|---|---|---|
| Pro platform fee | One deploying seat and $20 of usage credit | $20.00 |
| Second deploying seat | $20 per seat | $20.00 |
| Flat Rate CDN | 3 million requests is above the included tier, so the 10 million tier | $20.00 |
| Function invocations | 1.2 million × $0.60 per million | $0.72 |
| Active CPU | 30 hours × $0.184 | $5.52 |
| Provisioned Memory | 600 GB-hours × $0.0152 | $9.12 |
| Fast Origin Transfer | 60 GB × $0.06, not covered by the CDN tier | $3.60 |
| ISR | 2 million reads × $0.52 plus 0.2 million writes × $5.20, per million | $2.08 |
| Image transformations | 10,000 × $0.0601 per 1,000 | $0.60 |
| Builds | 100 × 3 minutes × 4 vCPUs = 1,200 CPU minutes × $0.0035 | $4.20 |
| Usage credit | Covers $20.00 of the $25.84 usage | minus $20.00 |
| Total | Before VAT | $65.84 |
Over a year that is 12 × $65.84 = $790.08 before VAT, and $60 of each month is fixed: two seats and the CDN tier. If the server-rendered work triples with traffic, the $20 CDN tier still covers it up to 10 million requests, the usage lines other than builds triple to $64.92, and the month comes to $109.12. A third developer adds $20 whatever the traffic.
On a VPS the same shop is one line. As of 30 October 2026, our Standard VPS costs €4.99 a month for VPS-S (3 vCores, 4 GB RAM, 60 GB NVMe, 10 TB traffic) and €8.99 for VPS-M (4 vCores, 8 GB RAM, 80 GB NVMe, 10 TB), including VAT, in an EU data center. Paying a year ahead takes 10% off, which makes VPS-S €53.89 a year. The plans are self-managed, and backups are not in the plan price; you can arrange them through a support ticket.
That price changes with the plan, not with developers or requests. Whether one VPS-M carries this shop depends on your code, so watch CPU and memory after the move and go up a plan if either runs short. To compare fairly, convert Vercel's total at the day's rate and add your VAT. Then add what the VPS column leaves out: your hours for the work in the previous section, backups, and a CDN if your visitors are spread across continents. For a single developer who stays inside the included tier and the credit, it is $20 before VAT against €4.99, and the hours decide it.
Which One Fits
Stay on Vercel when:
- the project is personal, non-commercial and within Hobby's limits;
- your team relies on preview URLs for every pull request and on Instant Rollback, which on Pro reaches every earlier production deployment, and nobody wants to run a server;
- traffic swings hard from week to week, or your visitors are spread across continents and you want a CDN without setting one up.
Move to a VPS when:
- seats and a CDN tier make up most of your bill, as in the example;
- traffic is steady and someone will patch, back up and monitor the server;
- you run more than the website: a database, a worker, a bot or scheduled jobs can share the VPS, while Vercel cron jobs call your production URL over HTTP on a schedule;
- you handle large uploads or long connections. A Vercel Function takes at most 4.5 MB of request or response body and returns
413: FUNCTION_PAYLOAD_TOO_LARGEabove that (limitations), and each function, WebSocket connections included, ends at its maximum duration: 300 seconds by default, up to 800 on Pro, or 1,800 in a beta. On your own server these are settings, such as nginx'sclient_max_body_size(default1m) and Next.js'sserverActions.bodySizeLimit(default 1 MB).
Or take a middle path:
- A site without server features doesn't need Node.js. With
output: 'export',next buildwrites plain HTML, CSS and JavaScript to anoutfolder that any web server can host, but ISR, Proxy, Server Actions and the default image loader don't work in a static export. Our web hosting starts at €2.49 a month for that. - For push-to-deploy on your own server, a self-hosted platform such as Coolify builds a preview for each pull request; see our Coolify and Dokploy guide.
FAQ
Can I use Vercel's free Hobby plan for a client or business site? No. A site that takes payments, sells something, shows ads or is built by someone who gets paid counts as commercial, and commercial use needs Pro or Enterprise. Our free hosting comparison covers other free plans and their terms.
Does ISR work when I self-host Next.js?
Yes. Under next start the cache sits on the server's disk, which works automatically for one instance with persistent storage. With several instances each keeps its own cache, and revalidateTag() on one doesn't reach the others. Next.js's answer is a shared cacheHandler, for example on Redis, with cacheMaxMemorySize: 0 and a refreshTags() method that syncs tags between instances.
Does next/image work on a VPS?
Yes, with zero configuration under next start, through the sharp package. On glibc-based Linux, Next.js notes it may need extra configuration to prevent excessive memory use, and sharp recommends an alternative allocator such as jemalloc. You can also switch optimization off, or point next/image at a separate image service with a custom loader.
What happens to my Vercel bill when a post goes viral?
The Flat Rate CDN absorbs a one-day spike. Function, ISR and image usage is billed on demand once the credit is gone, and a whole month above your capacity moves you up a CDN tier from the next cycle. If Spend Management pauses production, visitors get 503 DEPLOYMENT_PAUSED. On a VPS the bill stays the same, and the risk moves to the server, which slows down or fails when it runs out of CPU or memory.
Can I move a Next.js app from Vercel to a VPS without code changes?
Usually the Next.js code runs as it is, since a Node.js server supports every Next.js feature. Check what is tied to Vercel: cron jobs in vercel.json need a scheduler on the server, and NEXT_PUBLIC_ variables are written into the JavaScript bundle at build time, so set them wherever you build.
Sources
All opened on 30 October 2026:
- Vercel pricing and plans: Pricing, Pro plan, Hobby plan, Flat Rate CDN, Regional pricing, Frankfurt (fra1) rates, Fair use guidelines, Spend Management, Pricing on Vercel, CDN pricing and usage, Introducing Flat Rate CDN
- Vercel platform: Fluid compute pricing, Fluid compute, Function memory, Function limitations, Managing builds, Environments, Skew Protection, Instant Rollback, Cron jobs, WebSocket connections
- Next.js 16.4 docs: Deploying, Self-hosting, Deploying to platforms, output, Static exports, Proxy, serverActions, Installation
- sharp: Linux memory allocator
- Node.js and packages: Node.js download, Node.js CLI, nodejs in Ubuntu 24.04, nodejs in Debian 12, apt-cache(8)
- nginx: client_max_body_size
- Coolify: Preview deployments