Skip to content

Releases: backstage/backstage

v1.53.0-next.2

v1.53.0-next.2 Pre-release
Pre-release

Choose a tag to compare

@backstage-service backstage-service released this 07 Jul 16:57
2939765

v1.53.0-next.1

v1.53.0-next.1 Pre-release
Pre-release

Choose a tag to compare

@backstage-service backstage-service released this 30 Jun 17:37
eb510d9

v1.52.1

Choose a tag to compare

@backstage-service backstage-service released this 26 Jun 15:03
6d77c6f

This patch release fixes the following issues:

  • Internal refactor of the specialized app sign-in runtime to initialize it once instead of reassigning it.
  • Fix scheduler tasks stuck with NULL next_run_start_at when switching from manual trigger to cadence
  • Fix broken configuration schema in @backstage/plugin-kubernetes-react.

v1.53.0-next.0

v1.53.0-next.0 Pre-release
Pre-release

Choose a tag to compare

@backstage-service backstage-service released this 23 Jun 19:45
fc94158

v1.52.0

Choose a tag to compare

@backstage-service backstage-service released this 16 Jun 18:16
7df25cb

These are the release notes for the v1.52.0 release of Backstage.

A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done.

Highlights

BREAKING: Default discovery API changed to FrontendHostDiscovery

The default discovery API implementation in @backstage/plugin-app has been changed to FrontendHostDiscovery, which supports the discovery.endpoints configuration for per-plugin endpoint overrides. This means the frontend will now honor discovery.endpoints configuration, including string target values. If you currently use internal-only targets there, update them to the object form and move the internal URL to target.internal, omitting target.external (or setting it to a browser-reachable URL) to avoid routing the frontend to internal URLs.

BREAKING: Removed immediate mode stitching

The catalog.stitchingStrategy.mode: 'immediate' setting, which was deprecated in v1.51.0, has been removed. All stitching now uses the deferred mode, which processes entities asynchronously via a worker queue. If your configuration still includes catalog.stitchingStrategy.mode: 'immediate', it will be ignored with a deprecation warning. The pollingInterval and stitchTimeout settings continue to work as before.

BREAKING: Backstage UI updates

This release brings several notable additions and changes to Backstage UI:

Async collections: Both Combobox and Select now support async collections, incremental loading, client and server search, and rich or custom item rendering. Loading placeholders and stale result indicators are exposed via public CSS classes for theme customization. The Combobox and Select popovers now correctly load additional pages as users scroll, rather than loading every page immediately.

Semantic color tokens: A new set of semantic color token families has been introduced -- Accent, Announcement, Warning, Negative, and Positive -- each providing a consistent set of background, foreground, and border tokens for both light and dark themes. A gray scale and updated foreground tokens are also included. The previous tokens remain in place for backward compatibility but are now deprecated. A new @backstage/no-deprecated-bui-tokens ESLint rule warns when deprecated tokens are referenced in JavaScript or TypeScript files.

New components: A NumberField component has been added for numeric input with support for min, max, step, and keyboard increment/decrement. Contributed by @jabrks in #34264.

Breaking changes:

  • ComboboxProps is now a union type. Replace interfaces that extend ComboboxProps with type intersections:
    - interface MyComboboxProps extends ComboboxProps {
    -   trackingId: string;
    - }
    + type MyComboboxProps = ComboboxProps & {
    +   trackingId: string;
    + };
  • SelectProps is now a union type and the popover list content is no longer a direct child of .bui-SelectPopover. Apply the same intersection migration as ComboboxProps, and update CSS selectors that target list content as a direct child of .bui-SelectPopover.

Check the BUI Changelog for more details.

New experimental package: @backstage/connections

A new @backstage/connections package has been added as an experimental feature. Do not use this package unless you are experimenting with this new system. A Connection is a piece of configuration that stores an external host and the credentials required to authenticate with it. The goal of Connections to eventually replace the integrations concept, and to support a much wider range of systems. More information is available in BEP-0014.

Contributed by @neoreddog in #34546 and #34592

Catalog totalItems control and split count queries

The /entities/by-query endpoint now accepts a totalItems parameter ('include' or 'exclude', default 'include') that controls whether the response's totalItems count is computed. Pass 'exclude' to skip the count entirely when the caller does not need it -- useful for cursor-paginated UIs that only display the count cosmetically. The corresponding CatalogApi.queryEntities method in @backstage/catalog-client has been updated to accept the same option.

Internally, the entity list provider now fetches the entity list and the total count as two separate parallel requests. The list query skips the expensive count computation, so the table populates immediately while the count arrives asynchronously. A new totalItemsLoading field on EntityListContextProps lets consumers distinguish a stale count from a fresh one. The catalog table now keeps stale rows visible during filter changes and page navigation instead of replacing the entire table body with a spinner.

Catalog performance improvements

Several additional performance improvements have been made to the catalog backend:

  • Split the queryEntities list and count into separate queries instead of a multi-reference CTE. When the CTE was referenced twice, PostgreSQL refused to inline it, forcing full materialization before applying LIMIT. The standalone count query also fixes a pre-existing bug where totalItems was inflated for entities with multi-valued sort fields.
  • Added extended multi-column statistics on (key, value) in the search table (PostgreSQL only), fixing severe row count estimation errors on compound filter queries that caused 10-40x slower catalog list views.
  • Added a migration that tunes PostgreSQL automatic vacuum thresholds on key catalog tables and fixes column statistics for entity_id in the search table.
  • Dropped the legacy search_entity_id_idx index which is now redundant and was causing the query planner to choose an inefficient scan pattern for catalog list queries with multiple sort fields.
  • Optimized entitiesBatch on PostgreSQL to use = ANY(array) instead of WHERE IN ($1, $2, ...), producing a single stable query plan regardless of batch size.
  • Fixed a race condition in the stitch queue where row locks were released before the subsequent timestamp bump, allowing multiple workers to claim the same rows.
  • Improved stitch queue semantics to prevent overlapping stitches for the same entity.

Actions secrets schema support

Actions can now declare a Zod secrets schema separate from the input schema in @backstage/backend-plugin-api, enabling surfaces to collect sensitive credentials independently from tool arguments. A new v2 invoke endpoint (/.backstage/actions/v2/actions/:id/invoke) accepts a wrapped body format with secrets validation, while the existing v1 endpoint remains unchanged. The mock actions registry in @backstage/backend-test-utils has been updated to support validating and forwarding secrets.

Scaffolder field extension template

A new scaffolder-field-extension-module template has been added to backstage-cli new, making it easier to scaffold custom Scaffolder form field extensions.

Entity list provider refresh function

The useEntityList hook from @backstage/plugin-catalog-react now exposes a refresh function, allowing consumers to programmatically trigger a refresh of the entity list data.

Contributed by @mtlewis in #34555

Catalog export button

A new CatalogExportButton component has been added to @backstage/plugin-catalog, providing CSV and JSON export support for the CatalogIndexPage.

Contributed by @the-serious-programmer in #31837

Lazy-loaded core components

The react-syntax-highlighter and @dagrejs/dagre dependencies are now lazy-loaded in @backstage/core-components, so they are no longer pulled in eagerly through the barrel export. This reduces the upfront module cost of importing from @backstage/core-components by roughly 10 MB.

Additional fixes and improvements

  • Fixed redundant API calls during entity list initialization. Filter components that register their initial state in quick succession no longer trigger multiple identical fetches, and frontend-only filter changes are applied synchronously without a network round-trip.
  • Fixed the Microsoft Graph provider's userGroupMember path by reverting the server-side accountEnabled eq true base filter that broke the group members endpoint. Disabled users are now filtered client-side in both paths.
  • Fixed a bug where setting user.select to an empty array in the Microsoft Graph provider would cause all users to be dropped from the catalog. Contributed by @mtlewis in #34505.
  • Fixed resolution of relative $ref paths in OpenAPI and AsyncAPI specs for cross-directory refs and nested refs at depth > 1. Contributed by @aramissennyeydd in #33954.
  • Fixed dynamic backend plugin loading to fall back to the main package export when an alpha package.json is present but does not provide a plugin entrypoint. Contributed by @gashcrumb in #34535.
  • Fixed the proxy-based sign-in page failing to read session tokens encoded with the URL-safe base64 alphabet. Contributed by [@officialasishkumar](https://github....
Read more

v1.51.2

Choose a tag to compare

@backstage-service backstage-service released this 10 Jun 12:20
995e1f6

This patch release fixes the following issues:

  • Fix empty userSelect causing all users to be dropped in msgraph module

v1.52.0-next.2

v1.52.0-next.2 Pre-release
Pre-release

Choose a tag to compare

@backstage-service backstage-service released this 09 Jun 17:50
f9567df

Oops 🧹

v1.52.0-next.1

v1.52.0-next.1 Pre-release
Pre-release

Choose a tag to compare

@backstage-service backstage-service released this 02 Jun 20:29
e5dfdf1

v1.51.1

Choose a tag to compare

@backstage-service backstage-service released this 29 May 15:44
d7c94cb

This patch release fixes the following issues:

  • Split queryEntities list and count queries to fix CTE materialization bottleneck
  • Fix 406 response for repository/archive retrieval in gitlabUrlReader
  • Restore runtime dependencies incorrectly demoted to devDependencies
  • Fix msgraph userGroupMember filter error by filtering disabled users client-side

v1.52.0-next.0

v1.52.0-next.0 Pre-release
Pre-release

Choose a tag to compare

@backstage-service backstage-service released this 26 May 17:32
65456c3