When your organization hits 50+ microservices, nobody knows what exists. "Who owns the payment service?" becomes a Slack thread. "What API does the inventory service expose?" requires reading source code. Backstage's software catalog solves this.
What the Catalog Contains
Every entity in your organization, described in YAML:
# catalog-info.yaml (in your repo root)
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: order-api
description: Handles order creation, updates, and fulfillment
annotations:
github.com/project-slug: myorg/order-api
backstage.io/techdocs-ref: dir:.
tags:
- python
- grpc
links:
- url: https://grafana.internal/d/order-api
title: Grafana Dashboard
- url: https://runbooks.internal/order-api
title: Runbook
spec:
type: service
lifecycle: production
owner: team-commerce
system: ordering
providesApis:
- order-api
consumesApis:
- payment-api
- inventory-api
dependsOn:
- resource:orders-databaseOne file per service. Commit it alongside your code. Backstage indexes it.
Entity Types
| Kind | Purpose | Example |
|---|---|---|
| Component | A software component | order-api, frontend-app |
| API | An API definition | order-api (OpenAPI spec) |
| Resource | Infrastructure | orders-database, redis-cache |
| System | Group of components | ordering-system |
| Domain | Business domain | commerce, payments |
| Group | Team or org unit | team-commerce |
| User | Individual | jane.doe |
System Model
# Domain
apiVersion: backstage.io/v1alpha1
kind: Domain
metadata:
name: commerce
spec:
owner: group:commerce-division
---
# System
apiVersion: backstage.io/v1alpha1
kind: System
metadata:
name: ordering
spec:
owner: team-commerce
domain: commerce
---
# Components belong to the system
# (defined in each repo's catalog-info.yaml)This creates a hierarchy: Domain ā System ā Components. Navigate from business concepts to individual services.
Master this topic with hands-on labs
Go beyond reading ā build real projects in sandboxed environments with expert video guidance.
Browse Courses āAPI Definitions
apiVersion: backstage.io/v1alpha1
kind: API
metadata:
name: order-api
description: Order management API
spec:
type: openapi
lifecycle: production
owner: team-commerce
system: ordering
definition:
$text: ./openapi.yamlBackstage renders the OpenAPI spec as interactive documentation. Developers find APIs without asking on Slack.
Registration
Static Locations
# app-config.yaml
catalog:
locations:
- type: url
target: https://github.com/myorg/order-api/blob/main/catalog-info.yaml
- type: url
target: https://github.com/myorg/payment-api/blob/main/catalog-info.yamlGitHub Discovery
Auto-discover all repos with catalog-info.yaml:
catalog:
providers:
github:
myorg:
organization: myorg
catalogPath: /catalog-info.yaml
schedule:
frequency: { minutes: 30 }
timeout: { minutes: 3 }Every repo in your GitHub org that has a catalog-info.yaml is automatically registered.
What You Can Search
Once the catalog is populated:
- "Show me all services owned by team-commerce"
- "What APIs does the ordering system expose?"
- "Which services depend on the orders database?"
- "What services are in the payments domain?"
- "Show me all production services using Python"
Filter by owner, lifecycle, type, tag, or system. Every question answered in seconds instead of Slack threads.
Get weekly IT automation tips
Docker, Ansible, Terraform, MLOps ā curated insights delivered to your inbox. No spam.
Subscribe Free āTechDocs
Backstage renders Markdown documentation alongside catalog entries:
# In catalog-info.yaml
metadata:
annotations:
backstage.io/techdocs-ref: dir:.repo/
āāā catalog-info.yaml
āāā mkdocs.yml
āāā docs/
āāā index.md
āāā architecture.md
āāā runbook.mdDocumentation lives with code, rendered in the developer portal. No separate wiki to maintain.
Scorecards
Track engineering standards across all services:
# Check: Does every service have a Dockerfile?
# Check: Is the service using the latest base image?
# Check: Does it have a runbook?
# Check: Is test coverage above 80%?Scorecards surface which services meet standards and which need attention ā across your entire organization.
Getting Started
npx @backstage/create-app@latest
cd my-backstage-app
yarn devStart with 5-10 key services. Add catalog-info.yaml to each repo. Once teams see the value, adoption spreads organically.
---
Ready to go deeper? Build your developer platform with hands-on courses at CopyPasteLearn.
Ready to learn by doing?
Stop reading tutorials ā start building. Expert video courses with hands-on labs in real sandboxed environments.
Related Articles
Backstage Developer Portal Guide
Spotify Backstage is the most popular open-source developer portal. Learn how to set it up, create software templates, build a service catalog, and integrate.
Golden Paths in Platform Engineering
Golden paths give developers a paved road through infrastructure complexity. Learn how to design golden paths for your internal developer platform.
Internal Developer Platform Guide
Build an internal developer platform that developers actually use. Learn the five layers of an IDP, common mistakes, build vs buy decisions.
Bash Scripting for DevOps
Essential Bash scripting skills for DevOps engineers. Variables, conditionals, loops, functions, error handling, and practical automation scripts for daily.
Benthos Stream Processing Pipeline
Benthos (now Redpanda Connect) is a declarative stream processor for ETL, data transformation, and message routing. Learn how to build data pipelines.
Best Linux Distro for Servers
Comparing the top Linux distributions for server deployments in 2026: Debian, Ubuntu Server, RHEL, Rocky Linux, and Alpine. Which one fits your needs?
Explore topics
Browse more articles on the topics covered here.