2026-03-18 | PreviewProof Team
Heroku Review Apps Alternatives in 2026
For most of the last decade, if you were a Rails or Node team and wanted preview environments, you used Heroku Review Apps. The app.json was simple, the pipeline was easy to reason about, reviewers got a URL.
Heroku Review Apps still works in 2026. The reason teams keep asking about alternatives is that the product hasn’t meaningfully evolved since the Salesforce acquisition — pricing pressure is up, the dashboard looks the same as it did in 2019, and the buildpack ecosystem feels stuck. The rest of the market caught up and then kept moving.
This is an honest look at where teams are migrating, what each alternative does well, and which kind of team should pick which option.
What Heroku Review Apps did well
Before declaring anything a successor, it’s worth being clear about what’s being replaced. Heroku Review Apps got three things right that competitors are still working through:
- Zero-thought configuration. An
app.jsonwith apostdeployscript and a couple of env var declarations was enough. No Dockerfile required. - Buildpack ergonomics. For mainstream Rails, Node, and Python apps, the buildpack autodetected your stack and produced a working slug.
- Tight Pipelines coupling. Review apps lived inside the Pipeline that already ran staging and production. Promoting a build was a single-concept operation.
The reasons to leave are about trajectory, pricing, and architectural fit — not about review apps being broken.
Render
Render is the closest direct successor. The mental model is nearly identical: connect a repo, define services in a render.yaml, and get preview environments per pull request.
services: - type: web name: api runtime: ruby buildCommand: bundle install && bundle exec rake assets:precompile startCommand: bundle exec rails server previewsEnabled: true envVars: - key: DATABASE_URL fromDatabase: name: app-db property: connectionStringdatabases: - name: app-db plan: starter previewPlan: freeRender’s preview environments spin up every service plus a fresh database per pull request. For a Rails or Node monolith with Postgres, this is the lowest-friction migration path. Pricing is more predictable than Heroku’s dyno scaling and the dashboard is materially better.
Where Render falls short: anything beyond a small number of services starts to feel manual, and the preview-database-per-PR model uses Render’s managed Postgres, which limits teams that want to seed from a custom image or use extensions Render doesn’t ship.
Pick Render if: you’re a small-to-medium Rails or Node team with one to four services, you want the closest thing to Heroku in shape, and you don’t have hard compliance requirements.
Railway
Railway is the Heroku-shaped successor that prioritizes developer ergonomics and a strong UI. The product feels like Heroku circa 2017, but rebuilt with modern primitives — environments, services, and a clean concept of templates.
Railway’s PR Environments feature gives each pull request its own copy of your services and databases. Configuration lives partly in the dashboard, partly in railway.json, and the Nixpacks build system handles most stacks without a Dockerfile. The pricing model is usage-based, which works well for low-traffic preview environments.
Where Railway falls short: the platform is opinionated about how it wants to manage your services. If you’re already deeply invested in your CI building Docker images, Railway’s preference for building inside its own platform creates friction. Compliance is also lighter than enterprise teams typically need.
Pick Railway if: you’re a startup or small team that values clean UI and ergonomics, you don’t have an existing strong opinion about Docker image builds in CI, and your stack maps cleanly onto Nixpacks defaults.
Fly.io
Fly is a different shape from Heroku entirely — closer to “Docker images in regions” than to a PaaS. Preview environments are not a native first-class product. You build them yourself with flyctl deploy --config fly.preview.toml --app pr-${PR_NUMBER} patterns in CI.
app = "myapp-pr-PLACEHOLDER"primary_region = "iad"
[build] image = "ghcr.io/myorg/myapp:PLACEHOLDER_SHA"
[env] RAILS_ENV = "preview"
[[services]] internal_port = 3000 protocol = "tcp" [[services.ports]] port = 443 handlers = ["tls", "http"]The strength is control. Fly handles the hard parts (global routing, machine lifecycle, persistent volumes) and stays out of the way otherwise. The weakness, as a Heroku replacement, is that you’re now operating a small platform yourself. Multi-service previews with a database, queue worker, and frontend are a real assembly job.
Pick Fly if: you have infrastructure-comfortable engineers, you want full control over how previews are built and torn down, and you’re willing to treat the preview-environment workflow as something your team owns rather than buys.
PreviewProof
PreviewProof is positioned differently from the other three. Render, Railway, and Fly are alternatives for “where the preview environment runs.” PreviewProof is an alternative for “what the preview environment is for.”
The product runs container-based preview environments per pull request, but the core opinion is that previews are a verification surface — somewhere stakeholders sign off on changes with structured checklists, where the reviewer’s session is captured as evidence, and where regulated teams can produce an audit trail of who reviewed what. Previews are the substrate; verified delivery is the product.
That makes PreviewProof the right answer for a specific kind of team:
- Teams shipping multi-service applications where Heroku’s single-app shape never quite fit.
- Teams with compliance or contractor obligations — federal contractors, regulated industries, and anyone who needs to prove that a change was reviewed before it shipped (see verified software delivery for the underlying argument).
- Teams whose review process involves people other than engineers — PMs, designers, external stakeholders — and who want sign-off tracked rather than assumed.
- Teams that already build Docker images in CI and want a preview platform that consumes those images directly rather than rebuilding them.
It is not the right answer for a small Rails team that just wants the simplest possible Heroku replacement. For that team, Render is a cleaner migration. We’d rather tell you that than pretend otherwise.
How to think about migrating
Does your application fit a single PaaS shape? If yes — one web process, one worker, one database — Render or Railway are the lowest-friction options. If no, you’re already off the Heroku-shaped map and should evaluate Fly or PreviewProof on architectural grounds.
Who is the preview for? If reviewers are only engineers, frontend-first preview tools may be enough (see frontend previews vs. full-stack preview environments). If reviewers include non-engineers, or sign-off is a formal step, the preview platform needs to be a verification surface.
Do you need an audit trail? If yes — for client deliverables, regulated work, or internal governance — bake that into the decision now. Render, Railway, and Fly do not produce delivery evidence. PreviewProof does.
If your situation is “small Rails app, no compliance pressure, easiest port,” go to Render. If your situation is “multi-service architecture, stakeholders sign off, audit trail matters,” try PreviewProof. There isn’t one successor to Heroku Review Apps — there are several, and the right one depends on which part of Heroku you actually relied on.