v1.31.0
These are the release notes for the v1.31.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
Backend System 1.0 🎉
The time has come for releasing the new Backend System as stable version 1.0! This means that the API is now stable and breaking changes should not occur until version 2.0, see our package versioning policy for more information about this.
There is documentation in place both for migrating backends and migrating plugins, and we encourage you to start doing so as soon as possible. Going forward, we will increasingly refer to this as "The backend system", and the previous one as "The old backend system". The main Backstage and community-plugins repositories have already been more or less fully migrated over.
The backend system brings a host of improvements to the way that backends and their features are constructed. Instead of the old convention-based structure that could lead to migration pains, features now fit together with dependency injection like a jigsaw puzzle while leveraging powerful core services and extending each other dynamically with additional behaviors. And this is just scratching the surface of it - do check out the docs!
We are very excited about this important milestone after a long period of development and refinement together with our passionate community, and hope that you will find it as refreshing and simple yet powerful as it was envisioned to be. This also lays the foundation for us being able to continue iterating at a high pace without incurring undue end user breakages during upgrades.
Keep the feedback coming! Either on the Community Discord, or through issues on GitHub. Also if you’re looking for a way to help, please take a look at these backstage and community plugins issues about deprecating old-backend capabilities of already migrated plugins.
Technical details
At a technical level, the following packages are now on major version 1, and their major version 0 will stop receiving feature updates:
@backstage/backend-app-api
@backstage/backend-plugin-api
@backstage/backend-test-utils
The following packages are deprecated and frozen (have stopped receiving updates). Please use the above three packages and @backstage/backend-defaults
to replace them. You may still use the compatibility adapters in @backstage/backend-common
short term while performing a gradual migration.
@backstage/backend-common
@backstage/backend-tasks
The following core services have been entirely removed. Please migrate to the new auth system.
coreServices.identity
coreServices.tokenManager
The backwards compatibility with plugins using legacy auth through the token manager service has also been removed. This means that instead of falling back to using the old token manager, requests towards plugins that don't support the new auth system will simply fail. Please make sure that all plugins in your deployment are hosted within a backend instance from the new backend system; a mixture of new and old will lead to auth problems.
For a lot more detail about what changed and what migration steps might be needed, check the release notes for versions 1.27, 1.28, 1.29 and 1.30.
New Frontend System Updates
Some new things have landed in this version for the continued work on the New Frontend System. We’ve introduced the @backstage/plugin-app
package, which is now responsible for housing the built in extensions and providing an entry point to override them using appPlugin.override()
.
There’s a new round of deprecations as we move forward with the New Frontend System. Namespace is no longer required to be provided to all extensions, or Blueprints and their respective .make
or .makeWithOverrides
methods. This will now default to the ID of the plugin that they are installed alongside.
We’ve deprecated createExtensionOverrides
and introduced a new createFrontendModule
method which replaces it and takes a required pluginId
for which to associate the extensions that you’re providing to override or compliment the corresponding plugin.
We’ve also deprecated the createApp
import from @backstage/frontend-app-api
and you should now use the same import from @backstage/frontend-defaults
instead which aligns nicely to the New Backend System patterns.
There’s more information on the above deprecations and migrations in the 1.31 migration docs
We’ve removed V1 extension support, so all extensions should now be defined with the array form of outputs, instead of the previously deprecated object form.
All previous extension creators that have the Blueprint equivalent have also been removed as they were previously deprecated. Instead of create<Kind>Extension
you should migrate to using <Kind>Blueprint.make
instead.
Also the deprecated .render
method has been removed from createExtensionTester
, you should be able to use renderInTestApp
directly with the tester.reactElement()
instead.
There’s also migration docs for the above removals from the last deprecation ICYMI!
Yarn v4 by Default
When creating a new Backstage repository with @backstage/create-app
, it will now be powered by Yarn version 4. There have been several improvements in later versions of Yarn, so this should improve the experience when getting started.
If you are still on version 1 in your pre-existing repository, there’s a guide for getting onto newer releases. At this point we recommend moving ahead with moving off of version 1 of Yarn.
Contributed by @awanlin in #26610
App Runtime Templating
The @backstage/plugin-app-backend
now supports injection of all parts of the frontend configuration at runtime, including the public path and configuration values that are templated into index.html
.
The build process for frontend apps in the @backstage/cli
now outputs an additional index.html.tmpl
file. If this file is present in the build, the app
backend will use this file to template a new index.html
using the configuration that’s present in the app
backend. This change also switches the full frontend configuration to be injected directly into the index.html
file inside a script
tag, rather than deep in the static resources.
Guest auth no longer halting production startup
The @backstage/plugin-auth-backend-module-guest-provider
module will no longer cause the backend to fail to start up in production, it now instead refuses authentication attempts. The halting of the startup could lead to knock-on effects such as migration tables staying locked.
New Catalog Permissions
The analyze-location
endpoint of the catalog is now protected by the catalog.location.analyze
permission, and the validate-entity
endpoint is now protected by the catalog.entity.validate
permission. If you have enabled the permissions system, you may want to adjust your policy accordingly.
Contributed by @04kash in #25924
GitLab Provider
The GitLab org entity provider now has a new relations
configuration option that controls how GitLab memberships are modeled in Backstage. As part of this change the existing allowInherited
option has been deprecated as it can now be expressed as relations: [INHERITED]
.
Contributed by @elaine-mattos in #25363
Star Icon Overrides
Allow custom star icons to be provided via the star and unstarred icon overrides. See how to override existing icons in the Backstage documentation.
Migrated Auth Providers
The last two backend auth providers - Auth0 and BitBucket Server - were migrated to new backend modules, closing the big community effort in getting the auth providers migration done.
Thanks again to everyone who helped out, it is greatly appreciated!
Catalog Client Performance Improvements
A hotspot was found in the code, where calls to the catalog backend to fetch entities performed work on the client side that were better done on the server side. After this update, you may see significant reduction in CPU usage on callers that fetch large amounts of data from the catalog.
Contributed by @drodil in #26240
New Catalog Service Mocks
When testing features that interact with the catalog, it’s common to want to inject a mocked or faked catalog client. To make life simpler, we’ve added a catalogServiceMock
to @backstage/plugin-catalog-node/testUtils
. Just like many of the mockServices
from the test backend utilities, it lets you create partial mocks to make assertions on, as well as entire fake catalogs pre-populated with a static set of entities. Check it out!
Scaffolder Fixes
Added support for liveOmit
and omitExtraData
options to the form which will allow for trimming superfluous data from the resulting data collected from the user. We will be testing this one for this release and promote this as the default if all goes to plan for the next mainline release. Thanks @jboeijenga!
@stepghenglass has been on a roll, and contributed a bunch of fixes for the Scaffolder and the SecretField
. It now supports being disabled
, required
and maxLength
and minLength
being set from the schema. They’ve also contributed some fixes for the ReviewState
component, to correctly parse the ui:backstage
options for nested fields in the parameters schema. Thanks to @richcooper95 for some other improvements to that component too and making it look much better when you have nested properties in the summary 💅.
Security Fixes
- Fix in the Catalog backend where a vulnerability could be exploited to disrupt the backend instance availability.
- A fix for a vulnerability in the TechDocs backend that could allow unauthorized access to TechDocs content when hosting the content externally.
- A fix for a vulnerability in the TechDocs backend that could allow authenticated users to bypass script injection protections.
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.