Fly.io is one of the best platform products of the last five years. The Firecracker microVMs are fast, the region story is real, the developer experience is sharp, and the team has built a genuinely opinionated take on what “global by default” should mean. For a lot of small projects in 2026, Fly is still our recommendation.
This post is for the teams who’ve outgrown it. The triggers tend to be specific (a customer asking for AWS-only data residency, an AWS Activate balance you’re not capturing, a bill that’s drifted into uncomfortable territory), and the next move isn’t obvious. We’ll cover where Fly stops fitting, who should stay, what your AWS-native alternative actually looks like, and the honest cost of the migration.
Skim answer:
- Why teams leave Fly: customers require AWS data residency, they qualify for AWS Activate credits they can’t redeem on Fly, their Fly bill crosses $1,500 a month with surprises, or they hit Fly-specific scaling and observability limits.
- 2026 alternative most small teams pick: run on their own AWS account at wholesale rates with a platform layer (e.g. Ownkube) on top.
- What you keep: the deploy ergonomics they liked on Fly.
Where Fly.io is still the right call
Be fair to the incumbent first. Fly remains the strongest choice when:
- You need genuinely low-latency reads in 5+ regions and your app architecture supports it (Litestream, Fly Postgres with read replicas in-region, region-aware request routing).
- Your team is 1 to 5 engineers and you don’t want to learn AWS.
- Your workload is naturally stateful at the application layer (game servers, real-time collaboration, anything where stickiness matters) and Fly’s “place this VM here” model is a feature, not a bug.
- You don’t qualify for, or aren’t going to use, AWS Activate credits.
If two or more describe you, stay on Fly. Stop reading.
Why teams eventually leave
The migration triggers we see in 2026 are remarkably consistent.
Trigger 1: AWS credits you can’t capture. A funded startup with up to $100,000 in AWS Activate credits and a Fly bill is, mathematically, lighting half the credits on fire. We wrote up the underlying math in our AWS Activate credits guide. The short version: credits redeem against AWS spend, not Fly bills, and the validity window is 12 to 24 months.
Trigger 2: Customer or compliance requires AWS specifically. SOC 2, HIPAA, and most enterprise procurement are doable on Fly’s infrastructure, but the path is shorter on AWS. When a customer’s security team says “we need your workloads in our region of AWS, under our KMS keys”, Fly is the wrong substrate.
Trigger 3: The bill drifts. Fly’s metered model is great when traffic is small. It surprises you when traffic spikes, when you accidentally pin a VM that should have been autoscaled-down, or when egress costs compound. Several teams in our network report unexpected $3K to $8K monthly Fly bills that, when migrated, ran $700 to $1,800 on wholesale AWS.
Trigger 4: Operational limits in 2026. Fly’s observability story is improving but still trails AWS-native (CloudWatch, OTel, X-Ray). Multi-region Postgres on Fly is good for some patterns and awkward for others. Some teams report tail-latency variance that AWS reserved capacity doesn’t have.
If three or more of these apply, the move is usually worth the migration cost.
What the AWS-native alternative looks like
The basic shape:
- Compute: EKS (multi-AZ) or k3s on EC2, depending on team size and traffic.
- Database: Managed RDS Postgres in the same region (Multi-AZ for production). For multi-region read replicas, use RDS cross-region replication.
- Caching: ElastiCache (Redis or Memcached).
- Edge: Cloudflare or CloudFront. We default to Cloudflare for managed DNS, preview domains, DDoS, bot, and scrape protection out of the box.
- Storage: S3 for artifacts, build cache, and large objects.
- Secrets: AWS Secrets Manager with workload identity via IRSA on EKS.
- Observability: CloudWatch + OTel, optionally fanned out to Datadog/Honeycomb/etc.
The deploy ergonomics that made Fly nice (git push, preview environments, the abstraction over individual VMs) come from the platform layer on top, not from AWS directly. That’s the part most teams underweight.
Two roads to that alternative
Two practical paths exist.
Road 1: Stand it all up yourself with a DevOps engineer
You hire (or borrow) a platform engineer, they build the cluster, configure the deploy pipeline, wire up observability, stand up preview environments, design the secrets story.
Time to production: 4 to 12 weeks for a competent engineer, longer if they’re learning.
Loaded cost: ~$200K/year for the hire, plus tooling licenses, plus your engineering attention. We wrote about that loaded cost in our DevOps engineer salary breakdown.
Verdict: appropriate if you’re 25+ engineers and the platform engineer has follow-on work after the migration. Heavy if you’re smaller.
Road 2: Use a managed platform layer that runs in your AWS account
A product like Ownkube installs in your AWS account, provisions the cluster, wires up the deploy pipeline, configures preview environments on a Cloudflare-managed domain, sets up secrets and observability, and includes a small team of named agents that handle recurring ops:
- Cost agent: right-sizes workloads, sleeps idle previews, flags spend anomalies.
- Incident agent: reads crashes and explains them in plain English.
- Scaling agent: manages replica counts and spot capacity ahead of traffic spikes.
- Security agent: flags IAM drift, exposed secrets, CVEs.
Time to production: hours to days for a small team. Connect the AWS account, point the platform at your git repo, deploy.
Cost: free on the k3s tier (one AWS instance, fits side projects and small-team production). $5 per vCPU + $1 per GB RAM on EKS tier when you scale.
Verdict: appropriate if you’re 5 to 30 engineers and you want the migration to take days, not months.
A worked example
A small SaaS on Fly with: 1 web service, 2 background workers, Fly Postgres, multi-region read replica, a handful of preview environments, ~3 TB/month egress.
On Fly.io (2026 metered pricing): approximately $1,800 to $2,800 per month.
On AWS at wholesale (EKS multi-AZ + RDS Multi-AZ + ElastiCache + Cloudflare edge): approximately $700 to $1,100 per month in AWS spend, fully redeemable against Activate credits.
Platform layer on top: $0 on k3s mode (if traffic fits) or ~$150 to $250 on EKS mode for this footprint.
Year-1 cash impact for a credit-funded startup: from ~$24K out the door on Fly to under $3K on the AWS-native setup with Ownkube on top.
The migration is real work, but bounded
A common myth is that leaving Fly means months of rewrites. For most small teams the actual work is bounded:
- Containerize what isn’t already. Most Fly apps are already containers. If not, this is a half day.
- Move the database. RDS Postgres logical replication or
pg_dump+ restore. For a 30 GB Postgres, plan on 4 to 8 hours including verification. - Re-point DNS. Cloudflare-managed if you’re using a platform layer. Half day.
- Re-wire CI. Push to a different registry, deploy to a different cluster. Half day.
- Validate preview environments and observability. One day of testing.
Total elapsed time for a small team: 1 to 2 weeks of focused work. Not free, but not the multi-month project some make it out to be.
When NOT to migrate
Stay on Fly if:
- You’re under $500/month of Fly spend.
- Your application architecture genuinely benefits from Fly’s per-VM region placement model.
- You don’t have AWS Activate credits and aren’t on a compliance path that requires AWS.
- Your team has 1 to 3 engineers and the operational simplicity is worth more than the bill delta.
The argument is not “Fly is bad”. The argument is “the math has flipped for a specific class of team”.
Decision checklist
- Is your Fly bill over $1,500/month?
- Do you have AWS Activate credits or GCP credits you’re not redeeming?
- Is a customer or compliance requirement pushing you toward AWS specifically?
- Are you 5+ engineers and growing?
- Do you need observability or networking primitives Fly doesn’t expose?
Three or more yeses: the migration usually pays back inside the first 90 days.
Closing
Fly.io is still one of the best platform products of its generation, and we’re not in the business of arguing otherwise. The honest 2026 reality is just that some teams outgrow the model, and the next stop isn’t another shared PaaS. It’s your own AWS account, with a platform layer that gives you the deploy ergonomics you liked.
If that’s the move you’re sketching, Ownkube is built for the migration. Free on a Starter cluster (one AWS instance), $5 per vCPU + $1 per GB RAM when you scale. Connect your cloud and try it.