How EventCatalog embeds work in Backstage
The Backstage plugin is a frontend integration. EventCatalog remains the source of the documentation and visualizations; the plugin selects a view and embeds it inside a Backstage entity page.
Resource mapping
Backstage and EventCatalog use different resource models. The plugin connects them with three annotations:
eventcatalog.dev/ididentifies the EventCatalog resource.eventcatalog.dev/versionselects its version.eventcatalog.dev/collectionidentifies the resource collection, such asservices,domains, orevents.
Keeping this mapping on the Backstage entity makes the relationship portable with the entity definition. Props can override the annotations when a tab or card deliberately shows a different resource.
URL construction and embed mode
The plugin combines the configured eventcatalog.URL, the selected component, and the resolved resource mapping. It adds embed=true to the EventCatalog URL.
Embed mode removes EventCatalog navigation that would duplicate or cover Backstage navigation. Interactive content such as graph controls, filters, schema tabs, and flow exploration remains available inside the iframe.
Specialized views use their native EventCatalog routes:
- Architecture Graph:
/visualiser/graph, withfocusanddepthquery parameters - System Context Map overview:
/visualiser/system-context-map - one system's context:
/visualiser/systems/{id}/{version}/context - flow:
/visualiser/flows/{id}/{version} - schema explorer:
/schemas/explorer
Theme selection
Passing theme="light" or theme="dark" adds a theme request to the embed URL. EventCatalog applies it before the embedded page paints, avoiding a flash of the wrong theme. The override is local to the embed and does not replace the visitor's saved EventCatalog preference.
Without an explicit prop, the embedded page follows that saved preference. The Backstage theme is not automatically mirrored because the two applications have separate theme state.
Height and layout
The plugin's wrapper and iframe both use the full width and height available from their parent. This makes the same component suitable for a full route or a grid card, but the parent still determines how much space exists.
height: 100% only resolves when the ancestor layout has a defined height. Entity tabs typically provide that layout. Overview grid items should set an explicit height so graphs, tables, and schema panels can use the complete card area.
Browser access
The iframe loads EventCatalog directly in the user's browser. The configured EventCatalog URL must therefore be reachable by users of Backstage and permit embedding in your deployment environment. Backstage does not copy EventCatalog content into its own backend.