Backstage 1.51: Catalog Speedups, New UI, and a Better Way to Sync Entra ID Users

Backstage 1.51.0 shipped in mid-May, and this is not a minor patch. Between PostgreSQL-level query optimizations, a new cursor-based Microsoft Graph ingestion module, a hardened OIDC configuration for MCP clients, and a fresh UI component library, the release touches nearly every layer of the internal developer platform stack. If your team runs Backstage as its IDP, there are changes here worth prioritizing.

Catalog Performance: Fixes at the Database Layer

Backstage’s catalog backend has historically struggled with large datasets. Version 1.51 introduces several PostgreSQL-level optimizations that change the performance profile significantly:

  • Index-aware entity listing: The listing endpoint now leverages the (key, value, entity_id) index in sorted order and short-circuits on LIMIT, cutting typical paginated list times from seconds to milliseconds.
  • Facets aggregation simplified: A unique constraint enables the backend to drop COUNT(DISTINCT entity_id) in favor of plain COUNT(*), reducing query overhead.
  • Inner join for filtered facets: When filters are applied, the facets endpoint now uses an inner join instead of WHERE entity_id IN (subquery). Measured improvements range from ~1.2x to 7x depending on dataset size.
  • Shared cached count query: The catalog_entities_count metric now shares a single cached query between Prometheus and OpenTelemetry gauges, eliminating redundant database hits.

The v1.51.1 patch (released May 29) goes further, splitting queryEntities list and count queries to fix a CTE materialization bottleneck that could stall large catalogs.

Microsoft Graph Incremental Ingestion

One of the most practical additions in 1.51 is the new @backstage/plugin-catalog-backend-module-msgraph-incremental. Unlike the existing provider, which loads the entire directory into memory during each sync, this module uses cursor-based pagination in bursts of 999 users or 100 groups. The cursor persists across restarts, so a pod failure resumes from the last completed page instead of starting over.

For organizations with tens of thousands of Entra ID users, this means the catalog process no longer consumes unbounded memory during ingestion and the blast radius of a sync failure shrinks from “the entire directory” to “a single page.”

UI Refresh: Backstage UI Components

The BUI (Backstage UI) library picks up several new components and layout improvements in this release:

  • Combobox: A text input paired with a filterable dropdown, supporting sectioned options, custom values, icons, and sizes.
  • DatePicker and DateRangePicker: Accessible date selection with calendar popovers built on React Aria.
  • Flex item props: grow, shrink, and basis are now available on Box, Card, Grid, and Flex.
  • Sticky Header: A new sticky prop keeps the header bar fixed during scroll.

Security and Breaking Changes

The release also hardens several defaults:

  • OIDC patterns: The default allowed patterns for CIMD and DCR in @backstage/plugin-auth-backend are now explicit for known MCP clients instead of the previous permissive ['*'] wildcard. Teams with custom MCP integrations will need to update their allowlists.
  • Disabled users filtered: Microsoft Graph providers now apply accountEnabled eq true by default. If you need to ingest disabled accounts, you must explicitly override the filter.

What This Means for Platform Teams

Backstage 1.51 is a maintenance release in name only. The catalog optimizations address a real operational pain point for teams running large catalogs, the incremental Graph provider removes a major memory bottleneck for enterprise identity sync, and the UI additions give plugin developers better primitives without reaching for external libraries.

If you are running Backstage 1.50 or earlier, the upgrade path to 1.51.1 should be straightforward for most configurations, though teams using custom OIDC patterns for MCP clients or relying on the deprecated NavItemBlueprint will need to review the breaking changes list before deploying.

Sources