Cloudflare Pages vs. Workers
I’ve recommended Cloudflare Pages in my Budget Website guide for years as the free, git-connected way to host a static site. Lately I’ve been wondering if that’s still the right call, so I went digging through the docs.
Pages launched in December 2020 as “the best way to build JAMstack websites,” pitched squarely at Netlify and Vercel, not really at GitHub Pages or GitLab Pages. But it landed in the same free-static-hosting bucket as those two anyway, which is exactly why it sits alongside them as a runner-up in my own guide. Similar name, overlapping job, different original target.
What’s changed since 2020 is Workers. In September 2024, Cloudflare shipped native static asset serving for Workers, replacing the old, awkward Workers Sites. That closed the one real gap that used to force a choice: static-with-git-deploys meant Pages, anything dynamic meant Workers. Cloudflare’s own words on this are unambiguous: “Now that Workers supports both serving static assets and server-side rendering, you should start with Workers.” Pages isn’t deprecated — existing projects keep running fine — but “all of our investment, optimizations, and feature work will be dedicated to improving Workers” going forward. Read: maintenance mode.
The gap keeps widening in Workers’ favor. Cron Triggers don’t exist on Pages. Durable Objects need a separate Worker bolted on rather than native support. Observability is thinner — no Workers Logs, Logpush, Tail Workers, or source maps. Email Workers, Rate Limiting, and Queue consumers are Workers-only. Since new platform features land on Workers first, this list only grows. Pages still has a few things going for it — early hints on static assets by default, file-based routing without a framework, Pages Plugins, more configurable branch deploys — but I wouldn’t bet on those staying differentiators for long.
The part that actually matters for my guide: “Static Hosting” and “Dynamic Hosting” used to be a genuine fork in the road, and I wrote Budget Website with that fork in mind — Pages if you’re static, Fly.io or Render if you need a real backend. Workers dissolves that fork. You can start static and, if the project later grows a database or an API, add a fetch handler and a binding instead of re-platforming. That’s a better long-term position than Pages, and arguably better than Netlify or Vercel’s split models too, since it’s the same runtime and the same deploy either way. I’m updating my pick accordingly.



