Miget maps cleanly onto the Heroku mental model: you deploy apps, attach managed addons, and set config as environment variables. The biggest win is that Heroku apps already bind to the $PORT env var - and Miget speaks the same language, so most apps deploy without a single code change. Unlike Heroku’s per-dyno, per-addon billing, Miget gives you a fixed-capacity plan. You deploy unlimited apps, databases, workers, and preview environments inside the compute you buy.

What maps to Miget

HerokuMiget
DynoApp
Add-onManaged addon / service
Config varEnvironment variable
ProcfileProcfile
Review AppPR preview
Heroku PostgresMiget managed PostgreSQL
Heroku RedisMiget Valkey
Heroku spreads workloads across many separately billed dynos and addons. On Miget, everything runs inside your plan’s fixed capacity, scheduled fairly across your apps. See the fair scheduler for how compute is shared.

The $PORT compatibility win

Heroku assigns each dyno a port at runtime and expects your app to bind to $PORT. Miget sets an immutable PORT=5000 and routes all public traffic to port 5000. Because your Heroku app already reads $PORT, it will read Miget’s PORT the same way and bind to 5000 automatically. No code change is required.
If your app hardcodes a port instead of reading $PORT, change it to bind to the PORT env var (which will be 5000 on Miget). See ports for details.

Migration steps

1

Prepare your app and Procfile

Miget’s buildpacks support a Procfile, so your existing Heroku web process works as-is:
web: <your start command>
Miget auto-detects the language from marker files (package.json, requirements.txt, Gemfile, and so on), similar to Heroku buildpacks. If you’d rather control the build yourself, commit a Dockerfile and Miget will build from it instead.Confirm your app binds to the $PORT / PORT env var rather than a hardcoded port.
2

Create the app and push

Create your app on Miget, then deploy by pushing your Git repository:
git remote add miget https://git.<region>.miget.io/<your-miget-name>/<app-name>
git push miget
Prefer to deploy from GitHub? Connect the repo via the GitHub integration for automatic deploys and PR previews - the equivalent of Heroku Review Apps. See Git push to builder for the full push-based flow.
3

Move the database

Attach a managed PostgreSQL addon. Miget injects a DATABASE_URL (a postgres://... connection string) into your app automatically - just like Heroku Postgres.Dump from Heroku and restore into Miget:
# Dump from Heroku
pg_dump "$HEROKU_DATABASE_URL" -Fc -f dump.pgdump

# Restore into Miget
pg_restore --no-owner --dbn=/"$MIGET_DATABASE_URL" dump.pgdump
For plain SQL dumps you can pipe into psql "$MIGET_DATABASE_URL" instead.
The dump-and-restore flow above requires a maintenance window. For a large or production database, follow Migrate from Heroku PostgreSQL to Miget with zero downtime, which uses Bucardo trigger-based replication to migrate without taking your app offline.
Using Heroku Redis? Attach a Valkey addon - Miget injects a REDIS_URL your app can use in place of the Heroku-provided one.
4

Set your environment variables

Recreate your Heroku config vars as Miget environment variables. DATABASE_URL and REDIS_URL are injected automatically by their addons, so you only need to set your own app-specific values.See using secrets for how to add and manage environment variables.
5

Cut over DNS

Add your custom domain and let Miget provision TLS automatically. You’ll add a TXT record to verify ownership, then point a CNAME or A record at Miget - certificates are issued via Let’s Encrypt.Follow custom domains to complete the cutover.
Miget accepts an app.json only as optional configuration, and its schema is not guaranteed to be a full Heroku compatibility layer. Don’t rely on app.json to reproduce your Heroku setup - use a Procfile (web: <command>) to define your process, and set config through environment variables.

Next steps

Git push to builder

Deploy by pushing your repository to Miget.

GitHub integration

Auto-deploy and PR previews, like Heroku Review Apps.

Managed PostgreSQL

Attach a database with an injected DATABASE_URL.

Valkey

A Redis-compatible store with an injected REDIS_URL.

Environment variables

Move your Heroku config vars over as secrets.

Custom domains

Add a domain with automatic Let’s Encrypt TLS.