Heroku Migration Guide: Move to HostStack
Modern Heroku alternative on EU infrastructure. Real free tier, predictable pricing, and dynos that don’t sleep at random. Migrate in under an hour.
Heroku invented the buildpack-based PaaS workflow, but the platform has stagnated — the free tier is gone, the EU region is opaque, and dyno pricing punishes you for any modest success. HostStack keeps the developer experience and brings it forward: real EU residency, native managed databases beyond Postgres, and pricing that scales with usage instead of dyno-counts.
Why switch from Heroku?
- Real free tier: 1 Nano web service + 1 Starter Postgres + 1 cron + 1 preview env, no time limits.
- EU data residency by default — European infrastructure with a signed DPA at signup. Heroku’s EU region routes through US-controlled infrastructure.
- Predictable per-resource pricing. No "professional dyno" tax — you pay for the CPU and RAM you use.
- Managed MySQL, MongoDB, and Redis natively, not via third-party Heroku add-ons.
- Buildpacks supported via the standard buildpack spec; or just ship a Dockerfile.
- Open hoststack.yaml config in your repo, not a Procfile + bin/release dance.
- CLI, SDK, and MCP server included — drive deploys from any tool, including Claude / Cursor.
Price comparison
| Resource | Heroku | HostStack | Comparison |
|---|---|---|---|
| Hobby web app | $5/mo Eco (or $7 Basic) | €1/mo Pico (or free Nano) | Up to 100% |
| Production web app | $25–50/mo Standard 1x/2x | €29/mo Pro Standard | ~20–40% |
| Managed Postgres (1GB) | $9/mo Mini | €4/mo Micro | ~55% |
| Managed Redis (25MB) | $3/mo Mini (via Heroku Data) | €4/mo Micro (256MB) | Comparable, 10× memory |
| Persistent disk (10GB) | Add-on only | €1/mo (10¢/GB·mo) | Native vs add-on |
Heroku prices checked May 2026 against their public pricing page. Heroku prices are USD as published; HostStack figures are the live EUR catalog. Verify at the source before deciding.
Code migration
Before (Heroku)
# Procfile
web: bun run start
release: bun run migrate
# app.json
{
"name": "my-api",
"stack": "heroku-22",
"buildpacks": [{ "url": "heroku/nodejs" }],
"addons": ["heroku-postgresql:mini"]
}After (HostStack)
# hoststack.yaml
services:
- name: my-api
type: web
runtime: bun
build: bun install
start: bun run start
release: bun run migrate
plan: pro-standard
databases:
- name: my-db
engine: postgres
plan: microFeature comparison
| Feature | Heroku | HostStack |
|---|---|---|
| Git push deploys | Yes | Yes |
| Buildpacks | Yes | Yes (standard CNB) + Dockerfile + native runtimes |
| Free tier | Removed in 2022 | Yes — Nano + Starter Postgres + cron + preview |
| Managed databases | Postgres, Redis, Kafka (paid) | Postgres, MySQL, MongoDB, Redis, S3 |
| Data residency | US/EU (opaque) | Helsinki, FI (EU only, named region) |
| Cron jobs | Add-on (Heroku Scheduler) | Native, 1 free per project |
| Preview environments | Review Apps (Pipeline-only) | Native, 1 free per project |
| EU VAT invoices | Limited | Yes (Stripe Tax) |
| DPA signed automatically | On request | At signup |
| CLI / SDK / MCP | CLI only | CLI + SDK + MCP |
Migration gotchas
No "ps:scale web=2 worker=3" — services are independent.
HostStack treats each Procfile process type as a separate service with its own scaling policy. Map your web/worker/clock processes to one service each.
Heroku DATABASE_URL is automatically injected.
HostStack does the same — when you bind a managed Postgres to a service, DATABASE_URL is injected at runtime. No code changes needed.
Add-ons → managed resources.
If you depend on a Heroku add-on (Bugsnag, Papertrail, etc), keep it. They’re vendor-neutral. Only the data-plane add-ons (Postgres, Redis, Kafka) move to HostStack’s managed resources.
Migration steps
- 1Sign up at hoststack.dev. Connect GitHub / GitLab / Bitbucket and import your Heroku-deployed repo.
- 2Translate your Procfile + app.json to hoststack.yaml. The web/worker/release process types map directly.
- 3Replicate Heroku config vars as HostStack environment variables (bulk-import supported via dashboard or CLI).
- 4Take a pg_dump from Heroku (heroku pg:backups:capture, then heroku pg:backups:download) and restore into your new HostStack Postgres.
- 5For Heroku Redis, run a one-shot dump/restore via redis-cli --rdb. For Heroku Scheduler, recreate each job under the Cron tab.
- 6Update DNS. Run in parallel for as long as you need, then point traffic at HostStack and decommission the Heroku app.
Frequently asked questions
Do you support Heroku buildpacks?
Yes — HostStack supports the Cloud Native Buildpacks spec, which is the modern successor to Heroku’s buildpack format. Most Heroku buildpacks work unchanged. You can also ship a plain Dockerfile or use one of our native runtimes (Bun, Node, Python, Go, Rust, Java).
What about Heroku Pipelines / Review Apps?
HostStack supports preview environments natively. Every pull request gets an ephemeral environment with isolated databases and a unique URL. There is no separate "pipeline" object — the project itself owns its environments.
Can I keep my Heroku-style "git push heroku main" workflow?
Yes. Once you connect your repo through GitHub / GitLab / Bitbucket, every push to your default branch (or any branch you configure) triggers a deploy. You can also push directly via the CLI: hoststack deploy.