What Is Backstage?
Backstage is Spotifyβs open-source developer portal β now a CNCF Incubating project. It provides a single pane of glass for all your services, documentation, APIs, and infrastructure. 29K+ GitHub stars.
Core Features
1. Software Catalog
Every service, library, and resource in one searchable catalog:
# catalog-info.yaml (lives in each repo)
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: payment-service
description: Handles all payment processing
annotations:
github.com/project-slug: myorg/payment-service
backstage.io/techdocs-ref: dir:.
tags:
- python
- payments
spec:
type: service
lifecycle: production
owner: team-payments
system: checkout
dependsOn:
- resource:payments-db
- component:auth-service
providesApis:
- payments-api2. Software Templates (Scaffolding)
Create new services from templates:
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
name: python-fastapi-service
title: Python FastAPI Service
spec:
owner: platform-team
type: service
parameters:
- title: Service Info
properties:
name:
title: Service Name
type: string
owner:
title: Owner Team
type: string
ui:field: OwnerPicker
- title: Infrastructure
properties:
database:
title: Database
type: string
enum: [postgres, mysql, none]
steps:
- id: fetch-template
action: fetch:template
input:
url: ./skeleton
values:
name: ${{ parameters.name }}
- id: publish
action: publish:github
input:
repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
- id: register
action: catalog:register
input:
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}3. TechDocs (Documentation)
Auto-publish MkDocs from every repo:
# mkdocs.yml in your service repo
site_name: Payment Service
nav:
- Home: index.md
- Architecture: architecture.md
- API Reference: api.md
- Runbook: runbook.md
plugins:
- techdocs-core4. Kubernetes Plugin
See pod status, deployments, and logs for every service:
# catalog-info.yaml annotation
metadata:
annotations:
backstage.io/kubernetes-id: payment-service
backstage.io/kubernetes-namespace: paymentsKubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: backstage
namespace: backstage
spec:
replicas: 2
template:
spec:
containers:
- name: backstage
image: myregistry/backstage:latest
ports:
- containerPort: 7007
env:
- name: POSTGRES_HOST
value: "postgres.backstage.svc"
- name: POSTGRES_PORT
value: "5432"
- name: GITHUB_TOKEN
valueFrom:
secretKeyRef:
name: backstage-secrets
key: github-token
resources:
requests:
memory: "512Mi"
cpu: "500m"Plugin Ecosystem
| Category | Plugins |
|---|---|
| CI/CD | GitHub Actions, Jenkins, Argo CD, Tekton |
| Cloud | AWS, GCP, Azure |
| Monitoring | Prometheus, Grafana, Datadog, PagerDuty |
| Security | Snyk, SonarQube, Trivy |
| Infrastructure | Terraform, Crossplane, Kubernetes |
| Cost | Kubecost, CloudBilling |
Who Needs Backstage?
| Team Size | Need Backstage? |
|---|---|
| under 10 devs | β Overkill |
| 10-50 devs | β οΈ Maybe (if many services) |
| 50-200 devs | β Strongly recommended |
| 200+ devs | β Essential |
The value scales with complexity β more services, more teams, more value.