All Posts
cloudflare · deployment

Running TanStack Start on Cloudflare Workers (Free Tier)

The free tier gives you unlimited static asset requests and 100k SSR invocations per day — here is how a portfolio fits comfortably inside those limits.

Cloudflare's Workers free plan is surprisingly capable for a personal site. The numbers that matter:

ResourceFree limitPortfolio usage
Static assetsUnlimited requestsAll JS/CSS/images
Worker invocations100,000/dayHundreds
CPU time10 ms/request~2–5 ms

The catch: CPU time

The 10ms CPU limit is actual processing time, not wall-clock time. Waiting on fetches doesn't count. Still, heavy client bundles inflate hydration cost, so keeping pages lean matters.

What doesn't work

There is no filesystem on Workers. Any plan that reads markdown files at runtime needs to move to either build-time processing or D1.

For this site, content-collections processes posts during vite build — the worker bundle simply contains the finished data. Publishing means pushing a commit; CI handles the rest.

Deployment config

The whole thing ships as one wrangler config:

{
  "name": "porto-2026",
  "compatibility_flags": ["nodejs_compat"],
  "main": "@tanstack/react-start/server-entry",
}

Then bun run deploy. That's it — no servers to babysit.

End of post