Most teams pick a PaaS by deploying the web app. Then they add the worker. That second service, the one that drains a queue and resizes uploads at 3 a.m., is where Fly.io, Render, and Railway actually differ, and it is where the bills split apart.
Our short version: Railway is the best PaaS for a Docker web container plus background workers in 2026, because a worker there is just another service on the same private network and you pay for the memory it really uses. Fly.io is the cheapest always-on option, about $15 a month for our test stack, if you are willing to own a fly.toml. Render costs the most for this shape (about $86 on its Pro workspace) and is worth it only when your finance team wants the same invoice every month. For the end-to-end suite that gates those deploys, Playwright sharded across CI machines is the fastest choice, and Vitest Browser Mode belongs one layer down, at the component level.
Fly.io vs Render vs Railway at a glance
Prices are list prices from each vendor's pricing page and docs, checked November 5, 2026. Fly.io prices are for its cheapest regions (Ashburn and Secaucus); other regions cost more.
| Attribute | Fly.io | Render | Railway |
| Best for | Lowest always-on cost; multi-region apps | Teams that want flat monthly pricing and a dashboard ops can read | Small teams running a web app, workers, and Redis in one project |
| Deploys a Dockerfile? | Yes, fly deploy builds it remotely | Yes, Docker runtime or a prebuilt image | Yes, uses your Dockerfile when one is present |
| How a background worker runs | A process group in fly.toml, on its own Machines | A dedicated Background Worker service type | A normal service with no public domain |
| Platform or workspace fee | None (Pay As You Go) | Hobby $0 (1 seat); Pro $25/month flat, unlimited seats | Hobby $5/month; Pro $20/month per workspace, credited against usage |
| Smallest always-on worker | shared-cpu-1x 256 MB, $2.19/month | 512 MB, less than 1 CPU, $7/month | Billed per second for RAM and CPU used |
| About 1 to 2 GB of RAM | shared-cpu-1x 1 GB, $6.70/month | 1 CPU, 2 GB, $25/month | $10 per GB-month of RAM plus $20 per vCPU-month |
| Free tier | None; $1 trial credit for 7 days | Free web services only (spin down after 15 minutes idle); no free workers | Free plan with $1/month of usage, max 0.5 GB per service |
| Can a worker scale to zero? | Not automatically; auto stop needs traffic through Fly Proxy | No; paid instances run continuously | App sleeping exists, but a polling worker never goes quiet enough to sleep |
| Egress to the internet | $0.02/GB (North America, Europe) | 5 GB included on Hobby, 25 GB on Pro, then $0.15/GB | $0.05/GB |
| Cron jobs | Scheduled Machines or a cron process | Cron Job service, from $0.00016 per minute | Cron schedule on any service |
| Key trade-off | You own more config, and shared CPU is a slice of a core | Most expensive for this workload; RAM steps are coarse | Bills move with usage, so you watch them |
What one web container plus one worker costs per month
Here is the stack we priced. One Docker web container and one queue worker, each holding about 1 GB of RAM, both running all month, plus 100 GB of outbound traffic. A team of several people, so Render needs its Pro workspace for the seats.
| Platform | Compute | Plan fee | Egress (100 GB) | Monthly total |
| Fly.io | 2 × shared-cpu-1x 1 GB = $13.40 | $0 | $2.00 | $15.40 |
| Railway (Pro) | 2 GB RAM = $20.00, plus 0.25 vCPU average = $5.00 | $20, credited against usage | $5.00 | $30.00 |
| Render (Pro workspace) | 2 × 1 CPU / 2 GB = $50.00 | $25 | 75 GB over the included 25 GB = $11.25 | $86.25 |
Two caveats. Fly.io's shared-cpu-1x is a slice of a shared core, while Render's 1 CPU plan is a full CPU, so the Fly.io number buys less guaranteed compute. And Railway's total is an estimate: it bills the RAM and CPU your containers actually use, second by second, so a worker that idles at 300 MB costs less than our figure and one that leaks memory costs more.
Render does get cheaper if each service fits in 512 MB. Two $7 instances drop the total to $50.25. Plenty of Node and Go workers live comfortably there. A Python worker loading pandas will not.
Railway: the worker is just another service
This is why Railway wins. You add a service, point it at the same repo or image, give it a different start command, and do not generate a domain. It talks to Postgres and Redis over the project's private network by internal hostname. Nothing to declare.
Billing is the part people misread. Railway's Pro plan is $20 a month, and that $20 is credited against usage, so a small team paying $30 is paying $10 above the plan, not $50. RAM runs about $10 per GB-month and CPU about $20 per vCPU-month, billed per second, per Railway's pricing page checked November 5, 2026.
App sleeping will not save you money on a worker. Railway sleeps a service after 5 to 10 minutes with no outbound packets, and a worker polling Redis every second sends outbound packets all day. Sleep the web preview environments instead.
We rated Railway 9.4 in our four-way backend deployment review, ahead of Fly.io at 9.2, and the worker story is most of the gap.
Fly.io: cheapest always-on, if you write the fly.toml
Fly.io has no worker button. You declare process groups in fly.toml, something like web = "node server.js" and worker = "node worker.js", attach only web to the HTTP service, and every group runs on its own Machines that you scale separately with fly scale count. One Docker image, two programs. It is tidy once it works, and the first time takes an afternoon.
The trap is auto stop. Fly Proxy stops and restarts idle Machines based on the requests it routes, and a worker group with no service never sees a request. So the worker never stops, and it bills like any always-on Machine. Plan for that $6.70 per GB, every month.
At $0.02 per GB of egress in North America and Europe, Fly.io is also the cheapest of the three for chatty workers that push webhooks or files out. Railway charges $0.05 and Render $0.15 after the included allowance. New organizations get no free tier, only $1 of trial credit for 7 days.
Render: predictable, and priced for it
Render is the only one of the three with a first-class Background Worker service type in the dashboard and in render.yaml Blueprints, and for a team where the person reading the dashboard is not the person who wrote the code, that clarity is worth something.
The price is the RAM steps. After the 512 MB instance at $7, the next worker size is 1 CPU and 2 GB at $25, then 2 CPU and 4 GB at $85. A worker that needs 700 MB pays for 2 GB. Workers never get the free instance, which Render reserves for web services, Postgres, and Key Value per its docs checked November 5, 2026.
Render's cron jobs deserve a nod: they bill per minute of runtime, from $0.00016 a minute on the smallest size. A nightly job that runs 10 minutes costs about 5 cents a month.
Where each option fits (and where it does not)
- Railway fits a two-to-ten person team with a web container, one or two workers, and Redis, who want all of it in one project view. It does not fit a team that needs an identical bill every month, or one whose workers hold several GB of RAM around the clock, where usage pricing climbs fast.
- Fly.io fits cost-sensitive always-on stacks and apps that need Machines in several regions. It does not fit a team that wants a worker to appear from a dashboard click, and its shared CPUs are a poor match for CPU-heavy jobs like video transcoding unless you pay for performance Machines at $33 a month.
- Render fits teams that value a flat invoice, unlimited seats on a $25 workspace, and a worker type ops can find at a glance. It does not fit a startup watching every dollar; for our stack it cost more than five times the Fly.io bill.
If the worker is really a workflow engine (retries, steps that sleep for a day), read our Temporal vs Inngest vs Trigger.dev vs BullMQ comparison before you size any container at all.
Playwright vs Cypress vs Vitest Browser Mode: which is fastest in CI
A worker deploy is only as safe as the suite that gates it, so this page answers the testing question too. Run times are from our earlier 150-test suite against a Next.js app; Cypress Cloud prices are from cypress.io/pricing, checked November 5, 2026.
| Framework | Best for | Parallel in CI | Paid service needed? | Our 150-test suite | Key trade-off |
| Playwright | Full user journeys against a preview deploy | Built-in workers, plus --shard across machines | No | 3m 40s with 1 worker; 1m 05s with 4; 38s with 8 | Debugging is a trace file, not a live runner |
| Cypress | Single-tab apps where interactive debugging matters most | Across machines via Cypress Cloud | For parallel runs past 500 results a month, yes | 5m 10s, sequential | Free Starter allows 500 test results a month |
| Vitest Browser Mode | Component tests in a real browser | Vitest's own worker pool | No | Not benchmarked by us | Tests components, not deployed multi-page flows |
Playwright is the fastest end-to-end framework in CI, and it is not close. In our Playwright vs Cypress vs Puppeteer test it also had the lowest flaky rate across 50 runs, 0.2% against 0.8% for Cypress. Split the suite four ways with npx playwright test --shard=1/4 on four runners, merge the reports, and a gate that took minutes takes about as long as the container build.
Cypress pricing changes the math more than its speed does. The free Starter plan now includes parallelization, but caps you at 500 test results a month, which our 150-test suite would use up in three runs. Run it 20 times a working day and you produce about 63,000 results a month. Team starts at $67 a month billed annually and includes 120,000 results a year, roughly 10,000 a month, with extra results at $6 per 1,000. That team would pay about $318 a month in overage on top.
Vitest Browser Mode has been stable since Vitest 4.0, released October 22, 2025, and it runs tests in real Chromium, Firefox, or WebKit through the @vitest/browser-playwright provider. For a date picker or a form component, it is faster than any end-to-end tool, because it never boots the app or logs in. We have not benchmarked it ourselves, so we quote no number. It does not replace the suite that logs into a preview deploy and checks that the job it enqueued actually finished.
The stack we would run: Vitest, Browser Mode included, for components, as covered in our Vitest vs Jest vs Playwright guide, and 20 to 40 Playwright tests against each pull request's preview environment. Railway and Render both create a temporary environment per pull request. On Fly.io, you script it with a GitHub Action.
Self-hosting is the fourth answer
If $15 a month still feels like rent on a room you never visit, Coolify on a small Hetzner box runs the same Docker image and worker for less, and our March review covers what you give up.
Our pick
Railway for the web container and its workers. Fly.io if the bill matters more than your afternoon. Playwright, sharded, as the gate in front of both.
Frequently asked questions
Which is best for Docker containers and background workers: Fly.io, Render, or Railway?
Railway, for most small teams. A worker on Railway is an ordinary service without a public domain, it shares a private network with your web container and Redis, and billing follows the RAM and CPU the worker actually uses. Fly.io gives the lowest always-on bill (a 1 GB shared-cpu-1x Machine is $6.70 a month in Ashburn) if you will maintain a fly.toml. Render is the pick when you want a flat, predictable invoice and a dedicated worker service type, at $25 a month for each 1 CPU, 2 GB instance.
Does Render have a free tier for background workers?
No. Per Render's docs checked November 5, 2026, free instances cover web services, Render Postgres, and Render Key Value only. The smallest paid background worker is $7 a month for 512 MB and less than one CPU. Free web services spin down after 15 minutes without inbound traffic, with 750 free instance hours per workspace per month.
Will a background worker scale to zero on Fly.io or Railway?
Usually not. Fly.io's auto stop and start is driven by Fly Proxy, which only sees Machines that receive traffic through a service, so a worker process group with no service keeps running and keeps billing. Railway's app sleeping puts a service to sleep after 5 to 10 minutes without outbound packets, and a worker that polls a queue sends outbound packets constantly, so it stays awake.
Which end-to-end testing framework is fastest in CI in 2026?
Playwright. In our 150-test suite it finished in 1 minute 5 seconds with 4 workers and 38 seconds with 8, against 5 minutes 10 seconds for Cypress running sequentially. Playwright also shards across CI machines for free with its --shard flag. Vitest Browser Mode is faster for component tests because it never boots the whole app, but it runs component tests, not full user journeys against a deployed environment.
Is Vitest Browser Mode a replacement for Playwright or Cypress?
For component tests, it can be. Browser Mode became stable in Vitest 4.0 on October 22, 2025 and runs tests in a real browser through a provider such as @vitest/browser-playwright. It does not drive a login and a checkout across a deployed preview URL, which is what an end-to-end suite is for. Most teams that adopt it keep a smaller Playwright suite for those journeys.
How much does Cypress Cloud cost for parallel runs?
Per cypress.io/pricing checked November 5, 2026, the free Starter plan includes parallelization and load balancing but only 500 test results a month. Team starts at $67 a month billed annually ($799 a year) with 120,000 test results a year, and extra results cost $6 per 1,000 on Team.
How we evaluated this page
Platform ratings come from our earlier hands-on deployment review, and the Playwright and Cypress timings and flaky rates come from our 150-test E2E comparison. We ran no new benchmarks for this page. The monthly cost table is our own arithmetic on list prices, with the usage assumptions stated above it. Prices, free-tier rules, worker configuration, and sleep behavior were checked on November 5, 2026 against docs.fly.io/about/pricing, docs.fly.io process group docs, render.com/pricing, Render's compute plan and free instance docs, railway.com/pricing, Railway's app sleeping docs, cypress.io/pricing, and the Vitest Browser Mode guide and Vitest 4 release notes. Egress rates on this page replace the older figures in our March review. See our About page for methodology.