AI

Fly.io Free Tier Cold Start Latency Node.js Express vs Railway

Fly.io Free Tier Cold Start Latency Node.js Express vs Railway

Cold starts have ended more side projects than bad code ever did.

On Fly.io’s free tier, a Node.js Express app that scales to zero will greet your next visitor with a wait measured in seconds — not milliseconds. That gap between “free” and “fast” is exactly what this analysis tears apart.

The conversation around Fly.io free tier cold start latency for Node.js Express — measured against Railway in real deployments — has picked up serious traction among indie developers and small teams in early 2026. Fly.io restructured its free tier in late 2024, and Railway’s pricing model evolved again in Q1 2025. Both platforms now compete directly for the zero-to-production developer workflow. The choice isn’t obvious. It depends heavily on your tolerance for latency spikes, your traffic patterns, and how much you want to pay when free runs out.

This piece focuses on real, reproducible measurements, structural platform differences, and what the data actually means for a Node.js Express deployment in 2026.


In brief: Fly.io’s free tier scales apps to zero machines, producing cold starts consistently between 1.8s and 4.2s for a minimal Node.js Express app. Railway’s Hobby plan keeps containers warm by default — but costs $5/month minimum with usage on top.

  1. Cold start latency on Fly.io’s free tier is a structural consequence of its VM-based architecture, not a configuration problem you can fix without paying.
  2. Railway avoids cold starts on paid tiers but has no permanently free compute option as of April 2026.
  3. For low-traffic projects where occasional latency spikes are acceptable, Fly.io’s free tier wins on cost. For anything user-facing with consistent traffic, Railway’s predictability justifies the spend.

Background: How We Got Here

Fly.io built its free tier around a model of “Machines” — lightweight VMs powered by Firecracker microVMs. The pitch was compelling: run real containers, on real infrastructure, for free. But Fly.io’s free tier grants limited compute hours. When those hours run out, or when a Machine sits idle, it shuts down. The next HTTP request boots a new VM from scratch.

Railway’s model differs fundamentally. It’s always run on containers with a more traditional cloud scheduler. Until 2024, Railway offered a generous free tier with no sleep behavior. That changed. By mid-2025, Railway dropped its permanent free tier for compute and moved to a $5/month Hobby plan as the entry point for always-on services, per Railway’s official documentation.

So the 2026 landscape looks like this: Fly.io gives you free compute with cold start penalties. Railway charges you monthly to avoid those penalties. Neither is wrong — they’re different tradeoffs baked into the business model.

The developer community noticed. Posts comparing these two platforms filled forums throughout late 2025, with wildly different numbers depending on region, app size, and measurement methodology. Time to standardize.


The Cold Start Problem: What the Data Shows

Measuring Fly.io Free Tier Cold Starts

A minimal Node.js Express app — express(), one route, no database — deployed to Fly.io’s free tier in the iad (Virginia) region produces the following cold start behavior when scaled to zero:

  • First byte latency after idle: 1.8s to 4.2s (median ~2.6s across 50 measurements, per community benchmarks documented on vibecodingwithfred.com)
  • Warm request latency: 18ms to 45ms
  • Time to scale from zero: Dominated by Firecracker VM boot (~1.2s) plus Node.js process startup (~0.6s for a minimal app)

The variance is real. A cold start at 2am UTC hits different infrastructure load than one at 2pm EST. Fly.io’s fly scale count 1 --region iad command keeps one Machine always running — but that consumes your free compute hours, typically exhausted within ~160 hours per month on the smallest shared-cpu-1x 256MB configuration.

This approach can also fail in less obvious ways. Apps with heavier initialization — database connection pools, config loaders, JWT libraries — push that ~0.6s Node.js startup figure considerably higher. A “minimal” Express app and a real-world Express app behave very differently at boot.

Railway’s Warm Container Baseline

On Railway’s Hobby plan ($5/month), containers stay warm indefinitely. That same Node.js Express app shows:

  • Steady-state response time: 12ms to 35ms
  • Post-deploy restart time: ~8-15 seconds (a one-time event, not per-request)
  • No per-request cold starts under normal operation

Railway doesn’t publish granular cold start benchmarks, but the absence of a scale-to-zero mechanism on paid plans means “cold starts” in the Railway context only happen after deployments or rare infrastructure events — not from idle timeouts.

Platform Comparison

CriteriaFly.io Free TierRailway Hobby ($5/mo)
Cold start latency (Node.js)1.8s – 4.2sNone (warm containers)
Warm request latency18ms – 45ms12ms – 35ms
Monthly cost$0 (limited hours)$5 + usage
Scale-to-zeroYes (forced on free)No
Free compute hours/month~160 hrs (shared-cpu-1x)None free
Custom domainsYesYes
Region selectionYes (30+ regions)Limited (US/EU primary)
Best forHobby projects, low trafficUser-facing apps, demos

The table tells a clear story. Fly.io’s free tier is genuinely free but structurally cold. Railway’s paid tier is structurally warm but not free.


What This Means for Real Deployments

Scenario: Developer portfolio or personal project

Traffic is sparse — maybe 5 to 20 visits per day. Cold starts happen frequently. At a 2.6s median cold start, most visitors won’t notice if they’re not running benchmarks. Fly.io’s free tier works fine here. The per-visit experience is acceptable, and the price is hard to argue with.

Scenario: SaaS demo or investor-facing app

A 3-second blank screen on someone’s first impression of your product is a conversion killer. According to Google’s Web Vitals research, bounce rates increase approximately 32% when page load goes from 1 second to 3 seconds. Railway at $5/month eliminates that risk entirely. The math isn’t complicated.

This isn’t always the answer, though. If your demo traffic is predictable and you can keep a Fly.io Machine warm manually during key periods, you can sometimes get away with the free tier. But that’s operational overhead that tends to bite you at the worst moment.

Scenario: API backend for a mobile app

Mobile apps surface timeout errors to users when a backend cold-starts mid-request. A 4-second cold start on Fly.io’s free tier will trigger timeout dialogs on many default HTTP client configurations, which typically sit between 3 and 5 seconds. Railway’s warm containers sidestep this entirely. Worth the $5.

What to watch in the next 3-6 months: Fly.io has been iterating on Machine startup performance. Their engineering blog noted Firecracker boot time improvements targeting sub-500ms VM starts in H1 2026. If Node.js process startup remains the bottleneck — roughly 600ms for a minimal Express app — total cold starts could drop below 1.5 seconds, which changes the calculus for some use cases. Keep an eye on the Fly.io changelog.


Conclusion

The Fly.io vs Railway cold start debate has a clear answer in 2026: it depends on what “free” is worth to you.

Key findings:

  • Fly.io’s free tier produces 1.8s–4.2s cold starts on Node.js Express due to VM-based scale-to-zero
  • Railway eliminates cold starts on its $5/month Hobby plan but has no free compute tier
  • Warm-state latency is comparable — both platforms are fast when hot
  • The right choice is determined by traffic patterns, not platform preference

Near-term, Fly.io’s Firecracker improvements could reduce cold start times meaningfully. But scale-to-zero behavior on free tiers is unlikely to disappear — it’s how the economics work.

The bottom line is straightforward. If your project needs to impress someone on first load, pay Railway the $5. If it’s a personal tool or background service where a 3-second wait is acceptable, Fly.io’s free tier is hard to beat. Don’t let platform loyalty override the latency data.

Key Takeaways

  • Fly.io free tier cold starts range from 1.8s to 4.2s — a structural consequence of VM-based scale-to-zero, not a fixable config issue
  • Railway’s $5/month Hobby plan keeps containers warm permanently, eliminating per-request cold starts
  • Both platforms deliver comparable latency (12ms–45ms) once warm
  • Fly.io wins on cost for low-traffic personal projects; Railway wins on reliability for anything user-facing
  • Fly.io’s ongoing Firecracker optimizations may shift this comparison by late 2026 — worth revisiting

What does your current cold start latency look like? If you’re benchmarking Fly.io or Railway deployments in 2026, the methodology matters as much as the numbers.

References

  1. Why Fly.io Is the Best Free Docker Hosting You’re Not Using | Vibe Coding With Fred
  2. Railway vs. Fly | Railway Docs
  3. Heroku vs Render vs Vercel vs Fly.io vs Railway: Meet Blossom, an Alternative - BoltOps Blog

Photo by Ales Nesetril on Unsplash