Migrate from Heroku to osModa: Dynos to Dedicated Servers
Heroku pioneered platform-as-a-service, but its dyno-based model is increasingly expensive for always-on AI agents. Eco dynos sleep after 30 minutes of inactivity. Performance dynos cost $250-500/mo. Add-ons add up fast. osModa replaces all of that with a dedicated NixOS server starting at $14.99/mo -- full root SSH, no sleeping, no add-on fees, and built-in self-healing infrastructure.
TL;DR
- • Heroku dynos sleep, charge per-unit, and lock you into add-on pricing
- • osModa gives you a dedicated NixOS server with flat-rate pricing and no sleeping
- • Migration: export config vars, spawn osModa server, SSH in, deploy your app
- • Procfile processes become directly-run commands monitored by osmoda-watch
- • Add-ons are replaced by NixOS packages you install and control directly
Step-by-Step Migration from Heroku
Migrating from Heroku to osModa is a manual process that typically takes 30-60 minutes for a standard application. Since osModa gives you a full Linux server with root access, the migration is conceptually simple: export your Heroku configuration, set up your osModa server, and deploy your application code.
Step 1: Export Your Heroku Configuration
Start by capturing everything your Heroku app depends on. Run heroku config -a your-app --shell to export all environment variables. Save the output to a file. Review your Procfile to understand which processes need to run. If you use Heroku Postgres, create a backup with heroku pg:backups:capture -a your-app and download it. Note any add-ons you use and what services they provide.
Step 2: Spawn an osModa Server
Go to the osModa dashboard or use the API to spawn a server. Choose a plan based on your resource needs -- Solo ($14.99/mo, 2 CPU, 4 GB RAM) is sufficient for most single-agent workloads. Select a region close to your users or data sources: Frankfurt, Helsinki, Virginia, or Oregon. The server provisions in 5-10 minutes. You receive an IP address, SSH credentials, and a WebSocket endpoint.
Step 3: SSH In and Set Up Your Environment
SSH into your new server with ssh root@your-server-ip. Install your language runtime and dependencies using NixOS packages. For a Python application, this means enabling python3 and pip in your NixOS configuration. For Node.js, enable nodejs. Unlike Heroku buildpacks, you have full control over the exact versions and system-level dependencies.
Step 4: Deploy Your Application Code
Clone your repository onto the server with git, or use rsync to copy your project files. Set your environment variables from the export you created in Step 1. If you use a database, either install PostgreSQL directly on the server via NixOS or connect to a managed database service. Run your application just as you would locally -- there is no Procfile abstraction, no buildpack, and no dyno container between you and your process.
Step 5: Configure Process Monitoring
On Heroku, the platform restarts crashed dynos automatically. On osModa, osmoda-watch provides this automatically for registered processes. Your application is monitored by the Rust watchdog daemon, which detects crashes and restarts processes in approximately 6 seconds. Unlike Heroku, which can stop a crash-looping dyno, osmoda-watch uses intelligent exponential backoff to handle rapid failures without abandoning your process.
Step 6: Verify and Cut Over
Test your application on the osModa server while your Heroku app continues running. Verify all endpoints, environment variables, and database connections. Once confirmed, update your DNS records or client configurations to point to the new server. After verifying production traffic is flowing correctly on osModa, you can decommission your Heroku app and cancel the associated add-ons.
Before and After: Heroku vs osModa
| Aspect | Heroku (Before) | osModa (After) |
|---|---|---|
| Infrastructure | Shared dyno containers | Dedicated NixOS server |
| Pricing | $7/dyno + add-ons ($50-250+/mo total) | $14.99/mo flat (everything included) |
| Sleep/Cold Starts | Eco dynos sleep after 30 min | Yes -- always on, no sleeping |
| Root SSH Access | No -- heroku run bash only | Yes -- full root on dedicated server |
| Process Config | Procfile + buildpacks | Direct commands + NixOS config |
| Database | Heroku Postgres add-on ($5-50+/mo) | Install directly or use managed service |
| Self-Healing | Basic -- dyno restart only | Yes -- Rust watchdog + NixOS rollback |
| Audit Trail | No -- add-on required | Yes -- SHA-256 tamper-proof ledger |
| Deployment | git push heroku main | SSH + git clone/rsync/CI pipeline |
Key Differences: Heroku vs osModa
Dynos vs Dedicated Servers
Heroku dynos are shared containers that run on multi-tenant infrastructure. You cannot control the host OS, install system packages outside the buildpack scope, or tune kernel parameters. Eco dynos sleep after 30 minutes of inactivity, causing cold starts that can take 10-30 seconds. Performance dynos ($250-500/mo) avoid sleeping but are still shared infrastructure with no root access.
osModa gives you a dedicated server running NixOS. You have full root SSH access, can install any system package, configure the kernel, and run multiple processes without per-process billing. The server runs 24/7 with no sleeping and no cold starts.
Add-Ons vs Native Services
Heroku's add-on marketplace provides convenient one-click service provisioning, but at a significant markup. Heroku Postgres costs $5/mo for Hobby (10K rows, no backups) and $50/mo for Standard-0 with backups. Heroku Redis starts at $15/mo. Monitoring, logging, and error tracking add-ons each add $10-50+/mo. A production setup easily reaches $100-200/mo in add-ons alone.
On osModa, you install services directly. PostgreSQL and Redis are NixOS packages you enable in your system configuration. There is no marketplace, no markup, and no per-service billing. Monitoring and crash recovery are handled by osmoda-watch. Audit logging is built into the platform. You trade the convenience of one-click provisioning for full control and dramatically lower costs.
What You Gain
Moving from Heroku to osModa gives you root access to a real server, flat-rate pricing that includes everything, self-healing with intelligent crash-loop detection, SHA-256 tamper-proof audit logging, NixOS atomic rollbacks via SafeSwitch, and osmoda-mesh for encrypted multi-server networking. You also eliminate dyno sleeping, add-on fees, and the per-dyno billing model entirely.
What Requires Manual Work
The trade-off is that osModa does not have Heroku's opinionated deployment pipeline. There is no git push deployment out of the box (though you can set up git hooks or CI/CD to achieve the same result). You need to manage your own database backups if running PostgreSQL on the server. And you need to handle SSL certificates and domain configuration manually or through the osModa dashboard. For teams accustomed to Heroku's managed experience, there is a learning curve around NixOS configuration, though the platform daemons handle most operational concerns automatically.
Explore More Migration Guides
- Migrate from Railway -- usage-based PaaS to flat-rate dedicated hosting
- Migrate from Fly.io -- Firecracker VMs to dedicated NixOS servers
- Migrate from Render -- shared PaaS instances to dedicated servers
- Migrate from Docker Compose -- containers to NixOS declarative config
- All migration guides -- complete list of platform migration guides
Frequently Asked Questions
How do I export my Heroku app configuration?
Run 'heroku config -a your-app --shell > .env' to export all config vars as a .env file. For your Procfile, note the process types and commands -- you will recreate these as systemd services or direct process commands on osModa. If you use Heroku Postgres, export your data with 'heroku pg:backups:capture' followed by 'heroku pg:backups:download'.
What replaces Heroku add-ons on osModa?
Since osModa gives you a full NixOS server with root access, you install services directly. PostgreSQL, Redis, and other databases are NixOS packages you enable in your configuration. Logging is handled by the built-in SHA-256 audit ledger. Process monitoring is handled by osmoda-watch. For third-party services like email or search, you connect to them directly via API -- no add-on marketplace middleman taking a markup.
What replaces Heroku's Procfile on osModa?
On osModa, you run processes directly via SSH or configure them as systemd services in NixOS. A Procfile line like 'web: python app.py' becomes running 'python app.py' in a tmux session, a systemd service, or a process managed by osmoda-watch. The watchdog daemon automatically monitors and restarts your processes if they crash.
Will my Heroku buildpack work on osModa?
Heroku buildpacks are Heroku-specific and do not transfer directly. However, since osModa runs NixOS, you install your language runtime and dependencies using Nix packages. For Python, you install python3 and pip. For Node.js, you install nodejs and npm. For Ruby, you install ruby and bundler. The installation is typically one command, and unlike buildpacks, you have full control over versions and configuration.
Does osModa support Heroku-style git push deployment?
osModa does not have a built-in git push deployment pipeline like Heroku. Instead, you have more flexible options: clone your repository directly on the server via SSH, set up a git hook that deploys on push, use rsync to sync files, or configure a CI/CD pipeline (GitHub Actions, GitLab CI) that deploys via SSH. The trade-off is more setup flexibility in exchange for Heroku's opinionated workflow.
How does pricing compare between Heroku and osModa?
Heroku's Eco plan starts at $5/mo for 1000 dyno hours with sleep after 30 minutes of inactivity. The Basic plan is $7/mo per dyno with no sleeping. Performance dynos cost $250-500/mo. Add-ons like Heroku Postgres start at $5/mo for Hobby and $50/mo for Standard. A production Heroku setup with a web dyno, worker dyno, and database easily exceeds $100/mo. osModa's Solo plan is $14.99/mo for a dedicated 2-CPU, 4GB RAM server with no add-on fees, no sleeping, and no per-dyno billing.
Leave Dyno Limits Behind
Get a dedicated NixOS server with full root SSH, self-healing, and flat-rate pricing. No dynos, no add-on fees, no sleeping. From $14.99/mo.
Explore More
Last updated: March 2026