Skip to main content

v1.34.0

These are the release notes for the v1.34.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

BREAKING: New version of keyv, Redis

Our builtin core cache service is based on keyv, whose redis integration has been upgraded. This fixes issues that the old version had especially in relation to redis sets. If you were setting useRedisSets: false, note that the layout of your key space may be slightly affected after this change.

Contributed by @eipc16 in #27716, and more information can be found within that changeset.

BREAKING: Route change for notifications

If you are interacting directly with the notifications backend plugin API, it now no longer uses the / root route but rather a /notifications sub-route. This aligns it with our standards. The old routes are still available in the notifications backend, but the frontend will use the new routes.

BREAKING: Scaffolder Gitlab module

We’ve upgraded to the most recent version of the gitbeaker library that speaks to Gitlab. In doing so, the scopes parameter of the gitlab:projectDeployToken:create action is no longer optional, so you will have to pass it a value (for example ['read_repository']).

Catalog performance improvements

Since last month’s release, we have been putting a lot of focus on catalog performance, scouring through the metrics and improving several standout peaks. Among other things you may find that provider ’delta’ mutations as well as some API calls are significantly faster.

There is also a new experimental catalog.disableRelationsCompatibility configuration option that, when set to true, avoids JSON deserialization and serialization if possible when reading entities. This significantly reduces the memory usage of the catalog, and slightly increases performance, but it removes the backwards compatibility processing that ensures that both entity.relation[].target and entity.relation[].targetRef are present in returned entities. Do let us know if you find any problems in case you feel adventurous and enable this flag! Just be aware that the API response shape does change slightly if you do, as outlined above.

Direct Google CloudSQL Postgres support

You can now connect directly to your Google CloudSQL Postgres databases with IAM auth, without having to use sidecars or similar proxies. Update your backend.database.connection:

connection:
type: cloudsql
instance: my-project:europe-west1:a-db-instance
# ... other settings

New integration: Azure blob storage

Azure blob storage is now better supported, both in terms of a low level integration package addition, as well as gaining a catalog entity provider that can read directly out of your storages. Head straight to the docs if this sounds interesting.

Contributed by @Nikunj0601 in #27850

Lifecycle and health

The default readiness endpoint now immediately starts returning HTTP 503 errors when the process is asked to shut down. Pairing this with the backend.lifecycle.serverShutdownDelay configuration option allows you to let your ingress detect the impending shutdown and drain traffic gracefully before the service finally stops. This helps with zero-downtime deployments.

On the path to implementing that, the coreServices.rootLifecycle service gained a new addBeforeShutdownHook method whose registered hooks will run immediately when a termination signal is received. The backend will not proceed with the shutdown and run the regular Shutdown hooks until all BeforeShutdown hooks have completed.

If you were using the startupRequestPauseTimeout setting of the lifecycle service in code, you should now instead set it in the backend.lifecycle.startupRequestPauseTimeout config, next to the one mentioned above.

Bitbucket API throttling

The Bitbucket integration (URL reader and catalog provider) now apply throttling to outgoing requests, to avoid hitting rate limits. Let us know how it affected your service!

Contributed by @kjjuno in #27850

Support for custom service-to-service tokens

Do you have a pre-existing service-to-service auth scheme that you would like Backstage installations to leverage instead of only the native Backstage tokens? There’s now a plugin token handler decorator interface that allows for injecting yourself in just the right spot in the auth chain, without having to reimplement the whole auth core service. It’s all covered in the docs!

Further improvements to the yarn plugin

The yarn plugin received a number of updates, making it more conformant with yarn semantics. It now works better behind corporate proxies and uses an improved way of persisting resolutions in the lockfile. On top of it all, its on-disk footprint was reduced massively.

If you use the classical yarn backstage-cli versions:bump command, it now also ensures that the installed plugin itself stays updated with the latest and greatest without any further action on your part.

Contributed by @mtlewis over several pull requests.

Removing node-fetch in the backend

ADR014 replaces its predecessor ADR to recommend using native undici-based fetch instead of node-fetch in all backend packages. As a result we have almost entirely performed that shift in our core libraries and plugins, and recommend that plugin authors and adopters do the same when they can.

This change should not be noticeable for most adopters. If you see any ill effects of it, please report it to the maintainers.

Security Fixes

This release does not contain any security fixes.

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.

Below you can find a list of links and references to help you learn about and start using this new release.

Sign up for our newsletter if you want to be informed about what is happening in the world of Backstage.