Skip to content

Keel vs Heroku ​

Keel offers a Heroku-like workflow on AWS resources in your own account. Both support buildpacks, release commands, process types, config vars, and command-line deployments; the main differences are infrastructure ownership and pricing.

Keep your workflow ​

Build it your way. Bring a Dockerfile and Keel builds that. Don't have one and it uses Cloud Native Buildpacks instead, so asset precompilation and dependency detection work the way they do today.

The same one-command deploy. keel deploy builds the image, runs your migrations, and rolls out every service. keel rollback puts it back in seconds.

The same release step. Migrations run before anyone sees the new version. If they fail, the deploy stops and your current version keeps serving.

The same git-driven deploy. Every deploy is one specific commit, built from the repo you already push to.

Command for command ​

HerokuKeel
git push heroku mainkeel deploy
heroku pskeel ps
heroku ps:scale web=3keel scale web 3
Autoscaling — dashboard only, Performance tier and upkeel autoscale set web --min 2 --max 10 --cpu 60
heroku logs --tailkeel logs -f
heroku run rake db:migratekeel run -- rake db:migrate
heroku run bashkeel run -i -- bash
heroku config:set KEY=valuekeel config set KEY=value
heroku releaseskeel history
heroku rollbackkeel rollback
heroku domains:addkeel domains add
heroku addons:create heroku-postgresqlkeel services add database
Heroku Schedulertype: scheduled with a cron
heroku pg:psqlpsql "$(keel db url)"

Own the infrastructure ​

Your data stays in your account. Databases run in RDS inside your VPC, and logs remain in CloudWatch. Keel has no hosted control plane in the data path.

Existing AWS resources are close at hand. Bind resources such as S3 buckets or peered networks with scoped IAM and private networking where available.

AWS-native isolation. Keel supports private subnets, a security group per service, managed WAF rules, and least-privilege IAM task roles.

Independent resource sizing. Set CPU and memory for each service instead of choosing a predefined dyno size.

Pay AWS, not a platform ​

Keel does not add a usage margin or seat fee; you pay AWS directly.

  • AWS credits and enterprise agreements apply to the resources Keel creates.
  • Savings Plans can reduce eligible compute costs for steady workloads.

Price your own config before you build it:

bash
keel cost              # monthly baseline, from keel.yml alone — no credentials needed
keel cost --all        # every environment

keel cost budget --email [email protected] then sets an AWS Budget with a forecast alert. More on cost →

See every deploy ​

Keel checks the working tree, branch, remote commit, and GitHub connection before building. During deployment, the dashboard shows build status and ECS rollout progress. Afterwards, use keel history to review releases and keel rollback to restore an earlier task definition. More on the dashboard →

Moving across ​

HerokuKeel
Procfile process typesservices: with command
Release phaserelease:
Config varskeel config set — stored in SSM, injected into tasks
Postgres / Redis add-onskeel services add database / cache
Other add-onskeel resources add for S3, SQS, SNS
Custom domainskeel domains add — Route 53 + ACM
Your dataDump from Heroku Postgres, restore into RDS

Most apps leaving Heroku look like Deploying Rails: a web process, a Sidekiq worker, migrations in a release command.

Get started → · Back to comparisons

Keel — the missing platform layer for AWS.