The best Encore alternatives in 2026
Encore makes a bet almost nobody else makes: that infrastructure should be declared in your application code rather than alongside it. You define a database or a pub/sub topic as a typed object in a Go or TypeScript file, and the platform reads your source to work out what to provision. It also gives you a service catalog, request tracing and a local development environment that runs the whole graph, all derived from the same source.
That is a real idea, well executed. It also means leaving is a different kind of problem than leaving a normal platform, and that is what makes this comparison worth writing. I'm Ajay, I build PandaStack, so read this as a vendor's roundup; PandaStack sits at the far end of the spectrum from Encore and I will be direct about what that costs you.
What leaving actually costs
With most platforms, migration means rewriting deployment configuration. With Encore, the abstraction is in your imports, so a migration touches application code. Before comparing anything, list which of these you would need to replace:
- Infrastructure provisioning. Encore reads your code and creates the database, the topic, the cron job. Elsewhere that becomes Terraform, Pulumi, or a platform's own configuration.
- The local development environment. `encore run` starts your services and their dependencies together. Replacing that is usually Docker Compose and an afternoon.
- Distributed tracing and the service catalog. You get these free from the framework's knowledge of your call graph. Elsewhere it is OpenTelemetry, wired by hand.
- The API contract and client generation. Encore generates typed clients from your handler signatures. Elsewhere that is an OpenAPI spec and a generator.
That list is the actual comparison. Anything that replaces only the hosting replaces roughly a quarter of what you had.
1. SST
The closest philosophical relative for a TypeScript team. SST also blurs the line between application and infrastructure, but it does it in an explicit configuration file that compiles to Pulumi, rather than by inferring from your handlers. You keep infrastructure-as-code's auditability while getting a lot of Encore's ergonomics.
It is AWS-shaped in its assumptions and its mental model, and it is TypeScript only. A Go team using Encore has no path here.
2. Nitric
The most direct competitor to Encore's actual thesis. You declare resources in code — a bucket, a queue, an API — against a provider-agnostic SDK, and Nitric generates the deployment for AWS, GCP or Azure. Multi-language, open source, and the abstraction is explicitly designed to be portable across clouds.
Smaller community than Encore, and the portability promise means the abstractions sit at the level all three clouds agree on, which is lower than a cloud-specific tool can offer.
3. Terraform or Pulumi plus a PaaS
The boring, durable answer: infrastructure in a dedicated tool, application code that knows nothing about it, deployment handled by a platform. More moving parts than Encore and considerably more typing.
What you buy is that every piece is replaceable independently and every piece has a large hiring pool. For a team that expects to be maintaining this in five years, that is worth a lot of upfront verbosity. Pulumi in particular narrows the ergonomic gap by letting you write infrastructure in the same language as the app.
4. Railway
If what you liked about Encore was the service graph rather than infrastructure-from-code, Railway gets closer than its reputation suggests. Multiple services and their databases live in one project with a visual graph and shared environment variables, and it deploys from a repo without configuration.
There is no code-level abstraction: a database is something you create in the dashboard and reference by environment variable. Provisioning is manual in exchange for being obvious.
5. Google Cloud Run with Terraform
The most conventional enterprise-shaped answer, and a reasonable landing spot for a Go team specifically. Cloud Run runs containers with request-driven autoscaling to zero, Cloud SQL and Pub/Sub cover the dependencies Encore was provisioning, and Terraform ties it together.
You are writing meaningfully more configuration than Encore required and inheriting GCP's IAM surface. In exchange you get a platform nobody will ask you to justify.
6. Self-hosting Encore
Worth stating because it is regularly missed: Encore's framework and its build tooling are open source, and you can build a container from an Encore application and run it anywhere. What you give up is Encore Cloud — the provisioning, the dashboards, the tracing UI, the preview environments.
If your objection is to the managed platform rather than the framework, this is by far the cheapest move on this list. Keep the code, drop the control plane, run the container on whatever you already use.
7. Plain framework code on a general platform
This is PandaStack's position, and it is the opposite end of the spectrum from Encore rather than a competitor to it. There is no infrastructure-from-code here at all. You write an ordinary Go or Node service — net/http, chi, Fastify, whatever — and the platform's job stops at running it well.
// No framework-owned resource declarations. Ordinary Go, ordinary env vars.
func main() {
db, err := pgxpool.New(context.Background(), os.Getenv("DATABASE_URL"))
if err != nil {
log.Fatal(err)
}
defer db.Close()
mux := http.NewServeMux()
mux.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
// PORT is exported before the start command; bind 0.0.0.0 for health checks.
log.Fatal(http.ListenAndServe(":"+os.Getenv("PORT"), mux))
}A Go repo with a go.mod is detected without a Dockerfile: modules download, the binary builds, it runs. Managed Postgres is a separate resource you create and reference by connection string, exactly as on Railway.
The honest accounting: you get none of Encore's four bullets above. No provisioning from source, no generated service catalog, no automatic distributed tracing, no generated clients. You bring OpenTelemetry and an OpenAPI spec yourself. What you get instead is that nothing about your application code knows what platform it is on, and apps that scale to zero on a single rate card of $0.054 per active vCPU-hour plus $0.0162 per working-set GiB-hour — which is the argument when your service count is large and most of them are idle most of the time.
Deciding
- If the framework is fine and the platform is the problem, self-host Encore. It is the cheapest option by a wide margin and it is under-considered.
- If infrastructure-from-code is the part you want to keep, evaluate Nitric, or SST if you are TypeScript-only.
- If you concluded the abstraction was the mistake, go to explicit infrastructure-as-code and a platform that just runs processes — and budget honestly for tracing and client generation, which you were getting free.
- Either way, do the migration one service at a time behind the same public API. Encore applications are usually several services, and moving all of them in one change is how a reasonable migration becomes a quarter-long one.
Frequently asked questions
Is Encore open source or is it a lock-in risk?
Both parts of that are true in different places. The framework and build tooling are open source, and you can produce a container image from an Encore application and run it anywhere, so you are not trapped. What is proprietary is Encore Cloud — the provisioning, tracing UI, dashboards and preview environments. The lock-in is real but it lives in your imports rather than your deployment config, which means leaving the framework touches application code while leaving just the platform does not.
What is infrastructure-from-code and how is it different from infrastructure-as-code?
Infrastructure-as-code declares resources in a dedicated language or file — Terraform, Pulumi, CloudFormation — that is separate from your application. Infrastructure-from-code derives them by analysing the application itself: you construct a database object in your handler and the platform infers that a database must exist. The first is more verbose and fully explicit; the second is far less typing and couples your application source to a platform that understands it.
What do I lose in observability if I move off Encore?
The main loss is automatic distributed tracing across services, which Encore can provide because the framework already knows your call graph. Replacing it means instrumenting with OpenTelemetry yourself and sending traces to a collector. That is well-trodden work rather than research, but it is real work, and it is the item people most often forget to budget for when comparing platforms on price.
Can I migrate off Encore incrementally?
Yes, and you should. An Encore application is usually several services behind a shared API surface, so you can move one service at a time — reimplement it as a plain HTTP service, deploy it beside the others, and cut traffic over while the rest keep running unchanged. Attempting the whole graph in one change is the most reliable way to turn a two-week migration into a quarter.
Keep reading
- The best Go hosting platforms — Where to land if the Go half of your Encore app is the part you are moving.
- Add OpenTelemetry tracing to a deployed app — Rebuilding the observability Encore was giving you for free.
- Generate a typed API client from an OpenAPI spec — The replacement for Encore's generated clients.
- PandaStack Apps — Git-driven deploys for ordinary Go and Node services, with scale-to-zero.
49ms p50 cold start. Fork, snapshot, and scale to zero.