Version Packages

This commit is contained in:
github-actions[bot]
2026-05-19 18:28:24 +00:00
parent 0a44fb3cb8
commit b97fcb0a93
563 changed files with 6223 additions and 1580 deletions
@@ -1,6 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-ai-model': minor
'@backstage/catalog-model': minor
---
Introduced the `AiResource` catalog entity kind. Entity types, validators, type guards, and the model layer are exported from `@backstage/catalog-model/alpha`. Install `@backstage/plugin-catalog-backend-module-ai-model` in your backend to register the kind with the catalog.
@@ -1,8 +0,0 @@
---
'@backstage/core-components': patch
'@backstage/ui': patch
'@backstage/plugin-notifications': patch
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Added missing dependencies that were previously only available transitively.
@@ -1,5 +0,0 @@
---
'@backstage/eslint-plugin': minor
---
Added a new `no-self-package-imports` lint rule, enabled as `error` in the recommended config, that reports when a package imports itself by its own name instead of using a relative path. This pattern causes circular initialization errors in bundled ESM and with `jest.requireActual`.
@@ -1,5 +0,0 @@
---
'@backstage/errors': patch
---
Added explicit `name` property to `ServiceUnavailableError` for consistency with all other error classes, making it resilient to minification.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/catalog-model': minor
---
Added `spec.type: 'mcp-server'` as a structured subtype of the `API` kind under `v1alpha1`/`v1beta1`. MCP server entities carry a `spec.remotes` list instead of a string `definition`, for representing Model Context Protocol servers in the catalog. See RFC [#32062](https://github.com/backstage/backstage/issues/32062). New public exports: `McpServerApiEntity`, `McpServerRemote`, `mcpServerApiEntityValidator`, and `isMcpServerApiEntity`. Also adds `addKindVersion` to `CatalogModelLayerBuilder` (alpha) so layers can add new versions or spec types to existing kinds.
@@ -1,17 +0,0 @@
---
'@backstage/plugin-app': patch
---
The `app/routes` redirect config now supports path parameter substitution in the `to` target. Named params (`:userId`) and splat params (`*`) captured by the `from` path are replaced in the `to` string before navigating, making it possible to express redirects like:
```yaml
app:
extensions:
- app/routes:
config:
redirects:
- from: /users/:userId
to: /profile/:userId
- from: /old-docs
to: /docs/*
```
-14
View File
@@ -1,14 +0,0 @@
---
'@backstage/integration-aws-node': minor
---
Added `webIdentityTokenFile` to `AwsIntegrationAccountConfig` and
`AwsIntegrationDefaultAccountConfig`. When set along with a `roleName`,
`DefaultAwsCredentialsManager` retrieves credentials by calling
`AssumeRoleWithWebIdentity` (via `fromTokenFile`) using the file's
contents as the web identity token. The file is re-read on each
credential refresh.
The validator rejects combining `webIdentityTokenFile` with
`accessKeyId`/`secretAccessKey`, `profile`, or `externalId`, and
rejects setting it without a `roleName`.
@@ -1,5 +0,0 @@
---
'@backstage/backend-test-utils': patch
---
Added a new tracing service mock to be leveraged in tests
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/backend-plugin-api': patch
'@backstage/backend-defaults': patch
---
Adds an alpha `TracingService` to provide a unified interface for emitting trace spans across Backstage plugins.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Add explicit memory management to SecureTemplater usage
-22
View File
@@ -1,22 +0,0 @@
---
'@backstage/plugin-scaffolder-react': minor
'@backstage/plugin-scaffolder': minor
---
Added experimental BUI (Backstage UI) form theme for scaffolder forms. All default field extensions render BUI variants when enabled.
**Extension config:**
```yaml
app:
extensions:
- sub-page:scaffolder/templates:
config:
enableBackstageUi: true
```
**JSX props:**
```tsx
<ScaffolderPage formProps={{ EXPERIMENTAL_theme: 'bui' }} />
```
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Added `isPending` prop to Alert, Button, ButtonIcon, Table, and TableRoot as a replacement for the `loading` prop, aligning with React Aria naming conventions. The `loading` prop is now deprecated but still supported as an alias. CSS selectors now use `data-ispending` instead of `data-loading` for styling pending states; `data-loading` is still emitted for backward compatibility but will be removed alongside the `loading` prop.
**Affected components:** Alert, Button, ButtonIcon, Table, TableRoot
-24
View File
@@ -1,24 +0,0 @@
---
'@backstage/ui': patch
---
Added a public `--bui-bg-inherit` CSS variable that resolves to the background
color of the nearest enclosing bg provider (`Box`, `Flex`, `Grid`, `Card`,
`Accordion`, or any element with a `data-bg` attribute), falling back to
`--bui-bg-app`. Use it from CSS for sticky or fixed elements that need to match
their surrounding surface without hardcoding a specific level.
```css
.searchBarContainer {
position: sticky;
top: 0;
background-color: var(--bui-bg-inherit);
}
```
As part of this change, the `data-bg` painting rules previously duplicated in
`Box`, `Flex`, `Grid`, `Accordion`, and `Card` have been centralized into a
single source in `core.css`. Painting and component behavior are unchanged for
all existing usages, with one minor expansion: any element with a `data-bg`
attribute (including provider elements and any element that sets it directly)
is now painted, not only `Box`/`Flex`/`Grid`/`Card`/`Accordion` elements.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/backend-defaults': patch
---
Fixed a race condition in `CachedUserInfoService` where a failed request could incorrectly evict a newer cache entry for the same token. The error handler now verifies the map entry is still the same promise before deleting it.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Added `catalog.actions.experimentalCatalogLayersDescriptions.enabled` config option. When enabled, the `query-catalog-entities` action description references `get-catalog-model-description` for field information instead of embedding a static model description.
-9
View File
@@ -1,9 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Improved the performance of the `catalog_entities_count` metric.
The legacy Prometheus and OpenTelemetry observable gauges previously each ran their own copy of the per-kind count query against the `search` table on every metrics scrape. On large catalogs this could pile up faster than the queries completed, contending for buffers and stalling the database.
The two callbacks now share a single query result with a short in-process TTL cache, and the underlying query reads from `final_entities` instead of `search`, avoiding the bitmap heap scans that dominated the previous form. The emitted labels and values are unchanged.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-app': patch
---
Migrated React Aria imports from individual packages (`@react-aria/toast`, `@react-aria/button`, `@react-stately/toast`) to the monopackages (`react-aria`, `react-stately`).
-8
View File
@@ -1,8 +0,0 @@
---
'@backstage/ui': patch
'@backstage/plugin-app': patch
'@backstage/plugin-app-visualizer': patch
'@backstage/plugin-notifications': patch
---
Tightened React Aria dependency version ranges from `^` to `~` to prevent unintended minor version upgrades.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/core-components': patch
---
Added stable DOM markers to the legacy Page and Header so adjacent layout components can coordinate spacing without relying on generated class names.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
Bumped create-app version.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/create-app': patch
---
Pinned the Jest version range in app templates to `~30.2.0` to prevent automatic upgrades to Jest 30.4.x, which requires Node.js v24.9+ and breaks tests on Node 22.
@@ -1,5 +0,0 @@
---
'@backstage/frontend-app-api': patch
---
Internal cleanup of routing utilities.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend-module-gitlab': patch
---
Added `allowEmpty` input option to the `gitlab:repo:push` action, allowing empty commits. Required from GitLab 18.8 or later.
@@ -1,5 +0,0 @@
---
'@backstage/frontend-test-utils': patch
---
Removed internal `mockWithApiFactory` helper in favor of using `attachMockApiFactory` directly.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Deprecated immediate mode stitching (`catalog.stitchingStrategy.mode: 'immediate'`). A warning is now logged on startup when immediate mode is configured. Immediate mode will be removed in the next Backstage release. Migrate to deferred mode (the default) by removing the `stitchingStrategy` configuration or setting `mode: 'deferred'`.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-devtools': patch
---
Scheduled Tasks page now refreshes its table automatically after a task is triggered or cancelled, so the updated status is visible without reloading the browser.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/frontend-test-utils': patch
---
Added support for `ExternalRouteRef` in the `mountedRoutes` option of `renderInTestApp` and `renderTestApp`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-user-settings': patch
---
Prioritize i18n translation over `theme.title` for built-in light/dark theme names in `UserSettingsThemeToggle`, so that translation overrides are no longer silently ignored.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Restructured the entity listing endpoint so that, when a sort field is specified, the search-by-key index drives the query rather than being side-joined onto `final_entities`. This lets PostgreSQL walk the `(key, value, entity_id)` index in already-sorted order and short-circuit on `LIMIT`, reducing typical broad-filter paginated list times from seconds to milliseconds. Entities that lack the sort field still appear at the end of sorted results (NULLS LAST semantics preserved), ordered by `entity_id`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog': patch
---
Fixed an issue where navigating to an unknown sub-path on an entity page (for example `/catalog/default/component/foo/blob`) would silently render the first available route. Unknown paths now show the standard not-found page instead.
@@ -1,6 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-github': patch
'@backstage/plugin-catalog-backend-module-github-org': patch
---
Added experimental support for checking suspended users via the GitHub REST API instead of the GraphQL `suspendedAt` field. Enable by setting both `excludeSuspendedUsers: true` and `experimental_checkForSuspendedUsersWithRest: true` in the provider config. When enabled, responses are cached using conditional HTTP requests to minimize REST API rate limit usage.
@@ -1,5 +0,0 @@
---
'@backstage/backend-app-api': minor
---
Added `ExtensionPointFactoryMiddleware` type and `createExtensionPointFactoryMiddleware` helper to reimplement extension point outputs at backend creation time.
@@ -1,5 +0,0 @@
---
'@backstage/backend-defaults': patch
---
Exported `defaultServiceFactories` to allow use with `createSpecializedBackend` for advanced configuration like `extensionPointFactoryMiddleware`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Simplified the entity facets aggregation from `COUNT(DISTINCT entity_id)` to `COUNT(*)`. The unique constraint on `(entity_id, key, value)` guarantees each entity appears at most once per search row group, making the `DISTINCT` unnecessary. This allows the database to use a simpler aggregation plan.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Improved the performance of the entity facets endpoint when filters are applied. The filtered entity set is now combined with the search table through an inner join rather than a `WHERE entity_id IN (subquery)`. Results are unchanged; on large catalogs the query planner is able to choose dramatically cheaper plans, with measured improvements ranging from roughly 1.2× on already-fast cases to 7× or more on high-cardinality facets.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Added support for grouping options into sections in the Select component. You can now pass section objects with a `title` and a nested `options` array alongside (or instead of) regular options to render grouped dropdowns with section headers.
**Affected components:** Select
@@ -1,5 +0,0 @@
---
'@backstage/frontend-defaults': patch
---
Invalid feature flag declarations are now treated as warnings rather than errors, letting the app load normally.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Updated the `list-scaffolder-tasks` action to support the new "status" filter parameter, allowing the action to return tasks matching a specific status.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend-module-github': patch
---
Improved Octokit client creation to support retries via @octokit/plugin-retry
@@ -1,11 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Fixed several database migration `down` functions that were not properly reversible, causing the SQL report to show warnings:
- `20241003170511_alter_target_in_locations.js`: both `up` and `down` now include `.notNullable()` when altering the `locations.target` column, preventing the `NOT NULL` constraint from being accidentally dropped when widening the column type from `varchar(255)` to `text`.
- `20220116144621_remove_legacy.js`: the `down` function now properly recreates the three dropped legacy tables (`entities`, `entities_search`, `entities_relations`) with correct columns and indices.
- `20210302150147_refresh_state.js`: the `down` function now drops dependent tables in the correct order (avoiding a FK constraint violation) and fixes a typo where the table was referred to as `references` instead of `refresh_state_references`.
- `20201005122705_add_entity_full_name.js`: the `down` function now drops the `full_name` column from `entities` (not `entities_search`), and restores the `entities_unique_name` index with the correct column order `(kind, name, namespace)`.
- `20200702153613_entities.js`: the `down` function now uses `table.integer('generation')` instead of `table.string('generation')`, restoring the correct column type.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Disabled `Card` scroll shadow in browsers that don't support `animation-timeline: scroll()`. Prevents the shadow from being always visible over the `CardBody` when there's nothing to scroll or the body is not scrolled.
**Affected components:** Card
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Fixed `CardBody` showing an unwanted scrollbar when constrained below the scroll shadow height.
**Affected components:** Card
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Added missing description to the `type` parameter on the `unregister-entity` MCP action.
-10
View File
@@ -1,10 +0,0 @@
---
'@backstage/frontend-plugin-api': patch
'@backstage/catalog-model': patch
'@backstage/core-plugin-api': patch
'@backstage/plugin-catalog-node': patch
'@backstage/plugin-kubernetes-common': patch
'@backstage/plugin-kubernetes-node': patch
---
Removed a handful of internal imports that referenced the package by its own name. Value imports were switched to relative paths, and type-only imports to `import type`. These self-referential imports could trigger circular initialization errors in bundled ESM and when the package was loaded via `jest.requireActual` — most visibly `Cannot access '_AppRootElementBlueprintesm' before initialization` from `@backstage/frontend-plugin-api`. There are no user-facing API changes.
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Fixed dark mode background for Dialog component by correcting the theme attribute selector from `data-theme` to `data-theme-mode`.
**Affected components:** Dialog
@@ -1,5 +0,0 @@
---
'@backstage/cli-module-build': patch
---
Fixed config path resolution for the embedded-postgres database client detection to resolve paths relative to the target package directory rather than the workspace root.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Fixed a performance regression in the `/entity-facets` endpoint when filters or permission conditions are applied, by routing the EXISTS-based filter through `final_entities` instead of correlating against the much larger `search` table.
@@ -1,5 +0,0 @@
---
'@backstage/filter-predicates': patch
---
Filter predicates that mix operator keys (`$all`, `$any`, `$not`) with other keys are now rejected. Previously, a predicate like `{ kind: 'API', $not: { 'spec.type': 'dataset' } }` would silently drop the `kind` check. The correct form wraps conditions in `$all`.
@@ -1,5 +0,0 @@
---
'@backstage/frontend-test-utils': patch
---
Added explicit type annotations to `.map()` callback parameters in `renderInTestApp` to avoid implicit `any` errors with newer TypeScript versions.
@@ -1,5 +0,0 @@
---
'@backstage/cli-node': patch
---
Fixed a bug in `PackageGraph.listChangedPackages` where removed dependencies were not detected during lockfile analysis. The dependency graph from the previous lockfile was not being merged, causing transitive dependency removals to be missed.
@@ -1,5 +0,0 @@
---
'@backstage/backend-defaults': patch
---
Fixed scheduler `sleep` firing immediately for durations longer than ~24.8 days, caused by Node.js `setTimeout` overflowing its 32-bit millisecond limit.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Moved `generateStableHash` out of shared utility file to avoid pulling `node:crypto` into browser bundles
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Fixed an issue where the active tab indicator would disappear shortly after page load for uncontrolled Tabs.
**Affected components:** Tabs
-8
View File
@@ -1,8 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-gitlab': patch
'@backstage/plugin-kubernetes-backend': patch
'@backstage/plugin-scaffolder-backend': patch
'@backstage/plugin-scaffolder': patch
---
Fixed spelling mistakes in internal code
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/ui': patch
---
Updated field components to grow within flex layouts instead of forcing their width to remain fixed.
-9
View File
@@ -1,9 +0,0 @@
---
'@backstage/backend-defaults': patch
---
Fixed Valkey cluster mode to use `iovalkey`'s `Cluster` class instead of
`createCluster` from `@keyv/redis`. The previous implementation passed a
`@redis/client` `RedisCluster` instance to `@keyv/valkey`, which expects an
`iovalkey` `Cluster` instance. This caused the cluster client to not be
recognized correctly, as the two libraries have incompatible object models.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-home': patch
---
Fixed widgets not being movable or resizable after saved edits. Previously, entering edit mode didn't restore `isDraggable` and `isResizable`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-search-backend': patch
---
Added action for search backend to query search engine using the actions registry
@@ -1,5 +0,0 @@
---
'@backstage/cli-module-build': patch
---
The embedded Postgres database used during local development now respects user-provided connection configuration. If you configure `host`, `port`, `user`, or `password` under `backend.database.connection` alongside the `embedded-postgres` database client, those values will be forwarded to the embedded Postgres instance. Only values that you have not configured will be filled in with defaults. This makes it possible to run the embedded database on a specific host and port, for example to connect to it externally with `psql`.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-techdocs': patch
---
Made the TechDocs sidebar positioning at tablet breakpoints configurable via CSS custom properties, allowing apps with custom sidebar widths to override the defaults. The available properties are `--techdocs-sidebar-closed-offset-pinned`, `--techdocs-sidebar-closed-offset-collapsed`, and `--techdocs-sidebar-open-translate`.
-5
View File
@@ -1,5 +0,0 @@
---
'@techdocs/cli': minor
---
Add support for disabling external font downloads via techdocs-cli `techdocs-cli generate --disableExternalFonts`, useful for air-gapped Backstage instances.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': minor
---
Add support for flex item props (`grow`, `shrink`, and `basis`) to `Box`, `Card`, `Grid`, and `Flex` itself.
**Affected components:** Box, Card, Grid, Flex
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Updated `PasswordField` to visually match `TextField`, including consistent focus rings, error states, disabled appearance, and background colour behaviour.
**Affected components:** PasswordField
@@ -1,8 +0,0 @@
---
'@backstage/integration': patch
---
Fixed two issues in the GitLab integration's fetch behavior:
- The internal fetch wrapper was passing `mode: 'same-origin'` on every request. This had no practical effect server-side, but would have caused cross-origin requests to be rejected when the integration is used from a browser. Requests now use the default fetch mode and work correctly in both browser and Node environments.
- When retries are configured, transient network errors (such as dropped connections or DNS hiccups) are now retried using the same `maxRetries` and exponential delay as retryable HTTP status codes. Previously, a thrown fetch error would propagate immediately on the first failure regardless of the retry configuration. Caller-initiated aborts continue to surface immediately without being retried.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/ui': patch
---
Updated React Aria dependencies to v1.17.0 and migrated imports from individual `@react-aria/*` and `@react-stately/*` packages to the monopackages (`react-aria`, `react-stately`). This fixes a type resolution error for `@react-types/table` that occurred in new app installations.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-node': patch
---
Added optional `status` filter to `ScaffolderService.listTasks`, allowing callers to retrieve tasks matching a specific status.
-37
View File
@@ -1,37 +0,0 @@
---
'@backstage/plugin-auth-backend': minor
---
**BREAKING**: Hardened the default allowed patterns for CIMD and DCR to replace the previous permissive `['*']` wildcards with specific defaults for known MCP clients. If you previously relied on the default `['*']` patterns, you will need to explicitly configure the patterns you need in your `app-config.yaml`.
**CIMD (`experimentalClientIdMetadataDocuments`):**
- `allowedClientIdPatterns` now defaults to Claude, VS Code, and the built-in Backstage CLI instead of `['*']`
- `allowedRedirectUriPatterns` now defaults to loopback addresses (localhost, 127.0.0.1, [::1]) instead of `['*']`
**DCR (`experimentalDynamicClientRegistration`):**
- `allowedRedirectUriPatterns` now defaults to Cursor and loopback addresses instead of `['*']`
If you need to allow additional clients or redirect URIs, you can override these defaults in your `app-config.yaml`:
```yaml
auth:
experimentalClientIdMetadataDocuments:
enabled: true
allowedClientIdPatterns:
- 'https://claude.ai/*'
- 'https://vscode.dev/*'
- 'https://my-custom-client.example.com/*'
allowedRedirectUriPatterns:
- 'http://localhost:*'
- 'http://127.0.0.1:*'
- 'https://my-app.example.com/callback'
experimentalDynamicClientRegistration:
enabled: true
allowedRedirectUriPatterns:
- 'cursor://*'
- 'http://localhost:*'
- 'http://127.0.0.1:*'
- 'myapp://*'
```
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Added `description`, `tags`, and `metadata` props to the `Header` component. The `description` prop accepts a markdown string with support for inline links. The `tags` prop renders a row of text or link items above the title. The `metadata` prop renders key-value pairs below the description. The `breadcrumbs` prop has been deprecated and will be removed in a future release.
**Affected components:** Header
-9
View File
@@ -1,9 +0,0 @@
---
'@backstage/ui': minor
---
Added a `sticky` prop to the `Header` component. When `true`, the title-and-actions bar stays fixed to the top of its scroll container while the rest of the header (tags, description, metadata) scrolls away. The sticky bar background color automatically matches the container surface using the bg-consumer system.
**BREAKING**: Removed the main header class from the `Header` component. Custom styles that target this class should be updated to target the component sections that remain.
**Affected components:** Header
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Fixed Table with row selection creating phantom scroll height on ancestor elements by establishing a containing block for visually-hidden checkbox inputs.
**Affected components:** Table, TableRoot
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch
---
On PostgreSQL, `WHERE ref IN ($1, $2, ..., $N)` queries on the `ingestion_mark_entities` table now use `= ANY($1)` with a single array parameter instead. This reduces prepared statement bloat in the query plan cache when the number of entity refs varies between calls.
@@ -1,5 +0,0 @@
---
'@backstage/frontend-app-api': patch
---
Invalid feature flag declarations no longer crash the app during bootstrap. They are now reported through the error collector and skipped, letting the rest of the app load normally.
-6
View File
@@ -1,6 +0,0 @@
---
'@backstage/plugin-techdocs-backend': minor
'@backstage/plugin-techdocs-node': minor
---
Add support for disabling external font downloads via app-config option `techdocs.generator.mkdocs.disableExternalFonts`, useful for air-gapped Backstage instances.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-auth-backend': patch
---
Limit the size of fetched client ID metadata documents to prevent oversized responses from being accepted.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder-backend': minor
---
Added `always()` and `failure()` status check functions for scaffolder steps. These functions can be used in the if field of a step to control execution after failures. `always()` ensures a step runs regardless of previous step outcomes, while `failure()` runs a step only when a previous step has failed.
-17
View File
@@ -1,17 +0,0 @@
---
'@backstage/ui': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-app': patch
'@backstage/plugin-app-visualizer': patch
'@backstage/plugin-auth': patch
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-notifications': patch
'@backstage/plugin-org': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-signals': patch
'@backstage/plugin-techdocs': patch
---
Limited `@remixicon/react` dependency to versions below 4.9.0 due to a license change in that release.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Fix `Card href=...` not showing a focus indicator on keyboard navigation. `Link` now composes `useFocusRing`, emits `data-focus-visible`, and renders a `--bui-ring` outline when keyboard-focused. The Card's existing focus-ring CSS matches when the trigger is focused.
_Affected components_: Card, Link
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-kubernetes-react': patch
---
Added optional clustersCacheTtlMs option to KubernetesBackendClient that caches getClusters() responses for the specified duration, avoiding repeated /clusters requests when multiple proxy calls resolve cluster auth in quick succession.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-mcp-actions-backend': patch
---
Fixed an issue where actions returned Markdown-formatted JSON instead of plain JSON and a `structuredContent` field for model context protocol responses.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-mcp-actions-backend': patch
---
Trace spans are now emitted for MCP `tools/call` invocations, following OpenTelemetry server-side MCP semantic conventions.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Added invalid-state styling for Checkbox and corresponding Storybook variants for verification.
**Affected components:** Checkbox, CheckboxGroup
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/backend-test-utils': patch
---
Fixed `mockCredentials` to include the internal `version: 'v1'` field on all credential objects (`none()`, `user()`, `limitedUser()`, `service()`), and fixed `user()` to encode the user entity ref into the token (matching `user.token(ref)` behavior). This makes mock credentials compatible with `toInternalBackstageCredentials()`, which validates the version field, and ensures that credentials for different users produce different tokens.
@@ -1,5 +0,0 @@
---
'@backstage/integration': patch
---
Moved `registerMswTestHooks` to test files.
@@ -1,6 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-msgraph': minor
'@backstage/plugin-catalog-backend-module-msgraph-incremental': minor
---
**BREAKING**: Disabled user accounts are now filtered out by default. The provider automatically applies an `accountEnabled eq true` filter, combining it with any custom `user.filter` you provide. If you previously included `accountEnabled eq true` in your user filter, it is safe to remove it, but leaving it in will not cause any issues.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend-module-msgraph-incremental': minor
---
Introduces a cursor-based incremental ingestion provider for Microsoft Graph that processes users and groups one page at a time. Unlike `MicrosoftGraphOrgEntityProvider`, this module never holds the full dataset in memory — each burst processes a single page (up to 999 users or 100 groups). The `@odata.nextLink` cursor is persisted so a pod restart resumes from the last completed page rather than starting over.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-auth-backend': patch
---
Improved OIDC error messages to include the rejected redirect URI or client ID, making it easier to debug client registration failures.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-scaffolder': patch
---
Simplified the `OwnerEntityColumn` in the task list to rely on `EntityRefLink` and the entity presentation API instead of manually fetching entities from the catalog.
@@ -1,5 +0,0 @@
---
'@backstage/plugin-permission-backend': patch
---
The permission backend no longer populates the removed `token` and `identity` fields on `PolicyQueryUser`, and no longer calls `auth.getPluginRequestToken()` during policy evaluation. This removes one internal round-trip per authorize request.
@@ -1,11 +0,0 @@
---
'@backstage/plugin-permission-node': minor
---
**BREAKING**: Cleaned up the `PolicyQueryUser` type:
- `token`**Removed.** Was previously deprecated in favor of `credentials` with `coreServices.auth`.
- `expiresInSeconds`**Removed.** Was previously deprecated.
- `identity`**Removed.** Was previously deprecated in favor of `info`.
- `info`**Deprecated.** Still required and populated for now; will be made optional and then removed in a future release.
- `credentials` — Unchanged.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/backend-defaults': patch
---
Added a new `CachedUserInfoService` decorator that wraps `DefaultUserInfoService` with a 5-second TTL cache and in-flight request coalescing. The decorator is wired in via `userInfoServiceFactory` using a shared root-level cache. Repeated `getUserInfo()` calls for the same user token within the TTL window return the cached result without making an HTTP call to the auth backend. Note that custom `UserInfoService` implementations registered via their own factory will not benefit from this cache automatically.
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Adjusted PluginHeader spacing and borders so headers with and without tabs align more consistently with surrounding page content, including when paired with page headers.
**Affected components:** PluginHeader, Header
-329
View File
@@ -1,329 +0,0 @@
{
"mode": "exit",
"tag": "next",
"initialVersions": {
"example-app": "0.0.34",
"@backstage/app-defaults": "1.7.7",
"app-example-plugin": "0.0.34",
"example-app-legacy": "0.2.120",
"example-backend": "0.0.49",
"@backstage/backend-app-api": "1.6.1",
"@backstage/backend-defaults": "0.17.0",
"@backstage/backend-dev-utils": "0.1.7",
"@backstage/backend-dynamic-feature-service": "0.8.1",
"@internal/backend": "0.0.1",
"@backstage/backend-openapi-utils": "0.6.8",
"@backstage/backend-plugin-api": "1.9.0",
"@backstage/backend-test-utils": "1.11.2",
"@backstage/catalog-client": "1.15.0",
"@backstage/catalog-model": "1.8.0",
"@backstage/cli": "0.36.1",
"@backstage/cli-common": "0.2.1",
"@backstage/cli-defaults": "0.1.1",
"@internal/cli": "0.0.3",
"@backstage/cli-module-actions": "0.1.0",
"@backstage/cli-module-auth": "0.1.1",
"@backstage/cli-module-build": "0.1.1",
"@backstage/cli-module-config": "0.1.1",
"@backstage/cli-module-github": "0.1.1",
"@backstage/cli-module-info": "0.1.1",
"@backstage/cli-module-lint": "0.1.1",
"@backstage/cli-module-maintenance": "0.1.1",
"@backstage/cli-module-migrate": "0.1.1",
"@backstage/cli-module-new": "0.1.2",
"@backstage/cli-module-test-jest": "0.1.1",
"@backstage/cli-module-translations": "0.1.1",
"@backstage/cli-node": "0.3.1",
"@backstage/codemods": "0.1.56",
"@backstage/config": "1.3.7",
"@backstage/config-loader": "1.10.10",
"@backstage/core-app-api": "1.20.0",
"@backstage/core-compat-api": "0.5.10",
"@backstage/core-components": "0.18.9",
"@backstage/core-plugin-api": "1.12.5",
"@backstage/create-app": "0.8.2",
"@backstage/dev-utils": "1.1.22",
"e2e-test": "0.2.39",
"@backstage/e2e-test-utils": "0.1.2",
"@backstage/errors": "1.3.0",
"@backstage/eslint-plugin": "0.2.3",
"@backstage/filter-predicates": "0.1.2",
"@backstage/frontend-app-api": "0.16.2",
"@backstage/frontend-defaults": "0.5.1",
"@backstage/frontend-dev-utils": "0.1.1",
"@backstage/frontend-dynamic-feature-loader": "0.1.11",
"@internal/frontend": "0.0.19",
"@backstage/frontend-plugin-api": "0.16.0",
"@backstage/frontend-test-utils": "0.5.2",
"@backstage/integration": "2.0.1",
"@backstage/integration-aws-node": "0.1.21",
"@backstage/integration-react": "1.2.17",
"@backstage/module-federation-common": "0.1.3",
"@internal/opaque": "0.0.1",
"@backstage/release-manifests": "0.0.13",
"@backstage/repo-tools": "0.17.1",
"@internal/scaffolder": "0.0.20",
"@techdocs/cli": "1.10.7",
"techdocs-cli-embedded-app": "0.2.119",
"@backstage/test-utils": "1.7.17",
"@backstage/theme": "0.7.3",
"@backstage/types": "1.2.2",
"@backstage/ui": "0.14.0",
"@backstage/version-bridge": "1.0.12",
"yarn-plugin-backstage": "0.0.11",
"@backstage/plugin-api-docs": "0.14.0",
"@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.11",
"@backstage/plugin-app": "0.4.3",
"@backstage/plugin-app-backend": "0.5.13",
"@backstage/plugin-app-node": "0.1.44",
"@backstage/plugin-app-react": "0.2.2",
"@backstage/plugin-app-visualizer": "0.2.2",
"@backstage/plugin-auth": "0.1.7",
"@backstage/plugin-auth-backend": "0.28.0",
"@backstage/plugin-auth-backend-module-atlassian-provider": "0.4.14",
"@backstage/plugin-auth-backend-module-auth0-provider": "0.4.0",
"@backstage/plugin-auth-backend-module-aws-alb-provider": "0.4.15",
"@backstage/plugin-auth-backend-module-azure-easyauth-provider": "0.2.19",
"@backstage/plugin-auth-backend-module-bitbucket-provider": "0.3.14",
"@backstage/plugin-auth-backend-module-bitbucket-server-provider": "0.2.14",
"@backstage/plugin-auth-backend-module-cloudflare-access-provider": "0.4.14",
"@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.4.14",
"@backstage/plugin-auth-backend-module-github-provider": "0.5.2",
"@backstage/plugin-auth-backend-module-gitlab-provider": "0.4.2",
"@backstage/plugin-auth-backend-module-google-provider": "0.3.14",
"@backstage/plugin-auth-backend-module-guest-provider": "0.2.18",
"@backstage/plugin-auth-backend-module-microsoft-provider": "0.3.14",
"@backstage/plugin-auth-backend-module-oauth2-provider": "0.4.14",
"@backstage/plugin-auth-backend-module-oauth2-proxy-provider": "0.2.19",
"@backstage/plugin-auth-backend-module-oidc-provider": "0.4.15",
"@backstage/plugin-auth-backend-module-okta-provider": "0.2.14",
"@backstage/plugin-auth-backend-module-onelogin-provider": "0.3.14",
"@backstage/plugin-auth-backend-module-openshift-provider": "0.1.6",
"@backstage/plugin-auth-backend-module-pinniped-provider": "0.3.13",
"@backstage/plugin-auth-backend-module-vmware-cloud-provider": "0.5.13",
"@backstage/plugin-auth-node": "0.7.0",
"@backstage/plugin-auth-react": "0.1.26",
"@backstage/plugin-bitbucket-cloud-common": "0.3.9",
"@backstage/plugin-catalog": "2.0.2",
"@backstage/plugin-catalog-backend": "3.6.0",
"@backstage/plugin-catalog-backend-module-aws": "0.4.22",
"@backstage/plugin-catalog-backend-module-azure": "0.3.16",
"@backstage/plugin-catalog-backend-module-backstage-openapi": "0.5.13",
"@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.5.10",
"@backstage/plugin-catalog-backend-module-bitbucket-server": "0.5.10",
"@backstage/plugin-catalog-backend-module-gcp": "0.3.18",
"@backstage/plugin-catalog-backend-module-gerrit": "0.3.13",
"@backstage/plugin-catalog-backend-module-gitea": "0.1.11",
"@backstage/plugin-catalog-backend-module-github": "0.13.1",
"@backstage/plugin-catalog-backend-module-github-org": "0.3.21",
"@backstage/plugin-catalog-backend-module-gitlab": "0.8.2",
"@backstage/plugin-catalog-backend-module-gitlab-org": "0.2.20",
"@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.7.11",
"@backstage/plugin-catalog-backend-module-ldap": "0.12.4",
"@backstage/plugin-catalog-backend-module-logs": "0.1.21",
"@backstage/plugin-catalog-backend-module-msgraph": "0.9.2",
"@backstage/plugin-catalog-backend-module-openapi": "0.2.21",
"@backstage/plugin-catalog-backend-module-puppetdb": "0.2.21",
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.2.19",
"@backstage/plugin-catalog-backend-module-unprocessed": "0.6.10",
"@backstage/plugin-catalog-common": "1.1.9",
"@backstage/plugin-catalog-graph": "0.6.1",
"@backstage/plugin-catalog-import": "0.13.12",
"@backstage/plugin-catalog-node": "2.2.0",
"@backstage/plugin-catalog-react": "2.1.2",
"@backstage/plugin-catalog-unprocessed-entities": "0.2.29",
"@backstage/plugin-catalog-unprocessed-entities-common": "0.0.14",
"@backstage/plugin-config-schema": "0.1.79",
"@backstage/plugin-devtools": "0.1.38",
"@backstage/plugin-devtools-backend": "0.5.16",
"@backstage/plugin-devtools-common": "0.1.24",
"@backstage/plugin-devtools-react": "0.2.1",
"@backstage/plugin-events-backend": "0.6.1",
"@backstage/plugin-events-backend-module-aws-sqs": "0.4.21",
"@backstage/plugin-events-backend-module-azure": "0.2.30",
"@backstage/plugin-events-backend-module-bitbucket-cloud": "0.2.30",
"@backstage/plugin-events-backend-module-bitbucket-server": "0.1.11",
"@backstage/plugin-events-backend-module-gerrit": "0.2.30",
"@backstage/plugin-events-backend-module-github": "0.4.11",
"@backstage/plugin-events-backend-module-gitlab": "0.3.11",
"@backstage/plugin-events-backend-module-google-pubsub": "0.2.2",
"@backstage/plugin-events-backend-module-kafka": "0.3.3",
"@backstage/plugin-events-backend-test-utils": "0.1.54",
"@backstage/plugin-events-node": "0.4.21",
"@internal/plugin-todo-list": "1.0.50",
"@internal/plugin-todo-list-backend": "1.0.49",
"@internal/plugin-todo-list-common": "1.0.30",
"@backstage/plugin-gateway-backend": "1.1.4",
"@backstage/plugin-home": "0.9.4",
"@backstage/plugin-home-react": "0.1.37",
"@backstage/plugin-kubernetes": "0.12.18",
"@backstage/plugin-kubernetes-backend": "0.21.3",
"@backstage/plugin-kubernetes-cluster": "0.0.36",
"@backstage/plugin-kubernetes-common": "0.9.11",
"@backstage/plugin-kubernetes-node": "0.4.3",
"@backstage/plugin-kubernetes-react": "0.5.18",
"@backstage/plugin-mcp-actions-backend": "0.1.12",
"@backstage/plugin-mui-to-bui": "0.2.6",
"@backstage/plugin-notifications": "0.5.16",
"@backstage/plugin-notifications-backend": "0.6.4",
"@backstage/plugin-notifications-backend-module-email": "0.3.20",
"@backstage/plugin-notifications-backend-module-slack": "0.4.1",
"@backstage/plugin-notifications-common": "0.2.2",
"@backstage/plugin-notifications-node": "0.2.25",
"@backstage/plugin-org": "0.7.1",
"@backstage/plugin-org-react": "0.1.49",
"@backstage/plugin-permission-backend": "0.7.11",
"@backstage/plugin-permission-backend-module-allow-all-policy": "0.2.18",
"@backstage/plugin-permission-common": "0.9.8",
"@backstage/plugin-permission-node": "0.10.12",
"@backstage/plugin-permission-react": "0.5.0",
"@backstage/plugin-proxy-backend": "0.6.12",
"@backstage/plugin-proxy-node": "0.1.14",
"@backstage/plugin-scaffolder": "1.36.2",
"@backstage/plugin-scaffolder-backend": "3.4.0",
"@backstage/plugin-scaffolder-backend-module-azure": "0.2.20",
"@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "0.3.5",
"@backstage/plugin-scaffolder-backend-module-bitbucket-server": "0.2.20",
"@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.3.20",
"@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.3.22",
"@backstage/plugin-scaffolder-backend-module-gcp": "0.2.20",
"@backstage/plugin-scaffolder-backend-module-gerrit": "0.2.20",
"@backstage/plugin-scaffolder-backend-module-gitea": "0.2.20",
"@backstage/plugin-scaffolder-backend-module-github": "0.9.8",
"@backstage/plugin-scaffolder-backend-module-gitlab": "0.11.5",
"@backstage/plugin-scaffolder-backend-module-notifications": "0.1.21",
"@backstage/plugin-scaffolder-backend-module-rails": "0.5.20",
"@backstage/plugin-scaffolder-backend-module-sentry": "0.3.3",
"@backstage/plugin-scaffolder-backend-module-yeoman": "0.4.21",
"@backstage/plugin-scaffolder-common": "2.1.0",
"@backstage/plugin-scaffolder-node": "0.13.2",
"@backstage/plugin-scaffolder-node-test-utils": "0.3.10",
"@backstage/plugin-scaffolder-react": "1.20.1",
"@backstage/plugin-search": "1.7.1",
"@backstage/plugin-search-backend": "2.1.1",
"@backstage/plugin-search-backend-module-catalog": "0.3.14",
"@backstage/plugin-search-backend-module-elasticsearch": "1.8.2",
"@backstage/plugin-search-backend-module-explore": "0.3.13",
"@backstage/plugin-search-backend-module-pg": "0.5.54",
"@backstage/plugin-search-backend-module-stack-overflow-collator": "0.3.19",
"@backstage/plugin-search-backend-module-techdocs": "0.4.13",
"@backstage/plugin-search-backend-node": "1.4.3",
"@backstage/plugin-search-common": "1.2.23",
"@backstage/plugin-search-react": "1.11.1",
"@backstage/plugin-signals": "0.0.30",
"@backstage/plugin-signals-backend": "0.3.14",
"@backstage/plugin-signals-node": "0.2.0",
"@backstage/plugin-signals-react": "0.0.21",
"@backstage/plugin-techdocs": "1.17.3",
"@backstage/plugin-techdocs-addons-test-utils": "2.0.4",
"@backstage/plugin-techdocs-backend": "2.1.7",
"@backstage/plugin-techdocs-common": "0.1.1",
"@backstage/plugin-techdocs-module-addons-contrib": "1.1.35",
"@backstage/plugin-techdocs-node": "1.14.5",
"@backstage/plugin-techdocs-react": "1.3.10",
"@backstage/plugin-user-settings": "0.9.2",
"@backstage/plugin-user-settings-backend": "0.4.2",
"@backstage/plugin-user-settings-common": "0.1.0",
"@backstage/plugin-catalog-backend-module-msgraph-incremental": "0.0.0"
},
"changesets": [
"add-missing-transitive-deps",
"add-no-self-package-imports-lint-rule",
"add-service-unavailable-error-name",
"app-routes-param-redirect-substitution",
"aws-wif-token-file",
"backend-test-utils-tracing-service-mock",
"backend-tracing-and-stuff",
"bitter-files-flash",
"brave-foxes-dance",
"brave-groups-learn",
"bui-bg-inherit-css-var",
"catalog-metrics-cache",
"chubby-candies-cry",
"clamp-react-aria-deps",
"core-header-marker",
"create-app-1777391535",
"create-app-1777992972",
"create-app-pin-jest-30-3",
"deduplicate-joinpaths-routing",
"delegate-attach-mock-api-factory",
"devtools-refresh-after-scheduled-task-action",
"eager-wolves-enjoy",
"entities-order-driver",
"entity-tab-not-found",
"extension-point-middleware-backend-app-api",
"extension-point-middleware-backend-defaults",
"facets-count-optimization",
"facets-inner-join",
"fancy-parents-sit",
"feature-flag-invalid-warning",
"fifty-clubs-play",
"fix-alter-target-nullability",
"fix-card-scroll-shadow",
"fix-cardbody-min-height",
"fix-catalog-mcp-action-schemas",
"fix-circular-self-imports",
"fix-dialog-dark-theme-selector",
"fix-embedded-postgres-config-paths",
"fix-facets-perf-regression",
"fix-implicit-any-renderInTestApp",
"fix-lockfile-removal-detection",
"fix-scheduler-sleep-overflow",
"fix-tabs-active-indicator-disappearing",
"fix-typos-internal-code",
"fix-widget-resize-after-edit",
"fluffy-brooms-sniff",
"free-ways-flow",
"funny-animals-prove",
"funny-areas-rescue",
"gitlab-integration-fetch-fixes",
"gold-drinks-poke",
"gold-friends-end",
"header-improvements",
"header-sticky-prop",
"hot-socks-cross",
"isolate-invalid-feature-flags",
"kind-files-press",
"lazy-rings-end",
"limit-remix-icon-version",
"link-focus-visible",
"many-tools-take",
"mean-monkeys-create",
"move-registermswtesthooks-to-test-utils",
"msgraph-incremental-initial",
"owner-column-cleanup",
"plugin-header-spacing",
"preserve-external-hrefs-useDefinition",
"purple-insects-cross",
"query-entities-inner-join",
"remove-duplicate-deps",
"remove-portable-schema-deprecated-prop",
"remove-unused-deps",
"remove-unused-getgithubintegrationconfig",
"remove-uuid-dependency",
"replace-duplicate-error-utilities",
"scaffolder-backend-form-decorators",
"scaffolder-common-form-decorators",
"scaffolder-form-decorator-api-public",
"scaffolder-form-decorator-input-schema",
"scaffolder-form-decorators",
"scaffolder-react-form-decorator-public",
"scaffolder-react-template-card-swappable",
"scaffolder-template-groups-config",
"search-indices-and-dedup",
"shy-ways-lay",
"slack-scope-message-updates",
"swappable-notification-description",
"tough-pots-dream",
"ui-date-picker",
"ui-date-range-picker",
"unprocessed-entities-read-auth-check",
"unprocessed-entities-read-permission",
"upgrade-module-federation-v2",
"usetable-complete-debounce",
"warm-pumas-beam",
"whole-bees-wave",
"zod-v3-config-schema-docs",
"zod-v4-dep-bump"
]
}
@@ -1,7 +0,0 @@
---
'@backstage/ui': patch
---
Fixed external URLs in BUI link components being rewritten as in-app paths when the app is served under a non-root base path. Absolute URLs (`http://`, `https://`, `//`, `mailto:`, `tel:`) are now passed through unchanged. Internal `href` values are resolved against the current `basename` exactly once, which also fixes a latent issue where internal link clicks under a non-root base path could navigate to a URL with the `basename` prefix doubled.
**Affected components:** ButtonLink, Card, Link, Menu, Tab, Table, Tag
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-devtools': patch
---
Migrated `ConfigContent` component from Material UI to Backstage UI (BUI).
-7
View File
@@ -1,7 +0,0 @@
---
'@backstage/plugin-catalog-backend': minor
---
**BREAKING**: When paginating entities with an order field via `/entities/by-query`, entities that lack the order field are now excluded from both the result set and the `totalItems` count. Previously these entities appeared at the end of the sorted result via `NULLS LAST`, but cursor-based pagination could not actually reach them past the first page — the count over-reported the number of navigable entities. The new behavior aligns the count with what is actually returned.
This also removes the `DISTINCT` deduplication from the sort-field CTE, which is a prerequisite for the planner to use the `(key, value, entity_id)` index in sort order and short-circuit on `LIMIT`. Installations with duplicate search rows should land the search-table deduplication migration before adopting this change.
-5
View File
@@ -1,5 +0,0 @@
---
'@backstage/plugin-catalog-backend': patch
---
Added a missing index on `relations.target_entity_ref`. Several query paths (orphan deletion, entity ancestry, eager pruning) join or filter on this column, but no index existed — causing full sequential scans of the relations table on every invocation. On a production catalog with ~3.5M relation rows, individual lookups were taking ~122ms (full table scan) instead of <1ms (index scan).
-13
View File
@@ -1,13 +0,0 @@
---
'@backstage/backend-defaults': patch
'@backstage/cli': patch
'@backstage/core-compat-api': patch
'@backstage/plugin-app-backend': patch
'@backstage/plugin-auth-backend-module-oidc-provider': patch
'@backstage/plugin-auth-node': patch
'@backstage/plugin-catalog-backend': patch
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-notifications-backend-module-slack': patch
---
Removed duplicated entries that appeared in both `dependencies` and `devDependencies`.
@@ -1,32 +0,0 @@
---
'@backstage/frontend-plugin-api': minor
---
**BREAKING**: Removed the deprecated `NavItemBlueprint`. Navigation items are now discovered from `PageBlueprint` extensions based on their `title` and `icon` params.
If you were still using `NavItemBlueprint`, migrate by moving `title` and `icon` to your `PageBlueprint` instead:
```diff
-const navItem = NavItemBlueprint.make({
- params: { title: 'Example', icon: ExampleIcon, routeRef },
-});
const page = PageBlueprint.make({
params: {
+ title: 'Example',
+ icon: <ExampleIcon fontSize="inherit" />,
routeRef,
path: '/example',
loader: () => import('./Page').then(m => <m.Page />),
},
});
```
`PageBlueprint` expects an `IconElement` rather than a Material UI `IconComponent`, so this is also a good time to switch to [Remix Icon](https://remixicon.com/) if you were using Material UI icons only for the nav item:
```diff
-import ExampleIcon from '@material-ui/icons/Extension';
+import { RiPuzzleLine } from '@remixicon/react';
...
- icon: ExampleIcon,
+ icon: <RiPuzzleLine />,
```
@@ -1,5 +0,0 @@
---
'@backstage/plugin-app': patch
---
Following the removal of `NavItemBlueprint` in `@backstage/frontend-plugin-api`, the built-in app nav was updated to keep accepting legacy `nav-item` extensions so older plugins continue to work until they migrate.

Some files were not shown because too many files have changed in this diff Show More