Skip to main content
Version: v1.1.x

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.