v1.30.0
These are the release notes for the v1.30.0 release of Backstage.
A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done.
Highlights
New Frontend System - Plugin Adoption
This release marks another big milestone for the New Frontend System. We encourage all plugin owners to add support for the new frontend system to their plugins.
At the end of last year in the 1.21 release, we shipped the New Frontend System Alpha. It marked a more stable release of the new system, but we knew there was still much more work left to be done. Since then we have received valuable feedback and identified key areas of improvement. In particular around the creation of new extension kinds as well as overriding and testing of extensions.
Over the summer months we’ve been working hard towards addressing this feedback and getting the New Frontend System in shape for us to be confident in encouraging broader adoption by plugins. For a summary of the changes you can check out the 1.30 migration documentation, or can see the ongoing progress in the meta issue. With this release comes some new features, deprecations and breaking changes in the @backstage/frontend-app-api
, @backstage/frontend-plugin-api
, and @backstage/core-compat-api
packages.```
Breaking:
- All types of route references in the New Frontend System are now optional. This means that all usages of
useRouteRef
in the new system might returnundefined
, and your code must be able to act accordingly. Code that uses the old system (which will be the vast majority of code at this point) is not affected by this.
New:
- Blueprints and
createExtensionBlueprint
as a replacement for extension creators. You will find that old extension creators are marked as deprecated, and point to the corresponding blueprints which have a superior developer experience! - Ability to override individual extensions using
extension.override(...)
, as well as overriding extensions in a plugin using a combination ofplugin.withOverrides([...])
andplugin.getExtension(id)
to replace individual extensions or add new ones. createExtensionTester
supports.get
and.query
to directly access extension data and streamline tests decoupled from React, as well as a.reactElement
shorthand for accessing any output React elements.- A new set of utilities that can patch support for the new frontend system for a plugin that otherwise only supports the old one. The new
convertLegacyPlugin
is used to convert a plugin instance, whileconvertLegacyPageExtension
with friends can convert extensions from the old system.
Deprecations:
createPlugin
has been renamed tocreateFrontendPlugin
createExtension
with object keys forinputs
andoutputs
has been deprecated in favor of the array form.configSchema
increateExtension
has been replaced withconfig.schema
which is a better alternative to declaring config for extensions without having to usecreateSchemaFromZod
.- Existing
dataRefs
should now embed the ID using the.with
method. - The
render
method oncreateExtensionTester
has been deprecated in favor of composing.reactElement
withrenderInTestApp
.
BREAKING: Backend System deprecations and removals
- Almost all service factories in
@backstage/backend-app-api
were marked deprecated some time back - those are now removed. Please import them from their new homes in@backstage/backend-defaults/<service>
instead. - In our effort to migrate to the new backend system some backend-plugins
createRouter
exports have been marked as deprecated. Please make sure to update your backends accordingly ascreateRouter
will eventually be removed from all plugin exports. - Several deprecated methods and types have been removed from backend related packages. Most of these are either renamed and re-exported from other packages, see the CHANGELOG for the individual package for more information.
Most notably the long deprecated UrlReader
exports have been renamed:
ReadUrlOptions
: UseUrlReaderServiceReadUrlOptions
instead;ReadUrlResponse
: UseUrlReaderServiceReadUrlResponse
instead;ReadTreeOptions
: UseUrlReaderServiceReadTreeOptions
instead;ReadTreeResponse
: UseUrlReaderServiceReadTreeResponse
instead;ReadTreeResponseFile
: UseUrlReaderServiceReadTreeResponseFile
instead;ReadTreeResponseDirOptions
: UseUrlReaderServiceReadTreeResponseDirOptions
instead;SearchOptions
: UseUrlReaderServiceSearchOptions
instead;SearchResponse
: UseUrlReaderServiceSearchResponse
instead;SearchResponseFile
: UseUrlReaderServiceSearchResponseFile
instead.
BREAKING: Auth Sign In Resolver Priority
Sign-in resolvers configured via .signIn.resolvers
in your app-config now take precedence over sign-in resolvers passed to signInResolver
option of createOAuthProviderFactory
. This effectively makes sign-in resolvers passed via the signInResolver
the default ones, which you can then override through configuration, simplifying deploying the same code in multiple environments.
BREAKING: @backstage/cli
The lockfile (yarn.lock
) dependency analysis and mutations have been removed from several commands. This means that versions:bump
will no longer attempt to deduplicate after bumping and modifying the lockfile.
The versions:check
command has also been removed as its only purpose was to verify and mutate the lockfile. We recommend using the yarn dedupe
command instead, or the yarn-deduplicate
package if you're using Yarn classic, as a replacement. This change was made in order for us to support other Package Managers in the future and remove the coupling with yarn
.
BREAKING: @backstage/backend-test-utils
setupRequestMockHandlers
is removed; useregisterMswTestHooks
instead.MockDirectoryOptions
is removed; useCreateMockDirectoryOptions
instead.- Stopped exporting the deprecated and internal
isDockerDisabledForTests
helper. - Removed
get
method fromServiceFactoryTester
which is replaced bygetSubject
Scaffolder Internationalization
Thanks to @mario-mui we now have i18n support for another core feature! Contributed in #25827
Dynamic Backend Feature Loaders
You can now use createBackendFeatureLoader
to dynamically load features in the backend, for example based on runtime configuration, and many other exciting possibilities. Check out the docs!
Security Fixes
The AWS ALB auth provider now has a configuration option signer
, which should be set to the ARN of your ALB instance. We strongly recommend that you set this configuration value, since it will help strengthen your installation.
Example:
auth:
providers:
awsalb:
issuer: ...
# put your actual ARN here
+ signer: 'arn:aws:elasticloadbalancing:us-east-2:123456789012:loadbalancer/app/my-load-balancer/1234567890123456'
region: ...
signIn:
resolvers:
- resolver: ...
Upgrade path
We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for keeping Backstage updated.
Links and References
Below you can find a list of links and references to help you learn about and start using this new release.
- Backstage official website, documentation, and getting started guide
- GitHub repository
- Backstage's versioning and support policy
- Community Discord for discussions and support
- Changelog
- Backstage Demos, Blog, Roadmap and Plugins
Sign up for our newsletter if you want to be informed about what is happening in the world of Backstage.