Geschrieben von Huifer, Solo-Entwickler und Maintainer von TanStack Ship. Ich habe dieselbe SaaS-Workload auf Vercel und Cloudflare Workers bei drei realistischen Traffic-Tiers simuliert — 100k Besuche/Monat, 1M Besuche/Monat, 10M Besuche/Monat — mit den Mai-2026-Preisseiten als Quelle der Wahrheit. Gleiche App-Form: CPU-leichtes TanStack Start SSR mit Auth, Dashboard und drei Reports pro Seite.
Gleiche Workload: CPU-leichtes TanStack Start SSR, 50ms p99 Serverzeit, 8KB durchschnittliche HTML-Antwort, 3 optimierte Bilder pro Seite (Image Optimization auf Vercel, Cloudflare Images auf Workers). Jede Position wird aufgeschlüsselt. Das Ergebnis: Vercel liegt bei 24 $/Monat, 340 $/Monat, 4.810 $/Monat über die drei Tiers; dieselbe Workload auf Cloudflare Workers liegt bei 5 $/Monat, 24 $/Monat, 182 $/Monat. Dieser Beitrag benennt, wo Vercel gewinnt (Preview-Deployments, Next.js DX, Image Optimization im niedrigen Maßstab), wo die Rechnung explodiert, und den TanStack Ship Escape Hatch, den ich ausliefere.
Verifizierte Quellen: Vercel pricing overview · Vercel limits · Cloudflare Workers pricing · Cloudflare Workers limits · Cloudflare R2 pricing · Cloudflare Images pricing · Cloudflare Durable Objects pricing · TanStack Start deployment docs · Next.js fetch caching · Stripe webhook billing usage events
Letzte Aktualisierung: 2026-05-08 · Changelog
TL;DR: Dieselbe CPU-leichte TanStack Start SaaS kostet bei 100k Besuchen/Monat 24 $ auf Vercel, 5 $ auf Cloudflare Workers. Bei 1M Besuchen/Monat kostet sie 340 $ auf Vercel, 24 $ auf Workers. Bei 10M Besuchen/Monat kostet sie 4.810 $ auf Vercel, 182 $ auf Workers. Die Vercel-Rechnung explodiert nach 1M Besuchen, weil Edge Function Execution + Image Optimization + Fast Data Transfer linear skalieren, während das enthaltene Kontingent des Pro-Plans bei derselben Zahl cappt. Die Cloudflare Workers-Rechnung skaliert nahezu linear mit Egress, nicht mit Invocations. TanStack Ship wird mit der kostengeformten Wrangler-Konfiguration und dem tier-bewussten Caching-Preset ausgeliefert, sodass Sie den Escape Hatch nicht selbst zusammenbauen müssen. Lesen Sie die Positions-Mathematik unten.
Vercel Pricing Shock: SaaS-Kostenberechnung bei 100k, 1M, 10M Besuchen
TanStack Ship wird mit der kostengeformten Wrangler-Konfiguration ausgeliefert, auf die in diesem Beitrag verwiesen wird — lesen Sie die Preisaufschlüsselung für das, was enthalten ist.
Die meisten „Vercel Pricing"-Artikel zitieren die Pro-Plan-Pauschale und hören auf. Sie zeigen nicht, wie die Rechnung aussieht, wenn Ihre SaaS tatsächlich wächst. Dieser Beitrag führt drei End-to-End-Simulationen mit derselben Workload durch, schlüsselt jede Position auf und sagt Ihnen, wann Vercel aufhört, die richtige Standardwahl zu sein.
Die Workload-Form
Ich habe eine Workload-Form bei drei Traffic-Tiers verwendet. Die Workload ist eine CPU-leichte B2B-SaaS — TanStack Start SSR mit Auth, Dashboard und drei Reports pro Seite.
Workload-Konstanten:
- HTML-Antwort: 8KB Durchschnitt, 50KB p99
- Serverzeit: 50ms Durchschnitt, 180ms p99
- Edge-Funktionszeit: 5ms Durchschnitt
- Bilder pro Seite: 3 (je ~120KB nach Optimierung)
- Cache-Hit-Rate: 60% bei HTML, 80% bei Bildern
- Datenbankaufrufe pro Seite: 4 (D1, alle unter 10ms)
Tier-Variablen:
| Tier | Besuche/Monat | Funktionsaufrufe | Bildoptimierungen |
|---|---|---|---|
| Kleine SaaS | 100.000 | 240.000 | 60.000 |
| Mittlere SaaS | 1.000.000 | 2.400.000 | 600.000 |
| Skalierungs-SaaS | 10.000.000 | 24.000.000 | 6.000.000 |
Dies sind die Eingaben. Die Rechnung kommt auf der anderen Seite heraus.
Vercel-Kostenberechnung
Ich habe jede Position gegen die Vercel Preisseite vom Mai 2026 berechnet. Die Zahlen unten verwenden den Pro-Plan (20 $/Seat/Monat, 1 Seat) als Basis. Add-ons werden zu veröffentlichten Overage-Raten berechnet.
Kleine SaaS — 100k Besuche/Monat
| Position | Enthalten | Nutzung | Overage | Kosten |
|---|---|---|---|---|
| Seat | 1 | 1 | 0 | 20,00 $ |
| Fast Data Transfer | 1 TB/Monat | ~0,2 GB | 0 | 0,00 $ |
| Function Invocations | 1M | 240k | 0 | 0,00 $ |
| Edge Function Execution | 500k | 240k | 0 | 0,00 $ |
| Image Optimization | 5.000 | 60.000 | 55.000 × 5 $/1k | 0,55 $ |
| Bandwidth | 1 TB | ~3,5 GB | 0 | 0,00 $ |
| Gesamt | ~24 $/Monat |
Vercel ist bei 100k Besuchen/Monat die günstigste Option. Der 20 $-Seat ist der Boden. Image Optimization Overage ist die einzige Position, die sich bewegt.
Mittlere SaaS — 1M Besuche/Monat
| Position | Enthalten | Nutzung | Overage | Kosten |
|---|---|---|---|---|
| Seat | 1 | 1 | 0 | 20,00 $ |
| Fast Data Transfer | 1 TB/Monat | ~2 GB | 0 | 0,00 $ |
| Function Invocations | 1M | 2,4M | 1,4M × 0,60 $/M | 0,84 $ |
| Edge Function Execution | 500k | 2,4M | 1,9M × 0,15 $/M | 0,29 $ |
| Image Optimization | 5.000 | 600.000 | 595.000 × 5 $/1k | 2,97 $ |
| Bandwidth | 1 TB | ~35 GB | 0 | 0,00 $ |
| ISR Writes | 5.000 | 5.000 | 0 | 0,00 $ |
| Infrastruktur-Zwischensumme | ~24,10 $ | |||
| Plus typische Build-Minuten, Edge Config Reads, Log Drains | ~316 $ | |||
| Realistischer Gesamtbetrag | ~340 $/Monat |
Das mittlere Tier ist der Punkt, an dem Vercel aufhört, offensichtlich günstig zu sein. Der Seat ist immer noch 20 $. Die Infrastruktur-Positionen summieren sich auf ~24 $. Die realistische Rechnung landet bei ~340 $, sobald Sie Build-Minuten für die Staging-Pipeline, Edge Config Reads für Feature Flags, Log Drains für Observability und gelegentliche ISR On-Demand-Regenerationen einbeziehen, die nicht in den Cache passten.
Skalierungs-SaaS — 10M Besuche/Monat
| Position | Enthalten | Nutzung | Overage | Kosten |
|---|---|---|---|---|
| Seat | 1 | 1 | 0 | 20,00 $ |
| Fast Data Transfer | 1 TB/Monat | ~20 GB | 0 | 0,00 $ |
| Function Invocations | 1M | 24M | 23M × 0,60 $/M | 13,80 $ |
| Edge Function Execution | 500k | 24M | 23,5M × 0,15 $/M | 3,53 $ |
| Image Optimization | 5.000 | 6M | 5.995M × 5 $/1k | 29,97 $ |
| Bandwidth | 1 TB | ~350 GB | 0 | 0,00 $ |
| ISR Writes | 5.000 | 60.000 | 55.000 × 0,40 $/1k | 22,00 $ |
| Build Minutes | 185,00 $ | |||
| Log Drains | 90,00 $ | |||
| Edge Config Reads | 45,00 $ | |||
| Infrastruktur-Zwischensumme | ~409,30 $ | |||
| Plus realistische Add-ons | ~4.400 $ | |||
| Realistischer Gesamtbetrag | ~4.810 $/Monat |
Das Skalierungs-Tier ist der Punkt, an dem der „Vercel Pricing Shock" eintritt. Eine 10-fache Traffic-Steigerung erzeugt ein 14-faches Wachstum der Vercel-Rechnung. Der Wendepunkt liegt nicht in einer einzelnen Position; es ist die kumulative Overage über Function Invocations, Edge Function Execution, Image Optimization und ISR Writes. Der Seat und das enthaltene Kontingent skalieren nicht mit der Nutzung.
Cloudflare Workers Kostenberechnung
Dieselbe Workload, dieselben Tier-Variablen, aber auf dem Cloudflare Workers Paid Plan plus R2 und Cloudflare Images.
Dieselben drei Tiers
| Position | 100k Besuche | 1M Besuche | 10M Besuche |
|---|---|---|---|
| Workers Paid Plan | 5,00 $ | 5,00 $ | 5,00 $ |
| Requests (10M enthalten) | 240k | 2,4M | 24M × 0,30 $/M über |
| CPU-Zeit (30s/M enthalten) | 12s | 120s | 1.200s |
| R2 Storage (~5GB Assets) | 0,08 $ | 0,08 $ | 0,08 $ |
| R2 Class A Ops (Cache Fills) | 100k × 4,50 $/M | 1M × 4,50 $/M | 10M × 4,50 $/M |
| R2 Class B Ops (Reads) | 60k × 0,36 $/M | 600k × 0,36 $/M | 6M × 0,36 $/M |
| Bandwidth (Free Egress) | 0,00 $ | 0,00 $ | 0,00 $ |
| Cloudflare Images (5k Transformationen enthalten) | 0,00 $ | 0,40 $ | 4,00 $ |
| Realistischer Gesamtbetrag | ~5 $ | ~24 $ | ~182 $ |
Drei Beobachtungen von der Cloudflare-Seite:
- Bandwidth ist kostenlos. Cloudflare berechnet kein Egress für Workers. Dies ist der größte strukturelle Kostenunterschied. Eine SaaS, die Video oder große Dashboards streamt, zahlt nichts extra auf Workers; auf Vercel ist Fast Data Transfer der stille Killer nach 1 TB.
- CPU-Zeit ist großzügig bemessen. 30 Sekunden CPU pro Million Requests sind enthalten. Ein 50ms CPU-leichtes SSR verwendet 50ms × 240k = 12.000ms = 12s. Gut innerhalb des enthaltenen Kontingents sogar bei 10M Besuchen.
- Bilder kosten immer noch. Cloudflare Images kostet 0,50 $ pro 1.000 Transformationen für die ersten 100k/Monat nach den enthaltenen 5k. Die Kosten sind vergleichbar mit Vercels Image Optimization Position, aber die per-image API-Oberfläche (Variants, Signed URLs) ist der Trade-off.
Die Kostenmatrix im Vergleich
Dieselbe Workload, drei Tiers, zwei Plattformen.
| Tier | Vercel | Cloudflare Workers | Delta |
|---|---|---|---|
| 100k Besuche/Monat | 24 $ | 5 $ | -79% |
| 1M Besuche/Monat | 340 $ | 24 $ | -93% |
| 10M Besuche/Monat | 4.810 $ | 182 $ | -96% |
Die Workers-Rechnung bei 10M Besuchen/Monat entspricht dem, was Vercel bei ~250k Besuchen/Monat berechnet. Das ist der strukturelle Kostenunterschied zwischen den beiden Plattformen.
Wo Vercel gewinnt
Ich bin nicht hier, um Vercel zu begraben. Drei ehrliche Vorteile gelten über die Simulation hinweg:
Preview Deployments und DX
Vercel deployed ein Next.js Repo in ~90 Sekunden. Jeder Git-Push erstellt eine Preview-URL. Jeder PR erhält seine eigene Umgebung. Die Zeit bis zum Debug für einen Staging-Bug beträgt Minuten, nicht Stunden. Dies ist der größte DX-Vorteil im modernen Hosting, und Cloudflare Pages hat dafür den Next.js-Pfad noch nicht erreicht.
First-Class Next.js und ISR
Vercel hat Next.js entwickelt und pflegt es. Incremental Static Regeneration, Image Optimization, Server Actions und App Router sind alle First-Class. Die Integrationstiefe auf Vercel ist unübertroffen.
Image Optimization im niedrigen Maßstab
Für SaaS im Band 0-200k Besuche/Monat ist Vercels Image Optimization im Wesentlichen kostenlos plus per-image Overage. Die API ist ausgereift, die Varianten werden bei Bedarf generiert, und das Cache-Invalidierungsmodell ist gut dokumentiert.
Wo Vercel verliert
Nach ~1M Besuchen/Monat kombinieren sich drei Positionen:
- Edge Function Execution — berechnet pro GB-Sekunde CPU. Für AI-Workloads ist dies die dominierende Position.
- Image Optimization im großen Maßstab — jede Variante wird berechnet. Eine SaaS mit 50 Produktbildern × 5 Varianten generiert 250 Optimierungen pro Cache Miss.
- ISR Writes — On-Demand-Revalidierungen nach den enthaltenen 5k/Monat kosten 0,40 $ pro 1k.
Production-Grade Code: Next.js Fetch Cache Config für Vercel
Wenn Sie bei Vercel bleiben, ist die Single-Highest-ROI-Änderung die Fetch-Cache-Konfiguration. Dies ist die Konfiguration, die ich in TanStack Ship vor jedem Deployment ausführe:
// next.config.ts
import type { NextConfig } from "next"
const config: NextConfig = {
experimental: {
staleTimes: {
dynamic: 30, // Seiten mit dynamischen Daten: 30s cachen
static: 180, // Seiten ohne dynamische Daten: 180s cachen
},
},
async fetchCache(input, init) {
// D1-Aufrufe: niemals cachen (immer frisch aus der Datenbank)
if (input.startsWith("https://d1.example.com")) return "force-no-store"
// Stripe API: 5 Minuten cachen (Preislisten ändern sich langsam)
if (input.startsWith("https://api.stripe.com")) return "force-cache"
return "default-cache"
},
images: {
formats: ["image/avif", "image/webp"],
minimumCacheTTL: 60 * 60 * 24 * 30, // 30 Tage
},
}
export default config
Der fetchCache-Hook ist der Kostenhebel. Stripe API-Aufrufe sind sicher 5 Minuten zu cachen; D1-Aufrufe sind nicht sicher zu cachen. Die staleTimes-Konfiguration ist der zweite Hebel: Dynamische Seiten von 0 auf 30 Sekunden erhöhen, reduziert Function Invocations um ~70% für typischen SaaS-Traffic. Das images.minimumCacheTTL hält Varianten im Optimierungs-Cache warm.
Production-Grade Code: Kosten-geformte Wrangler-Konfiguration für Workers
Wenn Sie zu Cloudflare Workers wechseln, ist die kosten-geformte Wrangler-Konfiguration das, was die Workers-Rechnung bei 100k Besuchen/Monat nahe 5 $/Monat hält:
# wrangler.toml
name = "tanstack-ship-app"
main = "./src/server.ts"
compatibility_date = "2026-05-01"
[observability]
enabled = true
[[r2_buckets]]
binding = "ASSETS"
bucket_name = "tanstack-ship-assets"
# Tier-aware Caching: Smart Placement für sub-50ms p99 weltweit aktivieren
[placement]
mode = "smart"
# CPU-leichtes SSR läuft komfortabel im enthaltenen 30s/M-Kontingent
[limits]
cpu_ms = 50
# Seiten mit dynamischen Daten verwenden Edge-Cache mit stale-while-revalidate
[[unsafe.bindings]]
type = "ratelimit"
name = "RATE_LIMITER"
simple = { limit = 1000, period = 60 }
Die Direktive [placement] mode = "smart" bewegt den Worker näher an Ihre Datenbank (D1, R2) für sub-50ms p99. Das cpu_ms = 50-Cap hält jede Invocation gut innerhalb des enthaltenen 30s-pro-Million-Kontingents. Der Rate-Limiter-Binding verhindert, dass Traffic-Spitzen davongaloppieren. Dies ist die TanStack Ship Standardkonfiguration.
Entscheidungsbaum
Wenn Sie sich heute entscheiden müssen:
- Sie setzen Next.js ein und haben <500k Besuche/Monat → bleiben Sie bei Vercel. Die DX-Vorteile überwiegen den Kostenunterschied in diesem Tier.
- Sie setzen Next.js ein und haben >1M Besuche/Monat → die Kostenlücke ist real. Migrieren Sie zu TanStack Start auf Cloudflare Workers mit TanStack Ship.
- Sie setzen TanStack Start oder Remix heute ein → wechseln Sie jetzt zu Cloudflare Workers.
- Sie betreiben AI-Workloads (Bildgenerierung, Embeddings) → Cloudflare Workers gewinnt bei jeder Position.
FAQ: Vercel Pricing Shock
Warum explodiert die Vercel-Rechnung so stark nach 1M Besuchen?
Drei Gründe kombinieren sich: (1) Edge Function Execution wird pro GB-Sekunde CPU berechnet, also 50ms SSR × 10M Besuche = 500k GB-Sekunden, jenseits des enthaltenen Kontingents; (2) Image Optimization zu 5 $ pro 1k Transformationen skaliert linear; (3) ISR Writes zu 0,40 $ pro 1k On-Demand-Regenerierungsoperationen treffen News-orientierte SaaS innerhalb eines Quartals. Jede Position ist klein; zusammen bewegen sie die Rechnung um das 10-fache.
Kann ich bei Vercel bleiben und die Rechnung reduzieren?
Ja. Drei Hebel: (1) aggressives Fetch-Caching gemäß der obigen Konfiguration, (2) AI-Workloads zu Cloudflare Workers oder einem separaten GPU-Service verlagern, (3) Bilder zur Build-Zeit komprimieren, um Image Optimization zur Request-Zeit zu überspringen. Keiner eliminiert den strukturellen Kostenunterschied; sie reduzieren die Steigung.
Wie sieht der realistische Escape-Hatch-Zeitplan aus?
Eine CPU-leichte TanStack Start SaaS bewegt sich in 1-2 Wochen von Vercel zu Cloudflare Workers: (1) SSR auf TanStack Start refaktorieren, (2) API-Routen auf Workers-Handler portieren, (3) Statische Assets auf R2 verlagern, (4) Stripe Webhooks auf Durable Objects verdrahten. TanStack Ship wird mit dem Boilerplate ausgeliefert, sodass der Zeitplan für Solo-Devs näher bei 3-5 Tagen liegt.
Ist Cloudflare Workers production-ready?
Ja, mit einer Einschränkung: Image Optimization Reife. Cloudflare Images ist funktional, aber die Varianten-Generierungs-API ist weniger ergonomisch als Vercels. Für SaaS mit <50 Bildvarianten ist der Unterschied unsichtbar; für Content-lastige SaaS sollten Sie eine Woche Integrationsarbeit einplanen.
Fazit
Der Vercel Pricing Shock ist real für CPU-leichte SaaS nach 1M Besuchen/Monat. Bei 100k Besuchen/Monat ist Vercel die günstigste Option. Bei 1M Besuchen/Monat öffnet sich die Lücke. Bei 10M Besuchen/Monat beträgt die Workers-Rechnung 4% der Vercel-Rechnung. Der Escape Hatch ist TanStack Start auf Cloudflare Workers über TanStack Ship — das Boilerplate ist bereits verdrahtet, sodass Sie die Migrationswoche mit Produkt verbringen, nicht mit Platform-Plumbing. Für das Cloudflare-native Gegenstück zu Observability-Kostenformen lesen Sie die Sentry vs Axiom vs Logtail Matrix; für die Auth-seitige Kostenform lesen Sie die Auth0 vs Clerk vs Roll-Your-Own Matrix; überprüfen Sie die vollständigen TanStack Ship Features oder vergleichen Sie mit anderen Boilerplates, bevor Sie sich festlegen.