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.
Quick Comparison
| Feature | AWS | Kamal |
|---|---|---|
| Type | Full enterprise cloud platform | CLI deployment tool |
| Pricing | Pay-as-you-go / Complex | Free (open source) + server costs |
| Learning Curve | Hard | Moderate-Hard |
| Best For | Any workload at any scale | Zero-downtime Docker deploys to any server |
| 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's free tier gives you 12 months of limited usage (750 hours t2.micro EC2, 5GB S3, limited RDS). After that, 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: building Docker images, pushing to a registry, pulling on the server, and swapping traffic through Traefik.
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 healthy, Traefik 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 Elastic Beanstalk or App Runner typically costs $20-80/month depending on instance size and database. Kamal is free. Your only cost is the server. A $4 Hetzner VPS running Kamal hosts multiple applications for one flat price. Even deploying Kamal to a Lightsail instance ($5/month) is dramatically cheaper than equivalent Beanstalk 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 Traefik out of the box, with no configuration needed beyond the basic deploy.yml. 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.
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 ($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.
Related Articles
Angular vs HTMX for Solo Developers
Comparing Angular and HTMX for solo developers. Features, pricing, pros and cons, and which one to pick for your next project.
Angular vs Qwik for Solo Developers
Comparing Angular and Qwik for solo developers. Features, pricing, pros and cons, and which one to pick for your next project.
Angular vs SolidJS for Solo Developers
Comparing Angular and SolidJS for solo developers. Features, pricing, pros and cons, and which one to pick for your next project.