/ tool-comparisons / AWS vs Kamal for Solo Developers
tool-comparisons 9 min read

AWS vs Kamal for Solo Developers

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

Hero image for AWS vs Kamal for Solo Developers

Quick Comparison

Feature AWS Kamal
Type Full enterprise cloud platform (200+ services) Open-source CLI deployment tool (v2.11.0, Ruby)
Pricing Pay-as-you-go (App Runner from $0.064/vCPU-hr; Lightsail from $3.50/mo; EC2 t3.micro $7.59/mo) Free, MIT-licensed, you pay only for the server
Free starter offer New accounts get up to $200 in credits over 6 months (the old 12-month always-free EC2 ended July 15, 2025) Not applicable, the tool is always free
Learning Curve Hard Moderate-Hard
Zero-downtime proxy Application/Network Load Balancer (you configure it) Built-in kamal-proxy (replaced Traefik in Kamal 2.0)
Best For Any workload at any scale, managed services Zero-downtime Docker deploys to any server
Adoption The dominant cloud provider 14,247 GitHub stars, ~18.9M RubyGems downloads
Solo Dev Rating 6/10 7/10

AWS Overview

AWS provides 200+ cloud services covering compute, storage, databases, serverless, CDN, machine learning, and more. For deploying web applications, the relevant options include EC2 (virtual machines), Elastic Beanstalk (PaaS), App Runner (container platform), Lightsail (simplified VPS), and ECS/EKS (container orchestration).

The platform's strength is that it does everything. Whatever your infrastructure need, AWS has a managed service for it. The downside for solo developers is the overwhelming complexity. Even deploying a simple web app requires navigating multiple services, configurations, and pricing models.

AWS overhauled its free tier on July 15, 2025. New accounts no longer get the old 12-month always-free allowances (750 hours of t2.micro EC2, 5GB S3, limited RDS). Instead, new accounts get up to $200 in credits to spend over a six-month window, then the Free Plan expires when the credits run out or six months pass, whichever comes first. Accounts created before that date keep the legacy 12-month allowances. After the trial, costs depend on dozens of variables.

Kamal Overview

Kamal is a deployment tool from 37signals (the Basecamp/HEY team). It deploys Docker containers to any server via SSH with zero-downtime rollouts. Kamal is not a hosting platform. It's a tool that manages the deployment lifecycle. It builds Docker images, pushes to a registry, pulls on the server, and swaps traffic through its built-in proxy. Since the Kamal 2.0 release in September 2024, that proxy is kamal-proxy, a small reverse proxy 37signals wrote from scratch to replace the Traefik dependency older versions relied on.

You write a deploy.yml configuration file defining your servers, Docker image, environment variables, and accessory services (databases, Redis). Then kamal deploy handles everything. The old container keeps serving traffic while the new one starts. Once it passes health checks, kamal-proxy routes traffic to the new container. Zero downtime, every deploy.

Kamal works with any server. AWS EC2, Hetzner, DigitalOcean, bare metal. It doesn't care about the underlying provider. That flexibility is a core design principle.

Key Differences

They solve different problems. AWS provides infrastructure. Kamal deploys to infrastructure. You can use Kamal to deploy to an AWS EC2 instance. The real comparison is between AWS's managed deployment services (Elastic Beanstalk, App Runner, ECS) and Kamal deploying to a simple server.

Deployment complexity. AWS deployment services involve many moving parts. Elastic Beanstalk needs load balancers, auto-scaling groups, VPCs, security groups, and IAM roles. ECS needs task definitions, services, clusters, and container registries. Kamal needs a server with SSH access, a Docker registry, and a deploy.yml file. Kamal is more conceptually straightforward even though it requires Docker knowledge.

Cost. Running an app on AWS App Runner bills $0.064 per vCPU-hour plus $0.007 per GB-hour while active, plus $1 per app per month for automatic deployments and $0.005 per build minute. A small always-on App Runner service plus a managed database lands in the $20-80/month range depending on size. Kamal is free. Your only cost is the server. A DigitalOcean basic droplet ($4/month) or a Lightsail instance ($5/month for the entry public-IPv4 bundle, or $3.50/month IPv6-only) running Kamal can host multiple applications for one flat price, which is dramatically cheaper than equivalent managed setups.

Control and transparency. AWS managed services abstract infrastructure behind APIs and dashboards. You don't always see what's happening underneath. Kamal is fully transparent. Your deploy.yml defines exactly what runs where. kamal deploy shows you every step: building, pushing, pulling, health checking, switching. Nothing is hidden.

Zero-downtime deployments. Kamal handles zero-downtime deploys through kamal-proxy out of the box, with no configuration needed beyond the basic deploy.yml. kamal-proxy also handles automatic SSL through Let's Encrypt and lets you host multiple web apps on one server, which the older Traefik setup made harder. Getting zero-downtime deployments on AWS requires properly configured load balancers, health checks, and deployment strategies. It works, but there are more pieces to set up.

Managed services. AWS's killer feature is managed services. RDS for databases with backups and failover. ElastiCache for Redis. SQS for queues. CloudWatch for monitoring. Kamal deploys databases as Docker containers on your server with none of those managed features. If you need production-grade managed databases, AWS provides them. Kamal expects you to handle database operations yourself.

Multi-server deployment. Kamal deploys to multiple servers from one configuration file. Add IPs to your deploy.yml and Kamal rolls out to all of them. AWS achieves this through auto-scaling groups and load balancers. Both work, but Kamal's approach is simpler to understand and configure.

By the Numbers (2026)

The headline facts, each checked on 2026-05-28 against the source linked at the bottom of this post.

Kamal

  • Latest version: 2.11.0, released 2026-03-18 (RubyGems).
  • License and language: MIT, written in Ruby, installed with gem install kamal.
  • Adoption: 14,247 GitHub stars and 715 forks on basecamp/kamal; roughly 18.9 million total RubyGems downloads.
  • Proxy: kamal-proxy, built by 37signals to replace Traefik starting in the Kamal 2.0 release (September 2024). Traefik can still be wired in as an accessory if you want its advanced middleware.

AWS, the deployment-relevant prices (US East, on-demand)

  • EC2 t3.micro (2 vCPU, 1 GiB): $0.0104/hour, about $7.59/month if left running.
  • Lightsail: $3.50/month IPv6-only (512MB, 2 vCPU, 20GB SSD, 1TB transfer) or $5/month for the cheapest public-IPv4 bundle; the cheapest managed-database bundle is $15/month.
  • App Runner: $0.064 per vCPU-hour and $0.007 per GB-hour while active, $1 per app per month for automatic deployments, and $0.005 per build minute.
  • RDS for PostgreSQL db.t4g.micro: roughly $0.016 to $0.03 per hour, about $21.90/month on-demand depending on configuration.
  • Free tier: new accounts (created on or after July 15, 2025) get up to $200 in credits over six months instead of the old 12-month always-free EC2 hours.

Real Cost at Solo-Dev Scale

Take a realistic solo-dev workload. One small web app plus a Postgres database, running 24/7 for a month, with a few deploys per week. Here is what each path actually costs using the rates above.

AWS managed path (App Runner plus RDS). A single App Runner instance at 1 vCPU and 2GB, billed as active 24/7, is roughly 730 hours times ($0.064 + 2 times $0.007), which is about $56.94, plus $1 for the automatic-deployment fee, so call it about $58 for compute. Add a db.t4g.micro RDS Postgres at about $21.90/month. That is roughly $80/month, before data transfer, storage, and backups. (Assumptions: us-east-1 on-demand, instance never scales to zero, no reserved or savings-plan discount.)

Kamal path (one VPS, self-hosted Postgres in a container). A DigitalOcean basic droplet at $4/month, or a Lightsail $5/month bundle, runs both the app and a Postgres container side by side. Kamal itself is free. That is $4 to $5/month, and the same box can host several more apps before you need a bigger plan. (Assumptions: you run and back up Postgres yourself, single server, no managed-database SLA.)

Kamal plus a managed database (the middle path). If you want managed-database reliability without AWS, run the app on a $4 to $5 VPS with Kamal and point it at a DigitalOcean managed PostgreSQL cluster from $15.15/month. That is roughly $20/month all in, with automated daily backups and point-in-time recovery handled for you.

So the practical spread for this workload is about $80/month fully managed on AWS versus $4 to $20/month with Kamal, depending on whether you self-host or rent a managed database. The gap is the price of AWS handling database operations for you.

When to Choose AWS

  • You need managed databases, caching, queuing, or other managed services
  • Enterprise compliance requirements mandate AWS (HIPAA, SOC2)
  • Your project needs auto-scaling for unpredictable traffic spikes
  • The 12-month free tier is useful for your development timeline
  • Specialized services like ML, IoT, or analytics are part of your stack

When to Choose Kamal

  • You want a simple, transparent deployment pipeline
  • Docker is already part of your development workflow
  • Zero-downtime deploys without load balancer configuration are appealing
  • You want to deploy to cheap servers (Hetzner, DigitalOcean) without AWS costs
  • Portability across hosting providers matters to you

The Verdict

For solo developers building web applications, Kamal on a cheap VPS is the more practical setup. The deployment workflow is clean, costs are minimal, and zero-downtime rollouts work out of the box. You avoid the complexity tax of AWS while getting production-grade deployments.

AWS makes sense when you specifically need its managed services or when scaling requirements exceed what a single server (or a few servers) can handle. If your project needs RDS, ElastiCache, and SQS, those managed services are genuinely valuable and hard to replicate.

My recommendation: use Kamal on a Hetzner or DigitalOcean VPS for your applications. If you need a managed database, add DigitalOcean's managed PostgreSQL (from $15.15/month) rather than moving everything to AWS. This hybrid approach gives you Kamal's deployment simplicity with managed database reliability, at a fraction of AWS costs.

Sources

All figures checked on 2026-05-28.

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.