Disclosure: we may earn a commission or referral reward from CloudCone, Contabo, DigitalOcean (account credit, not cash), Hostwinds, InterServer, RackNerd, VPSDime and Vultr if you sign up through our links. It does not change the price you pay. Every other provider pays us nothing. Prices in this guide are as of the date shown and may have changed; see the comparison pages for the latest checked prices.
Guides · BLOG
Fly.io vs VPS in 2026: honest comparison for indie developers
Some prices quoted in this guide are out of date. It is being rebuilt on our price index; for current prices use the comparison pages, which show when each price was checked.
Fly.io occupies a middle ground between serverless (Vercel, Cloudflare Workers) and traditional VPS hosting: containers deployed globally, pay-per-machine-hour, with a developer-first CLI and reasonable defaults. This guide compares it honestly to plain cloud VPS on cost, feature parity, and the specific workloads where each wins.
Prices as of 2026-09-22.
The one-paragraph verdict
Fly.io is the best-in-class option for globally-distributed Docker-based apps where the platform's edge network delivers real user-perceived value. The pricing scales cleanly with actual usage; a small app costs $5-15/mo, comparable to a plain VPS. A plain VPS wins on absolute cost at scale, on non-containerised workloads, and on multi-service architectures where you'd rather manage one box than orchestrate five. Pick Fly.io for the platform experience; pick a VPS for cost, control, or when a $50/mo Fly.io bill would fund a $5 Hetzner for a decade.
Cost comparison at three scales
Estimated monthly cost for typical shapes:
| Workload | Fly.io (est.) | Hetzner VPS |
|---|---|---|
| Small hobby app, 1 machine, minimal traffic | $5-10 | $4.60 (CX22) |
| Small SaaS, 2 machines + Postgres | $15-30 | $7.60 (CX32) |
| Growing app, 3 regions, moderate traffic | $30-80 | $7.60-15.60 |
| Real production at scale | $150+ | $28+ |
Fly.io's Postgres pricing is separate; a Fly Postgres cluster starts around $15-25/mo.
What Fly.io is genuinely great at
Global deployment. Deploy your app to 30+ regions with a single command. Fly.io's edge networking is real.
Docker-native. Your Dockerfile deploys. No custom manifests, no framework-specific setup.
Machine-hour billing. Small workloads cost small money. If your app is idle 90% of the time (autostop enabled), you barely pay.
Managed Postgres, Redis, Volumes. Available as first-class primitives on the platform.
IPv6-first with easy IPv4 attach. Modern network defaults.
Developer CLI experience. flyctl is genuinely well-designed. Debugging feels close to a real Linux box.
Autoscaling on demand. Idle machines suspend; requests wake them.
Free tier. Meaningful — three shared-CPU 256 MB VMs and 3 GB persistent volume free.
What a plain VPS is great at
Absolute cost. $4.60/mo for a Hetzner CX22 that runs your whole stack. No metered pricing surprises.
Multi-service on one box. Your app, database, Redis, cron workers all on the same VPS. No orchestration overhead.
Full Linux access. Custom kernel modules, unusual system libraries, precise cron timing. All yours.
No cold starts. A dedicated VPS is always warm; a Fly.io machine can cold-start after autostop.
Non-containerised workloads. Everything works. Fly.io is Docker-first; if you can't containerise easily, it's less friendly.
Where Fly.io's pricing bites
Persistent volumes are billed per GB-month. ~$0.15/GB-month. A 100 GB volume is $15/mo before your machine cost.
Managed Postgres. Starts around $15/mo for a shared-CPU 1 GB Postgres. Scales up.
Egress bandwidth. Free tier includes 160 GB/month; beyond that, ~$0.02-0.19/GB depending on region.
Multi-region machine count multiplies. Deploy to 3 regions and you have 3× the base machine cost.
When Fly.io is right
- Global consumer-facing app where user-perceived latency matters. Fly.io's edge is real value.
- Docker-based workflow where deploying containers is your default.
- Cost-tolerant developer willing to pay $20-50/mo for platform polish.
- Bursty workloads where autostop pays off.
- Small team that values
fly deployover managing systemd services.
When a VPS is right
- Cost matters more than platform features. Hetzner CX22 at $4.60/mo is 4-10x cheaper than a comparable Fly.io setup for steady workloads.
- Non-containerised stack. Rails with system-wide gems, WordPress with custom PHP extensions, monolithic Python with cron jobs.
- Single-region deployment is fine. You don't get billed 3x for 3 regions.
- Long-running processes. Cold starts matter for latency-critical workloads.
- You value control over the underlying box.
The specific migration
From Fly.io to a plain VPS:
1. Provision Hetzner CX32 (4 vCPU / 8 GB) at $7.60/mo — comparable to a Fly.io setup around $30/mo.
2. Install Docker + docker-compose.
3. Copy your fly.toml machine config into docker-compose.yml.
4. Copy your Postgres data (if you're migrating from Fly Postgres): pg_dump from Fly, restore locally.
5. Add Nginx or Caddy as a reverse proxy for TLS.
6. Add Cloudflare (free) in front for CDN + DDoS.
7. docker-compose up -d. Done.
Total migration time: 2-4 hours for a typical single-app setup.
Related guides
- Vercel vs VPS 2026 — the adjacent question.
- Best hosting for a Docker / self-hosted stack — the VPS-with-Docker approach.
- Best hosting for a small SaaS MVP — MVP-scale hosting.
- How to host a Next.js app on a $5 VPS — the Vercel-adjacent migration.
Prices as of 2026-09-22.