- Features
- Pricing

How do you translate a Heroku Procfile to Upsun service definitions?
Translating a Heroku Procfile to Upsun involves mapping "process types" (web, worker, cron) to separate application blocks within a .upsun/config.yaml file. While Heroku uses a Procfile and buildpacks to define runtime commands, Upsun uses a declarative YAML structure to define runtimes, build hooks, and explicit service relationships (like PostgreSQL or Redis). This shift moves the application from process-based scaling (Dynos) to resource-based containerization, providing more granular control over CPU and RAM.
TL;DR
|
Key takeaway: Migrating from a Procfile requires re-declaring process types as isolated application containers for better resource efficiency.
In a Heroku Procfile, you might see a simple line like web: bundle exec rails server. On Upsun, this logic is moved into the .upsun/config.yaml. This isn't just a syntax change. It’s an architectural upgrade.
nodejs:22 or python:3.12).web process from your Procfile becomes the web.commands.start instruction in Upsun.| Heroku Procfile Element | Upsun .upsun/config.yaml Equivalent |
web: [command] | web.commands.start: [command] |
worker: [command] | applications.[name].commands.start: [command] |
| Buildpacks | type: [runtime] + hooks.build |
| Add-ons | services: [service_name] |
Key takeaway: Moving away from "black box" buildpacks to explicit build hooks ensures faster, reproducible deployments.
One of the biggest friction points in migration is the "magic" of buildpacks. Upsun replaces this with transparent Build and Deploy Hooks.
.upsun/config.yaml defines a hooks.build section where you explicitly run npm install or composer install.Key takeaway: Explicit service relationships in .upsun/config.yaml prevent the "silent failure" common in legacy PaaS migrations.
In Heroku, database connections are often managed via invisible environment variables. Upsun requires you to define a relationship between your application and its services (e.g., a PostgreSQL or Redis service).
Does Upsun support multiple Procfile-style processes in one project?
Yes. You can define multiple applications within a single project directory. Each one can have its own resource profile (CPU/RAM) and its own scaling rules, allowing you to mirror a complex Heroku setup with much higher efficiency.
How do I handle environment variables during migration?
Variables that were previously in the Heroku "Config Vars" UI can be managed via the Upsun CLI or console. However, service credentials (like database URLs) should never be hardcoded; they are injected automatically via the relationships defined in your .upsun/config.yaml.
Can I still use Buildpacks on Upsun?
While Upsun prefers explicit runtime definitions for performance and clarity, the platform is designed to handle standard containerization logic. Most teams find that moving to explicit hooks in .upsun/config.yaml significantly reduces build times and "magic" errors.