Why teams look past Backstage, and how developer portals differ from platforms that provision and run your backend
Spotify built Backstage to wrangle the thousands of microservices its engineers were shipping, open-sourced it in March 2020, and later handed it to the CNCF, where it became the default answer for organizations that decide they need an internal developer portal. The catch shows up a few weeks into adoption, when a team realizes Backstage is a framework for building a portal rather than a portal you can turn on. You clone the repo, stand up Postgres, wire in authentication, then install or write a plugin for every capability you want, from the service catalog to Kubernetes status to cost tracking. Most teams that reach for it are nowhere near Spotify's size, so they take on that build-and-operate cost without the scale that made it pay off, and they start looking at what else is out there.
The alternatives split into two groups that solve different problems, and choosing well starts with knowing which line a given tool sits on. One group is other developer portals that give you a catalog and self-service views over infrastructure you already run. The other group provisions and runs the backend itself, so the catalog falls out of the system that is already deploying your services.
Two categories of Backstage alternative: developer portals that sit on top of existing infrastructure, and platforms that provision and run the backend themselves.
Backstage is honest about what you are signing up for, which is a codebase to operate. A production instance takes weeks to get right, and once it is up someone owns the upgrades, which land often and break things, and vets each plugin for quality and security. The plugin ecosystem is large but uneven, with a well-maintained core alongside community plugins that are thinly documented and can break on the next release, so most teams end up writing their own React plugins on top of everything else they already do.
The deeper issue is category. Backstage shows you information about your services and can trigger self-service actions against pipelines you have already built, but it does not provision infrastructure, run deployments, or manage environments. Terraform, Kubernetes, your CI system, and the rest of the stack stay exactly where they were, with Backstage as a view over them. For a platform team at a large organization that already has that toolchain and wants one frontend for it, that is the point. For a team that has not built the toolchain yet, a portal adds a layer without touching the problem underneath.
These compete with Backstage directly. They give you a service catalog, scorecards, and self-service workflows, usually as SaaS rather than something you host, and like Backstage they sit on top of the infrastructure you already run.
Port takes Backstage's build-your-own idea and makes it configurable instead of code-driven. You define a data model of services, environments, resources, and teams, connect integrations, and build scorecards and self-service actions through a UI, which gets you to value faster than a from-scratch Backstage and drops the hosting and plugin upkeep. The self-service actions trigger automations in your existing pipelines, so Port still assumes you have wired up GitHub Actions, Terraform, or ArgoCD underneath, and SaaS pricing climbs as you scale.
Cortex is built around engineering standards and service maturity. You define scorecards for whether a service has runbooks, SLOs, approved languages, and passing security scans, and Cortex reports compliance across the org and drives adoption through initiative tracking. Its scope is narrower than Port or Backstage, so if you need broad self-service or deep catalog customization you can outgrow it, and pricing is enterprise-oriented.
OpsLevel centers on ownership and health. It maps service ownership and dependencies, runs maturity scorecards, and uses checks that integrate with CI to gate deployments on maturity criteria, which is a clean answer to the "who owns this?" problem in a growing org. Like the others in this group it organizes and measures services without managing infrastructure, so its value tracks how much visibility pain you have.
Roadie is managed Backstage. You get the same UI and plugin ecosystem without running the hosting, upgrades, or plugin compatibility yourself, which removes the loudest complaint about self-hosted Backstage. You stay inside the Backstage model, though, so the uneven plugins and the portal-not-platform boundary come along with it. Roadie fixes the operational problem, not the architectural one.
The tools above surface a stack you already operate. A smaller group goes further and runs the backend itself, which means the catalog, diagrams, and docs come from the system that is already deploying your services rather than from a separate product you point at them. These tools sit in a different category from portals, and comparing them like-for-like against Backstage tends to mislead.
Humanitec is a platform orchestrator. You describe what an application needs in a workload spec, and Humanitec resolves that against your environments and drives the underlying infrastructure through your existing tooling. It targets platform teams that want to codify golden paths and standardize how workloads get provisioned across many teams, and it expects you to bring and connect that infrastructure rather than replacing it.
Encore takes a code-first route. It is an open-source backend framework, TypeScript on a Rust runtime or Go, paired with a platform. You declare infrastructure as typed objects in your application code, a Postgres database, a Pub/Sub topic with delivery guarantees, a cron job, object storage, and services call each other with type-checked functions through ~encore/clients. Encore reads that code, provisions the resources into your own AWS or GCP account with defaults you adjust in the dashboard, deploys the services together, and gives you environments, preview environments per pull request, CI/CD, distributed tracing, a service catalog, and an architecture diagram. Because those views are generated from the code the platform is already running, there is no separate catalog to configure. Encore is not a portal in the Backstage sense and does not aim to be a frontend over an arbitrary existing stack. It runs the backend, and the catalog comes out of that.
| Tool | Category | You operate it? | Provisions & deploys | Catalog source |
|---|---|---|---|---|
| Backstage | Portal (OSS) | Yes, self-hosted | No | Manual + plugins |
| Roadie | Portal (managed) | No | No | Manual, Backstage model |
| Port | Portal (SaaS) | No | No | Integrations you connect |
| Cortex | Portal (SaaS) | No | No | Integrations, standards-focused |
| OpsLevel | Portal (SaaS) | No | No | Integrations, ownership-focused |
| Humanitec | Orchestrator | No | Yes, via your infra | Workload specs |
| Encore | Code-first platform | No | Yes, into your AWS/GCP | Generated from code |
Encore fits when the real question behind "which Backstage alternative?" is not "how do we get a better view of our stack?" but "how do we avoid assembling and operating the stack in the first place?" You write services in one codebase and declare their infrastructure inline, and Encore provisions it into your own AWS or GCP account, deploys the services together, and wires up tracing, environments, and preview environments without a separate pipeline to build. The service catalog and architecture diagram come from that same code, so you get the visibility a portal is meant to provide without standing one up alongside your deployment tooling.
// orders/orders.ts
import { api } from "encore.dev/api";
import { SQLDatabase } from "encore.dev/storage/sqldb";
import { users } from "~encore/clients";
// Declaring the database provisions it in your own cloud account.
const db = new SQLDatabase("orders", { migrations: "./migrations" });
export const create = api(
{ method: "POST", path: "/orders", expose: true },
async (p: CreateParams): Promise<Order> => {
// Cross-service calls are type-checked functions, not glue code.
const user = await users.get({ id: p.userId });
return placeOrder(db, user, p.quantity);
},
);
The honest limit is that this is a category away from Backstage. If you already run a mature toolchain and want a unified frontend over Terraform, Kubernetes, and Datadog, a portal like Backstage, Roadie, or Port is the right shape and Encore is not a drop-in for it. Encore also runs on AWS and GCP rather than Azure, and adopting it means writing your backend in its framework. Where it does fit, the catalog stops being a project of its own and becomes a byproduct of the platform already knowing your services, and it plugs into existing Terraform through a provider that exposes provisioned resources as data sources.
The closest alternatives are other developer portals: Port, Cortex, OpsLevel, and Roadie, which is managed Backstage. All give you a service catalog, scorecards, and self-service actions without the work of running the open-source project yourself. A separate group of tools goes further and provisions and deploys, including Humanitec on the orchestration side and Encore as a code-first backend platform. Which one fits depends on whether you need a better view of your infrastructure or a system that runs it.
Backstage is a framework for building a portal rather than a finished product, so a production instance takes weeks to stand up and someone has to own upgrades and vet plugins. Teams smaller than Spotify often find the running cost outweighs what they get back. The plugin ecosystem is large but uneven, and most teams end up writing React plugins to fill gaps, which is why many look for something more managed or more complete.
Backstage itself is free and open source under the Apache 2.0 license, and it is a CNCF project. The cost is in running it. You provision a database, configure authentication, host the instance, keep it upgraded across frequent releases, and maintain the plugins you install or write. That operational work is the reason paid options like Roadie, which hosts Backstage for you, and SaaS portals like Port and Cortex exist.
A developer portal shows information about your services and offers self-service actions on top of infrastructure you already run. Backstage, Port, Cortex, OpsLevel, and Roadie sit in this group. A developer platform provisions and runs the backend itself, so the catalog and diagrams come from the system that is already deploying your services. Humanitec orchestrates existing infrastructure through a workload spec, while code-first platforms have the application declare what it needs and provision from there.
Usually not at first. Backstage was built for an organization with hundreds of engineers and a dedicated platform team, and it assumes you already have a mature toolchain to surface. A small team rarely has someone to own the instance or a catalog large enough to justify one. Teams that want the visibility without the operational load tend to reach for a SaaS portal or a platform that produces a catalog as a side effect of deploying.
No. Backstage is a portal, so it reads information from your tools and presents it, and it can trigger self-service actions that call pipelines you have already built. It does not provision infrastructure, run deployments, or manage environments on its own. That still lives in Terraform, Kubernetes, your CI system, and the rest of your stack. Tools that both catalog and deploy, like Humanitec or Encore, sit in a different category.
Ship without waiting on Terraform
Encore lets developers and agents define application infrastructure directly in code, then automatically provisions it from local development to production in your AWS or GCP account.