Platform Engineering
Build internal developer platforms with Backstage and Port for streamlined developer workflows.
Quick Start
# app-config.yaml — Backstage configuration
app:
title: Internal Developer Platform
baseUrl: https://developer.example.com
backend:
baseUrl: https://developer.example.com
listen:
port: 7007
organization:
name: My Company
integrations:
github:
- host: github.com
token: ${GITHUB_TOKEN}
techdocs:
builder: 'local'
generators:
techdocs: 'docker'
catalog:
rules:
- allow: [Component, API, Resource, System, Domain]
locations:
- type: url
target: https://github.com/org/service-catalog/blob/main/catalog-info.yaml
rules:
- allow: [Component, API]
# catalog-info.yaml — Service entity definition
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: payment-service
description: Payment processing service
annotations:
github.com/project-slug: org/payment-service
backstage.io/techdocs-ref: dir:.
jenkins.io/github-folder: org/payment-service
spec:
type: service
lifecycle: production
owner: platform-team
system: payment-platform
dependsOn:
- resource:default/postgres-main
- api:default/payment-api
providesApis:
- payment-api
consumedApis:
- fraud-detection-api
Key Concepts
Platform engineering treats the developer platform as a product. Backstage/Port provide service catalogs, software templates, tech docs, and scorecards. Golden paths reduce cognitive load on developers.
When to Use
- Organizations with 10+ microservices needing standardized management
- Teams spending too much time on infrastructure configuration
- Standardizing deployment workflows and environments
- Improving developer experience and reducing onboarding time
Step-by-Step
- Bootstrap a developer portal: scaffold Backstage (
npx @backstage/create-app) or create a Port blueprint with service metadata fields. - Model the golden path: define service templates for standard components (API, service, worker) using software templates / Port self-service actions.
- Register the catalog: commit
catalog-info.yamlfor each service with owner, system, dependencies, and API boundaries. - Wire CI/CD: connect the SCM integration, add repository-backend events so new repos auto-register.
- Publish docs: enable TechDocs from repo markdown with cookstyle/plugins to render living documentation.
- Add governance: create scorecards with maturity checks (SLO covered, dependency updates, cost tags) and report in the portal.
Examples
# catalog-info.yaml — full entity with relations
apiVersion: backstage.io/v1alpha1
kind: System
metadata:
name: payment-platform
description: Core payments system
spec:
owner: platform-team
---
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: payment-service
annotations:
github.com/project-slug: org/payment-service
backstage.io/techdocs-ref: dir:.
spec:
type: service
lifecycle: production
owner: platform-team
system: payment-platform
dependsOn:
- resource:default/postgres-main
providesApis: [payment-api]
consumedApis: [fraud-detection-api]
# Add the entity to catalog locations, then push to trigger sync
kubectl port-forward svc/backstage-backend 7007:7007
curl http://localhost:7007/api/catalog/entities?filter=kind=component
Validation
- Backstage/Port starts and renders the service catalog
- Software templates create repositories with correct scaffolding
- TechDocs renders documentation from code repositories
- Scorecards track service maturity metrics