Compare clouds
Picking a cloud is partly engineering and partly TCO modeling. This page walks through the three honest-comparison axes — what you're billed for, what the receipts look like, what migration costs — against six other clouds. If you want help running this against your own workload, write to [email protected] and we'll do the modeling with you.
What this page covers
- Billing units. What the cloud charges for — tokens, GB-month, GPU-second, vCPU-hour, joules.
- Audit / ESG evidence. What you can show your auditor for a given line item.
- Migration cost. Realistic estimates of code-change effort + parallel-run window.
By billing unit
| Cloud | Unit | Idle cost | Egress | Per-call receipt |
|---|---|---|---|---|
| AWS | vCPU-hour, GB-month, requests, GB-egress | Full reserved cost | $0.05-$0.09/GB | None per request; aggregate monthly |
| GCP | vCPU-hour, GB-month, per-100ms, GB-egress | Full reserved cost | $0.08-$0.12/GB | None per request; aggregate monthly |
| Azure | vCPU-hour, GB-month, GB-egress | Full reserved cost | $0.05-$0.087/GB | None per request; aggregate monthly |
| Cloudflare | Requests, GB-egress (zero on R2) | Workers free at small scale | $0/GB (R2) | None |
| OpenAI / Anthropic | Tokens (in + out) | n/a | n/a | None — token count, not energy |
| Vercel | VFC-time, requests, GB-storage, GB-egress | Compute scales to zero; storage continues | ~$0.04/GB | None per request |
| Joule Cloud | Joules consumed | Near-zero | Free on mesh | Signed receipt, every call |
By migration cost
| From | Code change | Data move | Parallel-run window |
|---|---|---|---|
| OpenAI | 2 lines (base_url + api_key) | none | 1-2 weeks |
| Anthropic | SDK swap + system-prompt move | none | 1-2 weeks |
| AWS S3 | 2 lines (endpoint + creds) | rclone / aws-cli | 1-3 days (size-dependent) |
| AWS (full) | service-by-service mapping | per-service | 2-6 weeks |
| GCP (full) | service-by-service mapping | per-service | 2-6 weeks |
| Cloudflare Workers | handler-signature swap + bindings → env vars | R2 → Object Store (rclone) | 1 week |
| Vercel | add Dockerfile + invisible.hcl | per-service (Postgres, blob) | 1-2 weeks |
| Fly | fly.toml → invisible.hcl (one-to-one) | per-service | 1 week |
| Railway | wire CI to invisible deploy | per-service | 1 week |
| Modal | decorators → containers + invisible.hcl | volumes → Object Store | 1-2 weeks |
| Replicate | SDK swap (or Cog container deploy) | none for listed models | 1 week |
The dedicated migration guides have the actual diffs and CI snippets:
- OpenAI · Anthropic
- AWS S3 · AWS · GCP
- Cloudflare Workers · Vercel · Fly.io · Railway
- Modal · Replicate
When NOT to pick Joule Cloud
We're honest about this:
- You need a service we don't have. If your stack depends on DynamoDB Streams + Step Functions + Glue, you'll need real custom work to translate, possibly more than the cost saving justifies. Run the migration cost vs annual savings math.
- You're past committed-spend thresholds with a hyperscaler. If you've already paid $1M for a discount tier you won't hit, leaving early is paying a penalty. Compare next renewal, not now.
- You need certifications we don't have yet. We're SOC 2 in flight, ISO 27001 in 2027, FedRAMP via partnership. If you need any of these now and now-now, stay where you are.
- You're using a per-cloud specialty service. AWS Bedrock's exclusive model access, Vercel's Next-specific magic, Cloudflare Durable Objects — some of these don't have direct equivalents.
The one-week test
If you're considering us: run a week of representative traffic in parallel. Compare the two bills line for line. Compare the latency p50 and p99. Compare what your CSRD auditor would do with the two sets of evidence. Make the call from data.