Skip to main content
Version: Next

Entity views

OpenChoreo ships entity-page tabs for Domain, System, and Component entities. They mirror what the in-tree OpenChoreo portal shows, so a user navigating from the OpenChoreo UI into your Backstage instance sees the same tabs they're used to.

Tab catalog

Every tab below ships in one of three "tab packs". Install only the packs whose tabs you want; tabs whose pack is not installed simply won't appear in the layout (you control which <EntityLayout.Route> blocks to include in your EntityPage.tsx).

KindTabComponentPackageNotes
DomainOverview(built-in)@openchoreo/backstage-pluginCards: NamespaceProjectsCard, NamespaceResourcesCard.
DomainDefinitionResourceDefinitionTab@openchoreo/backstage-pluginRaw OpenChoreo resource manifest.
SystemOverview(built-in)@openchoreo/backstage-pluginCards: ProjectComponentsCard, DeploymentPipelineCard.
SystemDefinitionResourceDefinitionTab@openchoreo/backstage-plugin
SystemCellCellDiagram@openchoreo/backstage-pluginProject-level architecture view.
SystemDiagramEntityCatalogGraphCard@backstage/plugin-catalog-graphStandard catalog-graph card; no OpenChoreo package required.
SystemLogsObservabilityProjectRuntimeLogs@openchoreo/backstage-plugin-openchoreo-observabilityProject-scoped runtime logs.
SystemTracesObservabilityTraces@openchoreo/backstage-plugin-openchoreo-observability
SystemIncidentsObservabilityProjectIncidents@openchoreo/backstage-plugin-openchoreo-observability
SystemRCA ReportsObservabilityRCA@openchoreo/backstage-plugin-openchoreo-observabilityRoot-cause analysis agent reports.
SystemCost AnalysisObservabilityCostAnalysis@openchoreo/backstage-plugin-openchoreo-observabilityFinOps agent reports.
ComponentOverview(built-in)@openchoreo/backstage-pluginCards: DeploymentStatusCard, RuntimeHealthCard.
ComponentDefinitionResourceDefinitionTab@openchoreo/backstage-plugin
ComponentBuildWorkflows@openchoreo/backstage-plugin-openchoreo-ciWorkflow runs / triggers.
ComponentDeployEnvironments@openchoreo/backstage-pluginPer-environment runtime status.
ComponentLogsObservabilityRuntimeLogs@openchoreo/backstage-plugin-openchoreo-observabilityComponent-scoped runtime logs.
ComponentMetricsObservabilityMetrics@openchoreo/backstage-plugin-openchoreo-observability
ComponentAlertsObservabilityAlerts@openchoreo/backstage-plugin-openchoreo-observability

Each openchoreo-observability / openchoreo-ci frontend package has a matching backend package (-backend suffix) — install both. The frontend talks to the backend at a Backstage discovery endpoint; the backend talks to OpenChoreo at ${openchoreo.baseUrl} and /resolve-urls for observability.

Wiring example

A minimal example showing all tabs wired across all three entity kinds:

packages/app/src/components/catalog/EntityPage.tsx
import {
Environments,
CellDiagram,
ResourceDefinitionTab,
} from "@openchoreo/backstage-plugin";
import { Workflows } from "@openchoreo/backstage-plugin-openchoreo-ci";
import {
ObservabilityMetrics,
ObservabilityAlerts,
ObservabilityRuntimeLogs,
ObservabilityProjectRuntimeLogs,
ObservabilityTraces,
ObservabilityProjectIncidents,
ObservabilityRCA,
ObservabilityCostAnalysis,
} from "@openchoreo/backstage-plugin-openchoreo-observability";

See the full snippet in Core install → Add the entity-page routes, plus the opt-in sections for Observability and CI/Build.

What the views actually render

<Environments /> issues authenticated calls to ${openchoreo.baseUrl} via the Backstage backend proxy at /api/openchoreo/*. It reads the entity's annotations to determine which OpenChoreo project and component to query. Components synced by the catalog provider already have these annotations — for components imported from your own catalog-info.yaml, the tab renders an "OpenChoreo metadata not found" empty state.

<CellDiagram /> does the same against ${openchoreo.baseUrl}/projects/{name}/cell-diagram for the project the system corresponds to.

Observability tabs first call the observability backend's /resolve-urls endpoint to discover the per-environment Observer/RCA/FinOps URLs, then call those services directly with the IDP token attached (header x-openchoreo-direct: true to bypass any intermediate proxies).

The Build tab (Workflows) calls the CI backend, which proxies to OpenChoreo's workflow API.

Other extensions you can opt into

The @openchoreo/backstage-plugin package re-exports more components than the install guide wires. These are not part of the canonical install but are available for hosts that want richer overview cards or standalone pages:

ExportUse
RuntimeHealthCardSmaller component-level health card for the Overview tab.
DeploymentStatusCardPer-environment deployment status, for the Overview tab.
DeploymentPipelineCardDeployment pipeline summary on a Component overview.
EnvironmentStatusSummaryCardAggregated environment status on an Environment entity page.
AccessControlContentStandalone Access Control page (only useful when authz is enabled).
GitSecretsContentGit secret management page (only useful when secret-management is enabled).

These ship in the same @openchoreo/backstage-plugin package — no extra installation step.

Hiding tabs when annotations are missing

If you want the tabs to only appear on entities that the OpenChoreo provider synced, gate them on the openchoreo.io/component-name annotation:

import { isOpenChoreoComponent } from "@openchoreo/backstage-plugin-common";

<EntityLayout.Route
path="/environments"
title="Deploy"
if={isOpenChoreoComponent}
>
<Environments />
</EntityLayout.Route>;

(isOpenChoreoComponent checks for the standard OpenChoreo annotations; see @openchoreo/backstage-plugin-common for the full list.)

Frontend dependencies

The plugin uses MUI v4 (@material-ui/core@4.12.x), matching Backstage's current default. If your host app has migrated to MUI v5, you must keep both: do not remove @material-ui/core@4.x from your dependencies.

@material-ui/lab@4.0.0-alpha.61 is required for some sub-components — add it to your app workspace if you do not already depend on it.

The observability pack pulls recharts, @material-ui/pickers, and @date-io/date-fns transitively; the CI pack pulls @rjsf/* for dynamic workflow-parameter forms. Both are pinned by the packages themselves.