docs/releases/v1.20.0-changelog.md
/openapi.json to validated routers for displaying their full OpenAPI spec in a standard endpoint.wrapInOpenApiTestServer that allows for proxied requests at runtime. This will support the new yarn backstage-repo-tools schema openapi test command.publishConfig.alphaTypes and .betaTypes fields that were used together with --experimental-type-build to generate /alpha and /beta entry points. Use the exports field to achieve this instead.--experimental-type-build option for package build.@esbuild-kit/* packages to using tsx. This also switches to using the new module loader register API when available, avoiding the experimental warning when starting backends.vite-plugin-node-polyfills to ^0.16.0.cross-fetch to ^4.0.0.@typescript-eslint/eslint-plugin to 6.10.0.package.json available.EXPERIMENTAL_VITE flag for using vite as dev server instead of Webpackstdin when spawning backend child process for the start command. Fixing an issue where backend startup would hang.publishConfig.alphaTypes and .betaTypes fields that were used together with --experimental-type-build to generate /alpha and /beta entry points. Use the exports field to achieve this instead.IconComponent can now have a fontSize of inherit, which is useful for in-line icons.AnyRouteRefParams as a replacement for AnyParams, which is now deprecated./alpha export convertLegacyRouteRef, which is a temporary utility to allow existing route refs to be used with the new experimental packages.app.routes.bindings. The routing system used by createApp has been replaced by one that only supports route refs of the new format from @backstage/frontend-plugin-api. The requirement for route refs to have the same ID as their associated extension has been removed.createApp is now optional.app.extensions configuration schema.AppTreeApicreateApp now override both discovered and loaded features.Translation API on the new createApp.@backstage/frontend-plugin-api.RouteRef, SubRouteRef, ExternalRouteRef, and related types. All exports from this package that previously relied on the types with the same name from @backstage/core-plugin-api now use the new types instead. To convert and existing legacy route ref to be compatible with the APIs from this package, use the convertLegacyRouteRef utility from @backstage/core-plugin-api/alpha.bind(...).AppTreeApi.4e36abef14: Remove support for the deprecated --experimental-type-build option for package build.
6694b369a3: Adds a new command schema openapi test that performs runtime validation of your OpenAPI specs using your test data. Under the hood, we're using Optic to perform this check, really cool work by them!
To use this new command, you will have to run yarn add @useoptic/optic in the root of your repo.
cross-fetch to ^4.0.0.graphiql to 3.0.9.@graphiql/react to ^0.20.0.Azure Active Directory re-brand to Entra IDknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.additionalScopes configuration parameter to okta providers, that lets you add additional scopes on top of the default ones.DefaultEntityPresentationApi, which is an implementation of the
EntityPresentationApi that @backstage/plugin-catalog-react exposes through
its entityPresentationApiRef. This implementation is also by default made
available automatically by the catalog plugin, unless you replace it with a
custom one. It batch fetches and caches data from the catalog as needed for
display, and is customizable by adopters to add their own rendering functions.eb817ee6d4: Fix spacing inconsistency with links and labels in headers
8a8445663b: Migrate catalog entity cards to new frontend system extension format.
e964c17db9: Use default extensions boundary and suspense on the alpha declarative createCatalogFilterExtension extension factory.
71c97e7d73: The `spec.lifecycle' field in entities will now always be rendered as a string.
6c2b872153: Add official support for React 18.
0bf6ebda88: Initial entity page implementation for new frontend system at /alpha, with an overview page enabled by default and the about card available as an optional card.
bb98953cb9: Create declarative extensions for the Catalog plugin; this initial plugin preset contains sidebar item, index page and filter extensions, all distributed via /alpha subpath.
The EntityPage will be migrated in a follow-up patch.
7c265b9758: Fix type error on CatalogTable when using Material UI v5
69c14904b6: Use EntityRefLinks with hideIcons property to avoid double icons
62b5922916: Internal theme type updates
77f009b35d: Internal updates to match changes in the experimental @backstage/frontend-plugin-api.
Updated dependencies
e5bf3749ad: Support adding location analyzers in new catalog analysis extension point and move AnalyzeOptions and ScmLocationAnalyzer types to @backstage/plugin-catalog-node
8d756968f9: Introduce a new optional config parameter catalog.stitchingStrategy.mode,
which can have the values 'immediate' (default) and 'deferred'. The default
is for stitching to work as it did before this change, which means that it
happens "in-band" (blocking) immediately when each processing task finishes.
When set to 'deferred', stitching is instead deferred to happen on a separate
asynchronous worker queue just like processing.
Deferred stitching should make performance smoother when ingesting large amounts of entities, and reduce p99 processing times and repeated over-stitching of hot spot entities when fan-out/fan-in in terms of relations is very large. It does however also come with some performance cost due to the queuing with how much wall-clock time some types of task take.
supertest pass through from @backstage/backend-openapi-utils.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.cross-fetch to ^4.0.0.a604623324: Add the entire Entity to EntityNodeData and deprecate name, kind, title, namespace and spec.
To get the deprecated properties in your custom component you can use:
import { DEFAULT_NAMESPACE } from '@backstage/catalog-model';
const {
kind,
metadata: { name, namespace = DEFAULT_NAMESPACE, title },
} = entity;
AnalyzeOptions and ScmLocationAnalyzer types to @backstage/plugin-catalog-node1e5b7d993a: Added an EntityPresentationApi and associated entityPresentationApiRef. This
API lets you control how references to entities (e.g. in links, headings,
iconography etc) are represented in the user interface.
Usage of this API is initially added to the EntityRefLink and EntityRefLinks
components, so that they can render richer, more correct representation of
entity refs. There's also a new EntityDisplayName component, which works just like
the EntityRefLink but without the link.
Along with that change, the fetchEntities and getTitle props of
EntityRefLinksProps are deprecated and no longer used, since the same need
instead is fulfilled (and by default always enabled) by the
entityPresentationApiRef.
1fd53fa0c6: The UserListPicker component has undergone improvements to enhance its performance.
The previous implementation inferred the number of owned and starred entities based on the entities available in the EntityListContext. The updated version no longer relies on the EntityListContext for inference, allowing for better decoupling.
The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as EntityTagFilter, EntityOwnerFilter, EntityLifecycleFilter and EntityNamespaceFilter have now the getCatalogFilters method implemented.
button prop from used MaterialUI MenuItem component fixing incompatibility with MaterialUI v5./alpha subpath for creating entity page cards and content for the new frontend system.@backstage/frontend-plugin-api.spec.type field in entities will now always be rendered as a string.EntityRefLink icon to the left hand side as per Material-UI guidelines@backstage/integration dependency, replaced by @backstage/integration-react.MissingAnnotationEmptyState from @backstage/plugin-catalog-react@backstage/frontend-plugin-api.cross-fetch to ^4.0.0.@backstage/frontend-plugin-api.f0e2ef3b81: Support being able to define custom composable Playlist index pages
BREAKING The individual PlaylistPage route must now be manually hooked up by making the following change to your setup:
-import { PlaylistIndexPage } from '@backstage/plugin-playlist';
+import { PlaylistIndexPage, PlaylistPage } from '@backstage/plugin-playlist';
// ...
<Route path="/playlist" element={<PlaylistIndexPage />} />
+<Route path="/playlist/:playlistId" element={<PlaylistPage />} />
button prop from used MaterialUI MenuItem component fixing incompatibility with MaterialUI v5.f28c11743a: Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template
3fdffbb699: Release design improvements for the Scaffolder plugin and support v5 of @rjsf/* libraries.
This change should be non-breaking. If you're seeing typescript issues after migrating please open an issue
The next versions like createNextFieldExtension and NextScaffolderPage have been promoted to the public interface under createScaffolderFieldExtension and ScaffolderPage, so any older imports which are no longer found will need updating from @backstage/plugin-scaffolder/alpha or @backstage/plugin-scaffolder-react/alpha will need to be imported from @backstage/plugin-scaffolder and @backstage/plugin-scaffolder-react respectively.
The legacy versions are now available in /alpha under createLegacyFieldExtension and LegacyScaffolderPage if you're running into issues, but be aware that these will be removed in a next mainline release.
button prop from used MaterialUI MenuItem component fixing incompatibility with MaterialUI v5.@rjsf/utils to 5.13.6.
Updated dependency @rjsf/core to 5.13.6.
Updated dependency @rjsf/material-ui to 5.13.6.
Updated dependency @rjsf/validator-ajv8 to 5.13.6.EntityRefLinks with hideIcons property to avoid double iconsf3ab9cfcb7: Made shut down stale tasks configurable.
There are two properties exposed:
scaffolder.processingInterval - sets the processing interval for staled tasks.scaffolder.taskTimeoutJanitorFrequency - sets the task's heartbeat timeout, when to consider a task to be staled.7d5a921114: Allow using globby's negative matching with copyWithoutTemplating/copyWithoutRender. This allows including an entire subdirectory while excluding a single file so that it will still be templated instead of needing to list every other file and ensure the list is updated when new files are added.
5e4127c18e: Allow setting update: true in publish:github:pull-request scaffolder action
github:environment:create scaffolder action & improve related testsknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support."exports" field for /alpha subpath export.github:webhook scaffolder action & improve related testsgithub:deployKey:create scaffolder action & improve related testspublish:github:pull-request scaffolder action & improve related tests3fdffbb699: Release design improvements for the Scaffolder plugin and support v5 of @rjsf/* libraries.
This change should be non-breaking. If you're seeing typescript issues after migrating please open an issue
The next versions like createNextFieldExtension and NextScaffolderPage have been promoted to the public interface under createScaffolderFieldExtension and ScaffolderPage, so any older imports which are no longer found will need updating from @backstage/plugin-scaffolder/alpha or @backstage/plugin-scaffolder-react/alpha will need to be imported from @backstage/plugin-scaffolder and @backstage/plugin-scaffolder-react respectively.
The legacy versions are now available in /alpha under createLegacyFieldExtension and LegacyScaffolderPage if you're running into issues, but be aware that these will be removed in a next mainline release.
backstage:featureFlag in scaffolder/next by sorting out manifest.steps.@rjsf/utils to 5.13.6.
Updated dependency @rjsf/core to 5.13.6.
Updated dependency @rjsf/material-ui to 5.13.6.
Updated dependency @rjsf/validator-ajv8 to 5.13.6.EntityRefLinks with hideIcons property to avoid double iconsnot-found will be published when a user visits a documentation site that does not exist@backstage/frontend-plugin-api./alpha.react-dom/client import to use import(...) rather than require(...).cross-fetch to ^4.0.0.createRoot API from react-dom/client will now be used if present.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyDocsBuildStrategy type to @backstage/plugin-techdocs-node and deprecate ShouldBuildParameters type.RouterOptions.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.DocsBuildStrategy type to @backstage/plugin-techdocs-node and deprecate ShouldBuildParameters type.@smithy/node-http-handler instead of the @aws-sdk/node-http-handleraws-sdk-client-mock to ^3.0.0.a873a32a1f: Added support for the new backend system.
In your packages/backend/src/index.ts make the following changes:
import { createBackend } from '@backstage/backend-defaults';
const backend = createBackend();
// ... other feature additions
+ backend.add(import('@backstage/plugin-vault-backend');
backend.start();
If you use the new backend system, the token renewal task can be defined via configuration file:
vault:
baseUrl: <BASE_URL>
token: <TOKEN>
schedule:
+ frequency: ...
+ timeout: ...
+ # Other schedule options, such as scope or initialDelay
If the schedule is omitted or set to false no token renewal task will be scheduled.
If the value of schedule is set to true the renew will be scheduled hourly (the default).
In other cases (like in the diff above), the defined schedule will be used.
DEPRECATIONS: The interface VaultApi and the type VaultSecret are now deprecated. Import them from @backstage/plugin-vault-node.
default wrapping when dynamically importing CommonJS modules with default exports.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.aws-sdk-client-mock to ^3.0.0.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.cross-fetch to ^4.0.0.typescript-json-schema to ^0.62.0.core.type marker for AppRouter and FlatRoutes.81c8db2088: Fix RoutedTabs so that it does not explode without tabs.
eb817ee6d4: Fix spacing inconsistency with links and labels in headers
f28c11743a: Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template
6c2b872153: Add official support for React 18.
e07570a740: Fixed an issue causing the Select component to show empty chips when some of the selected values did not match any item
7bdc1b0a12: Fixed compatibility with Safari <16.3 by eliminating RegEx lookbehind in extractInitials.
This PR also changed how initials are generated resulting in John Jonathan Doe => JD instead of JJ.
66071b42c0: Make the options.titleFormat prop of <StructuredMetadataTable /> apply to all keys including nested ones. Previously, this option would only apply to the root keys of the metadata prop.
Document and improve the props of <StructuredMetadataTable />. Previously, the options prop was any.
71c97e7d73: Fixed the type declaration of DependencyGraphProps, the defs prop now expects JSX.Elements.
0c5b78650c: Reverting the MissingAnnotationEmptyState component due to cyclical dependency. This component is now deprecated, please use the import from @backstage/plugin-catalog-react instead to use the new functionality
4b7d341746: Updated dependency linkify-react to 4.1.2.
0ef24425c1: Updated dependency linkifyjs to 4.1.2.
4aa43f62aa: Updated dependency cross-fetch to ^4.0.0.
Updated dependencies
770763487a: Cleaned up cases where deprecated code was being used but had a new location they should be imported from
013611b42e: knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.
You can do the same in your own Backstage repository to ensure that you get future node 18+ relevant updates, by having the following lines in your packages/backend/package.json:
"dependencies": {
// ...
"knex": "^3.0.0"
},
"devDependencies": {
// ...
"better-sqlite3": "^9.0.0",
f577e1176f: Bumped create-app version.
6c2b872153: Add official support for React 18.
ae1602e54d: If create app installs dependencies, don't suggest to user that they also need to do it.
e6b7ab8d2b: Added missing node-gyp dependency to fix Docker image build
Updated dependencies
react-dom/client import to use import(...) rather than require(...).createRoot API from react-dom/client will now be used if present.Azure Active Directory re-brand to Entra IDcross-fetch to ^4.0.0.aws-sdk-client-mock-jest to ^3.0.0.aws-sdk-client-mock to ^3.0.0.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependency@types/marked to ^5.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyMissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependency@types/jest to ^29.0.0.cross-fetch to ^4.0.0.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.README.md.a3236ad0ca: Fix link to the repository in README.md.
3979524c74: Added support for specifying a domain hint on the Microsoft authentication provider configuration.
fde212dd10: Re-add the missing profile photo as well as access token retrieval for foreign scopes.
Additionally, we switch from previously 48x48 to 96x96 which is the size used at the profile card.
5aeb14f035: Correctly mark the client secret in configuration as secret
2817115d09: Removed prompt=consent from start method to fix #20641
Updated dependencies
pinniped provider.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.cross-fetch to ^4.0.0.button prop from used MaterialUI MenuItem component fixing incompatibility with MaterialUI v5.@backstage/cli.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support."exports" field for /alpha subpath export.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyaws-sdk-client-mock-jest to ^3.0.0.aws-sdk-client-mock to ^3.0.0.AnalyzeOptions and ScmLocationAnalyzer types from @backstage/plugin-catalog-nodeknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.Azure Active Directory re-brand to Entra IDknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support./alpha subpath.app.title configuration is now properly required to be a string.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyMissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyMissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.button prop from used MaterialUI MenuItem component fixing incompatibility with MaterialUI v5.@types/pluralize to ^0.0.33.cross-fetch to ^4.0.0.@types/pluralize to ^0.0.32.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.aws-sdk-client-mock to ^3.0.0.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyMissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyd86b2acec4: Fix bug where retrieveAll method wasn't fetching visits
3fdffbb699: Remove the duplicate versions of @rjsf/* as they're no longer needed
6c2b872153: Add official support for React 18.
5b364984bf: Added experimental support for declarative integration via the /alpha subpath.
c838da0edd: Updated dependency @rjsf/utils to 5.13.6.
Updated dependency @rjsf/core to 5.13.6.
Updated dependency @rjsf/material-ui to 5.13.6.
Updated dependency @rjsf/validator-ajv8 to 5.13.6.
cc0e8d0b51: Temporarily pin the react-grid-layout sub-dependency to version 1.3.4 while the horizontal resizing of the latest version is not fixed. For more details, see #20712.
302316d231: Added a new Featured Docs component to plugin-home, which can display any entity given a filter.
import { FeaturedDocsCard } from '@backstage/plugin-home';
<FeaturedDocsCard
filter={{
'spec.type': 'documentation',
'metadata.name': 'getting-started-with-backstage',
}}
subLinkText="More Details"
emptyState={emptyStateReactNode}
linkDestination={'/customPath'}
responseLimit={5}
/>
See the storybook examples
Updated dependencies
@rjsf/utils to 5.13.6.
Updated dependency @rjsf/core to 5.13.6.
Updated dependency @rjsf/material-ui to 5.13.6.
Updated dependency @rjsf/validator-ajv8 to 5.13.6.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependency@types/jenkins to ^1.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependency"exports" field for /alpha subpath export.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyresourcequotas as part of the Default Objects to fetch from the kubernetes apiMissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyresourcequotas as part of the Default Objects to fetch from the kubernetes api0f4cad6da0: Internal refactor to avoid a null pointer problem
6c2b872153: Add official support for React 18.
b52f576f48: Make sure types exported by other kubernetes plugins in the past are exported again after the creation
of the react package.
Some types have been moved to this new package but the export was missing, so they were not available anymore for developers.
Updated dependencies
MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0."exports" field for /alpha subpath export.cross-fetch to ^4.0.0.cross-fetch to ^4.0.0.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support."exports" field for /alpha subpath export.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencygitlab:projectAccessToken:create scaffolder action & improve related teststype in Template.v1beta3.schema.json schema"exports" field for /alpha subpath export.@backstage/frontend-plugin-api./alpha export.supertest pass through from @backstage/backend-openapi-utils._refresh endpoint.knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.Lunr search engine implementation.@backstage/frontend-plugin-api.SearchResultGroupLayout are now always explicitly rendered as strings by default.createSearchResultListItem extension factory.cross-fetch to ^4.0.0.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencycross-fetch to ^4.0.0."exports" field for /alpha subpath export.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependencyMissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependency/alpha subpath.cross-fetch to ^4.0.0.b168d7e7ea: Deprecate package in favor of the new @backstage/plugin-search-backend-module-stack-overflow-collator module.
The search collator requestParams option is optional now, so its default value is { order: 'desc', sort: 'activity', site: 'stackoverflow' } as defined in the Try It section on the official Stack Overflow API documentation.
Updated dependencies
knex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support.factRetrieverId to the fact retriever's logger metadata.@backstage/frontend-plugin-api.cross-fetch to ^4.0.0."exports" field for /alpha subpath export.@backstage/frontend-plugin-api.cross-fetch to ^4.0.0.@backstage/configknex has been bumped to major version 3 and better-sqlite3 to major version 9, which deprecate node 16 support."exports" field for /alpha subpath export.MissingAnnotationEmptyState from @backstage/plugin-catalog-react to remove the cyclical dependency