Backstage
v1.56.0CI/CD & App DeliveryACTION 1CHECK 14PLAN 7OTHER 256
A feature-rich platform release adds backend, CLI, TechDocs, catalog, search, and plugin capabilities. It also includes breaking API, database, authentication, configuration, and default-behavior changes, plus reliability, performance, correctness, dependency, and security updates that may require targeted migration and validation.
Action needed (1)
security
nodemailerversion 10nodemailerwas updated to version 10 to address security vulnerabilities in older releases.
Check if affected (14)
breakingObject-only
FilterPredicaterootsApplies if you use
FilterPredicate.FilterPredicatenow accepts only objects at the root of a predicate. This constraint is enforced byparseFilterPredicate.breakingRemoval of
usernameMatchingUserEntityNameApplies if you use the
usernameMatchingUserEntityNamesign-in resolver.The
usernameMatchingUserEntityNamesign-in resolver has been removed. The change also affects sign-in configurations that used this resolver.breakingRequired service instance ID
Applies if you use custom implementations or mocks of the service.
Custom implementations and mocks of the service must now provide an instance ID. The identifier is represented by
instanceId.breakingNon-rolling
ingestion_mark_entitiesmigrationApplies if you perform a rolling, zero-downtime upgrade.
The migration cannot be applied as part of a rolling, zero-downtime upgrade. It affects the
ingestion_mark_entitiesmigration and itssource_keyandentity_refdata.breakingBackstage 1.49 catalog backend requirement
Applies if you use a catalog backend from Backstage release 1.49 or later.
This change requires a catalog backend from Backstage release 1.49 or later.
breakingStartup rejection of non-positive stitching intervals and lease durations
Applies if you configure stitching polling intervals or lease durations.
Non-positive stitching polling intervals and lease durations are rejected at startup.
breakingUser identity token requirement for the signals WebSocket endpoint
Applies if you expose the signals WebSocket endpoint.
The signals WebSocket endpoint now requires a valid user identity token.
breakingStable unique ID for the root instance metadata service
Applies if you use custom implementations or mocks of the root instance metadata service.
Custom implementations and mocks of the root instance metadata service must now provide a globally unique ID that remains stable for the lifetime of the running backend instance.
breakingRemoval of
disabledKeysfromMenuSectionApplies if you use
MenuSectionwithdisabledKeys.MenuSectionno longer acceptsdisabledKeys.breakingRemoval of
usernameMatchingUserEntityNameApplies if you use the
usernameMatchingUserEntityNamesign-in resolver.The
usernameMatchingUserEntityNamesign-in resolver has been removed. Sign-in configurations using this resolver are affected.breakingThe table
refcolumn renamed toentity_refApplies if you use the table's
refcolumn.The table's
refcolumn has been renamed toentity_ref.breakingDisabled database keepalive queries by default
Applies unless you set
backend.todatabase. keepalive true.Periodic per-plugin database keepalive queries are no longer issued by default, and the default minimum PostgreSQL and MySQL connection pool size is now zero. Idle connections can be retired after the configured timeout, while explicitly configured pool minimums are preserved. Set
backend.todatabase. keepalive trueto continue issuing the periodic queries.breakingStartup rejection of non-positive stitching intervals and lease durations
Applies if you configure stitching polling intervals or lease durations.
Non-positive stitching polling intervals and lease durations are rejected at startup.
breakingUser identity token requirement for the signals WebSocket endpoint
Applies if you expose the signals WebSocket endpoint.
The signals WebSocket endpoint now requires a valid user identity token. The token can appear anywhere in the requested WebSocket protocols. Connections without a token, with an invalid token, or with a non-user service token are rejected, and unauthenticated guest connections are no longer accepted.
Plan ahead (7)
deprecatedDeprecated
getCatalogFiltersApplies if you use
getCatalogFilters.getCatalogFiltersis deprecated. Existing uses of this API are affected by the deprecation.deprecatedDeprecation warnings for
serve:mkdocsand--mkdocs-parameter-*Applies if you use
serve:mkdocsor the--mkdocs-parameter-*flags.The
serve:mkdocscommand and--mkdocs-parameter-*flags now print deprecation warnings.deprecatedDeprecated raw token outputs without
variableKeyApplies if you use raw token outputs and do not configure
variableKey.Raw token outputs are deprecated when
variableKeyis not used.deprecatedDeprecated
totalItemsoptionApplies if you configure
totalItems.The
totalItemsoption is deprecated.deprecatedDeprecation warnings for
serve:mkdocsand--mkdocs-parameter-*Applies if you use
serve:mkdocsor the--mkdocs-parameter-*flags.The
serve:mkdocscommand and--mkdocs-parameter-*flags now print deprecation warnings.deprecatedDeprecated and ignored
StreamEntitiesRequest.totalItems Applies if you use
totalItems.The
totalItemsoption ofStreamEntitiesRequestis deprecated and ignored.deprecatedDeprecated raw token outputs without
variableKeyApplies if you use raw token outputs and do not configure
variableKey.Raw token outputs are deprecated when
variableKeyis not used.
All 256 other recorded changesvalue changes 131 · fixes 64 · additions 43 · constraints 11 · renames 4 · defaults 3
value changes (131)
- An
EntityOrderFilterthat orders by a field that some entities lack now excludes those entities MenuSectionno longer acceptsdisabledKeys- now retries network failures and 5xx responses for up to about 15 seconds
- Improved link resolution performance
- now use the page header provided by the app
@backstage/catalog-modelnow uses version 4 ofzod- Config schemas now compile in roughly half the time
- Improved database event cleanup in the events backend under large backlogs.
- Hardened return URL validation in the OAuth redirect flow.
- Google IAP public verification keys are now cached according to their cache headers.
- The
auth.configuration is now visible to frontend plugins.providers. guest - Notification payload metadata is now persisted and returned when reading notifications.
- Updated
nodemailerto version 10 - now returns partial results when some plugin sources fail.
- now show help when a command group is invoked without a subcommand, and wait for output to be flushed before exiting.
- Improved code splitting for frontend module federation remotes.
- Report checks in
@backstage/repo-toolsnow show a diff when a report is out of date. - Fixed the Home page path override in the
create-apptemplate. - Updated React Aria dependencies to React Aria Components 1.22.0, React Aria 3.53.0, and React Stately 3.51.0.
- Programmatic clicks on Checkbox and Switch labels no longer toggle their selection.
- an
EntityOrderFilterthat orders by a field that some entities lack now excludes those entities from the result - TechDocs now uses the default
NotFoundErrorPagewhen documentation is missing - Improved handling of mapping-style Markdown extension configuration.
- Updated dependency
js-yamlto^5..×30. 0 - Updated dependency
infinispanto^0..16. 0 streamEntitiesno longer asks the catalog backend to compute the total number of matching items, since that count is never part of the streamed result.- Switched to version 4 of
zodfor internal validation. Error messages for invalid catalog model layer operations now use the updatedzodwording. This package no longer pulls in version 3 ofzod. If your own packages usezodwithout declaring it as a dependency, they may now get version 4 instead, so make sure to add it to theirpackage.explicitly.json - The
actions listcommand now returns partial results when some plugin sources fail, instead of failing entirely. Failed sources are reported as warnings. - Updated dependency
webpackto~5..111. 0 - Improved code splitting for frontend module federation remotes to reduce unnecessary downloads of unrelated lazy components from the same dependency scope.
- Switched to version 4 of
zodfor internal validation. Validation errors for invalid templates now use the updated, more descriptivezodwording. - Config schemas now compile in roughly half the time, by skipping Ajv's code optimizer. The compiled validators only run a few times per process, so the optimized code never paid for itself. This speeds up backend startup, which compiles the full config schema, for example to find the secret config values to redact from logs.
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected]×2
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated generated applications to use the latest Jest 30 release.
- Pinned Yarn core in newly generated apps to avoid installation failures from a broken upstream release.
- Updated dependencies - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- The permission check for extension
ifpredicates during app startup now retries network failures and 5xx responses, for up to about 15 seconds, instead of failing the whole app on the first error. - Improved link resolution performance by reusing route matches for recently visited locations.
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- The
useRouteRefhook now resolves the route again once the app has been finalized, so that elements rendered before finalization, such asapp/root.extensions, can link to pages instead of gettingelements undefined. - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Azure DevOps repository files now resolve to an edit URL when used by integrations such as TechDocs.
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]×2
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Release manifests now include requirements such as supported Node.js versions when that information is available from the release.
- When an API, CLI, SQL, or knip report is out of date in CI, the error output now shows a diff of the changes that need to be committed instead of printing the full expected report.
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- Updated React Aria dependencies to the October 2026 release.
- stopped loading the default API implementations just to install the default icons.
- - 4e7a710: Updated React Aria dependencies to the October 2026 release.×2
- b96ec9e: Cache Google IAP public verification keys according to the response cache headers to reduce repeated key requests during authentication.
- c2ea521: Change visibility to auth.providers.guest configuration key to be visible by frontend plugins to align with other authentication providers.
- 9724edd: Hardened return URL validation in the OAuth redirect flow. Failed sign-in attempts now return to the configured app URL with the error message, including when the return URL is invalid.
- The catalog export button now respects filters that implement
getCatalogQuery. - Use EntityDisplayName for hierarchy links in BUI entity header in order to display titles
- Improved large entity provider mutations by yielding to the event loop while preparing database changes.
- Reduce repeated work for entities that fail stitching by gradually increasing retry delays with jitter.
- Improve responsiveness to other requests while reading large sets of entities with field selection, without reducing page sizes.
- Like full-entity responses, projected list responses may now be streamed without a
Content-Lengthor automatically generatedETagheader. - Improved the performance and planner stability of orphan entity cleanup on large PostgreSQL catalogs.
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - 916e5b2: Improved the performance of LDAP organization ingestion, especially for large directories, without changing the resulting catalog entities.
- - 1a20364: Improved large LDAP organization refreshes by yielding to the event loop while resolving relations.
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - cc7eccf: The catalog graph page in the new frontend system no longer renders its own legacy header, and instead uses the page header provided by the app. Apps that use the old frontend system are not affected.
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - 3a0ac14: The catalog import page in the new frontend system no longer renders its own legacy header, and instead uses the page header provided by the app. Apps that use the old frontend system are not affected.
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected]×2
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected]
- - 02fd3bf: Improve database event cleanup under large backlogs and speed up reading events for subscriptions with many retained events.
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]×3
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected]×3
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - b3292fc: Declare the existing per-cluster
assumeRoleandexternalIdoptions in the configuration schema so schema-generated configuration forms can expose AWS IAM role authentication settings. External IDs are marked as secrets. - - 76ac6ed: Updated dependency
js-yamlto^5..0. 0 - - 8ba34e8: Persist notification payload metadata for user notifications and broadcasts, and return it when reading notifications. Re-sending a scoped notification replaces its metadata, or clears it when the new payload omits metadata.
- Updated
nunjitsuto^0..6. 2 - - 33ff9ed: Updated dependency
@backstage-community/plugin-explore-commonto^0..14. 0 - - b8e865b: The signals client now shares one WebSocket connection across simultaneous subscriptions and does not connect or retry when no identity token is available.
- - e956084: Use the backend instance ID to identify the event subscription, allowing deployments to control how Signals instances fan out events.
- - Updated dependencies - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected]
- - Updated dependencies - @backstage/[email protected] - @backstage/[email protected]
fixes (64)
- Successfully processed entities no longer remain unavailable if stitch scheduling is interrupted
- Entities no longer disappear from filtered and sorted catalog queries after a database error during stitching
Comboboxkeyboard selection while filtering has been fixeduseRouteRefnow resolves routes again after finalization- Fixed the catalog entity list rewriting the URL on every render
- Fixed catalog processing error messages to report stable processor names in minified builds.×2
- Fixed the Gitea entity provider registering locations against a hardcoded
mainbranch - Reading a number from an empty or whitespace-only config value now fails with a clear error instead of returning
0. - fixed AWS RDS IAM authentication tokens being reused after their signing credentials expire
- Fixed
serializeErrorto strip stack traces from all nested error causes. - The selected sign-in provider is no longer cleared when a sign-in loader is cancelled.
- Fixed protected app sign-in returning a 404 when the sign-in handoff is repeated.
- Fixed long words in toast notifications overlapping the close button.
- Fixed Azure DevOps downloads to use the requested branch or tag.
- Fixed importing
@backstage/integrationfrom ESM projects. - now throws a clear
ConflictErrorwhen the target repository already exists. - Fixed a regression where scaffolder step values consisting of a single template statement block, such as
ifconditions, were rendered as strings instead of booleans. - Fixed Elasticsearch search queries intermittently failing when a collator finishes indexing.
- Fixed PostgreSQL search highlighting with delimiters that need quoting.
- Fixed TechDocs asset caching on reused HTTP connections.
- Fixed TechDocs rejecting
mkdocs.files that use Material for MkDocs emoji and superfences configurationyml - Fixed the
no-mixed-plugin-importslint rule silently reporting nothing - Fixed root
setupFilesAfterEnvJest configuration being shared between workspace packages - Fixed
Comboboxkeyboard selection while filtering. - Fixed the catalog entity list re-writing the URL on every render
- Fixed TechDocs addons silently not rendering in apps using the new frontend system
- Fixed TechDocs asset caching on reused HTTP connections to avoid listener leaks and cross-request response corruption.
- Fixed TechDocs allowing
custom_iconspaths inmkdocs.that resolve outside the documentation input directory.yml - Fixed TechDocs generation rejecting
mkdocs.files that use the emoji indexes and generators or theyml pymdownx.custom fence formatssuperfences - Fixed Material UI styles for TechDocs addons in module-federated applications.
- a lazy addon no longer hides the surrounding reader while it loads.
- Prevented TechDocs content from briefly appearing before page styles load.
- Fixed AWS RDS IAM authentication tokens being reused after their signing credentials expire, which could cause database connection failures when using temporary AWS credentials.
- Fixed the conversion of legacy filters that happens when a request has both a
filterand aquery, so that it matches the semantics of the legacy filter query parameter. Empty filters no longer turn into a predicate that matches nothing, empty records no longer match everything, and string values take precedence overCATALOG_FILTER_EXISTSfor the same key. - Fixed
backstage-cli pm verify-patchesfailing to load unless projects installed the Yarn CLI package separately. jest-cli,jest-runtimeand the default Node.js test environment are now loaded through the installedjestpackage, so tests also run with strictnode_moduleslayouts. An unsupported Jest version, or a missingjest, now fails with a clear error instead of a module resolution error.- Fixed
setupFilesAfterEnvfrom the rootpackage.Jest configuration being shared between workspace packages, which caused each package'sjson src/setupTestsfile to also be added to every other package. - Fixed CommonJS frontend test execution with ESM dependencies on Node.js 24.
- Commands run through
runClinow wait forstdoutandstderrto be flushed before exiting, so large command output is no longer truncated on platforms where writes tostdoutandstderrare asynchronous. - Fixed CLIs created with
runClisilently exiting when the root or a command group is invoked without a subcommand. They now display help for that level and complete successfully. - Reading a number from a configuration value that is an empty or whitespace-only string now fails with a clear conversion error, instead of silently returning
0. Numeric strings, including ones with surrounding whitespace such as' 42 ', continue to be parsed as expected. - Fixed the
Connectiontype so thatauthis a union of method variants instead of an array when no specific auth method is provided. - Declared the dependencies of internally bundled code so that the package works with strict
node_moduleslayouts. - Stop clearing the selected provider from
localStoragewhen a sign-in loader is cancelled. Only clear it when the loader actually fails. - Fixed default landing page configuration in the app template so the Home page path override is inside the existing
page:homeblock. - Fixed
serializeErrorso that stack traces are stripped from all nested error causes when stacks are not requested, not just the first-level cause. - Fixed Azure DevOps file and archive downloads to use the requested branch or tag, including when checking whether a repository tree has changed. Branches and tags with the same name are now distinguished.
- Bitbucket Cloud OAuth access tokens returned by
getBitbucketCloudOAuthTokenare now cached separately for each set of OAuth client credentials. Previously a single token was cached globally, which could cause the wrong token to be used when more than one Bitbucket Cloud integration was configured or when OAuth credentials were rotated. - Fixed importing this package from ECMAScript module (ESM) projects, which failed since 2.1.0 with an error saying that
lodashdoes not provide an export namedtrimEnd. - Fixed CLI report generation failing when the
FORCE_COLORenvironment variable is set. - Declared the dependencies of internally bundled code so that the package works with strict
node_moduleslayouts - Fixed long words in toast titles and descriptions overflowing the notification and overlapping the close button.
- - c55505e: Fix protected app sign-in returning a 404 when an authenticated browser repeats the sign-in handoff for the same user.
- Fixed an issue where successfully processed entities could remain unavailable if stitch scheduling was interrupted.
- Entity and location queries with a primitive value at the root of the filter predicate are now rejected with an "Invalid query" error, rather than "Query must be an object".
- Pending stitching work is no longer lost when entities are deleted and re-added
- Fixed entities disappearing from filtered and sorted catalog queries after a database error during stitching.
- PostgreSQL and MySQL deadlocks trigger prompt, bounded retries of the entire write transaction
- - f181c5f: Fixed the Gitea entity provider registering catalog-info.yaml locations against a hardcoded 'main' branch instead of each repository's actual default branch.
- - 6e08d65: Fixes a regression where scaffolder step values consisting of a singular template statement block (ex.
if: "{% if parameters.), were rendered as the stringsfoo == 'bar' %}true{% else %}false{% endif %}" "true"and"false"instead of their boolean values. This caused steps withifconditions to always run. Step values with a single statement block that renders nothing, such as{% if false %}x{% endif %}, are once again left out of the action input instead of being passed as an empty string. - - 06128be: Throw a
ConflictErrorwith a clear message whenpublish:gitlabis called and the target repository already exists, instead of letting the GitLab API return aGitbeakerRequestErrorwith a raw JSON body such as{"name":["has already been taken"]}. - - 2153e90: Fixed search queries intermittently failing with a 500 error when a collator finished indexing. The index that the search alias pointed to before the rotation is no longer deleted immediately, so queries already running against it can complete. It is instead removed during the next indexing run for that document type. Note that this means the previous index is now retained between runs, so search storage usage per document type is roughly doubled. Also improved error reporting for failed search queries. An index that disappears while a query is running is now reported as a missing index, and other query failures now include the underlying cause in the logs instead of
undefined. - - 7535616: Fixed PostgreSQL search highlighting when configured delimiters or selection tags contain punctuation that requires quoting.
additions (43)
- has a new
getCatalogQuerymethod - Three new CLI modules provide domain-oriented commands that talk directly to the corresponding plugin APIs
@backstage/cli-module-catalog:catalog list,catalog get,catalog validate,catalog register,catalog unregister@backstage/cli-module-scaffolder:template list,template execute,template dry-run@backstage/cli-module-search:search,docs search- This introduces an
--engineflag in the TechDocs CLI, an engine configuration map, a generator registry - A new
withoutFeedbackLinkoption - registers a
get-techdocs-metadataaction - Backends created with
createBackendnow provide the experimental connections service by default. - provides a
Featured Templateshome page widget - a swappable
UserAvatarcomponent - have a new
variableKeyinput - A new
themeCSS cascade layer - Added
AppLifecycleApi - Added a
backend.configuration optionlogger. redactAllowlist - Added bounded retries for transient Cloud SQL connection failures
- Added a service-authenticated action registry status endpoint
- Added a
defaultCloseDelayMsoption toSubmenuOptions. - Added a
--fixmode tobackstage-cli pm verify-patches. - Added an
instanceIdoption tocreateSpecializedBackend. - Added experimental
declareConnectionandconnectionsServiceRefexports - Add intent-based CLI modules for catalog, scaffolder, and search.×2
- A new
AnyFilterPredicatetype describes predicates that may also be primitive values at the root - Introduces
--engineflag, engine config map, generator registry withbackstage.annotation support,io/techdocs-engine enginefield intechdocs_metadata.,json serve:rawcommand, and live-reload adapter interface. - Added a
themeCSS cascade layer betweencomponentsandutilities. - Added a
source_keycolumn and aUNIQUE(source_key, entity_ref)constraint - Added
getCatalogQuerytoEntityFilter - Added a swappable
UserAvatarcomponent - Added a
Featured Templateshomepage widget - Added
withoutFeedbackLinkprop topage:techdocs/readerandentity-content:techdocsextensions - Added a
get-techdocs-metadataaction to the TechDocs backend plugin - Added a service-authenticated action registry status endpoint that reports whether a plugin provides actions without exposing action metadata.
- Added an
instanceIdoption tocreateBackend, allowing deployments to use an externally provided backend instance identifier. Each backend instance uses a random UUID by default. - Added bounded retries for transient failures while initializing Cloud SQL database connections.
- Added support for
backend.configuration option, which allows specific secret values to pass through log redaction when they are known to be safe to log.logger. redactAllowlist - Added a conservative
--fixmode tobackstage-cli pm verify-patchesthat can update project-owned Backstage package patches when an automated release upgrade leaves them pinned to older versions. The repair requires Yarn 3 or later. - Added
defaultCloseDelayMsoption toSubmenuOptionsto configure a delay before a submenu closes. - Provided an implementation of
AppLifecycleApiand updated the app preparation and finalization process to utilize this API. - Added
AppLifecycleApiandappLifecycleApiRef, which let you check whether the app has been finalized and subscribe to changes in its lifecycle. - - a18df8f: Added optional
app.allowlists for config key paths and extension IDs exposed to unauthenticated users of protected apps. Authenticated users retain access to all frontend-visible configuration, and existing behavior is unchanged unless filtering is enabled.publicConfig - - fe51d40: Added a secure
variableKeyinput togitlab:projectAccessToken:createandgitlab:projectDeployToken:createactions. When provided, the generated token is stored directly as a masked GitLab CI/CD variable instead of being exposed in task outputs and checkpoint state. - - 45b0b89: Added a new
techdocs.permission, available from theactions. read /alphaentry point, which controls access to the TechDocs actions registered with the Actions Registry.
constraints (11)
EntityTagFilterwith multiple tags now requires all of them- Added Bitbucket Cloud support for bearer API tokens.
- removed
custom_iconspaths that resolve outside the docs directory - Declared the per-cluster
assumeRoleandexternalIdoptions in the Kubernetes backend configuration schema. - now reports named imports from
lodash, which break ESM builds. - Several packages now work with strict
node_moduleslayouts. - The
no-mixed-plugin-importsrule now also applies when the repository is checked out below a directory whose name starts with a dot, such as~/..worktrees/my-repo - Update Bitbucket Cloud Authentication logic to support bearer API token
- CLI API reports now support help output with separate groups and commands sections, including commands nested within groups.
- Updated SQL report generation to support newer Knex releases.
- 0c9d72c: Update Bitbucket Cloud Authentication logic to support bearer API token
renames (4)
- The built-in generator is now registered as
mkdocs, withtechdocskept as an alias - Updated the
plugin-web-librarytemplate to use@backstage/uiinstead of the deprecated@material-ui/core. - - 66f8cf8: Replace deprecated
createPermissionIntegrationRouterAPI call withpermissionsRegistry - - 298f908: Replaced the unmaintained
react-relative-timedependency with an internal component based onluxon.
defaults (3)
- The backend no longer issues periodic per-plugin database keepalive queries by default, and the default minimum PostgreSQL and MySQL connection pool size is now zero.
- The
--bui-bg-apptoken now follows the page'scolor-schemeuntil a theme mode is set. - Backends created with
createBackendnow provide the experimental connections service by default. Custom backends can installconnectionsServiceFactoryfrom@backstage/backend-defaults/alpha.
A weekly email arrives when a release needs action. Like the security patches and breaking changes in this release.