DEV Community

Alex Chen
Alex Chen

Posted on

I Ran My Side Project on Cloudflare's Free Tier for 6 Months — My Total Bill Was $0. Here's the Catch.

Six months ago I moved my side project (a link-shortener API with ~40k requests/day, a small analytics worker, and a cron job) off a $6/mo VPS onto Cloudflare's free tier. Total charged since: $0.00.

Here's what the free tier actually covered, and where it almost didn't.

The workload, by the numbers

Component Service Free limit My usage Headroom
API Workers 100k req/day ~40k req/day 2.5x
Redirect cache KV 100k reads/day ~38k reads/day 2.6x
Click events D1 5M rows read/day ~120k/day 40x
Static exports R2 10 GB storage 1.2 GB 8x
Nightly rollup Cron Triggers included in Workers 1/day fine

CPU time was the metric I watched most: 10 ms per request on the free plan. My p50 is 3 ms, p99 is 8 ms. A heavy JSON transform pushed one endpoint to 14 ms and started failing — I moved that work to the nightly cron instead of paying.

The three limits that actually bite

  1. The 10 ms CPU ceiling. Not wall time — CPU time. Anything that parses, compresses, or transforms data per-request will hit it before you expect. Streaming responses don't count against it; computation does.
  2. D1 is SQLite, act like it. No long transactions, no heavy joins at scale. I keep it as an append-mostly event log and pre-aggregate in the cron. People who treat D1 like Postgres have a bad time.
  3. No long-lived connections. No WebSockets on the free plan without Durable Objects gymnastics, no background threads. If your app is the connection (chat, collab, games), this tier is not for you.

The thing nobody mentions: observability is thin. You get basic logs, but if you're used to htop and slow-query logs, debugging a Workers app means structured logging from day one. I sketched out the logging middleware with an AI coding assistant (MonkeyCode, free and open-source) — it generated the Workers bindings boilerplate and the log schema in one pass, which was the only part of the migration that took under an hour.

When a VPS still wins

If you need a persistent process, arbitrary binaries, or more than 10 ms of compute per request, a $5 VPS is still the better deal. The free tier wins for bursty, stateless, read-heavy workloads — which, honestly, describes most side projects.

The controversial part: I think the 100k req/day limit is a red herring. The CPU ceiling will force you off the free tier long before request count does.

What's your free-tier breaking point story — which limit got you first: requests, CPU, or storage?

Top comments (0)