/ tool-comparisons / Kamal vs Cloudflare Pages for Solo Developers
tool-comparisons 10 min read

Kamal vs Cloudflare Pages for Solo Developers

Comparing Kamal and Cloudflare Pages for solo developers. Features, pricing, pros and cons, and which one to pick for your next project.

Hero image for Kamal vs Cloudflare Pages for Solo Developers

Quick Comparison

Feature Kamal Cloudflare Pages
Type CLI deployment tool for Docker apps Static site + edge functions platform
Latest version v2.11.0 (March 2026) Continuously updated managed service
License / model MIT open source (Ruby gem) Proprietary managed platform
Pricing Free tool, you pay only the VPS (cheapest Hetzner around EUR 3.49 per month) Free tier, then $5 per month Pro
Free-tier ceiling None imposed by Kamal, limited only by your server 500 builds per month, unlimited bandwidth, 20,000 files per site
Learning Curve Moderate (Docker plus YAML config) Easy (Git-connected, auto-detected builds)
Best For Full-stack Docker deployments to VPS Static sites, JAMstack, and frontend apps
Adoption signal 14,247 GitHub stars, 18.9M gem downloads 300-plus edge locations, used at scale by Cloudflare customers
Solo Dev Rating 8/10 9/10

Kamal Overview

Kamal is a command-line tool that deploys Docker containers to servers with zero downtime. Created by DHH and the Rails team, it's used in production at Basecamp and HEY. You define your deployment in a deploy.yml file, listing server addresses, Docker configuration, health checks, and accessories like databases.

Run kamal deploy and the tool builds your Docker image, pushes it to a registry, SSHs into each server, pulls the new image, starts the container, waits for health checks, switches traffic via the built-in reverse proxy, and removes the old container. All without downtime. All from one terminal command. Note that Kamal 2 replaced the Traefik proxy used in version 1 with its own purpose-built kamal-proxy, which is what handles the traffic cutover today.

Kamal is language-agnostic. Anything that runs in Docker works with Kamal: Rails, Django, Express, Go, Rust, Laravel. It deploys accessories (PostgreSQL, Redis, Elasticsearch) alongside your main application. The entire configuration lives in your repository, version-controlled and reviewable.

Cloudflare Pages Overview

Cloudflare Pages deploys websites and web applications to Cloudflare's global network of 300+ data centers. Connect your Git repository, and every push builds and deploys your site worldwide. Static assets get unlimited bandwidth on the free tier. Dynamic functionality runs via Pages Functions (Cloudflare Workers) on the edge.

The framework support is excellent. Astro, Next.js, SvelteKit, Nuxt, Remix, Hugo, and many more work with minimal or zero configuration. Build settings are usually auto-detected. Preview deployments for every pull request come automatically. Custom domains with SSL are free and instant.

For a solo developer shipping a frontend project, Cloudflare Pages removes virtually all deployment friction. Push your code, it's live globally in under a minute.

Key Differences

What they deploy. Kamal deploys Docker containers to VPS machines. It handles full-stack applications, databases, caches, and background workers. Cloudflare Pages deploys static assets and edge functions to a global CDN. These are fundamentally different deployment targets for different types of applications.

Server ownership. Kamal deploys to servers you own and control. You can SSH in, inspect the file system, check Docker logs, and debug issues directly. Cloudflare Pages is fully managed. You deploy code and Cloudflare handles everything else. No shell access, no infrastructure control.

Backend capabilities. Kamal deploys real backend applications: Django REST APIs, Rails apps with Sidekiq workers, Node.js services with database connections. Cloudflare Pages Functions run JavaScript on the edge with execution time limits and no persistent connections. If your backend needs a database connection pool, background jobs, or WebSockets, Kamal is required.

Global distribution. Cloudflare Pages runs on 300+ edge locations. Content is served from the location closest to each user. Kamal deploys to specific servers in specific locations. For static content and edge-rendered pages, Cloudflare Pages is faster. For API responses requiring database queries, the speed difference depends on where your database lives.

Setup effort. Cloudflare Pages takes 5 minutes: connect repo, set build command, deploy. Kamal takes longer: set up a VPS, install Docker, configure deploy.yml, set up a container registry, then deploy. The initial setup gap is significant. Ongoing deploys are simple with both tools.

Cost analysis. Cloudflare Pages is free for static sites with unlimited bandwidth. Kamal is free but requires a VPS (the cheapest Hetzner cost-optimized plan starts around EUR 3.49 per month for 2 vCPU and 4 GB RAM, though Hetzner raised cloud prices in April 2026, so check current rates). For a frontend-only project, Cloudflare Pages costs $0. For a full-stack project, Kamal on a budget VPS is cheaper than assembling Cloudflare Pages plus a managed database plus a managed backend.

By the Numbers (2026)

The marketing copy on both sides blurs the actual specs. Here is what each one really is as of late May 2026.

Kamal

  • Latest release is v2.11.0, published 18 March 2026.
  • It is an MIT-licensed open-source project distributed as a Ruby gem. The repository sits at 14,247 GitHub stars and 715 forks.
  • The gem has been pulled 18,891,001 times in total, with 2,098,413 of those downloads on the v2.11.0 release alone.
  • The codebase is written in Ruby, but Kamal itself is language-agnostic at deploy time because it ships your app as a Docker container.
  • Kamal 2 dropped Traefik in favor of kamal-proxy, a reverse proxy the Basecamp team built specifically to coordinate zero-downtime cutovers, TLS, and maintenance mode.

Cloudflare Pages

  • The free tier gives you 500 builds per month, 1 build running at a time, up to 20,000 files per site, a 25 MiB cap on any single asset, 100 custom domains per project, unlimited preview deployments, and unmetered bandwidth.
  • The Pro tier costs $5 per month and lifts you to 5,000 builds per month, 5 concurrent builds, up to 100,000 files per site, and 250 custom domains.
  • Dynamic code runs as Pages Functions on the Workers platform. The Workers free plan includes 100,000 requests per day with a 10 millisecond CPU cap per invocation.
  • The Workers Paid plan is $5 per month and includes 10 million requests and 30 million CPU milliseconds. Beyond that you pay $0.30 per additional million requests and $0.02 per additional million CPU milliseconds, with a maximum of 5 minutes of CPU time per invocation.
  • Static asset requests are free and unlimited at every tier, and Cloudflare serves them from its 300-plus edge locations.

Real Cost at Solo-Dev Scale

Pricing comparisons only mean something against a concrete workload, so here is one. Assume a solo developer running a small SaaS with a marketing site, a single-page frontend, and a backend API that talks to a Postgres database and runs a couple of background workers. Call it modest traffic, say 2 million dynamic API hits a month, plus the static frontend.

The Cloudflare Pages path. Host the marketing site and the frontend on Pages for $0. Static bandwidth is unmetered, so the front end is genuinely free. The catch is the backend. Pages Functions run on Workers, and your 2 million API requests fall inside the 10 million included on the $5 per month Workers Paid plan, so the compute is $5. But Workers cannot hold a Postgres connection pool, run persistent background workers, or keep a WebSocket open, so you still need a managed database and a place for the workers. A managed Postgres alone typically runs $15 to $25 per month at the entry tier, and a managed backend runtime for the workers adds more. Realistic floor for this stack is roughly $20 to $30 per month, and that is before you outgrow the free database tier.

The Kamal path. Put the whole backend, the Postgres database as a Kamal accessory, and the background workers on one Hetzner CX23-class server at about EUR 3.49 per month (verify the current rate, since Hetzner raised prices in April 2026). Kamal itself is free. Keep the marketing site and frontend on Cloudflare Pages for $0 because there is no reason to pay a VPS to serve static files. Total recurring spend is the one VPS line, under EUR 4 per month, with 20 TB of included traffic on the European plans.

The takeaway. For a static or frontend-only project the math is lopsided: Cloudflare Pages is $0 and Kamal cannot compete with free. The moment a real database and workers enter the picture, a single Kamal-managed VPS undercuts the assembled managed-services bill by a wide margin, and you keep shell access and full control. The cheapest correct answer for a full-stack solo product is usually both tools at once, Pages for the static front and Kamal for the stateful back, for a combined bill of roughly one VPS.

When to Choose Kamal

  • You're deploying a full-stack application with a database and background workers
  • Your backend is Python, Ruby, Go, or any server-side framework
  • You want infrastructure you own, version-controlled deployment configs
  • You need zero-downtime rolling deployments for Docker containers
  • You're running multiple services that need to communicate on the same network

When to Choose Cloudflare Pages

  • You're building a static site, blog, documentation, or landing page
  • You're using a JAMstack framework (Astro, Next.js, SvelteKit, Hugo)
  • You want free global hosting with unlimited bandwidth
  • You want automatic preview deployments for pull requests
  • Your dynamic needs are minimal and fit within edge functions

The Verdict

Kamal and Cloudflare Pages are rarely competing for the same project. If you're deploying a backend application, Kamal wins because Cloudflare Pages doesn't run backends. If you're deploying a static site or JAMstack app, Cloudflare Pages wins because running Kamal for static files is overkill.

For solo developers building products with both a frontend and a backend, use both. Deploy your marketing site and frontend app on Cloudflare Pages for free global CDN. Deploy your API, database, and workers with Kamal on a VPS. This separation gives each piece the best hosting model for its workload.

If you have to pick one, choose based on your primary project type. Full-stack apps need Kamal. Frontend apps and static sites need Cloudflare Pages. Forcing either tool into the other's territory results in a worse experience than using the right tool for the job.

Sources

All figures checked on 28 May 2026.

Built by Kevin

Like this? You'll like what I'm building too.

Two ways to support and get more of this work.

Desktop App

HEARTH

A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.

Read more
Digital Products

MY TOOLKITS

Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.

Browse on Whop

Need This Built?

Kevin builds products solo, from first version to live. If you want something like this made, work with him.