Migrating production infrastructure? Get up to $10K in migration credits.

Apply now

Fly.io vs Vercel

The short answer

You have a Next.js frontend and a backend that does real work: APIs, background jobs, persistent connections, and a database. Fly.io and Vercel handle that backend in different ways.

Vercel fits when your app is frontend-led and your backend fits the serverless request model. Fly.io fits when you need long-lived processes or control over where compute and data run, and you're willing to own more of the Next.js runtime.

Documentation and prices checked: Render between 2026-09-11 and 2026-10-23, Vercel between 2026-10-06 and 2026-10-23, Fly.io between 2026-09-14 and 2026-10-23.

At a glance

Criterion
Fly.io
Vercel
Compute unit
Machines running in Firecracker microVMs, built from your OCI image
Vercel Functions running on Fluid compute
Placement and regions
You deploy Machines in regions worldwide, reached through an Anycast network
Vercel caches static content in the CDN by default, and you can configure function regions, with up to 3 on Pro
Long-lived processes
Machines can run continuously, for example a background worker running 24/7
Pro and Enterprise: 300s default and 800s maximum function duration, with 1800s extended maximum in beta. Continuous workers can run as Vercel Daemons, in public beta, in production deployments only
Next.js support
Self-hosted: the generated Dockerfile builds the app and starts the Next.js server inside your container
Zero-configuration deploys with platform enhancements
Managed database options
Fly.io Managed Postgres, from $38/month (Basic) to $1,922/month (Performance)
Marketplace integrations: Neon, Supabase, or AWS Aurora Postgres, plus Redis or Upstash Redis
Billing basis
Per second while a Machine runs, with no monthly platform fee
Pro is $20/month per developer seat with a $20 included usage credit, then on-demand usage
Free tier terms
No free tier, but a trial of up to 2 hours of Machine runtime or 7 days, whichever comes first
Hobby is $0/month and is for personal, non-commercial use. It includes 4 hours of Active CPU, 360 GB-hours of Provisioned Memory, and 1 million invocations, and Hobby accounts are limited to the usage caps and can't purchase additional usage

Prices, plan names, and limits on Fly.io, Vercel, and Render change, so treat these figures as a snapshot. You can find current terms on the official Fly.io pricing page and Vercel pricing page.

Two architecture models

Fly.io: Machines in regions you choose

On Fly.io, you ship your app as an image, and each Machine runs it in an isolated Firecracker microVM. You decide the topology. Fly.io's own pricing example runs one Machine each in Ashburn, Frankfurt, and Singapore.

Machines can auto-stop when idle, which lowers compute cost, and a stopped Machine bills only for its root file system. Fly.io's cost guidance notes that any request might start a stopped Machine again. It describes a queue worker that uses metrics-based autoscaling, and it recommends budgeting for the always-on cost. You choose the Machine count, size, and regions. You also set stop behavior in fly.toml: auto_stop_machines takes "off", "stop", or "suspend", and min_machines_running sets the minimum number of Machines that stay running in your primary region.

Vercel: framework-defined infrastructure

On Vercel, framework-defined infrastructure determines how your site renders and how costs accrue, based on your application code and framework. Vercel describes this as infrastructure where you express intent and the platform handles operations, including scaling.

Vercel caches static content in the CDN by default. Your backend code runs as Vercel Functions, and you can pin them to a region close to your data source. Pro and Enterprise teams can deploy functions to multiple regions.

Where each model strains

Vercel's model strains when your backend needs to behave like a persistent server. On Pro and Enterprise, a function defaults to 300 seconds and tops out at 800 seconds, with 1800 seconds in beta. Memory tops out at 4 GB / 2 vCPU on Pro and Enterprise. Vercel has added WebSocket support and Vercel Queues, both in public beta. A connection held for hours still runs up against the function model. A long-lived Fly.io Machine fits that case.

For continuous workers, Vercel Daemons are in public beta on all plans: they run long-running background workers from container images on Fluid compute, and Vercel restarts instances that exit or crash. During the beta, daemons run only in production deployments, and preview deployments, autoscaling, and persistent storage aren't supported.

Fly.io charges for the pieces you provision and leaves the choices to you, so you size Machines, place them, and tune scaling yourself. Vercel's managed approach suits teams who'd rather express intent and let the platform handle operations.

Whether you need persistent processes or explicit multi-region placement usually decides the choice before any other criterion does.

Next.js support paths

Managed Next.js on Vercel

Vercel states that Next.js works when self-hosting, but that deploying to Vercel is zero-configuration and adds enhancements for scalability, availability, and performance. Several features arrive configured:

  • ISR: Vercel includes background revalidation and sends ISR reads and writes to the global Vercel Cache. Vercel generates ISR pages with a Vercel Function.
  • Image optimization: Vercel handles image transformations and their cache reads and writes, and bills them as platform resources.
  • Middleware: All plans include middleware support, and Routing Middleware runs on Vercel Functions with Fluid compute.
  • Previews: Function logs cover both preview and production deployments, and Pro adds Skew Protection, which routes a session to the deployment version that started it.

Your backend lives in route handlers and server functions, so it inherits function limits. A cached response doesn't run a function at all, which is part of why cache-friendly apps fit this model.

Self-hosted Next.js on Fly.io

On Fly.io, Next.js runs as a Node server inside your own image, on Machines you size and place. The features Vercel configures become design decisions for you:

  • Image optimization: The next/image optimizer runs in the Node process and caches optimized results on each Machine's local disk. Size your Machines for that CPU and memory load, and expect each Machine to warm its own image cache.
  • ISR and data cache consistency: Volumes don't replicate across regions, and Fly.io suggests one primary write region with the others treated as read-only. When several Machines serve the same routes, decide where regenerated pages live and how instances stay consistent after revalidation.
  • CDN and caching: Fly Proxy forwards requests to the Next.js server on your container's port. Decide whether a cache sits in front of your app or whether every request reaches a Machine.

The trade, stated plainly

On Vercel, framework features arrive configured, and your backend fits the function model. On Fly.io, your backend can run as a long-lived process, such as a worker running 24/7, and you carry the Next.js operational work.

The hybrid option

Some teams put the Next.js frontend on Vercel and backend services on Fly.io. That split adds costs:

  • Cross-provider latency on every backend call.
  • Two bills, with Fly.io charging for data leaving your app for the public internet.
  • Two deploy pipelines to keep in sync.

If your Fly.io backend allowlists caller IPs, Vercel's Static IPs cost $100/month per project plus Private Data Transfer.

Databases on each platform

Fly.io

Fly.io's docs list three options: Managed Postgres on Fly.io's infrastructure, embedded SQLite, or a database hosted elsewhere. For Postgres hosted on Fly.io, you have two paths:

  • Fly.io Managed Postgres: Fly.io handles backups and recovery, high availability with automatic failover, monitoring, resource scaling, and 24/7 support. Every plan includes high availability, automated backups, and connection pooling. Plans start at Basic (shared-2x, 1 GB) for $38/month and Starter (shared-2x, 2 GB) for $72/month, plus storage at $0.28/GB. Managed Postgres lives outside your apps, so deleting an app doesn't delete its database.
  • Unmanaged Fly Postgres: You create and manage the database yourself, as a Fly app made of Machines and volumes. Fly.io lists it as unsupported, and a three-node production cluster costs about $82 to $164/month. You run backups, failover, and upgrades yourself.

Separate from Postgres, Fly.io offers managed services that third parties operate, such as Tigris Object Storage and Upstash Redis, and you pay their list prices through your Fly.io bill.

Vercel

Vercel connects external Postgres databases through the Marketplace, so you don't manage database servers. Postgres options include Neon, Supabase, and AWS Aurora Postgres, and key-value options include Redis and Upstash Redis. Vercel Postgres is no longer available, and existing databases moved to Neon in December 2024. You can query and edit supported Marketplace databases from the Vercel dashboard.

Placement and latency

On Fly.io, you put your app and database in the same region, and same-region data transfer is free. On Vercel, you set the function region close to your database to cut round-trip latency.

Pricing at realistic traffic

The numbers below are a snapshot, not permanent figures. Fly.io compute prices are for Ashburn (iad), and other regions apply a multiplier. On Vercel, on-demand Active CPU and Provisioned Memory costs vary by region.

Fly.io billing

Fly.io bills Machines by the second while they run, with no monthly platform fee. Machine rates for continuous runtime:

  • A shared-cpu-1x 256 MB Machine is $2.19/month, and a shared-cpu-1x 1 GB Machine is $6.70/month.
  • A shared-cpu-2x 2 GB Machine is $13.39/month, and a performance-1x 2 GB Machine is $33.00/month.
  • Additional RAM costs $6.00/GB/month.

Other charges apply on top of compute:

  • Volumes cost $0.15/GB/month of provisioned capacity.
  • Egress costs $0.02/GB in North America and Europe.
  • Optional support costs $29/month (Standard), $199/month (Premium), or from $2,500/month (Enterprise).
  • Reserving a block of compute in a region gives you a 40% discount.

Vercel billing

Pro costs $20/month per developer seat and includes a $20 usage credit, after which Vercel bills usage on demand. Pro on-demand rates start here:

  • Active CPU starts at $0.128/hour, and Provisioned Memory starts at $0.0106/GB-hour.
  • Function invocations start at $0.60 per 1M.
  • Pro includes 10M Edge Requests and 1 TB of Fast Data Transfer, then $0.15/GB for transfer.
  • ISR writes start at $4 per 1M after 200K included.
  • Vercel Queues start at $0.60 per 1M operations.

New teams get a default $200 on-demand budget, and you can configure Vercel to pause projects when they reach it.

Scenario estimates

All totals are illustrative estimates of the app tier only, built from the rates above. Database costs follow the table.

Profile
Assumptions
Fly.io (illustrative estimate)
Vercel Pro, 1 seat (illustrative estimate)
Small, steady app
Low steady traffic, 50 GB egress. Fly.io: one always-on shared-cpu-1x 1 GB Machine. Vercel: 300K invocations, 10 Active CPU hours, 100 GB-hours of memory
$7.70/month ($6.70 + 50 × $0.02)
$20/month, because usage of $2.52 ($0.18 + $1.28 + $1.06) sits inside the $20 credit
Spiky, mostly cached site with light API
5M requests, mostly cached, 300 GB transfer. Fly.io: two always-on shared-cpu-2x 2 GB Machines sized for spikes. Vercel: 500K invocations, 15 Active CPU hours, 200 GB-hours of memory
$32.78/month (2 × $13.39 + 300 × $0.02)
$20/month, because usage of $4.34 ($0.30 + $1.92 + $2.12) sits inside the credit, and requests and transfer sit inside the included 10M and 1 TB
Backend-heavy with continuous workers
One web Machine and two workers running 24/7, 200 GB egress
$103.00/month (3 × $33.00 + 200 × $0.02)
Not computed: the workers could run as Vercel Daemons, which bill Active CPU, the time your code is actively executing, from $0.128/hour, plus provisioned memory from $0.0212/GB-hour, so the total depends on how much CPU time your workers use

The small-app Fly.io row uses one Machine, which isn't a resilient production setup. Fly.io recommends at least two Machines per app, because a single Machine has downtime during host failures and deploys. Adding a second shared-cpu-1x 1 GB Machine raises that row to $14.40/month ($7.70 + $6.70), an illustrative estimate. On Vercel, the platform handles function redundancy, so the Vercel rows don't change.

Your database adds to every row. On Fly.io, Managed Postgres Basic with 10 GB of storage adds $40.80/month ($38 + $2.80), an illustrative estimate. On Vercel, a Marketplace database adds the provider's own pricing.

Where the crossover sits

Vercel's per-request model favors bursty, cache-friendly traffic, because cached responses don't invoke functions. In the spiky profile, that keeps the bill at the seat price. Fly.io's provisioned-Machine model favors steady load and long-running work. In the small profile, even the two-Machine Fly.io estimate of $14.40 sits below Vercel's $20 seat price. The worker-heavy profile has a direct Fly.io price. On Vercel, the workers could run as Daemons, which are in public beta, run only in production deployments, and bill by Active CPU time, so their cost depends on how much your workers compute. Auto-stop can lower Fly.io bills for idle apps, but Fly.io advises budgeting for the always-on cost.

Free tiers

Fly.io has no free tier. New accounts get a trial of up to 2 hours of Machine runtime or 7 days, and you don't need a credit card to start. Vercel Hobby is $0/month and limited to personal, non-commercial use. Hobby includes 4 hours of Active CPU, 360 GB-hours of Provisioned Memory, 1 million invocations, and the first 100 GB of Fast Data Transfer. Hobby accounts are limited to these usage caps and can't purchase additional usage.

Reliability

Each platform runs an official status page: the Fly.io status page and the Vercel status page.

Fly.io's pricing page lists a 99.9% uptime SLA as part of its Enterprise support tier. Vercel's pricing page lists platform SLAs on its Enterprise plan. Render's pricing page lists contractual uptime SLAs on its Enterprise plan.

Structurally, the platforms divide responsibility differently:

  • Fly.io: You design multi-region resilience by choosing Machine counts per region and a database strategy. Volumes don't replicate across regions, so data placement is part of that design. Managed Postgres includes automatic failover, while unmanaged Fly Postgres leaves failover to you.
  • Vercel: The platform manages distribution. Functions run with availability zone redundancy and fail over within a region, and Enterprise teams can enable multi-region failover. Your database and third-party services still determine your app's real availability.

Decision framework

Criterion
Lean Fly.io
Lean Vercel
Persistent processes or long-held connections
Machines can run 24/7
Work fits within 800s per function on Pro, or 1800s in beta
Explicit multi-region placement of compute and data
You place each Machine by region
Up to 3 function regions on Pro is enough
Reliance on managed Next.js features
Low reliance, or willing to self-assemble
ISR, image optimization, and middleware configured for you
Traffic shape
Steady
Bursty and cacheable
Appetite for operating containers and caches
High
Low
Database co-location
Same-region app and database with free transfer
Function region set near an external provider
Cost predictability
Provisioned Machines plus egress
Customizable usage budget with notifications and optional auto-pause at limit

Choose Fly.io if:

  • Your backend runs workers, queues, or connections that outlive a request.
  • You need compute and data placed in specific regions.
  • Your traffic is steady and your team is comfortable running Node servers and caches.
  • You want your app and database in one region on one bill.

Choose Vercel if:

  • Your app is frontend-led and your backend is request-shaped API work.
  • You want ISR, image optimization, middleware, and previews without operating them.
  • Your traffic is bursty and mostly cacheable.
  • You're fine with a database from a Marketplace provider.

Consider splitting if:

  • Most of your app is cacheable Next.js, but one backend component needs persistent processes, and you accept the latency, billing, and pipeline costs described above.

Render for a Next.js app with workers and a database

For a Next.js app whose backend runs continuous workers and needs a managed database, Render is the strongest alternative to both: it runs the Next.js app as a web service, the workers as background workers that process work continuously, and the database as Render Postgres, on one platform.

A worked monthly total

This illustrative estimate uses the backend-heavy profile from the pricing section: one web service, two workers running 24/7, a managed database with 10 GB of storage, and 200 GB of outbound bandwidth. Each service uses Render's 1 CPU, 2 GB plan, the Render size with the same RAM as the 2 GB Fly.io Machines in that profile. You can find current rates on the Render pricing page.

Item
Render plan
Monthly cost
Pro workspace fee
Pro
$25.00
Web service (Next.js)
1 CPU, 2 GB (1c-2g)
$25.00
Two background workers
1 CPU, 2 GB (1c-2g) each
$50.00 (2 × $25)
Render Postgres
Less than 1 CPU, 1 GB RAM (0.5c-1g)
$19.00
Postgres storage
10 GB at $0.30/GB
$3.00
Bandwidth
25 GB included, then 175 GB at $0.15/GB
$26.25
Total
$148.25

In this profile, Render's compute and database cost $97.00/month against $139.80/month on Fly.io, for the same three 1 CPU, 2 GB services plus managed Postgres with 10 GB. The full totals are near parity: $148.25 on Render against $143.80 on Fly.io, both illustrative estimates. The difference comes from the $25 Pro workspace fee, which adds unlimited seats, full-stack previews, and horizontal autoscaling, plus bandwidth past the 25 GB included, against $4.00 of Fly.io egress.

Documented advantages for this app shape

  • Continuous workers and long requests: Background workers process work on an ongoing basis, and web services allow HTTP responses of up to 100 minutes. Background workers are a standard Render service type on every workspace plan, while Vercel Daemons are in public beta, run only in production deployments, and don't support preview deployments, autoscaling, or persistent storage.
  • Managed Postgres with recovery: Render continually backs up paid Render Postgres instances for point-in-time recovery, and larger instances support read replicas and high availability. Pro workspaces get a 7-day recovery window.
  • A queue next to your workers: Render Key Value works as a job queue or shared cache, and paid instances write to disk to persist data across restarts.
  • Private networking: Every plan includes automatic private networking between services.
  • Zero-downtime deploys: Every plan includes zero-downtime deploys.
  • One file for the stack: A Blueprint YAML file configures related services and datastores, and Render syncs the changes you push.
  • Per-second billing: Render prorates services by the second.

Where the others still win

Vercel configures Next.js features such as next/image optimization served from its edge network, while on Render you set up a custom image loader. Fly.io gives you direct control over each Machine's region placement.

Choose Render if:

  • Your Next.js app runs background workers that process work continuously.
  • You want a managed Postgres database next to your app.
  • You'd rather not operate Machines, regions, or caches yourself.

Bottom line

Pick the model that matches where your backend spends its time. Choose Vercel if that time goes to short requests behind a cache, and choose Fly.io if it goes to long-lived processes in places you choose. If your Next.js app runs continuous workers and needs a managed database, choose Render, which runs the web service, workers, and Render Postgres on one platform.

Frequently asked questions