docs/releases/v1.49.0-next.2-changelog.md
Upgrade Helper: https://backstage.github.io/upgrade-helper/?to=1.49.0-next.2
5fc35bb: Migrated EntityAboutCard, EntityLinksCard, EntityLabelsCard, GroupProfileCard, and UserProfileCard from MUI/InfoCard to use the new BUI card layout and BUI components where possible.
BREAKING: Removed variant prop from EntityAboutCard, EntityUserProfileCard, EntityGroupProfileCard, EntityLabelsCard, EntityLinksCard. Removed gridSizes prop from AboutField.
Migration:
Simply delete the obsolete variant and gridSizes props, e.g:
- <EntityAboutCard variant="gridItem" />
+ <EntityAboutCard />
- <AboutField label="Owner" gridSizes={{ xs: 12, sm: 6, lg: 4 }} />
+ <AboutField label="Owner" />
cancelTask method to the SchedulerService interface and implementation, allowing cancellation of currently running scheduled tasks. For global tasks, the database lock is released and a periodic liveness check aborts the running task function. For local tasks, the task's abort signal is triggered directly. A new POST /.backstage/scheduler/v1/tasks/:id/cancel endpoint is also available.onConflict option to location creation that can refresh an existing location instead of throwing a conflict error.auth command group for authenticating the CLI with Backstage instances using OAuth 2.0 with a pre-registered client metadata document. Commands include login, logout, list, show, print-token, and select for managing multiple authenticated instances.commander to cleye for argument parsing. Several camelCase CLI flags have been deprecated in favor of their kebab-case equivalents (e.g. --successCache → --success-cache). The old camelCase forms still work but will now log a deprecation warning. Please update any scripts or CI configurations to use the kebab-case versions.react-refresh to ^0.18.0.allowUnknownExtensionConfig option from createSpecializedApp. This flag had no effect and was a no-op, so no behavioral changes are expected.description field to plugin-level feature flags.ExtensionFactoryMiddleware type as a public export.allowUnknownExtensionConfig option from createApp. This flag had no effect and was a no-op, so no behavioral changes are expected.createPublicSignInApp function. Use createApp from @backstage/frontend-defaults with appModulePublicSignIn from @backstage/plugin-app/alpha instead.AnyExtensionDataRef type. Use ExtensionDataRef without type parameters instead.ExtensionAttachTo type to only support a single attachment target. The array form for attaching to multiple extension points has been removed. Also removed the deprecated ExtensionAttachToSpec type alias.NavItemBlueprint. Nav items are now automatically inferred from PageBlueprint extensions based on their title and icon params.withApis, use the withApis export from @backstage/core-compat-api instead.description field to plugin-level feature flags.JSX.Element type reference in the DialogApiDialog.update method signature.AnalyticsImplementationBlueprint and AnalyticsImplementationFactory in favor of the exports from @backstage/plugin-app-react.ExtensionFactoryMiddleware type, which has been moved to @backstage/frontend-app-api.defaultPath migration helper from PageBlueprint params.PageTab type to PageLayoutTab. The old PageTab name is now a deprecated type alias.useApiHolder to return an empty ApiHolder instead of throwing when used outside of an API context.onConflict option to location creation that can refresh an existing location instead of throwing a conflict error.refresh_state and final_entities into a dedicated stitch_queue table with entity_ref as the primary key. The stitch_ticket is used for optimistic concurrency control. When a stitch completes successfully and the ticket hasn't changed, the corresponding row is deleted from the queue. The migration handles existing data and is fully reversible.d14b6e0: BREAKING: Migrated MembersListCard, OwnershipCard, and CatalogGraphCard to use BUI card primitives via EntityInfoCard.
OwnershipCard: Removed variant and maxScrollHeight props. Card height and scrolling are now controlled by the parent container — the card fills its container and the body scrolls automatically when content overflows.CatalogGraphCard: Removed variant prop.MembersListCard: Translation keys subtitle, paginationLabel, aggregateMembersToggle.directMembers, aggregateMembersToggle.aggregatedMembers, and aggregateMembersToggle.ariaLabel have been removed. The title key now includes {{groupName}}. New keys added: cardLabel, noSearchResult, aggregateMembersToggle.label.OwnershipCard: Translation keys aggregateRelationsToggle.directRelations, aggregateRelationsToggle.aggregatedRelations, and aggregateRelationsToggle.ariaLabel have been removed. New key added: aggregateRelationsToggle.label.MemberComponentClassKey export, and root and cardContent from MembersListCardClassKey, card from OwnershipCardClassKey, and card from CatalogGraphCardClassKey.Migration:
- <EntityOwnershipCard variant="gridItem" />
+ <EntityOwnershipCard />
- <EntityCatalogGraphCard variant="gridItem" height={400} />
+ <EntityCatalogGraphCard height={400} />
useEntityRefLink hook that returns a function for generating entity page URLs from entity references.EntityInfoCard component to @backstage/plugin-catalog-react as a BUI-based card wrapper for entity page cards.d14b6e0: BREAKING: Migrated MembersListCard, OwnershipCard, and CatalogGraphCard to use BUI card primitives via EntityInfoCard.
OwnershipCard: Removed variant and maxScrollHeight props. Card height and scrolling are now controlled by the parent container — the card fills its container and the body scrolls automatically when content overflows.CatalogGraphCard: Removed variant prop.MembersListCard: Translation keys subtitle, paginationLabel, aggregateMembersToggle.directMembers, aggregateMembersToggle.aggregatedMembers, and aggregateMembersToggle.ariaLabel have been removed. The title key now includes {{groupName}}. New keys added: cardLabel, noSearchResult, aggregateMembersToggle.label.OwnershipCard: Translation keys aggregateRelationsToggle.directRelations, aggregateRelationsToggle.aggregatedRelations, and aggregateRelationsToggle.ariaLabel have been removed. New key added: aggregateRelationsToggle.label.MemberComponentClassKey export, and root and cardContent from MembersListCardClassKey, card from OwnershipCardClassKey, and card from CatalogGraphCardClassKey.Migration:
- <EntityOwnershipCard variant="gridItem" />
+ <EntityOwnershipCard />
- <EntityCatalogGraphCard variant="gridItem" height={400} />
+ <EntityCatalogGraphCard height={400} />
5fc35bb: Migrated EntityAboutCard, EntityLinksCard, EntityLabelsCard, GroupProfileCard, and UserProfileCard from MUI/InfoCard to use the new BUI card layout and BUI components where possible.
BREAKING: Removed variant prop from EntityAboutCard, EntityUserProfileCard, EntityGroupProfileCard, EntityLabelsCard, EntityLinksCard. Removed gridSizes prop from AboutField.
Migration:
Simply delete the obsolete variant and gridSizes props, e.g:
- <EntityAboutCard variant="gridItem" />
+ <EntityAboutCard />
- <AboutField label="Owner" gridSizes={{ xs: 12, sm: 6, lg: 4 }} />
+ <AboutField label="Owner" />
spec.secrets.schema, the API validates provided secrets against the schema and returns a 400 error if validation fails.secrets field to TemplateEntityV1beta3 for configuring secrets validation. The schema for validating secrets is defined under secrets.schema as a JSON Schema object.LogViewer component from @backstage/core-components now supports downloading logs if a callback is passed to onDownloadLogsflatted to 3.3.4.cancelTask method to the SchedulerService interface and implementation, allowing cancellation of currently running scheduled tasks. For global tasks, the database lock is released and a periodic liveness check aborts the running task function. For local tasks, the task's abort signal is triggered directly. A new POST /.backstage/scheduler/v1/tasks/:id/cancel endpoint is also available.express-rate-limit to ^8.0.0.cancelTask to MockSchedulerService and mock scheduler service factory.runCheck to ignore stdio of the spawned process, preventing unwanted output from leaking to the terminal.BUIProvider from @backstage/ui to the app shell provider tree, enabling BUI components to fire analytics events through the Backstage analytics system.description field to plugin-level feature flags.withApis, which is a Higher-Order Component for providing APIs as props to a component via useApiHolder.filters and title props are used together. The filter controls now use a dedicated CSS class (filterControls) instead of incorrectly reusing the root container class.LogViewer component from @backstage/core-components now supports downloading logs if a callback is passed to onDownloadLogsdescription field to plugin-level feature flags.useApiHolder to return an empty ApiHolder instead of throwing when used outside of an API context.d14b6e0: BREAKING: Migrated MembersListCard, OwnershipCard, and CatalogGraphCard to use BUI card primitives via EntityInfoCard.
OwnershipCard: Removed variant and maxScrollHeight props. Card height and scrolling are now controlled by the parent container — the card fills its container and the body scrolls automatically when content overflows.CatalogGraphCard: Removed variant prop.MembersListCard: Translation keys subtitle, paginationLabel, aggregateMembersToggle.directMembers, aggregateMembersToggle.aggregatedMembers, and aggregateMembersToggle.ariaLabel have been removed. The title key now includes {{groupName}}. New keys added: cardLabel, noSearchResult, aggregateMembersToggle.label.OwnershipCard: Translation keys aggregateRelationsToggle.directRelations, aggregateRelationsToggle.aggregatedRelations, and aggregateRelationsToggle.ariaLabel have been removed. New key added: aggregateRelationsToggle.label.MemberComponentClassKey export, and root and cardContent from MembersListCardClassKey, card from OwnershipCardClassKey, and card from CatalogGraphCardClassKey.Migration:
- <EntityOwnershipCard variant="gridItem" />
+ <EntityOwnershipCard />
- <EntityCatalogGraphCard variant="gridItem" height={400} />
+ <EntityCatalogGraphCard height={400} />
Updated dependencies
mockApis namespace. This includes the mock classes (MockAlertApi, MockAnalyticsApi, MockConfigApi, MockErrorApi, MockFetchApi, MockFeatureFlagsApi, MockPermissionApi, MockStorageApi, MockTranslationApi), their option types (MockErrorApiOptions, MockFeatureFlagsApiOptions), and the ErrorWithContext type. MockFetchApiOptions is kept as a non-deprecated export. Use the mockApis namespace instead, for example mockApis.alert() or mockApis.alert.mock().db92751: Added interactive support to the Card component. Pass onPress to make the entire card surface pressable, or href to make it navigate to a URL. A transparent overlay handles the interaction while nested buttons and links remain independently clickable.
12d8afe: Added analytics capabilities to the component library. Components with navigation behavior (Link, ButtonLink, Tab, MenuItem, Tag, Row) now fire analytics events on click when a BUIProvider is present.
New exports: BUIProvider, useAnalytics, getNodeText, and associated types (AnalyticsTracker, UseAnalyticsFn, BUIProviderProps, AnalyticsEventAttributes).
Components with analytics support now accept a noTrack prop to suppress event firing.
Affected components: Link, ButtonLink, Tab, MenuItem, Tag, Row
430d5ed: Fixed interactive cards so that CardBody can scroll when the card has a constrained height. Previously, the overlay element blocked scroll events.
Affected components: Card
ad7c883: Deprecated the HeaderPage component name in favor of Header. The old HeaderPage, HeaderPageProps, HeaderPageOwnProps, HeaderPageBreadcrumb, and HeaderPageDefinition exports are still available as deprecated aliases.
f42f4cc: Fixed Table column headers overflowing and wrapping when there is not enough space. Headers now truncate with ellipsis instead.
Affected components: Table
fbd5c5a: Fixed Table rows showing a pointer cursor when not interactive. Rows now only show cursor: pointer when they have an href, are selectable, or are pressable.
Affected components: Table
7960d54: Added support for native HTML div attributes on the Flex, Grid, and Grid.Item components.
Affected components: Flex, Grid, Grid.Item
12d8afe: Fixed MenuItem onAction prop ordering so user-provided onAction handlers are chained rather than silently overwritten.
bb66b86: The Select trigger now automatically adapts its background colour based on the parent background context.
Affected components: Select
934ac03: SearchField and TextField now automatically adapt their background color based on the parent bg context, stepping up one neutral level (e.g. neutral-1 → neutral-2) when placed on a neutral background. TextField also gains a focus ring using the --bui-ring token.
Affected components: SearchField, TextField
graphiql to 3.9.0 to address security vulnerability in markdown-it package.
Updated dependency @graphiql/react to 0.29.0 to match the version used by graphiql.
Moved dependency graphql-config to devDependencies as it is needed only for types.BUIProvider from @backstage/ui to the app root, enabling BUI components to fire analytics events through the Backstage analytics system.AnalyticsImplementationBlueprint and AnalyticsImplementationFactory, migrated from @backstage/frontend-plugin-api./.well-known/oauth-client/cli.json relative to the auth backend base URL for CLI authentication. Enabled when auth.experimentalClientIdMetadataDocuments.enabled is set to true.106d1b2: Added a defaultUserTransformer.useVerifiedEmails config option for the githubOrg provider. When set to true, the default user transformer prefers organization verified domain emails over the user's public GitHub email. Defaults to false, which uses only the public GitHub email.
This option has no effect when a custom user transformer is set via the githubOrgEntityProviderTransformsExtensionPoint.
catalog:
providers:
githubOrg:
production:
githubUrl: https://github.com
orgs:
- my-org
defaultUserTransformer:
useVerifiedEmails: true
Updated dependencies
106d1b2: Added a defaultUserTransformer.useVerifiedEmails config option for the githubOrg provider. When set to true, the default user transformer prefers organization verified domain emails over the user's public GitHub email. Defaults to false, which uses only the public GitHub email.
This option has no effect when a custom user transformer is set via the githubOrgEntityProviderTransformsExtensionPoint.
catalog:
providers:
githubOrg:
production:
githubUrl: https://github.com
orgs:
- my-org
defaultUserTransformer:
useVerifiedEmails: true
Updated dependencies
mcpActions.servers configuration. Each server gets its own endpoint at /api/mcp-actions/v1/{key} with actions scoped using include/exclude filter rules. Tool names are now namespaced with the plugin ID by default, configurable via mcpActions.namespacedToolNames. When mcpActions.servers is not configured, the plugin continues to serve a single server at /api/mcp-actions/v1.Header component from @backstage/ui.waitTime description incorrectly asking for milliseconds instead of minutes.dompurify from 3.3.1 to 3.3.2INHERIT from the ALLOWED_MKDOCS_KEYS set to address a security concern with MkDocs configuration inheritance.