---
title: Vercel alternatives compared (2026)
slug: vercel-alternatives
url: "https://toolweight.dev/compare/vercel-alternatives"
question: Which Vercel alternative should I use, and what happens to my bill if my site goes viral?
tools: 13
fields: 26
last_verified: 2026-06-15
freshness: 33%
verify_cadence: 30d
license: CC-BY-4.0
---

# Vercel vs the alternatives

> **Which Vercel alternative should I use, and what happens to my bill if my site goes viral?**
>
> Cloudflare Workers & Pages is the cheapest credible alternative — $5/month with no egress charge at all. Railway, Render and Fly.io are the pick if you want plain containers. Vercel still has the best Next.js parity by a wide margin. Almost every managed host here bills overage rather than throttling, so set a spend cap before you launch.

## At a glance

|  |  |
| --- | --- |
| Canonical | https://toolweight.dev/compare/vercel-alternatives |
| Tools compared | 13 |
| Fields compared | 26 |
| Last verified | 2026-06-15 (1mo ago) |
| Verify cadence | 30d |
| Freshness | 33% (mean cell confidence) |
| Killer field | overage_behaviour |
| Scoring | Weighted, re-rankable |
| Licence | CC-BY-4.0 — https://creativecommons.org/licenses/by/4.0/ |

## Ranking — default weights

| # | Tool | Score | Coverage | One-liner |
| --- | --- | --- | --- | --- |
| 1 | [Coolify](https://toolweight.dev/tools/coolify) | 74.2 | 79% | Open-source self-hosted PaaS: git push to your own server, with previews and cron. |
| 2 | [Dokploy](https://toolweight.dev/tools/dokploy) | 74.2 | 79% | Open-source self-hosted PaaS on Docker Swarm, with multi-node clustering built in. |
| 3 | [Vercel](https://toolweight.dev/tools/vercel) | 73.2 | 100% | The frontend cloud that ships Next.js: best-in-class DX, metered everything. |
| 4 | [Cloudflare Workers & Pages](https://toolweight.dev/tools/cloudflare-workers) | 72.5 | 100% | V8 isolates on 300+ PoPs, with zero egress charges and near-zero cold starts. |
| 5 | [Hetzner + Coolify](https://toolweight.dev/tools/hetzner-coolify) | 65.9 | 88% | The DIY baseline: a €4 CX22 running Coolify, with 20 TB of traffic included. |
| 6 | [Northflank](https://toolweight.dev/tools/northflank) | 65.7 | 88% | Container platform with bring-your-own-cloud, GPUs and a sandbox-shaped API. |
| 7 | [Netlify](https://toolweight.dev/tools/netlify) | 64.0 | 100% | The original Jamstack host: strong build pipeline, punishing bandwidth overage. |
| 8 | [Deno Deploy](https://toolweight.dev/tools/deno-deploy) | 64.0 | 83% | Web-standard JavaScript at the edge, with built-in OpenTelemetry and a global KV. |
| 9 | [Fly.io](https://toolweight.dev/tools/fly-io) | 62.9 | 88% | Firecracker microVMs in 35+ regions including Sydney, driven from the CLI. |
| 10 | [Sevalla](https://toolweight.dev/tools/sevalla) | 62.2 | 79% | Kinsta's developer platform: apps, static sites, databases and object storage on GCP. |
| 11 | [Railway](https://toolweight.dev/tools/railway) | 61.4 | 88% | Container PaaS with the best developer experience in the category and usage billing. |
| 12 | [Render](https://toolweight.dev/tools/render) | 54.5 | 92% | Heroku-shaped container host with blueprints, managed Postgres and calm billing. |
| 13 | [AWS Amplify Hosting](https://toolweight.dev/tools/aws-amplify) | 51.1 | 96% | Managed Next.js and static hosting inside AWS, billed per GB with no spend cap. |

Re-rank against your own priorities by appending `?w=field_id:weight,…` to the canonical URL, or call `score_tools` on the MCP server at `https://toolweight.dev/mcp`.

## Comparison

### Platform

| Tool | Frameworks | Next.js parity | Runtime model | Fn timeout (ms) | Cold start (ms) | Cron jobs | Preview deploys | WAF & DDoS | Observability | Sydney region | Monorepo support | Rollback |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Coolify | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ● | ○ | included-basic | ● | ● | redeploy |
| Dokploy | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ● | ○ | included-basic | ● | ● | redeploy |
| Vercel | nextjs, nuxt, sveltekit, astro, remix, static | full | edge+node | 5 min | 250 ms | ● | ● | ● | included-basic | ● | ● | instant |
| Cloudflare Workers & Pages | nextjs, nuxt, sveltekit, astro, remix, static | most | edge-only | 30 s | 5 ms | ● | ● | ● | included-basic | ● | ◐ | instant |
| Hetzner + Coolify | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ● | ◐ | included-basic | ○ | ● | redeploy |
| Northflank | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ● | ◐ | included-basic | ◐ | ● | instant |
| Netlify | nextjs, nuxt, sveltekit, astro, remix, static | most | edge+node | 10 s | 300 ms | ● | ● | ◐ | included-basic | ◐ | ● | instant |
| Deno Deploy | nextjs, nuxt, sveltekit, astro, static | basic | edge-only | — | 50 ms | ● | ● | ◐ | included-full | ● | ◐ | instant |
| Fly.io | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 400 ms | ◐ | ◐ | ◐ | included-basic | ● | ● | redeploy |
| Sevalla | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ◐ | ● | included-basic | ● | ● | instant |
| Railway | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ● | ◐ | included-basic | ○ | ● | instant |
| Render | nextjs, nuxt, sveltekit, astro, dockerfile | self-managed | container | — | 0 ms | ● | ● | ◐ | included-basic | ○ | ● | instant |
| AWS Amplify Hosting | nextjs, nuxt, sveltekit, astro, static | most | node | 30 s | 800 ms | ○ | ● | ◐ | paid-addon | ● | ● | instant |

### Pricing & overage

| Tool | Overage behaviour | Bandwidth price (/TB) | Price @ 1 TB (/mo) | Build minutes incl. (min/mo) | Image opt billing | Analytics cost (/mo) | Free tier |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Coolify | throttle | — | — | — | byo | — | 5 |
| Dokploy | throttle | — | — | — | byo | — | 5 |
| Vercel | bill | $150 /TB | $20 /mo | 24,000 min/mo | metered | $10 /mo | 4 |
| Cloudflare Workers & Pages | bill | $0 /TB | $5 /mo | 3,000 min/mo | metered | $0 /mo | 5 |
| Hetzner + Coolify | bill | $1 /TB | $5 /mo | — | byo | — | 1 |
| Northflank | bill | $100 /TB | $120 /mo | — | byo | — | 3 |
| Netlify | bill | $550 /TB | $19 /mo | 25,000 min/mo | included | $9 /mo | 3 |
| Deno Deploy | bill | — | — | — | none | $0 /mo | 4 |
| Fly.io | bill | $20 /TB | $30 /mo | — | byo | — | 2 |
| Sevalla | bill | — | — | — | byo | — | 3 |
| Railway | bill | $50 /TB | $60 /mo | — | byo | — | 2 |
| Render | bill | $300 /TB | $280 /mo | 500 min/mo | byo | — | 3 |
| AWS Amplify Hosting | bill | $150 /TB | $155 /mo | 0 min/mo | metered | — | 2 |

### Portability

| Tool | Self-hostable | Exit friction |
| --- | --- | --- |
| Coolify | ● | 1 |
| Dokploy | ● | 1 |
| Vercel | ○ | 4 |
| Cloudflare Workers & Pages | ◐ | 4 |
| Hetzner + Coolify | ● | 1 |
| Northflank | ◐ | 2 |
| Netlify | ○ | 3 |
| Deno Deploy | ○ | 2 |
| Fly.io | ○ | 2 |
| Sevalla | ○ | 2 |
| Railway | ○ | 2 |
| Render | ○ | 2 |
| AWS Amplify Hosting | ○ | 3 |

### Automation

| Tool | CLI quality | Agent/CI deploy |
| --- | --- | --- |
| Coolify | 2 | ◐ |
| Dokploy | 2 | ◐ |
| Vercel | 5 | ● |
| Cloudflare Workers & Pages | 4 | ● |
| Hetzner + Coolify | 2 | ◐ |
| Northflank | 4 | ● |
| Netlify | 4 | ● |
| Deno Deploy | 4 | ● |
| Fly.io | 5 | ● |
| Sevalla | 2 | ◐ |
| Railway | 4 | ● |
| Render | 3 | ● |
| AWS Amplify Hosting | 2 | ● |

### Traction

| Tool | GA year | Funding |
| --- | --- | --- |
| Coolify | 2021 | oss-community |
| Dokploy | 2024 | oss-community |
| Vercel | 2015 | late-stage |
| Cloudflare Workers & Pages | 2017 | public |
| Hetzner + Coolify | 2018 | bootstrapped |
| Northflank | 2021 | growth |
| Netlify | 2015 | late-stage |
| Deno Deploy | 2021 | growth |
| Fly.io | 2020 | growth |
| Sevalla | 2024 | bootstrapped |
| Railway | 2020 | growth |
| Render | 2019 | growth |
| AWS Amplify Hosting | 2018 | public |

### Positioning

| Tool | Pricing clarity |
| --- | --- |
| Coolify | 5 |
| Dokploy | 5 |
| Vercel | 2 |
| Cloudflare Workers & Pages | 4 |
| Hetzner + Coolify | 5 |
| Northflank | 3 |
| Netlify | 3 |
| Deno Deploy | 3 |
| Fly.io | 3 |
| Sevalla | 4 |
| Railway | 3 |
| Render | 4 |
| AWS Amplify Hosting | 2 |

## Field registry

| Field | id | Group | Type | Unit | Better | Default weight | Definition |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Frameworks | `framework_support` | features | multi-enum | — | higher | 4 | Frameworks the platform detects and builds with zero configuration, from a git push and nothing else. Anything you could only run by writing your own Dockerfile counts as `dockerfile`, not as first-class support. |
| Next.js parity | `nextjs_parity` | features | enum | — | higher | 8 | How much of ISR, PPR, middleware, streaming and next/image works as documented. `full` is Vercel's own runtime; `most` is a maintained adapter missing one or two features; `self-managed` means you run `next start` in a container, so every feature works but there is no CDN and no shared ISR cache; `basic` is static export plus a serverless shim. |
| Runtime model | `runtime_model` | features | enum | — | n/a | 3 | What your code actually executes in. `edge+node` offers both a V8-isolate edge runtime and a Node runtime; `edge-only` offers isolates alone; `container` runs an OCI image you built. Not scored by default, because the right answer depends entirely on your dependencies. |
| Fn timeout | `function_timeout` | features | duration | ms | higher | 4 | Maximum wall-clock duration of a single request handler on the lowest paid tier before the platform kills it. Blank means there is no platform-imposed limit because you are running a long-lived container. |
| Cold start | `cold_start` | features | duration | ms | lower | 4 | Approximate p50 added latency on the first request after an idle period, for a trivial handler on the lowest paid tier. Zero means instances stay warm and do not scale to zero by default. |
| Cron jobs | `cron_jobs` | features | tristate | — | higher | 4 | First-class scheduled invocation configured in the platform, without standing up a separate scheduler. `partial` means schedules exist but are coarse, per-machine, or require a dedicated always-on service. |
| Preview deploys | `preview_deploys` | features | tristate | — | higher | 5 | A unique, automatically provisioned URL per pull request, torn down on merge, with no per-branch configuration. `partial` means it works but you wire it up yourself. |
| WAF & DDoS | `waf_ddos` | features | tristate | — | higher | 4 | Layer 3/4 DDoS mitigation and a configurable application firewall, both included at the lowest paid tier. `partial` means volumetric protection is included but WAF rules are an add-on or an enterprise line item. |
| Observability | `observability` | features | enum | — | higher | 4 | What you can see without buying a third-party tool. `included-full` is logs, metrics and distributed traces with usable retention; `included-basic` is logs and instance metrics only; `paid-addon` is a separately metered product; `byo` means you ship it somewhere yourself. |
| Sydney region | `sydney_region` | features | tristate | — | higher | 5 | Whether compute — not just cached static assets — can be pinned to an Australian region. `partial` means Sydney is reachable only via bring-your-own-cloud, or only the CDN edge is present while functions execute offshore. |
| Monorepo support | `monorepo_support` | features | tristate | — | higher | 3 | Multiple deployable apps from one repository, with per-app root directories, independent build commands and change-based build skipping. `partial` means it works but rebuilds everything regardless of what changed. |
| Rollback | `rollback_speed` | features | enum | — | higher | 4 | How fast you get back to the previous good version. `instant` is an atomic alias swap in seconds; `redeploy` relaunches a retained image in a minute or two; `rebuild` re-runs the build from source; `manual` means SSH. |
| Overage behaviour | `overage_behaviour` | pricing | enum | — | higher | 10 | What happens when you get on Hacker News and blow through the included quota on the lowest paid tier. `throttle` degrades service and sends no invoice; `hard-stop` takes the site down and sends no invoice; `bill` keeps the site up with an unbounded invoice; `bill-then-suspend` gives you the invoice and the outage. Ranked for bill predictability, not uptime — reweight if you would rather stay online. |
| Bandwidth price | `bandwidth_price` | pricing | currency | /TB | lower | 8 | Published marginal cost of a terabyte of outbound transfer once the included allowance is gone, at the cheapest listed region. Where a vendor bills in fixed blocks, the block price is converted to a per-TB rate. |
| Price @ 1 TB | `price_1tb_egress` | pricing | currency | /mo | lower | 9 | Estimated monthly invoice for one small production app on the cheapest commercially usable tier, serving 1 TB of transfer and about 1M requests: base or seat fee, plus one always-on instance where required, plus metered bandwidth. Excludes databases, heavy compute and image transformations. |
| Build minutes incl. | `build_minutes` | pricing | number | min/mo | higher | 3 | CI build minutes included per month at the lowest paid tier. Zero means builds are metered from the first minute. Blank means builds are billed as ordinary compute with no separate allowance, or run on hardware you own. |
| Image opt billing | `image_opt_billing` | pricing | enum | — | higher | 4 | How next/image-style optimisation is charged. `included` is bundled with the plan; `byo` means the platform does not offer it and you optimise on your own CPU at no extra charge; `metered` is billed per transformation or per source image; `none` means there is no practical path. Ranked for bill predictability rather than convenience. |
| Analytics cost | `analytics_cost` | pricing | currency | /mo | lower | 2 | Additional monthly cost for first-party web analytics on top of the lowest paid tier. Zero means it is included. Blank means the platform does not offer analytics at all and you would self-host Plausible or Umami. |
| Free tier | `free_tier` | pricing | score | — | higher | 4 | 1–5. 5 = a production-capable free tier with commercial use explicitly permitted. 4 = generous but restricted to non-commercial or hobby use. 3 = usable for staging and demos, with sleeping instances or tight quotas. 2 = trial credit only. 1 = no free tier at all. |
| Self-hostable | `self_hostable` | portability | tristate | — | higher | 5 | Whether the platform itself — not just your app — can run on infrastructure you control. `partial` means a bring-your-own-cloud mode exists where the vendor's control plane drives your own accounts, or the runtime is open source while the platform is not. |
| Exit friction | `lockin_score` | portability | score | — | lower | 6 | 1–5, lower is better. 1 = a Dockerfile and a DNS change. 2 = platform-specific config but a portable runtime. 3 = proprietary build output or storage primitives in the hot path. 4 = a non-standard runtime plus bindings with no drop-in equivalent. 5 = a rewrite. |
| CLI quality | `cli_quality` | agentic | score | — | higher | 4 | 1–5. 5 = a first-class CLI that can create, deploy, tail logs, exec and roll back, with stable flags and machine-readable output. 3 = a CLI that deploys but pushes you to the dashboard for anything else. 1 = dashboard only, or an unofficial wrapper. |
| Agent/CI deploy | `agent_deploy` | agentic | tristate | — | higher | 5 | Whether a headless agent or CI runner holding only an API token can provision, deploy and read logs with no interactive browser login anywhere in the flow. `partial` means deploys work but provisioning or teardown still needs a human in the dashboard. |
| GA year | `launched` | traction | number | — | n/a | 0 | Year the hosting product became generally available in its current shape, not the year the parent company was founded. Not scored: older is neither better nor worse. |
| Funding | `funding_stage` | traction | enum | — | n/a | 0 | Funding position of the company behind the platform, as a proxy for how likely the pricing is to change under you. Not scored — a listed company is not automatically a safer bet than a profitable bootstrapper. |
| Pricing clarity | `pricing_clarity` | marketing | score | — | higher | 5 | 1–5, how accurately a competent engineer can predict next month's invoice from the public pricing page alone, with no calculator and no sales call. 5 = a fixed number. 3 = usage-based with a working estimator. 1 = several interacting meters and no worked example. |

## Presets

| Preset | id | What it optimises for | Weights | Ranked URL |
| --- | --- | --- | --- | --- |
| Cheapest at 1 TB | `cheapest-1tb` | Ranks purely on what a real production app costs once it is serving a terabyte a month. | price_1tb_egress:10, bandwidth_price:8, overage_behaviour:6, pricing_clarity:4, free_tier:2, build_minutes:2, analytics_cost:2, nextjs_parity:1 | https://toolweight.dev/compare/vercel-alternatives?w=price_1tb_egress:10,bandwidth_price:8,overage_behaviour:6,pricing_clarity:4,free_tier:2,build_minutes:2,analytics_cost:2,nextjs_parity:1 |
| Best Next.js parity | `nextjs-parity` | For teams who will not give up ISR, PPR, middleware or next/image to save money. | nextjs_parity:10, image_opt_billing:6, function_timeout:5, preview_deploys:4, rollback_speed:4, cold_start:3, framework_support:3, monorepo_support:3 | https://toolweight.dev/compare/vercel-alternatives?w=nextjs_parity:10,image_opt_billing:6,function_timeout:5,preview_deploys:4,rollback_speed:4,cold_start:3,framework_support:3,monorepo_support:3 |
| Most portable | `most-portable` | Weighted for how cheaply you can leave: self-hostability, container-native deploys, no proprietary runtime. | self_hostable:10, lockin_score:9, runtime_model:4, framework_support:3, pricing_clarity:2, nextjs_parity:1 | https://toolweight.dev/compare/vercel-alternatives?w=self_hostable:10,lockin_score:9,runtime_model:4,framework_support:3,pricing_clarity:2,nextjs_parity:1 |
| Best free tier | `best-free-tier` | What you can ship for nothing, and what happens the moment you exceed it. | free_tier:10, overage_behaviour:8, build_minutes:4, cold_start:3, preview_deploys:3, analytics_cost:2 | https://toolweight.dev/compare/vercel-alternatives?w=free_tier:10,overage_behaviour:8,build_minutes:4,cold_start:3,preview_deploys:3,analytics_cost:2 |

## Verdict

Vercel is not overpriced at small scale. On the Pro plan you get 1 TB of transfer inside the $20 seat price, which is more than most side projects and plenty of real businesses will ever serve. The problem is the second terabyte: at roughly $0.15/GB it costs $150, and out of Sydney it costs more. That cliff — not the base price — is what sends people to this page.

If your bill is the whole reason you are here, Cloudflare Workers & Pages ends the argument. Egress is free, permanently and by policy, so a front-page spike costs you requests and CPU-milliseconds rather than bandwidth. You pay for that with a runtime that is not Node, an ecosystem of bindings that do not exist anywhere else, and a Next.js story that runs through the OpenNext adapter rather than the framework's own team. It works. It is not the frictionless thing Vercel sells.

If you would rather run containers and stop thinking about framework adapters, Railway and Render are the two grown-up options, and Fly.io is the one to pick when latency to Sydney matters — it is the only container host in this roster with a real `syd` region. Railway has the better developer experience and the more aggressive compute pricing since it moved onto its own hardware; Render has the calmer, more predictable billing and a genuinely useful free tier for staging. Northflank is the one nobody shortlists and probably should: preview environments, cron, and a bring-your-own-cloud mode that runs the workloads in your own Sydney account.

Netlify deserves a specific warning rather than a general one. Its overage bandwidth is priced in $55-per-100 GB blocks, roughly 3.5× Vercel and infinitely more than Cloudflare, and it is the platform that produced the canonical $104,000 DDoS invoice. That bill was waived and the protections are better now, but the pricing shape is unchanged. AWS Amplify has the same exposure with none of the polish: no spend cap exists anywhere in AWS, and Budgets only send you an email while the meter runs.

The self-host rows are not a joke entry. A €4/month Hetzner box running Coolify includes 20 TB of traffic and charges €1 for each terabyte after that — the same spike that costs $450 on Netlify costs about one euro. What you are buying from a managed host is not compute, it is the person who gets paged. If nobody on your team wants that pager, do not self-host, no matter what the table says. If you already run servers, Coolify or Dokploy will delete most of your Vercel bill in an afternoon, and the only thing you genuinely lose is the global CDN — which Cloudflare will put back for free.

## The bandwidth cliff, priced out

The interesting number is not the base price, it is the marginal one. Cloudflare charges nothing per terabyte. Hetzner charges about €1. Fly.io charges $20 in North America and Europe, and roughly double that into Asia-Pacific. Railway charges $50. AWS Amplify and Vercel both land near $150. Netlify charges around $550, because its overage is sold in $55 blocks of 100 GB.

Line those up and the ordering barely changes as you scale: at 1 TB Vercel looks competitive because that terabyte is bundled, and at 5 TB it costs upwards of $600 while Cloudflare still costs $5. This is why "is Vercel expensive?" has no answer without a traffic number attached. Below a terabyte the honest answer is no. Above three or four, on an image-heavy content site, it becomes the largest line item in a small company's infrastructure spend.

The mitigation nobody mentions is that you can keep Vercel and put Cloudflare in front of it, cache aggressively, and cut billable transfer by most of it. That is more work than moving hosts. It is much less work than rewriting for a new runtime.

## How to actually decide

Start with the framework question, because it constrains everything else. If you depend on Next.js features that only exist on Vercel's own runtime — PPR in particular, and ISR revalidation shared across regions — your realistic choices are Vercel, or a container running `next start` and accepting a single-region cache. Everything else on this page is a compromise between those two.

Then apply the traffic test. Under 500 GB a month, pick on developer experience and stop optimising: the spread between every option here is under $30. Over 2 TB, pick on egress price, because nothing else on the invoice will matter.

Then apply the pager test. Managed hosts sell you an on-call rotation more than they sell you compute. Coolify and Dokploy are excellent software and they do not answer the phone. If your team has one backend engineer and a deadline, that is a decisive argument for Railway or Render over a VPS, whatever the pricing column says.

Finally, check the region. Australian and New Zealand teams should treat the Sydney column as a hard filter rather than a nice-to-have. Singapore adds roughly 90 ms of round trip, which is visible on any page that makes more than one sequential call.

## Migration paths that actually work

Moving off Vercel is easy for static and SSR-only apps and hard for anything touching the platform's own primitives. A Next.js app that uses only `app/` routes, `next/image` and standard middleware moves to a container in an afternoon: add a Dockerfile, set `output: "standalone"`, point DNS. The friction starts with Vercel KV, Blob, Edge Config and cron routes, each of which needs a replacement service rather than a config change.

The two migrations that are consistently underestimated are image optimisation and ISR. `next/image` on a container optimises on your own CPU with no CDN in front, which is fine at low volume and expensive at high volume; most teams end up putting Cloudflare Images or a third-party image CDN back in. ISR across multiple container instances revalidates per instance unless you configure a shared cache handler, which means stale pages behave differently in production than they did on Vercel — and it usually surfaces as a bug report rather than a metric.

The reverse migration, from a container host onto Vercel, is much easier. That is worth knowing while you are choosing: starting on Railway or Fly costs you nothing in optionality, whereas starting on Vercel and building against its primitives does.

## Provenance — every cell, every source

### Coolify {#coolify}

Open-source self-hosted PaaS: git push to your own server, with previews and cron.

|  |  |
| --- | --- |
| Site | https://coolify.io |
| Docs | https://coolify.io/docs |
| Repo | https://github.com/coollabsio/coolify |
| Company | coolLabs |
| Founded | 2021 |
| Funding | Sponsorship-funded open source |
| Open source | Yes (Apache-2.0) |
| Profile | https://toolweight.dev/tools/coolify |
| Score (default weights) | 74.2 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #coolify-framework_support |
| Next.js parity | self-managed | Inferred | — | — | You run the framework's own server, so nothing is missing except a CDN and a shared ISR cache. | #coolify-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #coolify-runtime_model |
| Fn timeout | — | Inferred | — | — | Whatever you configure in Traefik. | #coolify-function_timeout |
| Cold start | 0 ms | Inferred | — | — | — | #coolify-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://coolify.io/docs | Scheduled tasks are built in. | #coolify-cron_jobs |
| Preview deploys | ● | Inferred | — | — | Per-PR preview deployments with automatic subdomains — genuinely surprising for free software. | #coolify-preview_deploys |
| WAF & DDoS | ○ | Inferred | — | — | Nothing sits in front of your box unless you put Cloudflare there yourself, which most people do. | #coolify-waf_ddos |
| Observability | included-basic | Inferred | — | — | Container logs and host metrics, with no retention and no tracing. | #coolify-observability |
| Sydney region | ● | Inferred | — | — | Trivially — you choose the server, so you choose the country. | #coolify-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #coolify-monorepo_support |
| Rollback | redeploy | Inferred | — | — | Redeploy a previous commit; images are not always retained. | #coolify-rollback_speed |
| Overage behaviour | throttle | Inferred | — | — | There is no meter to exceed. A traffic spike saturates the box and requests get slow or fail — you never receive an invoice for it. | #coolify-overage_behaviour |
| Bandwidth price | — | Inferred | — | — | Entirely a function of the host you run it on; see the Hetzner + Coolify baseline row for a concrete figure. | #coolify-bandwidth_price |
| Price @ 1 TB | — | Inferred | — | — | Depends on your server. The baseline row prices the common case. | #coolify-price_1tb_egress |
| Build minutes incl. | — | Inferred | — | — | Builds run on your own hardware, which is also the constraint: a 4 GB box will OOM building a large Next.js app. | #coolify-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #coolify-image_opt_billing |
| Analytics cost | — | Inferred | — | — | Deploy Plausible or Umami as another Coolify service. | #coolify-analytics_cost |
| Free tier | 5 | Inferred | — | — | The software is free forever; the hosted control plane is optional and cheap. | #coolify-free_tier |
| Self-hostable | ● | Vendor-claimed | 2026-06-15 | https://github.com/coollabsio/coolify | Apache-2.0. That is the entire point. | #coolify-self_hostable |
| Exit friction | 1 | Inferred | — | — | Docker Compose underneath. Moving means pointing DNS somewhere else. | #coolify-lockin_score |
| CLI quality | 2 | Inferred | — | — | There is a REST API and webhook deploys, but the dashboard is the product. | #coolify-cli_quality |
| Agent/CI deploy | ◐ | Inferred | — | — | API and deploy webhooks work headlessly; initial server setup expects a human. | #coolify-agent_deploy |
| GA year | 2021 | Inferred | — | — | — | #coolify-launched |
| Funding | oss-community | Inferred | — | — | — | #coolify-funding_stage |
| Pricing clarity | 5 | Inferred | — | — | Your invoice is a VPS invoice. It does not move. | #coolify-pricing_clarity |

**Verdict.** Astonishingly complete for free software — previews, cron, TLS and databases all work — and one of only two rows where a traffic spike degrades instead of billing. What you take on is the pager, the disk-space alerts and the fact that nobody is coming to help at 3am.

**Pick it when**

- Teams that already run servers and resent the Vercel invoice
- Internal tools and staging fleets where downtime is survivable
- Workloads that must stay in a specific country or jurisdiction

### Dokploy {#dokploy}

Open-source self-hosted PaaS on Docker Swarm, with multi-node clustering built in.

|  |  |
| --- | --- |
| Site | https://dokploy.com |
| Docs | https://docs.dokploy.com |
| Repo | https://github.com/Dokploy/dokploy |
| Company | Dokploy |
| Founded | 2024 |
| Funding | Sponsorship-funded open source |
| Open source | Yes (Apache-2.0) |
| Profile | https://toolweight.dev/tools/dokploy |
| Score (default weights) | 74.2 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #dokploy-framework_support |
| Next.js parity | self-managed | Inferred | — | — | Same as any container host: everything works, nothing is cached at an edge. | #dokploy-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #dokploy-runtime_model |
| Fn timeout | — | Inferred | — | — | — | #dokploy-function_timeout |
| Cold start | 0 ms | Inferred | — | — | — | #dokploy-cold_start |
| Cron jobs | ● | Inferred | — | — | — | #dokploy-cron_jobs |
| Preview deploys | ● | Inferred | — | — | — | #dokploy-preview_deploys |
| WAF & DDoS | ○ | Inferred | — | — | Bring your own edge. | #dokploy-waf_ddos |
| Observability | included-basic | Inferred | — | — | Container logs and basic metrics; no retention. | #dokploy-observability |
| Sydney region | ● | Inferred | — | — | You pick the server. | #dokploy-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #dokploy-monorepo_support |
| Rollback | redeploy | Inferred | — | — | — | #dokploy-rollback_speed |
| Overage behaviour | throttle | Inferred | — | — | No meter, no invoice — the box just saturates. Swarm makes adding a second box the mitigation. | #dokploy-overage_behaviour |
| Bandwidth price | — | Inferred | — | — | Whatever your host charges. | #dokploy-bandwidth_price |
| Price @ 1 TB | — | Inferred | — | — | — | #dokploy-price_1tb_egress |
| Build minutes incl. | — | Inferred | — | — | Builds run on your own nodes. | #dokploy-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #dokploy-image_opt_billing |
| Analytics cost | — | Inferred | — | — | — | #dokploy-analytics_cost |
| Free tier | 5 | Inferred | — | — | Apache-2.0 software; the hosted control plane is a few dollars per server. | #dokploy-free_tier |
| Self-hostable | ● | Vendor-claimed | 2026-06-15 | https://github.com/Dokploy/dokploy | — | #dokploy-self_hostable |
| Exit friction | 1 | Inferred | — | — | — | #dokploy-lockin_score |
| CLI quality | 2 | Inferred | — | — | API-driven and dashboard-first; no substantial CLI. | #dokploy-cli_quality |
| Agent/CI deploy | ◐ | Inferred | — | — | — | #dokploy-agent_deploy |
| GA year | 2024 | Inferred | — | — | — | #dokploy-launched |
| Funding | oss-community | Inferred | — | — | — | #dokploy-funding_stage |
| Pricing clarity | 5 | Inferred | — | — | — | #dokploy-pricing_clarity |

**Verdict.** Coolify's architecture argument in reverse: Docker Swarm underneath means multi-node clustering and rolling deploys across several boxes with no extra tooling. Younger, smaller ecosystem, fewer templates — pick it over Coolify specifically when you expect to outgrow one server.

**Pick it when**

- Self-hosters who need more than one node from day one
- Rolling deploys without standing up Kubernetes
- Replacing a small Railway or Render bill with a fixed VPS cost

### Vercel {#vercel}

The frontend cloud that ships Next.js: best-in-class DX, metered everything.

|  |  |
| --- | --- |
| Site | https://vercel.com |
| Docs | https://vercel.com/docs |
| Company | Vercel Inc. |
| Founded | 2015 |
| Funding | Series F, reported ~$9.3B valuation (2025) |
| Open source | No |
| Profile | https://toolweight.dev/tools/vercel |
| Score (default weights) | 73.2 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, remix, static | Inferred | — | — | — | #vercel-framework_support |
| Next.js parity | full | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/frameworks/nextjs | The reference implementation — PPR and cross-region ISR revalidation ship here first. | #vercel-nextjs_parity |
| Runtime model | edge+node | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/functions/runtimes | — | #vercel-runtime_model |
| Fn timeout | 5 min | Inferred | 2026-06-15 | https://vercel.com/docs/functions/limits | 300 s default on Pro; configurable higher on Fluid compute. | #vercel-function_timeout |
| Cold start | 250 ms | Inferred | — | — | Fluid compute reuses warm instances aggressively, so most requests never pay this. | #vercel-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/cron-jobs | — | #vercel-cron_jobs |
| Preview deploys | ● | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/deployments/preview-deployments | — | #vercel-preview_deploys |
| WAF & DDoS | ● | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/security/vercel-waf | Firewall and DDoS mitigation included; managed bot rules cost extra. | #vercel-waf_ddos |
| Observability | included-basic | Inferred | — | — | Runtime logs with short retention on Pro; Observability Plus is a paid add-on. | #vercel-observability |
| Sydney region | ● | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/edge-network/regions | syd1. | #vercel-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #vercel-monorepo_support |
| Rollback | instant | Inferred | — | — | Immutable deployments with an alias swap; rollback is one click. | #vercel-rollback_speed |
| Overage behaviour | bill | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/pricing | Spend Management can pause the project at a threshold you set, but it is opt-in. Turn it on before launch, not after. | #vercel-overage_behaviour |
| Bandwidth price | $150 /TB | Vendor-claimed | 2026-06-15 | https://vercel.com/pricing | $0.15/GB in North America and Europe; Sydney and other APAC regions bill higher. | #vercel-bandwidth_price |
| Price @ 1 TB | $20 /mo | Inferred | — | — | Pro bundles the first 1 TB into the $20 seat price. The second TB costs about $150. | #vercel-price_1tb_egress |
| Build minutes incl. | 24,000 min/mo | Inferred | — | — | Approximate — Vercel has revised the Pro build allowance more than once. | #vercel-build_minutes |
| Image opt billing | metered | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/image-optimization | Billed per source-image transformation beyond an included allowance. | #vercel-image_opt_billing |
| Analytics cost | $10 /mo | Inferred | — | — | Web Analytics ships with an event allowance on Pro; Speed Insights is the add-on that costs money. Approximate. | #vercel-analytics_cost |
| Free tier | 4 | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/limits/fair-use-guidelines | Hobby is generous but explicitly non-commercial. | #vercel-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #vercel-self_hostable |
| Exit friction | 4 | Inferred | — | — | Framework code moves easily; ISR behaviour, image optimisation, Edge Config and cron routes do not. | #vercel-lockin_score |
| CLI quality | 5 | Inferred | — | — | — | #vercel-cli_quality |
| Agent/CI deploy | ● | Vendor-claimed | 2026-06-15 | https://vercel.com/docs/rest-api | — | #vercel-agent_deploy |
| GA year | 2015 | Inferred | — | — | — | #vercel-launched |
| Funding | late-stage | Inferred | — | — | — | #vercel-funding_stage |
| Pricing clarity | 2 | Inferred | — | — | Fluid compute, edge requests, transformations and transfer are four meters that interact. | #vercel-pricing_clarity |

**Verdict.** Still the best place to run Next.js and still the hardest bill to forecast: the first terabyte is fine and the second is $150. Worth paying for while you are small, worth modelling carefully before you are not.

**Pick it when**

- Next.js apps using PPR, cross-region ISR or managed image optimisation
- Teams where frontend velocity is worth more than $200 a month
- Anything where preview URLs are part of the review process

### Cloudflare Workers & Pages {#cloudflare-workers}

V8 isolates on 300+ PoPs, with zero egress charges and near-zero cold starts.

|  |  |
| --- | --- |
| Site | https://workers.cloudflare.com |
| Docs | https://developers.cloudflare.com/workers/ |
| Repo | https://github.com/cloudflare/workerd |
| Company | Cloudflare, Inc. |
| Founded | 2017 |
| Funding | Public (NYSE: NET) |
| Open source | No |
| Profile | https://toolweight.dev/tools/cloudflare-workers |
| Score (default weights) | 72.5 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, remix, static | Inferred | — | — | — | #cloudflare-workers-framework_support |
| Next.js parity | most | Community-reported | 2026-06-15 | https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/ | Via @opennextjs/cloudflare: ISR, middleware and the Node compatibility layer work; PPR does not. | #cloudflare-workers-nextjs_parity |
| Runtime model | edge-only | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/workers/runtime-apis/nodejs/ | V8 isolates with a Node compatibility layer — good coverage now, but it is not Node. | #cloudflare-workers-runtime_model |
| Fn timeout | 30 s | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/workers/platform/limits/ | This is CPU time, not wall clock — a Worker can wait on I/O far longer. Configurable up to five minutes. | #cloudflare-workers-function_timeout |
| Cold start | 5 ms | Community-reported | — | — | Isolates start in single-digit milliseconds; there is effectively no cold-start problem here. | #cloudflare-workers-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/workers/configuration/cron-triggers/ | — | #cloudflare-workers-cron_jobs |
| Preview deploys | ● | Inferred | — | — | Preview URLs per version, plus gradual deployments by percentage. | #cloudflare-workers-preview_deploys |
| WAF & DDoS | ● | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/ddos-protection/ | Unmetered DDoS mitigation on every plan; managed WAF rulesets need a Pro zone at $20/mo. | #cloudflare-workers-waf_ddos |
| Observability | included-basic | Inferred | — | — | Workers Logs and analytics are included on the paid plan; retention is short. | #cloudflare-workers-observability |
| Sydney region | ● | Inferred | — | — | Sydney is a long-standing PoP; Smart Placement can instead pin execution near your data. | #cloudflare-workers-sydney_region |
| Monorepo support | ◐ | Inferred | — | — | Several Workers from one repo is normal; the build integration is less turnkey than Vercel's. | #cloudflare-workers-monorepo_support |
| Rollback | instant | Inferred | — | — | Versions and gradual deployments make rollback a percentage change. | #cloudflare-workers-rollback_speed |
| Overage behaviour | bill | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/workers/platform/pricing/ | Requests and CPU-milliseconds are billed with no hard cap — but bandwidth is not billed at all, so a front-page spike costs cents rather than thousands. This is the one row where `bill` is not frightening. | #cloudflare-workers-overage_behaviour |
| Bandwidth price | $0 /TB | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/workers/platform/pricing/ | Cloudflare does not meter egress, on any plan, anywhere. | #cloudflare-workers-bandwidth_price |
| Price @ 1 TB | $5 /mo | Inferred | — | — | The $5 Workers Paid plan plus roughly a dollar of request charges at 1M requests. | #cloudflare-workers-price_1tb_egress |
| Build minutes incl. | 3,000 min/mo | Inferred | — | — | Approximate — Workers Builds allowances have moved since launch. | #cloudflare-workers-build_minutes |
| Image opt billing | metered | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/images/pricing/ | Cloudflare Images is a separate product billed per transformation. | #cloudflare-workers-image_opt_billing |
| Analytics cost | $0 /mo | Vendor-claimed | 2026-06-15 | https://www.cloudflare.com/web-analytics/ | Web Analytics is free, cookieless and on every plan. | #cloudflare-workers-analytics_cost |
| Free tier | 5 | Vendor-claimed | 2026-06-15 | https://developers.cloudflare.com/workers/platform/pricing/ | 100,000 requests a day, unmetered bandwidth, commercial use permitted — the only 5 on this page. | #cloudflare-workers-free_tier |
| Self-hostable | ◐ | Inferred | — | — | workerd and Miniflare run the runtime locally; the network, KV and Durable Objects do not come with them. | #cloudflare-workers-self_hostable |
| Exit friction | 4 | Inferred | — | — | Web-standard code ports fine. KV, D1, R2 bindings and Durable Objects have no drop-in equivalent anywhere. | #cloudflare-workers-lockin_score |
| CLI quality | 4 | Inferred | — | — | Wrangler is powerful and moves fast enough that third-party guides go stale. | #cloudflare-workers-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | — | #cloudflare-workers-agent_deploy |
| GA year | 2017 | Inferred | — | — | — | #cloudflare-workers-launched |
| Funding | public | Inferred | — | — | — | #cloudflare-workers-funding_stage |
| Pricing clarity | 4 | Inferred | — | — | — | #cloudflare-workers-pricing_clarity |

**Verdict.** The correct answer if the bill is why you are reading this: free egress turns the entire overage question into a footnote. You pay for it with a non-Node runtime and a Next.js path maintained by the community rather than the framework team.

**Pick it when**

- Anything where a traffic spike must not produce a four-figure invoice
- Latency-sensitive APIs and edge middleware
- Teams already using R2, D1 or Durable Objects

### Hetzner + Coolify {#hetzner-coolify}

The DIY baseline: a €4 CX22 running Coolify, with 20 TB of traffic included.

|  |  |
| --- | --- |
| Site | https://www.hetzner.com/cloud |
| Company | Hetzner Online GmbH |
| Founded | 2018 |
| Open source | Yes (Apache-2.0 (Coolify)) |
| Profile | https://toolweight.dev/tools/hetzner-coolify |
| Score (default weights) | 65.9 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #hetzner-coolify-framework_support |
| Next.js parity | self-managed | Inferred | — | — | `next start` on one box. Every framework feature works; none of it is cached anywhere near your users. | #hetzner-coolify-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #hetzner-coolify-runtime_model |
| Fn timeout | — | Inferred | — | — | Your reverse proxy, your rules. | #hetzner-coolify-function_timeout |
| Cold start | 0 ms | Inferred | — | — | — | #hetzner-coolify-cold_start |
| Cron jobs | ● | Inferred | — | — | — | #hetzner-coolify-cron_jobs |
| Preview deploys | ● | Inferred | — | — | Coolify handles per-PR environments; the constraint is RAM, not features. | #hetzner-coolify-preview_deploys |
| WAF & DDoS | ◐ | Vendor-claimed | 2026-06-15 | https://www.hetzner.com/cloud | Hetzner includes network-level DDoS protection. There is no WAF unless you front it with Cloudflare. | #hetzner-coolify-waf_ddos |
| Observability | included-basic | Inferred | — | — | Coolify's logs plus whatever you install. | #hetzner-coolify-observability |
| Sydney region | ○ | Vendor-claimed | 2026-06-15 | https://www.hetzner.com/cloud | Germany, Finland, two US locations and Singapore. No Australian region at all — the strongest argument against this baseline for AU-facing apps. | #hetzner-coolify-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #hetzner-coolify-monorepo_support |
| Rollback | redeploy | Inferred | — | — | — | #hetzner-coolify-rollback_speed |
| Overage behaviour | bill | Vendor-claimed | 2026-06-15 | https://docs.hetzner.com/cloud/servers/pricing/ | 20 TB of traffic is included, then €1 per additional TB. The spike that costs $450 on Netlify costs about one euro here, which is why this row exists. | #hetzner-coolify-overage_behaviour |
| Bandwidth price | $1 /TB | Vendor-claimed | 2026-06-15 | https://docs.hetzner.com/cloud/servers/pricing/ | €1.00 per TB beyond the 20 TB included on EU and US cloud servers, converted at par for comparability. | #hetzner-coolify-bandwidth_price |
| Price @ 1 TB | $5 /mo | Inferred | — | — | A CX22 at just under €4 a month. The terabyte is free — it sits inside the 20 TB allowance. | #hetzner-coolify-price_1tb_egress |
| Build minutes incl. | — | Inferred | — | — | Builds run on the same 4 GB box that serves traffic, which is the real limit: large Next.js builds need swap or a bigger instance. | #hetzner-coolify-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #hetzner-coolify-image_opt_billing |
| Analytics cost | — | Inferred | — | — | Self-host Plausible on the same machine. | #hetzner-coolify-analytics_cost |
| Free tier | 1 | Inferred | — | — | None. But €4 buys 20 TB, which reframes the question. | #hetzner-coolify-free_tier |
| Self-hostable | ● | Inferred | — | — | — | #hetzner-coolify-self_hostable |
| Exit friction | 1 | Inferred | — | — | It is a Linux box. There is nothing to be locked into. | #hetzner-coolify-lockin_score |
| CLI quality | 2 | Inferred | — | — | hcloud is decent for infrastructure; Coolify above it is dashboard-driven. | #hetzner-coolify-cli_quality |
| Agent/CI deploy | ◐ | Inferred | — | — | — | #hetzner-coolify-agent_deploy |
| GA year | 2018 | Inferred | — | — | — | #hetzner-coolify-launched |
| Funding | bootstrapped | Inferred | — | — | — | #hetzner-coolify-funding_stage |
| Pricing clarity | 5 | Inferred | — | — | Four euros. Every month. Forever. | #hetzner-coolify-pricing_clarity |

**Verdict.** The number every managed host is implicitly arguing against: about $5 a month with 20 TB of traffic included and an overage rate of €1/TB. Nothing scales automatically, there is no Australian region and the pager is yours — but you should know what the floor costs before agreeing to sit above it.

**Pick it when**

- Benchmarking whether a managed host is worth its markup
- European or US workloads with high bandwidth and low ops needs
- Side projects and internal tools where a single box is genuinely enough

### Northflank {#northflank}

Container platform with bring-your-own-cloud, GPUs and a sandbox-shaped API.

|  |  |
| --- | --- |
| Site | https://northflank.com |
| Docs | https://northflank.com/docs |
| Company | Northflank Ltd. |
| Founded | 2019 |
| Funding | Series A |
| Open source | No |
| Profile | https://toolweight.dev/tools/northflank |
| Score (default weights) | 65.7 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #northflank-framework_support |
| Next.js parity | self-managed | Inferred | — | — | Containerised `next start`; the same trade-offs as any container host. | #northflank-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #northflank-runtime_model |
| Fn timeout | — | Inferred | — | — | No platform-imposed request limit. | #northflank-function_timeout |
| Cold start | 0 ms | Inferred | — | — | Always-on containers. | #northflank-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://northflank.com/docs | Cron and one-off jobs are separate first-class resource types. | #northflank-cron_jobs |
| Preview deploys | ● | Inferred | — | — | Preview environments clone the full service and database graph — among the best implementations in the category. | #northflank-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | — | #northflank-waf_ddos |
| Observability | included-basic | Inferred | — | — | Logs, metrics and alerting are built in; distributed tracing is not. | #northflank-observability |
| Sydney region | ◐ | Inferred | — | — | Managed regions are US and EU. Sydney is reachable only through bring-your-own-cloud against your own GCP or AWS account. | #northflank-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #northflank-monorepo_support |
| Rollback | instant | Inferred | — | — | — | #northflank-rollback_speed |
| Overage behaviour | bill | Inferred | — | — | Usage-billed compute and egress with no published hard cap. | #northflank-overage_behaviour |
| Bandwidth price | $100 /TB | Inferred | — | — | Approximate: roughly $0.10/GB on top of compute. Confirm against the live pricing page before budgeting. | #northflank-bandwidth_price |
| Price @ 1 TB | $120 /mo | Inferred | — | — | Derived from the approximate egress rate plus a small always-on service. Order of magnitude only. | #northflank-price_1tb_egress |
| Build minutes incl. | — | Inferred | — | — | Builds are billed as compute. | #northflank-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #northflank-image_opt_billing |
| Analytics cost | — | Inferred | — | — | — | #northflank-analytics_cost |
| Free tier | 3 | Inferred | — | — | A genuinely free developer tier, limited by service count rather than by time. | #northflank-free_tier |
| Self-hostable | ◐ | Vendor-claimed | 2026-06-15 | https://northflank.com/bring-your-own-cloud | Bring-your-own-cloud runs the workloads in your account under Northflank's control plane — the closest thing to self-hosting among the managed vendors here. | #northflank-self_hostable |
| Exit friction | 2 | Inferred | — | — | Containers plus declarative templates; with BYOC the workloads are already in your account. | #northflank-lockin_score |
| CLI quality | 4 | Inferred | — | — | — | #northflank-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | Full REST API, CLI and templates-as-code; nothing requires the dashboard. | #northflank-agent_deploy |
| GA year | 2021 | Inferred | — | — | — | #northflank-launched |
| Funding | growth | Inferred | — | — | — | #northflank-funding_stage |
| Pricing clarity | 3 | Inferred | — | — | — | #northflank-pricing_clarity |

**Verdict.** The most capable platform on this page that nobody shortlists. Preview environments and jobs beat Railway's, and bring-your-own-cloud is the only route to Sydney compute under a managed control plane. Its published pricing is the least legible thing about it.

**Pick it when**

- Teams that need workloads inside their own cloud account for compliance
- Full-stack preview environments including databases
- Batch jobs and cron alongside long-running services

### Netlify {#netlify}

The original Jamstack host: strong build pipeline, punishing bandwidth overage.

|  |  |
| --- | --- |
| Site | https://netlify.com |
| Docs | https://docs.netlify.com |
| Company | Netlify |
| Founded | 2014 |
| Funding | Series D, $105M (2021) |
| Open source | No |
| Profile | https://toolweight.dev/tools/netlify |
| Score (default weights) | 64.0 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, remix, static | Inferred | — | — | — | #netlify-framework_support |
| Next.js parity | most | Vendor-claimed | 2026-06-15 | https://docs.netlify.com/frameworks/next-js/overview/ | ISR, middleware and image optimisation are covered by the maintained runtime; PPR is not. | #netlify-nextjs_parity |
| Runtime model | edge+node | Inferred | — | — | Node functions on AWS Lambda plus Deno-based edge functions. | #netlify-runtime_model |
| Fn timeout | 10 s | Vendor-claimed | 2026-06-15 | https://docs.netlify.com/functions/overview/ | Synchronous functions; background functions run up to 15 minutes. | #netlify-function_timeout |
| Cold start | 300 ms | Inferred | — | — | — | #netlify-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://docs.netlify.com/functions/scheduled-functions/ | — | #netlify-cron_jobs |
| Preview deploys | ● | Inferred | — | — | Deploy previews per PR plus branch deploys — the feature Netlify effectively invented. | #netlify-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | Volumetric protection is included; the WAF is an enterprise-tier add-on. | #netlify-waf_ddos |
| Observability | included-basic | Inferred | — | — | Function and deploy logs; log drains are enterprise. | #netlify-observability |
| Sydney region | ◐ | Inferred | — | — | CDN edge covers Sydney; Node functions execute in a US AWS region by default. | #netlify-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #netlify-monorepo_support |
| Rollback | instant | Inferred | — | — | — | #netlify-rollback_speed |
| Overage behaviour | bill | Community-reported | 2026-06-15 | https://www.netlify.com/pricing/ | The platform that produced the canonical $104k DDoS invoice in 2024. That bill was waived and free-tier sites are now suspended rather than billed, but paid plans still meter with no hard cap. | #netlify-overage_behaviour |
| Bandwidth price | $550 /TB | Community-reported | 2026-06-15 | https://www.netlify.com/pricing/ | Sold as $55 per additional 100 GB — the most expensive egress in this roster by a factor of three. | #netlify-bandwidth_price |
| Price @ 1 TB | $19 /mo | Inferred | — | — | Pro bundles 1 TB into the $19 seat. The cliff is immediately after it. | #netlify-price_1tb_egress |
| Build minutes incl. | 25,000 min/mo | Vendor-claimed | 2026-06-15 | https://www.netlify.com/pricing/ | — | #netlify-build_minutes |
| Image opt billing | included | Inferred | 2026-06-15 | https://docs.netlify.com/image-cdn/overview/ | Image CDN transformations are bundled rather than separately metered. | #netlify-image_opt_billing |
| Analytics cost | $9 /mo | Vendor-claimed | 2026-06-15 | https://www.netlify.com/pricing/ | Per site per month — it is not an account-wide fee. | #netlify-analytics_cost |
| Free tier | 3 | Inferred | — | — | — | #netlify-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #netlify-self_hostable |
| Exit friction | 3 | Inferred | — | — | netlify.toml, redirects and Blobs need replacing, but the runtime is ordinary Node. | #netlify-lockin_score |
| CLI quality | 4 | Inferred | — | — | — | #netlify-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | — | #netlify-agent_deploy |
| GA year | 2015 | Inferred | — | — | — | #netlify-launched |
| Funding | late-stage | Inferred | — | — | — | #netlify-funding_stage |
| Pricing clarity | 3 | Inferred | — | — | The plan page is legible; the block overage pricing is the part people miss. | #netlify-pricing_clarity |

**Verdict.** A very good build pipeline attached to the worst egress pricing in the category. If your traffic is predictable and modest it is a fine Vercel substitute; if it is spiky, the $55-per-100 GB overage is a documented hazard rather than a theoretical one.

**Pick it when**

- Content sites with steady, forecastable traffic
- Teams that lean on build plugins and deploy previews
- Migrating off Vercel without changing the git-push workflow

### Deno Deploy {#deno-deploy}

Web-standard JavaScript at the edge, with built-in OpenTelemetry and a global KV.

|  |  |
| --- | --- |
| Site | https://deno.com/deploy |
| Docs | https://docs.deno.com/deploy/ |
| Repo | https://github.com/denoland/deno |
| Company | Deno Land Inc. |
| Founded | 2021 |
| Funding | Series A, ~$21M (2022) |
| Open source | No |
| Profile | https://toolweight.dev/tools/deno-deploy |
| Score (default weights) | 64.0 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, static | Inferred | — | — | — | #deno-deploy-framework_support |
| Next.js parity | basic | Inferred | — | — | Next.js is supported by the newer generation of the platform, but this is not where you run a complex Next.js app. | #deno-deploy-nextjs_parity |
| Runtime model | edge-only | Inferred | — | — | V8 isolates running web-standard APIs, identical to the local Deno CLI. | #deno-deploy-runtime_model |
| Fn timeout | — | Unknown | — | — | Deploy limits CPU time per request rather than wall clock, and the published figures have moved between platform generations. Left blank rather than guessed. | #deno-deploy-function_timeout |
| Cold start | 50 ms | Community-reported | — | — | Isolate startup: slower than Workers, far faster than anything Lambda-backed. | #deno-deploy-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://docs.deno.com/deploy/ | Deno.cron is part of the runtime. | #deno-deploy-cron_jobs |
| Preview deploys | ● | Inferred | — | — | — | #deno-deploy-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | Network-level protection only. | #deno-deploy-waf_ddos |
| Observability | included-full | Inferred | — | — | OpenTelemetry traces, logs and metrics ship without configuration — the only host here where that is true. | #deno-deploy-observability |
| Sydney region | ● | Inferred | — | — | Sydney is in the published region list; requests route to the nearest region automatically. | #deno-deploy-sydney_region |
| Monorepo support | ◐ | Inferred | — | — | — | #deno-deploy-monorepo_support |
| Rollback | instant | Inferred | — | — | — | #deno-deploy-rollback_speed |
| Overage behaviour | bill | Inferred | — | — | Paid plans meter requests and transfer; the free tier stops serving rather than billing you. | #deno-deploy-overage_behaviour |
| Bandwidth price | — | Unknown | — | — | Deliberately blank — Deploy's pricing was reworked alongside the platform's next generation and we are not confident in a per-TB figure. | #deno-deploy-bandwidth_price |
| Price @ 1 TB | — | Unknown | — | — | Not stated, because the per-TB rate it would be derived from is not known. | #deno-deploy-price_1tb_egress |
| Build minutes incl. | — | Unknown | — | — | — | #deno-deploy-build_minutes |
| Image opt billing | none | Inferred | — | — | No managed image optimisation product. | #deno-deploy-image_opt_billing |
| Analytics cost | $0 /mo | Inferred | — | — | Request analytics are part of the dashboard. | #deno-deploy-analytics_cost |
| Free tier | 4 | Inferred | — | — | Generous request and transfer allowance, but small enough that a real site outgrows it. | #deno-deploy-free_tier |
| Self-hostable | ○ | Inferred | — | — | The Deno runtime is MIT-licensed and self-hostable; the Deploy platform is not. | #deno-deploy-self_hostable |
| Exit friction | 2 | Inferred | — | — | Web-standard code moves anywhere. Deno KV and Queues are the parts that do not. | #deno-deploy-lockin_score |
| CLI quality | 4 | Inferred | — | — | — | #deno-deploy-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | — | #deno-deploy-agent_deploy |
| GA year | 2021 | Inferred | — | — | — | #deno-deploy-launched |
| Funding | growth | Inferred | — | — | — | #deno-deploy-funding_stage |
| Pricing clarity | 3 | Inferred | — | — | Clear enough on its face, but the platform has changed shape often enough that the number you budgeted may not survive the year. | #deno-deploy-pricing_clarity |

**Verdict.** The best out-of-the-box observability story on this page and a genuinely pleasant runtime if you write web-standard JavaScript. It is also the smallest platform here, with a pricing model that has been rebuilt more than once: fine for services, risky as the foundation of a business.

**Pick it when**

- Web-standard TypeScript services and APIs
- Teams that want tracing without wiring up an observability vendor
- Fresh and Astro sites at the edge

### Fly.io {#fly-io}

Firecracker microVMs in 35+ regions including Sydney, driven from the CLI.

|  |  |
| --- | --- |
| Site | https://fly.io |
| Docs | https://fly.io/docs |
| Company | Fly.io, Inc. |
| Founded | 2017 |
| Funding | Series C, ~$70M (2022) |
| Open source | No |
| Profile | https://toolweight.dev/tools/fly-io |
| Score (default weights) | 62.9 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #fly-io-framework_support |
| Next.js parity | self-managed | Inferred | — | — | `next start` in a microVM. Multi-region deployments make the per-instance ISR cache a real problem to solve. | #fly-io-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #fly-io-runtime_model |
| Fn timeout | — | Inferred | — | — | No platform-imposed request limit — Machines run as long as you keep them running. | #fly-io-function_timeout |
| Cold start | 400 ms | Community-reported | — | — | Auto-stopped Machines wake in a few hundred milliseconds, the closest a container host gets to scale-to-zero. | #fly-io-cold_start |
| Cron jobs | ◐ | Inferred | — | — | Machines support simple schedules, but there is no first-class cron service — most people run a scheduler process. | #fly-io-cron_jobs |
| Preview deploys | ◐ | Inferred | — | — | Review apps are a documented GitHub Action pattern rather than a built-in feature. | #fly-io-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | Network-level protection at the anycast edge; no configurable WAF. | #fly-io-waf_ddos |
| Observability | included-basic | Inferred | — | — | Managed Prometheus and Grafana are included; log retention is short unless you ship logs out. | #fly-io-observability |
| Sydney region | ● | Vendor-claimed | 2026-06-15 | https://fly.io/docs/reference/regions/ | `syd`. The only container host in this roster with real Australian compute. | #fly-io-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #fly-io-monorepo_support |
| Rollback | redeploy | Inferred | — | — | `fly deploy --image` against a previous tag: a minute or two, not seconds. | #fly-io-rollback_speed |
| Overage behaviour | bill | Vendor-claimed | 2026-06-15 | https://fly.io/docs/about/pricing/ | Pure pay-as-you-go with no hard cap. Egress is cheap enough that the exposure is far smaller than the managed hosts. | #fly-io-overage_behaviour |
| Bandwidth price | $20 /TB | Vendor-claimed | 2026-06-15 | https://fly.io/docs/about/pricing/ | $0.02/GB in North America and Europe. Asia-Pacific and Australia are roughly double, which matters if you deploy to syd. | #fly-io-bandwidth_price |
| Price @ 1 TB | $30 /mo | Inferred | — | — | About $20 of NA/EU egress plus a shared-CPU Machine. Deploying into syd pushes this closer to $50. | #fly-io-price_1tb_egress |
| Build minutes incl. | — | Inferred | — | — | Builds run on a remote builder billed as ordinary compute. | #fly-io-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #fly-io-image_opt_billing |
| Analytics cost | — | Inferred | — | — | — | #fly-io-analytics_cost |
| Free tier | 2 | Community-reported | — | — | The standing free allowance was withdrawn in late 2024; new accounts get trial credit. | #fly-io-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #fly-io-self_hostable |
| Exit friction | 2 | Inferred | — | — | fly.toml and Fly Postgres are the only things to replace; the image is yours. | #fly-io-lockin_score |
| CLI quality | 5 | Inferred | — | — | flyctl is the best CLI here and, by design, close to the only interface. | #fly-io-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | — | #fly-io-agent_deploy |
| GA year | 2020 | Inferred | — | — | — | #fly-io-launched |
| Funding | growth | Inferred | — | — | — | #fly-io-funding_stage |
| Pricing clarity | 3 | Inferred | — | — | — | #fly-io-pricing_clarity |

**Verdict.** The right answer for Australian teams who want containers: the only host in this roster with real Sydney compute and cheap egress in the same product. The cost is that cron, previews and observability are patterns you assemble rather than features you switch on.

**Pick it when**

- Australian or multi-region apps that need compute near users
- Teams comfortable living in the terminal
- Workloads that benefit from auto-stopping machines between bursts

### Sevalla {#sevalla}

Kinsta's developer platform: apps, static sites, databases and object storage on GCP.

|  |  |
| --- | --- |
| Site | https://sevalla.com |
| Docs | https://sevalla.com/docs/ |
| Company | Kinsta |
| Founded | 2024 |
| Funding | Bootstrapped (Kinsta) |
| Open source | No |
| Profile | https://toolweight.dev/tools/sevalla |
| Score (default weights) | 62.2 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #sevalla-framework_support |
| Next.js parity | self-managed | Inferred | — | — | Containerised Node process; standard container trade-offs apply. | #sevalla-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #sevalla-runtime_model |
| Fn timeout | — | Inferred | — | — | — | #sevalla-function_timeout |
| Cold start | 0 ms | Inferred | — | — | Always-on containers. | #sevalla-cold_start |
| Cron jobs | ● | Inferred | — | — | — | #sevalla-cron_jobs |
| Preview deploys | ◐ | Inferred | — | — | Branch-based deployments exist; automatic per-PR environments are weaker than the specialists here. | #sevalla-preview_deploys |
| WAF & DDoS | ● | Inferred | — | — | Inherits Kinsta's Cloudflare enterprise edge, including a managed firewall. | #sevalla-waf_ddos |
| Observability | included-basic | Inferred | — | — | Runtime and build logs plus basic metrics in the dashboard. | #sevalla-observability |
| Sydney region | ● | Inferred | — | — | Built on Google Cloud, whose region list includes australia-southeast1. Confirm it is selectable for your resource type. | #sevalla-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #sevalla-monorepo_support |
| Rollback | instant | Inferred | — | — | — | #sevalla-rollback_speed |
| Overage behaviour | bill | Inferred | — | — | Pay-as-you-go metering on top of the plan; we have not seen a documented hard cap. | #sevalla-overage_behaviour |
| Bandwidth price | — | Unknown | — | — | Not confident in a per-TB overage figure for Sevalla, so left blank rather than guessed. | #sevalla-bandwidth_price |
| Price @ 1 TB | — | Unknown | — | — | — | #sevalla-price_1tb_egress |
| Build minutes incl. | — | Unknown | — | — | Build minutes are metered; the included allowance is not something we can state confidently. | #sevalla-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #sevalla-image_opt_billing |
| Analytics cost | — | Unknown | — | — | — | #sevalla-analytics_cost |
| Free tier | 3 | Inferred | — | — | Free static site hosting plus trial credit for applications. | #sevalla-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #sevalla-self_hostable |
| Exit friction | 2 | Inferred | — | — | Standard containers on GCP; the dashboard is the only thing you would miss. | #sevalla-lockin_score |
| CLI quality | 2 | Inferred | — | — | Dashboard-first. Automation is the weakest part of the product. | #sevalla-cli_quality |
| Agent/CI deploy | ◐ | Inferred | — | — | Git-triggered deploys work headlessly; full provisioning still expects a human in the UI. | #sevalla-agent_deploy |
| GA year | 2024 | Inferred | — | — | — | #sevalla-launched |
| Funding | bootstrapped | Inferred | — | — | — | #sevalla-funding_stage |
| Pricing clarity | 4 | Inferred | — | — | — | #sevalla-pricing_clarity |

**Verdict.** A tidy, well-priced platform from a company that has run hosting profitably for a decade, which counts for something in a category otherwise funded by growth rounds. It is also the newest and least automatable option here: if your deploys are driven by agents or CI, look elsewhere.

**Pick it when**

- Teams already inside the Kinsta ecosystem
- Static sites and simple apps that want a managed edge included
- Anyone who prefers a bootstrapped vendor to a venture-funded one

### Railway {#railway}

Container PaaS with the best developer experience in the category and usage billing.

|  |  |
| --- | --- |
| Site | https://railway.com |
| Docs | https://docs.railway.com |
| Company | Railway Corp. |
| Founded | 2020 |
| Funding | Venture-backed, growth stage |
| Open source | No |
| Profile | https://toolweight.dev/tools/railway |
| Score (default weights) | 61.4 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #railway-framework_support |
| Next.js parity | self-managed | Inferred | — | — | You run `next start`, so every feature works — but ISR caches per instance and there is no CDN in front. | #railway-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #railway-runtime_model |
| Fn timeout | — | Inferred | — | — | No platform-imposed request limit: it is a long-lived container behind a proxy. | #railway-function_timeout |
| Cold start | 0 ms | Inferred | — | — | Instances stay warm. There is no scale-to-zero by default, which is why you pay whether or not anyone visits. | #railway-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://docs.railway.com/reference/cron-jobs | — | #railway-cron_jobs |
| Preview deploys | ● | Inferred | — | — | PR environments clone the whole service graph, not just the app. | #railway-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | Edge DDoS protection is inherited from the network in front; there is no configurable WAF. | #railway-waf_ddos |
| Observability | included-basic | Inferred | — | — | Structured logs and per-service metrics in the dashboard; no tracing. | #railway-observability |
| Sydney region | ○ | Vendor-claimed | 2026-06-15 | https://docs.railway.com/reference/deployment-regions | Nearest is Singapore — roughly 90 ms further from Australian users. | #railway-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #railway-monorepo_support |
| Rollback | instant | Inferred | — | — | Previous builds are retained; rollback relaunches the existing image. | #railway-rollback_speed |
| Overage behaviour | bill | Vendor-claimed | 2026-06-15 | https://docs.railway.com/reference/pricing/plans | Usage is billed, but Railway is one of very few hosts where a hard usage limit that actually suspends services is a single setting rather than an alert. | #railway-overage_behaviour |
| Bandwidth price | $50 /TB | Vendor-claimed | 2026-06-15 | https://railway.com/pricing | $0.05/GB network egress. | #railway-bandwidth_price |
| Price @ 1 TB | $60 /mo | Inferred | — | — | $5 plan, about $50 of egress, plus a small always-on instance. | #railway-price_1tb_egress |
| Build minutes incl. | — | Inferred | — | — | Builds are billed as ordinary compute; there is no separate minute allowance. | #railway-build_minutes |
| Image opt billing | byo | Inferred | — | — | next/image optimises on your own container CPU. | #railway-image_opt_billing |
| Analytics cost | — | Inferred | — | — | No first-party web analytics — run Plausible or Umami as another service. | #railway-analytics_cost |
| Free tier | 2 | Inferred | — | — | The free tier was retired in 2023; there is a trial credit and then a $5/mo minimum. | #railway-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #railway-self_hostable |
| Exit friction | 2 | Inferred | — | — | It is your Dockerfile. The config and the managed databases are the only things to redo. | #railway-lockin_score |
| CLI quality | 4 | Inferred | — | — | — | #railway-cli_quality |
| Agent/CI deploy | ● | Vendor-claimed | 2026-06-15 | https://docs.railway.com/reference/public-api | Public GraphQL API plus token-based `railway up`. | #railway-agent_deploy |
| GA year | 2020 | Inferred | — | — | — | #railway-launched |
| Funding | growth | Inferred | — | — | — | #railway-funding_stage |
| Pricing clarity | 3 | Inferred | — | — | — | #railway-pricing_clarity |

**Verdict.** The nicest developer experience of any container host, and since it moved onto its own hardware, one of the cheaper places to run persistent compute. The absence of an Australian region is the single thing that disqualifies it for AU-facing apps.

**Pick it when**

- Multi-service apps where the database and the web app should live together
- Teams that want containers without learning Kubernetes
- Replacing a Heroku setup without rewriting anything

### Render {#render}

Heroku-shaped container host with blueprints, managed Postgres and calm billing.

|  |  |
| --- | --- |
| Site | https://render.com |
| Docs | https://render.com/docs |
| Company | Render Services, Inc. |
| Founded | 2019 |
| Funding | Venture-backed, growth stage |
| Open source | No |
| Profile | https://toolweight.dev/tools/render |
| Score (default weights) | 54.5 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, dockerfile | Inferred | — | — | — | #render-framework_support |
| Next.js parity | self-managed | Inferred | — | — | Standard `next start` in a container; ISR is per-instance unless you configure a shared cache handler. | #render-nextjs_parity |
| Runtime model | container | Inferred | — | — | — | #render-runtime_model |
| Fn timeout | — | Inferred | — | — | No platform-imposed request limit on web services. | #render-function_timeout |
| Cold start | 0 ms | Inferred | — | — | Paid instances stay warm. Free instances spin down after 15 minutes idle and take roughly 30 seconds to wake. | #render-cold_start |
| Cron jobs | ● | Vendor-claimed | 2026-06-15 | https://render.com/docs/cronjobs | Cron is a first-class service type, not a hack layered on a web service. | #render-cron_jobs |
| Preview deploys | ● | Vendor-claimed | 2026-06-15 | https://render.com/docs/preview-environments | — | #render-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | Volumetric protection at the edge; no configurable application firewall. | #render-waf_ddos |
| Observability | included-basic | Inferred | — | — | Logs and instance metrics included; an OpenTelemetry endpoint is available on paid plans. | #render-observability |
| Sydney region | ○ | Vendor-claimed | 2026-06-15 | https://render.com/docs/regions | Oregon, Ohio, Virginia, Frankfurt and Singapore. Nothing in Australia. | #render-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #render-monorepo_support |
| Rollback | instant | Inferred | — | — | — | #render-rollback_speed |
| Overage behaviour | bill | Inferred | 2026-06-15 | https://render.com/pricing | Most of a Render invoice is fixed instance pricing, so the surface area for a surprise is small. Bandwidth is the exception. | #render-overage_behaviour |
| Bandwidth price | $300 /TB | Inferred | — | — | Approximate. Render bundles 100 GB and sells additional bandwidth in blocks; check the live pricing page before budgeting on this figure. | #render-bandwidth_price |
| Price @ 1 TB | $280 /mo | Inferred | — | — | Derived from the block bandwidth rate plus a Starter instance. Treat as an order of magnitude, not a quote. | #render-price_1tb_egress |
| Build minutes incl. | 500 min/mo | Inferred | — | — | Approximate included pipeline minutes; overage is metered per minute. | #render-build_minutes |
| Image opt billing | byo | Inferred | — | — | — | #render-image_opt_billing |
| Analytics cost | — | Inferred | — | — | No first-party web analytics. | #render-analytics_cost |
| Free tier | 3 | Inferred | — | — | Free static sites and free web services that sleep — good for staging, unusable for production. | #render-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #render-self_hostable |
| Exit friction | 2 | Inferred | — | — | render.yaml is the only proprietary artefact and it is a hundred lines. | #render-lockin_score |
| CLI quality | 3 | Inferred | — | — | The CLI arrived late; the platform is still blueprint- and dashboard-first. | #render-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | — | #render-agent_deploy |
| GA year | 2019 | Inferred | — | — | — | #render-launched |
| Funding | growth | Inferred | — | — | — | #render-funding_stage |
| Pricing clarity | 4 | Inferred | — | — | Fixed instance prices make most of the bill knowable in advance. | #render-pricing_clarity |

**Verdict.** The calmest billing in the category, because most of it is a fixed instance price rather than a meter, and the only host here where cron, workers and managed Postgres all feel like first-class citizens. Bandwidth overage and the missing Australian region are the real costs.

**Pick it when**

- Heroku refugees who want fixed monthly prices
- Apps that need background workers and cron alongside the web service
- Teams that value predictable invoices over the lowest possible price

### AWS Amplify Hosting {#aws-amplify}

Managed Next.js and static hosting inside AWS, billed per GB with no spend cap.

|  |  |
| --- | --- |
| Site | https://aws.amazon.com/amplify/ |
| Docs | https://docs.aws.amazon.com/amplify/ |
| Company | Amazon Web Services |
| Founded | 2018 |
| Funding | Public (NASDAQ: AMZN) |
| Open source | No |
| Profile | https://toolweight.dev/tools/aws-amplify |
| Score (default weights) | 51.1 / 100 |

| Field | Value | Confidence | Verified | Source | Note | Anchor |
| --- | --- | --- | --- | --- | --- | --- |
| Frameworks | nextjs, nuxt, sveltekit, astro, static | Inferred | — | — | — | #aws-amplify-framework_support |
| Next.js parity | most | Vendor-claimed | 2026-06-15 | https://docs.aws.amazon.com/amplify/latest/userguide/ssr-Amplify-support.html | SSR, ISR, middleware and image optimisation are supported by the managed compute tier. PPR is not. | #aws-amplify-nextjs_parity |
| Runtime model | node | Inferred | — | — | Lambda-backed compute behind CloudFront. | #aws-amplify-runtime_model |
| Fn timeout | 30 s | Inferred | — | — | Approximate — Amplify's compute tier enforces a response timeout well below Lambda's own maximum. | #aws-amplify-function_timeout |
| Cold start | 800 ms | Community-reported | — | — | Lambda-backed SSR; the worst cold starts in this roster. | #aws-amplify-cold_start |
| Cron jobs | ○ | Inferred | — | — | There is no cron in Amplify Hosting — you stand up EventBridge separately. | #aws-amplify-cron_jobs |
| Preview deploys | ● | Vendor-claimed | 2026-06-15 | https://docs.aws.amazon.com/amplify/latest/userguide/pr-previews.html | — | #aws-amplify-preview_deploys |
| WAF & DDoS | ◐ | Inferred | — | — | Shield Standard is included; AWS WAF can be associated with the app but is billed separately. | #aws-amplify-waf_ddos |
| Observability | paid-addon | Inferred | — | — | Everything goes to CloudWatch, which is a separate meter with its own invoice. | #aws-amplify-observability |
| Sydney region | ● | Inferred | — | — | ap-southeast-2, and the CloudFront edge is everywhere regardless. | #aws-amplify-sydney_region |
| Monorepo support | ● | Inferred | — | — | — | #aws-amplify-monorepo_support |
| Rollback | instant | Inferred | — | — | — | #aws-amplify-rollback_speed |
| Overage behaviour | bill | Vendor-claimed | 2026-06-15 | https://aws.amazon.com/amplify/pricing/ | The purest form of `bill` on this page: no spend cap exists anywhere in AWS. Budgets send an email while the meter keeps running. | #aws-amplify-overage_behaviour |
| Bandwidth price | $150 /TB | Vendor-claimed | 2026-06-15 | https://aws.amazon.com/amplify/pricing/ | $0.15 per GB served, from the first gigabyte once the 12-month free tier expires. | #aws-amplify-bandwidth_price |
| Price @ 1 TB | $155 /mo | Inferred | — | — | 1 TB served at $0.15/GB plus modest SSR compute. There is no bundled allowance to absorb it. | #aws-amplify-price_1tb_egress |
| Build minutes incl. | 0 min/mo | Vendor-claimed | 2026-06-15 | https://aws.amazon.com/amplify/pricing/ | Metered from the first minute at $0.01/min outside the 12-month free tier. | #aws-amplify-build_minutes |
| Image opt billing | metered | Inferred | — | — | Optimisation runs on the compute tier and is billed as requests and duration. | #aws-amplify-image_opt_billing |
| Analytics cost | — | Inferred | — | — | No first-party web analytics in Amplify Hosting; Pinpoint is a different product with a different bill. | #aws-amplify-analytics_cost |
| Free tier | 2 | Inferred | — | — | 12-month free tier only, after which everything meters. | #aws-amplify-free_tier |
| Self-hostable | ○ | Inferred | — | — | — | #aws-amplify-self_hostable |
| Exit friction | 3 | Inferred | — | — | The hosting itself is portable; the IAM, CloudFront and backend wiring around it is what keeps you. | #aws-amplify-lockin_score |
| CLI quality | 2 | Community-reported | — | — | The Amplify CLI has been rewritten more than once and guides go stale quickly. | #aws-amplify-cli_quality |
| Agent/CI deploy | ● | Inferred | — | — | — | #aws-amplify-agent_deploy |
| GA year | 2018 | Inferred | — | — | — | #aws-amplify-launched |
| Funding | public | Inferred | — | — | — | #aws-amplify-funding_stage |
| Pricing clarity | 2 | Inferred | — | — | Legible per-unit rates, attached to an account where nothing ever stops spending. | #aws-amplify-pricing_clarity |

**Verdict.** Only worth it when the rest of the stack is already in AWS and the app needs to sit next to your data in ap-southeast-2. Otherwise you are paying Vercel-tier bandwidth prices for worse cold starts, no cron, and CloudWatch as your logging product.

**Pick it when**

- Apps whose data already lives in AWS, especially in Sydney
- Organisations where procurement will only sign an AWS contract
- Static sites that need CloudFront and IAM in the same account

## Methodology

Every price here is the lowest paid tier a commercial project can actually ship on, not the free tier and not an enterprise quote. "Price at 1 TB" is the estimated monthly invoice for one small production app serving 1 TB of transfer and about a million requests: seat or base fee, plus one always-on instance where the platform needs one, plus metered bandwidth at the vendor's published overage rate. It deliberately ignores databases, heavy compute and image transformations, because those diverge so far between apps that a single number would be dishonest. Treat it as a shape, not a quote.

The killer field is overage behaviour, and it is an enum rather than a score because the four outcomes are genuinely different failure modes, not points on a line. `throttle` means you get slower or start serving errors and no invoice arrives. `hard-stop` means the site goes down and no invoice arrives. `bill` means the site stays up and the invoice is unbounded. `bill-then-suspend` means you get both. We rank them in that order because a surprise five-figure bill is harder to undo than an hour of downtime — but that is an editorial position, and if uptime is worth more to you than predictability, reweight the field and `bill` becomes the best answer on the page. Cells marked "inferred" are our reasoning from adjacent published facts; blank cells are facts we could not stand behind, and we would rather show a dash than a plausible wrong number.

## FAQ

### What actually happens if my Vercel site hits the Hacker News front page?

On the Pro plan, nothing breaks and you get billed. The first terabyte of transfer is included; beyond that you pay roughly $0.15/GB, more out of Sydney. Vercel's Spend Management can pause the project at an amount you choose, but it is off by default. Turn it on before you launch, not after.

### Is Cloudflare Workers really free bandwidth, or is there a catch?

It really is free — Cloudflare has never metered egress and treats that as a competitive position rather than a promotion. The catch is elsewhere: you pay per request and per CPU-millisecond, the runtime is V8 isolates rather than Node, and Next.js runs through the community-maintained OpenNext adapter. PPR is not supported and probably will not be soon.

### Which of these have an Australian region?

Vercel (syd1), Cloudflare (Sydney PoP), Fly.io (syd), AWS Amplify (ap-southeast-2) and Deno Deploy all serve from Sydney. Railway and Render do not — their nearest region is Singapore, roughly 90 ms further away. Northflank reaches Sydney only through bring-your-own-cloud. Hetzner has no Australian region at all, which is the main argument against the DIY baseline for AU-facing apps.

### Can I run Next.js properly outside Vercel?

Yes, and better than the folklore suggests. Running `next start` in a container on Railway, Render or Fly gives you every feature including PPR, because it is the framework's own server. What you lose is the CDN in front of it, shared ISR caching across instances, and managed image optimisation. Netlify and AWS Amplify get closest to Vercel's managed behaviour; Cloudflare gets close via OpenNext.

### Is self-hosting with Coolify actually cheaper once you count your time?

Only if you already run servers. A Hetzner CX22 with Coolify costs about €4 a month including 20 TB of traffic, versus $20 plus overage on Vercel, so the savings are real but small in absolute terms until you serve several terabytes. The genuine cost is that TLS renewals, disk pressure and the 3am reboot become yours.

### Which platform has the best free tier for a real side project?

Cloudflare, by a distance: 100,000 requests a day, unmetered bandwidth, and commercial use is allowed. Vercel's Hobby tier is more generous in features but forbids commercial use, which catches people out when a side project starts taking money. Render's free tier is fine for staging but spins instances down after fifteen minutes of idle.

### Does anything here throttle instead of billing me?

Almost nothing. Free tiers generally hard-stop or suspend; paid tiers almost universally bill. The self-host rows are the only ones that degrade gracefully — a saturated box gets slow, it does not send an invoice. If you want a hard ceiling on a managed host, Vercel's Spend Management and Railway's usage limits are the two that will genuinely stop spending rather than just alert you.

## Recent changes

| Date | Kind | Event | Tools | Source |
| --- | --- | --- | --- | --- |
| 2024-02-24 | incident | **Netlify sends a $104,000 bill after a DDoS** — A hobby-tier site absorbed a large volumetric attack and the account was invoiced roughly $104,000 in bandwidth overage. Netlify waived the bill and improved its free-tier protections, but the episode is why overage behaviour is the killer field on this page — the pricing shape that produced it, $55 per additional 100 GB, is unchanged. | netlify | https://www.netlify.com/pricing/ |
| 2024-10-15 | pricing | **Fly.io withdraws its standing free allowance** — During late 2024 Fly moved from a permanent free allowance to trial credit plus pay-as-you-go, ending the era of running small always-on apps there for nothing. Existing hobby workloads had to start paying, and Fly's positioning shifted decisively from 'Heroku but free' to 'microVMs close to your users'. | fly-io | https://fly.io/blog/ |
| 2025-02-04 | pricing | **Vercel ships Fluid compute** — Fluid compute replaced one-request-per-instance serverless with a model that reuses warm instances across concurrent requests, and brought Active CPU pricing with it: you are billed for CPU actually consumed rather than wall-clock invocation time. It made I/O-bound Next.js apps markedly cheaper and made the invoice markedly harder to predict in advance. | vercel | https://vercel.com/changelog |
| 2025-03-01 | pricing | **Railway moves onto its own hardware** — Railway Metal shifted the platform off rented cloud capacity onto machines Railway owns, and passed a substantial share of the saving through as lower compute prices. It is the main reason Railway is now competitive with Render and Fly on persistent container cost, rather than merely nicer to use. | railway | https://blog.railway.com/ |
| 2025-05-01 | funding | **Vercel raises a Series F at a reported $9.3B** — A roughly $300M round valued Vercel near $9.3 billion, on the back of the AI SDK and v0 rather than hosting alone. The strategic read for anyone choosing a host: Vercel's growth story is now AI tooling, and hosting revenue increasingly funds it. That is not an argument for cheaper bandwidth. | vercel | https://vercel.com/blog |
| 2025-06-24 | launch | **Cloudflare Containers enter open beta** — Cloudflare added container workloads that Workers can start and route to, closing the biggest gap in the platform: the inability to run anything needing a real Node process or a native dependency. It makes Cloudflare a plausible home for full-stack apps that previously had to go to Railway, Render or Fly. | cloudflare-workers | https://blog.cloudflare.com/ |

## Sources

| Source | Last verified |
| --- | --- |
| https://vercel.com/docs/frameworks/nextjs | 2026-06-15 |
| https://vercel.com/docs/functions/runtimes | 2026-06-15 |
| https://vercel.com/docs/functions/limits | 2026-06-15 |
| https://vercel.com/docs/cron-jobs | 2026-06-15 |
| https://vercel.com/docs/deployments/preview-deployments | 2026-06-15 |
| https://vercel.com/docs/security/vercel-waf | 2026-06-15 |
| https://vercel.com/docs/edge-network/regions | 2026-06-15 |
| https://vercel.com/docs/pricing | 2026-06-15 |
| https://vercel.com/pricing | 2026-06-15 |
| https://vercel.com/docs/image-optimization | 2026-06-15 |
| https://vercel.com/docs/limits/fair-use-guidelines | 2026-06-15 |
| https://vercel.com/docs/rest-api | 2026-06-15 |
| https://docs.netlify.com/frameworks/next-js/overview/ | 2026-06-15 |
| https://docs.netlify.com/functions/overview/ | 2026-06-15 |
| https://docs.netlify.com/functions/scheduled-functions/ | 2026-06-15 |
| https://www.netlify.com/pricing/ | 2026-06-15 |
| https://docs.netlify.com/image-cdn/overview/ | 2026-06-15 |
| https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/ | 2026-06-15 |
| https://developers.cloudflare.com/workers/runtime-apis/nodejs/ | 2026-06-15 |
| https://developers.cloudflare.com/workers/platform/limits/ | 2026-06-15 |
| https://developers.cloudflare.com/workers/configuration/cron-triggers/ | 2026-06-15 |
| https://developers.cloudflare.com/ddos-protection/ | 2026-06-15 |
| https://developers.cloudflare.com/workers/platform/pricing/ | 2026-06-15 |
| https://developers.cloudflare.com/images/pricing/ | 2026-06-15 |
| https://www.cloudflare.com/web-analytics/ | 2026-06-15 |
| https://docs.railway.com/reference/cron-jobs | 2026-06-15 |
| https://docs.railway.com/reference/deployment-regions | 2026-06-15 |
| https://docs.railway.com/reference/pricing/plans | 2026-06-15 |
| https://railway.com/pricing | 2026-06-15 |
| https://docs.railway.com/reference/public-api | 2026-06-15 |
| https://render.com/docs/cronjobs | 2026-06-15 |
| https://render.com/docs/preview-environments | 2026-06-15 |
| https://render.com/docs/regions | 2026-06-15 |
| https://render.com/pricing | 2026-06-15 |
| https://fly.io/docs/reference/regions/ | 2026-06-15 |
| https://fly.io/docs/about/pricing/ | 2026-06-15 |
| https://docs.deno.com/deploy/ | 2026-06-15 |
| https://northflank.com/docs | 2026-06-15 |
| https://northflank.com/bring-your-own-cloud | 2026-06-15 |
| https://docs.aws.amazon.com/amplify/latest/userguide/ssr-Amplify-support.html | 2026-06-15 |
| https://docs.aws.amazon.com/amplify/latest/userguide/pr-previews.html | 2026-06-15 |
| https://aws.amazon.com/amplify/pricing/ | 2026-06-15 |
| https://coolify.io/docs | 2026-06-15 |
| https://github.com/coollabsio/coolify | 2026-06-15 |
| https://github.com/Dokploy/dokploy | 2026-06-15 |
| https://www.hetzner.com/cloud | 2026-06-15 |
| https://docs.hetzner.com/cloud/servers/pricing/ | 2026-06-15 |

## Related comparisons

- [Convex alternatives](https://toolweight.dev/compare/convex-alternatives) — What are the best alternatives to Convex, and how hard is each one to leave?
- [S3-compatible storage](https://toolweight.dev/compare/s3-compatible-storage) — Which S3-compatible object storage provider is actually cheapest once egress is counted?
- [Database engines](https://toolweight.dev/compare/sqlite-vs-postgres-vs-mysql) — Should I use SQLite, PostgreSQL or MySQL?
- [Sandbox providers](https://toolweight.dev/compare/sandbox-providers) — Which sandbox provider should I run untrusted or agent-generated code on?

## Licence and attribution

Data from toolweight (https://toolweight.dev), licensed CC-BY-4.0.

- Licence: [CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/)
- Canonical HTML: https://toolweight.dev/compare/vercel-alternatives
- Machine-readable: https://toolweight.dev/compare/vercel-alternatives.md · https://toolweight.dev/api/v1 · https://toolweight.dev/mcp
- toolweight takes no affiliate revenue and sells no placements. Corrections: https://toolweight.dev/suggest
