A Node.js developer deploys a side project to Heroku. It costs nothing -- at first. Six months later, the free tier is gone, the dyno sleeps after 30 minutes of inactivity, and she is paying $7/month for a hobby app and $9/month for a managed Postgres that she could run herself for free. She has three projects. That is $48/month for apps that get twelve visitors a day.
This is not a hypothetical. It is the single most common migration story we hear from developers switching to sh0.
What Heroku Gets Right
Heroku invented the modern PaaS workflow. git push heroku main and your app is live. That simplicity was revolutionary in 2009 and is still the benchmark in 2026.
We are not here to pretend Heroku is bad. It is not. But its economics changed. The free tier vanished in November 2022. Postgres add-ons start at $9/month for 10,000 rows. SSL requires a paid plan. And every deployment runs on shared infrastructure you do not control.
For a funded startup burning through its seed round, none of this matters. For an indie developer, a freelancer deploying client projects, or a small team running five microservices -- it adds up fast.
The Alternative: Own Your Infrastructure
sh0 is a single binary you install on any Linux server. Your $5/month VPS. Your company's bare metal. A Raspberry Pi in your closet. You run curl -fsSL https://get.sh0.dev | bash, and you have a deployment platform that does everything Heroku does -- minus the monthly per-app billing.
Here is what deploying a Node.js app looks like:
Step 1: Install sh0 (60 seconds)
bashcurl -fsSL https://get.sh0.dev | bash
sh0 serveOpen http://your-server:9000 in a browser. Create your admin account. Done.
Step 2: Deploy from Git (30 seconds)
In the dashboard, click "New App", paste your GitHub or GitLab URL, and click Deploy. sh0's build engine reads your package.json, detects whether you are running Express, Fastify, Next.js, Nuxt, SvelteKit, Astro, or plain Node, and generates a production Dockerfile automatically.
No Procfile. No nixpacks.toml. No heroku.yml. Push your code, sh0 figures out the rest.
Or from the CLI:
bashsh0 app create my-api --repo https://github.com/you/my-api
sh0 app deploy my-apiStep 3: Automatic SSL (0 seconds)
Caddy handles TLS certificates via Let's Encrypt. Point your domain's DNS to the server, add the domain in the dashboard, and HTTPS is live within minutes. No configuration file. No certificate renewal cron jobs. No paying $7/month for SNI endpoints.
Feature Comparison: sh0 vs Heroku for Node.js
| Feature | sh0 | Heroku |
|---|---|---|
| Deploy a Node.js app | git push or dashboard | git push heroku main |
| Auto-detect Express/Next.js/Nuxt/SvelteKit | Yes (19 stacks) | Yes (buildpacks) |
| Free SSL certificates | Yes (Let's Encrypt, automatic) | Paid plans only |
| PostgreSQL | One-click, unlimited rows | $9/month, 10K row limit on Mini |
| Redis | One-click template | $15/month add-on |
| Custom domains | Unlimited, free | Paid plans only |
| Environment variables | Dashboard + CLI | Dashboard + CLI |
| Deployment logs | Full Docker build output + container logs | Build logs only |
| Rollback | Blue-green deploys, instant | heroku releases:rollback |
| Price for 5 apps | $0 (self-hosted) + your VPS | $35/month minimum |
| Data ownership | 100% yours | Heroku's servers |
What sh0 Adds That Heroku Does Not Have
Built-in AI Assistant
sh0 ships with an AI assistant that understands your deployed applications. It reads your logs, your environment, your stack. It can diagnose why a container crashed, suggest configuration fixes, and generate deployment commands. It is not a chatbot bolted onto a dashboard -- it is built into the platform and has access to your actual infrastructure state.
MCP Server
sh0 exposes a Model Context Protocol server. Connect Claude, Cursor, or any MCP-compatible AI tool directly to your deployment platform. Ask "what apps are running?" or "deploy my staging branch" from your IDE.
184 One-Click Templates
WordPress, Ghost, PostgreSQL, Redis, MongoDB, Grafana, n8n, Metabase, Ollama, Minio, Keycloak -- 184 services you can deploy in one click. Heroku's marketplace requires add-ons with separate billing.
Mobile Fleet Management
sh0 Manager is a mobile app for monitoring your servers on the go. No competitor offers this.
Code Health Analysis
34 static analysis rules check your deployed applications for security issues, performance problems, and misconfigurations. This runs automatically on every deploy.
The Economics
A Hetzner CX22 costs EUR 3.99/month. It gives you 2 vCPUs, 4 GB RAM, 40 GB SSD. You can comfortably run 10-15 Node.js applications on it.
On Heroku, 10 Basic dynos cost $70/month. Add a Mini Postgres ($9) and a Mini Redis ($15), and you are at $94/month. For one year, that is $1,128.
On sh0, that same year costs EUR 47.88 for the VPS. The sh0 binary is free to start.
| Scenario | Heroku (annual) | sh0 + Hetzner CX22 (annual) |
|---|---|---|
| 1 app + Postgres | $192 | EUR 47.88 |
| 5 apps + Postgres + Redis | $564 | EUR 47.88 |
| 10 apps + Postgres + Redis | $1,128 | EUR 47.88 |
The savings are not marginal. They are an order of magnitude.
When Heroku Is Still the Right Choice
Heroku is better when:
- You want zero infrastructure responsibility. sh0 runs on your server. You are responsible for OS updates, backups, and monitoring. sh0 provides backup automation and health checks, but the server is yours.
- You need Heroku-specific add-ons. Some third-party services only integrate via the Heroku marketplace.
- Your company mandates a managed platform. Compliance requirements sometimes dictate using a vendor with SOC 2 certification and SLAs.
If none of these apply -- if you are a developer who wants to deploy code and not pay per-app rent -- sh0 is the better tool.
Migrating from Heroku
Step 1: Export your environment variables
bashheroku config -a my-app --shell > .envStep 2: Deploy on sh0
bashsh0 app create my-app --repo https://github.com/you/my-app
sh0 app env set my-app --file .env
sh0 app deploy my-appStep 3: Switch your DNS
Point your domain to your sh0 server. Add it in the dashboard. SSL provisions automatically.
Total migration time for a typical Node.js app: under 10 minutes.
The Bottom Line
Heroku changed how developers think about deployment. But in 2026, self-hosting is not the painful experience it was in 2010. Tools like sh0 give you the same git push workflow, the same automatic builds, the same SSL -- on infrastructure you own, at a fraction of the cost.
Your code. Your server. Your data. No monthly per-app tax.
bashcurl -fsSL https://get.sh0.dev | bashsh0 is built by ZeroSuite, Inc. The deployment platform is a single Rust binary -- no Node.js runtime, no Docker Compose stack, no configuration files to maintain. Install it and deploy.