99 KiB
@backstage/frontend-plugin-api
0.15.0-next.1
Minor Changes
6573901: BREAKING: Removed the deprecatedAnyExtensionDataReftype. UseExtensionDataRefwithout type parameters instead.a9440f0: BREAKING: Simplified theExtensionAttachTotype to only support a single attachment target. The array form for attaching to multiple extension points has been removed. Also removed the deprecatedExtensionAttachToSpectype alias.
Patch Changes
8a3a906: DeprecatedNavItemBlueprint. Nav items are now automatically inferred fromPageBlueprintextensions based on theirtitleandiconparams.b15a685: DeprecatedwithApis, use thewithApisexport from@backstage/core-compat-apiinstead.0452d02: Add optionaldescriptionfield to plugin-level feature flags.1bec049: Fixed inconsistentJSX.Elementtype reference in theDialogApiDialog.updatemethod signature.2c383b5: DeprecatedAnalyticsImplementationBlueprintandAnalyticsImplementationFactoryin favor of the exports from@backstage/plugin-app-react.dab6c46: Deprecated theExtensionFactoryMiddlewaretype, which has been moved to@backstage/frontend-app-api.d0206c4: Removed the deprecateddefaultPathmigration helper fromPageBlueprintparams.edb872c: Renamed thePageTabtype toPageLayoutTab. The oldPageTabname is now a deprecated type alias.fe848e0: ChangeduseApiHolderto return an emptyApiHolderinstead of throwing when used outside of an API context.
0.14.2-next.0
Patch Changes
9c81af9: Made thepluginIdproperty optional in theFrontendFeaturetype, allowing plugins published against older versions of the framework to be used without type errors.- Updated dependencies
- @backstage/errors@1.2.7
- @backstage/types@1.2.2
- @backstage/version-bridge@1.0.12
0.14.0
Minor Changes
-
ef6916e: AddedIconElementtype as a replacement for the deprecatedIconComponent. TheIconsApinow has a newicon()method that returnsIconElement, while the existinggetIcon()method is deprecated. TheIconBundleBlueprintnow accepts bothIconComponentandIconElementvalues. -
bb9b471: Plugin IDs that do not match the standard format are deprecated (letters, digits, and dashes only, starting with a letter). Plugin IDs that do no match this format will be rejected in a future release. -
ef6916e: AddedSubPageBlueprintfor creating sub-page tabs,PluginHeaderActionBlueprintandPluginHeaderActionsApifor plugin-scoped header actions, andPageLayoutas a swappable component. ThePageBlueprintnow supports sub-pages with tabbed navigation, page title, icon, and header actions. Plugins can now specify atitleandiconincreateFrontendPlugin. -
c38b74d: BREAKING: The following blueprints have been removed and are now only available from@backstage/plugin-app-react:IconBundleBlueprintNavContentBlueprintRouterBlueprintSignInPageBlueprintSwappableComponentBlueprintThemeBlueprintTranslationBlueprint
-
10ebed4: BREAKING: Removed type support for multiple attachment points in theExtensionDefinitionAttachTotype. Extensions can no longer specify an array of attachment points in theattachToproperty.The runtime still supports multiple attachment points for backward compatibility with existing compiled code, but new code will receive type errors if attempting to use this pattern.
Extensions that previously used multiple attachment points should migrate to using a Utility API pattern instead. See the Sharing Extensions Across Multiple Locations guide for the recommended approach.
Patch Changes
-
7edb810: Added a newinternaloption tocreateExtensionInputthat marks the input as only allowing attachments from the same plugin. -
9554c36: DEPRECATED: Multiple attachment points for extensions have been deprecated. The functionality continues to work for backward compatibility, but will log a deprecation warning and be removed in a future release.Extensions using array attachment points should migrate to using Utility APIs instead. See the Sharing Extensions Across Multiple Locations guide for the recommended pattern.
-
53b6549: Plugins in the new frontend system now have apluginIdfield rather thanidto better align with naming conventions used throughout the frontend and backend systems. The old field is still present but marked as deprecated. All internal code has been updated to preferpluginIdwhile maintaining backward compatibility by falling back toidwhen needed. -
a7e0d50: Updatedreact-router-dompeer dependency to^6.30.2and explicitly disabled v7 future flags to suppress deprecation warnings. -
69d880e: Bump to latest zod to ensure it has the latest features -
Updated dependencies
- @backstage/version-bridge@1.0.12
0.14.0-next.2
Patch Changes
a7e0d50: Prepare for React Router v7 migration by updating to v6.30.2 across all NFS packages and enabling v7 future flags. Convert routes from splat paths to parent/child structure with Outlet components.- Updated dependencies
- @backstage/version-bridge@1.0.12-next.0
0.14.0-next.1
Minor Changes
-
bb9b471: Plugin IDs that do not match the standard format are deprecated (letters, digits, and dashes only, starting with a letter). Plugin IDs that do no match this format will be rejected in a future release. -
10ebed4: BREAKING: Removed type support for multiple attachment points in theExtensionDefinitionAttachTotype. Extensions can no longer specify an array of attachment points in theattachToproperty.The runtime still supports multiple attachment points for backward compatibility with existing compiled code, but new code will receive type errors if attempting to use this pattern.
Extensions that previously used multiple attachment points should migrate to using a Utility API pattern instead. See the Sharing Extensions Across Multiple Locations guide for the recommended approach.
0.14.0-next.0
Minor Changes
-
c38b74d: BREAKING: The following blueprints have been removed and are now only available from@backstage/plugin-app-react:IconBundleBlueprintNavContentBlueprintRouterBlueprintSignInPageBlueprintSwappableComponentBlueprintThemeBlueprintTranslationBlueprint
Patch Changes
-
7edb810: Added a newinternaloption tocreateExtensionInputthat marks the input as only allowing attachments from the same plugin. -
9554c36: DEPRECATED: Multiple attachment points for extensions have been deprecated. The functionality continues to work for backward compatibility, but will log a deprecation warning and be removed in a future release.Extensions using array attachment points should migrate to using Utility APIs instead. See the Sharing Extensions Across Multiple Locations guide for the recommended pattern.
-
53b6549: Plugins in the new frontend system now have apluginIdfield rather thanidto better align with naming conventions used throughout the frontend and backend systems. The old field is still present but marked as deprecated. All internal code has been updated to preferpluginIdwhile maintaining backward compatibility by falling back toidwhen needed. -
69d880e: Bump to latest zod to ensure it has the latest features -
Updated dependencies
- @backstage/errors@1.2.7
- @backstage/types@1.2.2
- @backstage/version-bridge@1.0.11
0.13.3
Patch Changes
-
3bd2a1a: Updated documentation forcreateApiRefto clarify the role of the ID in specifying the owning plugin of an API. -
9ccf84e: The following blueprints are being restricted to only be used in app plugin overrides and modules. They are being moved to the@backstage/plugin-app-reactpackage and have been deprecated:AppRootWrapperBlueprintIconBundleBlueprintNavContentBlueprintRouterBlueprintSignInPageBlueprintSwappableComponentBlueprintThemeBlueprintTranslationBlueprint
-
4554a4e: Added an alphaPluginWrapperBlueprintexported from@backstage/frontend-plugin-api/alpha, which can install components that will wrap all plugin elements. -
872eb91: Upgradezod-to-json-schemato latest version
0.13.2
Patch Changes
-
75683ed: Added a newerrorPresentationprop toExtensionBoundaryto control how errors are presented to the user. The default is'error-display', which is the current behavior of showing the error in theErrorDisplaycomponent. The new option is'error-api', posts errors to theErrorApiand does not allow retries.The
AppRootElementBlueprintnow wraps its element in anErrorBoundaryusing the new'error-api'presentation mode. -
0bc1ce9: Fixed a versioning conflict that could result in a.withContextis not a function error. -
f3f84f1: Made the return type of.withOverridesto be simplified. -
97cd16f: Reversed the relationship between the old@backstage/core-plugin-apiand the new@backstage/frontend-plugin-api. Previously, the a lot of API definitions and utilities where defined in the old and re-exported from the old, but this change flips that around so that they now reside in the new package and are re-exported from the old. The external API of both packages remain the same, but this is a step towards being able to add further compatibility with the new frontend system built into the old. -
9b8bde4: Removed unnecessary dependencies on@backstage/core-components,@backstage/config,@material-ui/core, andlodash.
0.13.2-next.1
Patch Changes
-
75683ed: Added a newerrorPresentationprop toExtensionBoundaryto control how errors are presented to the user. The default is'error-display', which is the current behavior of showing the error in theErrorDisplaycomponent. The new option is'error-api', posts errors to theErrorApiand does not allow retries.The
AppRootElementBlueprintnow wraps its element in anErrorBoundaryusing the new'error-api'presentation mode. -
f3f84f1: Made the return type of.withOverridesto be simplified. -
Updated dependencies
- @backstage/core-components@0.18.4-next.2
- @backstage/config@1.3.6
- @backstage/errors@1.2.7
- @backstage/types@1.2.2
- @backstage/version-bridge@1.0.11
0.13.2-next.0
Patch Changes
0bc1ce9: Fixed a versioning conflict that could result in a.withContextis not a function error.97cd16f: Reversed the relationship between the old@backstage/core-plugin-apiand the new@backstage/frontend-plugin-api. Previously, the a lot of API definitions and utilities where defined in the old and re-exported from the old, but this change flips that around so that they now reside in the new package and are re-exported from the old. The external API of both packages remain the same, but this is a step towards being able to add further compatibility with the new frontend system built into the old.- Updated dependencies
- @backstage/core-components@0.18.4-next.0
- @backstage/config@1.3.6
- @backstage/errors@1.2.7
- @backstage/types@1.2.2
- @backstage/version-bridge@1.0.11
0.13.0
Minor Changes
7d87b4f: RenamedExtensionDefinitiontoOverridableExtensionDefinitionand introduced a slimmerExtensionDefinitiontype that does not include override methods. The overridable type is generally used as an output type, while plainExtensionDefinitions are used for input. This reduces type conflicts across different of@backstage/frontend-plugin-api, improving long-term compatibility.
Patch Changes
-
4d03f08: Internal refactor of route reference implementations with minor updates to thetoStringimplementations. -
7c6a66d: Added support for plugin-relativeattachTodeclarations for extension definitions. This allows for the creation of extension and extension blueprints that attach to other extensions of a particularkindin the same plugin, rather than needing to provide the exact extension ID. This is particularly useful when wanting to provide extension blueprints with a built-in hierarchy where the extensions created from one blueprint attach to extensions created from the other blueprint, for example:// kind: 'tabbed-page' const parentPage = TabbedPageBlueprint.make({ params: {....} }) // attachTo: { kind: 'tabbed-page', input: 'tabs' } const child1 = TabContentBlueprint.make({ name: 'tab1', params: {....} }) -
878c251: Updated toExtensionInputto make all type parameters optional. -
05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript'serasableSyntaxOnlysetting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility. -
Updated dependencies
0.12.2-next.2
Patch Changes
-
7c6a66d: Added support for plugin-relativeattachTodeclarations for extension definitions. This allows for the creation of extension and extension blueprints that attach to other extensions of a particularkindin the same plugin, rather than needing to provide the exact extension ID. This is particularly useful when wanting to provide extension blueprints with a built-in hierarchy where the extensions created from one blueprint attach to extensions created from the other blueprint, for example:// kind: 'tabbed-page' const parentPage = TabbedPageBlueprint.make({ params: {....} }) // attachTo: { kind: 'tabbed-page', input: 'tabs' } const child1 = TabContentBlueprint.make({ name: 'tab1', params: {....} }) -
Updated dependencies
- @backstage/core-components@0.18.3-next.2
0.12.2-next.1
Patch Changes
878c251: Updated toExtensionInputto make all type parameters optional.- Updated dependencies
- @backstage/core-components@0.18.3-next.1
- @backstage/core-plugin-api@1.11.2-next.1
0.12.2-next.0
Patch Changes
05f60e1: Refactored constructor parameter properties to explicit property declarations for compatibility with TypeScript'serasableSyntaxOnlysetting. This internal refactoring maintains all existing functionality while ensuring TypeScript compilation compatibility.- Updated dependencies
- @backstage/core-plugin-api@1.11.2-next.0
- @backstage/core-components@0.18.3-next.0
- @backstage/types@1.2.2
- @backstage/version-bridge@1.0.11
0.12.1
Patch Changes
8ed53eb: AddedcoreExtensionData.title, especially useful for creating extensible layout with tabbed pages, but available for use for other cases too.- Updated dependencies
0.12.1-next.2
Patch Changes
8ed53eb: AddedcoreExtensionData.title, especially useful for creating extensible layout with tabbed pages, but available for use for other cases too.- Updated dependencies
- @backstage/core-components@0.18.2-next.3
0.12.1-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.2-next.1
- @backstage/core-plugin-api@1.11.1-next.0
0.12.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.18.2-next.0
- @backstage/core-plugin-api@1.11.0
- @backstage/types@1.2.2
- @backstage/version-bridge@1.0.11
0.12.0
Minor Changes
894d514: MakeopenshiftApiRefavailable to the new frontend system.
Patch Changes
2fb8b04: Improved the types ofcreateFrontendPluginandcreateFrontendModuleso that errors due to incompatible options are indicated more clearly.- Updated dependencies
- @backstage/core-plugin-api@1.11.0
- @backstage/core-components@0.18.0
- @backstage/types@1.2.2
0.11.1-next.0
Patch Changes
2fb8b04: Improved the types ofcreateFrontendPluginandcreateFrontendModuleso that errors due to incompatible options are indicated more clearly.- Updated dependencies
- @backstage/core-components@0.17.6-next.0
0.11.0
Minor Changes
-
c5f88b5: BREAKING: Remove deprecatedsourceproperty from theAppNodeSpectype, useAppNodeSpec.plugininstead. -
e4ddf22: BREAKING: ThedefaultPathparam ofPageBlueprinthas been renamed topath. This change does not affect the compatibility of extensions created with older versions of this blueprint. -
fda1bbc: BREAKING: The component system has been overhauled to useSwappableComponentinstead ofComponentRef. Several APIs have been removed and replaced:- Removed:
createComponentRef,createComponentExtension,ComponentRef,ComponentsApi,componentsApiRef,useComponentRef,coreComponentRefs - Added:
createSwappableComponent,SwappableComponentBlueprint,SwappableComponentRef,SwappableComponentsApi,swappableComponentsApiRef
BREAKING: The default
componentRefsand exportedCore*Propshave been removed and have replacementSwappableComponentsand revised type names instead.- The
errorBoundaryFallbackcomponent andCoreErrorBoundaryFallbackPropstype have been replaced withErrorDisplayswappable component andCoreErrorDisplayPropsrespectively. - The
progresscomponent andCoreProgressPropstype have been replaced withProgressswappable component andProgressPropsrespectively. - The
notFoundErrorPagecomponent andCoreNotFoundErrorPagePropstype have been replaced withNotFoundErrorPageswappable component andNotFoundErrorPagePropsrespectively.
Migration for creating swappable components:
// OLD: Using createComponentRef and createComponentExtension import { createComponentRef, createComponentExtension, } from '@backstage/frontend-plugin-api'; const myComponentRef = createComponentRef<{ title: string }>({ id: 'my-plugin.my-component', }); const myComponentExtension = createComponentExtension({ ref: myComponentRef, loader: { lazy: () => import('./MyComponent').then(m => m.MyComponent), }, }); // NEW: Using createSwappableComponent and SwappableComponentBlueprint import { createSwappableComponent, SwappableComponentBlueprint, } from '@backstage/frontend-plugin-api'; const MySwappableComponent = createSwappableComponent({ id: 'my-plugin.my-component', loader: () => import('./MyComponent').then(m => m.MyComponent), }); const myComponentExtension = SwappableComponentBlueprint.make({ name: 'my-component', params: { component: MySwappableComponent, loader: () => import('./MyComponent').then(m => m.MyComponent), }, });Migration for using components:
// OLD: Using ComponentsApi and useComponentRef import { useComponentRef, componentsApiRef, useApi, coreComponentRefs, } from '@backstage/frontend-plugin-api'; const MyComponent = useComponentRef(myComponentRef); const ProgressComponent = useComponentRef(coreComponentRefs.progress); // NEW: Direct component usage import { Progress } from '@backstage/frontend-plugin-api'; // Use directly as React Component <Progress /> <MySwappableComponent title="Hello World" />Migration for core component references:
// OLD: Core component refs import { coreComponentRefs } from '@backstage/frontend-plugin-api'; coreComponentRefs.progress coreComponentRefs.notFoundErrorPage coreComponentRefs.errorBoundaryFallback // NEW: Direct swappable component imports import { Progress, NotFoundErrorPage, ErrorDisplay } from '@backstage/frontend-plugin-api'; // Use directly as React components <Progress /> <NotFoundErrorPage /> <ErrorDisplay plugin={plugin} error={error} resetError={resetError} /> - Removed:
-
6a75e00: BREAKING: Removed the deprecatedcreateFrontendPluginvariant where the plugin ID is passed via anidoption. To update existing code, switch to using thepluginIdoption instead. -
12b6db7: BREAKING: Added a newOverridableFrontendPlugintype that is used as the return value ofcreateFrontendPlugin. This type includes thewithOverridesand.getExtensionmethods that are helpful when creating plugin overrides, while the baseFrontendPlugintype no longer includes these methods. This is a breaking change for theAppTreeApiand some other places where theFrontendPlugintype is still used, but also fixes some cases where the extra plugin methods were causing issues. -
37f2989: BREAKING: Removed theroutableproperty fromExtensionBoundary. This property was never needed in practice and is instead inferred from whether or not the extension outputs a route reference. It can be safely removed. -
1e6410b: BREAKING: TheResolveInputValueOverridestype is no longer exported. -
29786f6: BREAKING: TheNavLogoBlueprinthas been removed and replaced byNavContentBlueprint, which instead replaces the entire navbar. The default navbar has also been switched to a more minimal implementation.To use
NavContentBlueprintto install new logos, you can use it as follows:NavContentBlueprint.make({ params: { component: ({ items }) => { return compatWrapper( <Sidebar> <SidebarLogo /> {/* Other sidebar content */} <SidebarScrollWrapper> {items.map((item, index) => ( <SidebarItem {...item} key={index} /> ))} </SidebarScrollWrapper> {/* Other sidebar content */} </Sidebar>, ); }, }, }); -
3243fa6: BREAKING: Removed the ability to define a default extensionnamein blueprints. This option had no practical purpose as blueprints already use thekindto identity the source of the extension. -
a082429: BREAKING: The separateRouteResolutionApiResolveOptionstype has been removed. -
5d31d66: BREAKING: In an attempt to align some of the API's around providing components toBlueprints, we've renamed the parameters for both theRouterBlueprintandAppRootWrapperBlueprintfromComponenttocomponent.// old RouterBlueprint.make({ params: { Component: ({ children }) => <div>{children}</div>, }, }); // new RouterBlueprint.make({ params: { component: ({ children }) => <div>{children}</div>, }, });// old AppRootWrapperBlueprint.make({ params: { Component: ({ children }) => <div>{children}</div>, }, }); // new AppRootWrapperBlueprint.make({ params: { component: ({ children }) => <div>{children}</div>, }, });As part of this change, the type for
componenthas also changed fromComponentType<PropsWithChildren<{}>>to(props: { children: ReactNode }) => JSX.Element | nullwhich is not breaking, just a little more reflective of the actual expected component. -
45ead4a: BREAKING: TheAnyRoutesandAnyExternalRoutestypes have been removed and their usage has been inlined instead.Existing usage can be replaced according to their previous definitions:
type AnyRoutes = { [name in string]: RouteRef | SubRouteRef }; type AnyExternalRoutes = { [name in string]: ExternalRouteRef }; -
805c298: BREAKING: TheApiBlueprinthas been updated to use the new advanced type parameters through the newdefineParamsblueprint option. This is an immediate breaking change that requires all existing usages ofApiBlueprintto switch to the new callback format. Existing extensions created with the old format are still compatible with the latest version of the plugin API however, meaning that this does not break existing plugins.To update existing usages of
ApiBlueprint, you remove the outer level of theparamsobject and replacecreateApiFactory(...)withdefineParams => defineParams(...).For example, the following old usage:
ApiBlueprint.make({ name: 'error', params: { factory: createApiFactory({ api: errorApiRef, deps: { alertApi: alertApiRef }, factory: ({ alertApi }) => { return ...; }, }) }, })is migrated to the following:
ApiBlueprint.make({ name: 'error', params: defineParams => defineParams({ api: errorApiRef, deps: { alertApi: alertApiRef }, factory: ({ alertApi }) => { return ...; }, }), }) -
805c298: Added support for advanced parameter types in extension blueprints. The primary purpose of this is to allow extension authors to use type inference in the definition of the blueprint parameters. This often removes the need for extra imports and improves discoverability of blueprint parameters.This feature is introduced through the new
defineParamsoption ofcreateExtensionBlueprint, along with accompanyingcreateExtensionBlueprintParamsfunction to help implement the new format.The following is an example of how to create an extension blueprint that uses the new option:
const ExampleBlueprint = createExtensionBlueprint({ kind: 'example', attachTo: { id: 'example', input: 'example' }, output: [exampleComponentDataRef, exampleFetcherDataRef], defineParams<T>(params: { component(props: ExampleProps<T>): JSX.Element | null; fetcher(options: FetchOptions): Promise<FetchResult<T>>; }) { // The returned params must be wrapped with `createExtensionBlueprintParams` return createExtensionBlueprintParams(params); }, *factory(params) { // These params are now inferred yield exampleComponentDataRef(params.component); yield exampleFetcherDataRef(params.fetcher); }, });Usage of the above example looks as follows:
const example = ExampleBlueprint.make({ params: defineParams => defineParams({ component: ..., fetcher: ..., }), });This
defineParams => defineParams(<params>)is also known as the "callback syntax" and is required if a blueprint is created with the newdefineParamsoption. The callback syntax can also optionally be used for other blueprints too, which means that it is not a breaking change to remove thedefineParamsoption, as long as the external parameter types remain compatible. -
121899a: BREAKING: Theelementparam forAppRootElementBlueprintno longer accepts a component. If you are currently passing a component such aselement: () => <MyComponent />orelement: MyComponent, simply switch toelement: <MyComponent />. -
a321f3b: BREAKING: TheCommonAnalyticsContexthas been removed, and inlined intoAnalyticsContextValueinstead.
Patch Changes
-
d9e00e3: Add support for a newaliasForoption forcreateRouteRef. This allows for the creation of a new route ref that acts as an alias for an existing route ref that is installed in the app. This is particularly useful when creating modules that override existing plugin pages, without referring to the existing plugin. For example:export default createFrontendModule({ pluginId: 'catalog', extensions: [ PageBlueprint.make({ params: { defaultPath: '/catalog', routeRef: createRouteRef({ aliasFor: 'catalog.catalogIndex' }), loader: () => import('./CustomCatalogIndexPage').then(m => ( <m.CustomCatalogIndexPage /> )), }, }), ], }); -
93b5e38: Plugins should now use the newAnalyticsImplementationBlueprintto define and provide concrete analytics implementations. For example:import { AnalyticsImplementationBlueprint } from '@backstage/frontend-plugin-api'; const AcmeAnalytics = AnalyticsImplementationBlueprint.make({ name: 'acme-analytics', params: define => define({ deps: { config: configApiRef }, factory: ({ config }) => AcmeAnalyticsImpl.fromConfig(config), }), }); -
948de17: Tweaked the return types fromcreateExtensionandcreateExtensionBlueprintto avoid the forwarding ofConfigurableExtensionDataRefinto exported types. -
147482b: Updated the recommended naming of the blueprint param callback fromdefinetodefineParams, making the syntaxdefineParams => defineParams(...). -
3c3c882: Added added defaults for all type parameters ofExtensionDataRefand deprecatedAnyExtensionDataRef, as it is now redundant. -
9831f4e: Adjusted the dialog API types to have more sensible defaults -
1c2cc37: Improved runtime error message clarity when extension factories don't return an iterable object. -
24558f0: Added inline documentation forcreateExtension,createExtensionBlueprint,createFrontendPlugin, andcreateFrontendModule. -
Updated dependencies
0.11.0-next.2
Minor Changes
-
fda1bbc: BREAKING: The component system has been overhauled to useSwappableComponentinstead ofComponentRef. Several APIs have been removed and replaced:- Removed:
createComponentRef,createComponentExtension,ComponentRef,ComponentsApi,componentsApiRef,useComponentRef,coreComponentRefs - Added:
createSwappableComponent,SwappableComponentBlueprint,SwappableComponentRef,SwappableComponentsApi,swappableComponentsApiRef
BREAKING: The default
componentRefsand exportedCore*Propshave been removed and have replacementSwappableComponentsand revised type names instead.- The
errorBoundaryFallbackcomponent andCoreErrorBoundaryFallbackPropstype have been replaced withErrorDisplayswappable component andCoreErrorDisplayPropsrespectively. - The
progresscomponent andCoreProgressPropstype have been replaced withProgressswappable component andProgressPropsrespectively. - The
notFoundErrorPagecomponent andCoreNotFoundErrorPagePropstype have been replaced withNotFoundErrorPageswappable component andNotFoundErrorPagePropsrespectively.
Migration for creating swappable components:
// OLD: Using createComponentRef and createComponentExtension import { createComponentRef, createComponentExtension, } from '@backstage/frontend-plugin-api'; const myComponentRef = createComponentRef<{ title: string }>({ id: 'my-plugin.my-component', }); const myComponentExtension = createComponentExtension({ ref: myComponentRef, loader: { lazy: () => import('./MyComponent').then(m => m.MyComponent), }, }); // NEW: Using createSwappableComponent and SwappableComponentBlueprint import { createSwappableComponent, SwappableComponentBlueprint, } from '@backstage/frontend-plugin-api'; const MySwappableComponent = createSwappableComponent({ id: 'my-plugin.my-component', loader: () => import('./MyComponent').then(m => m.MyComponent), }); const myComponentExtension = SwappableComponentBlueprint.make({ name: 'my-component', params: { component: MySwappableComponent, loader: () => import('./MyComponent').then(m => m.MyComponent), }, });Migration for using components:
// OLD: Using ComponentsApi and useComponentRef import { useComponentRef, componentsApiRef, useApi, coreComponentRefs, } from '@backstage/frontend-plugin-api'; const MyComponent = useComponentRef(myComponentRef); const ProgressComponent = useComponentRef(coreComponentRefs.progress); // NEW: Direct component usage import { Progress } from '@backstage/frontend-plugin-api'; // Use directly as React Component <Progress /> <MySwappableComponent title="Hello World" />Migration for core component references:
// OLD: Core component refs import { coreComponentRefs } from '@backstage/frontend-plugin-api'; coreComponentRefs.progress coreComponentRefs.notFoundErrorPage coreComponentRefs.errorBoundaryFallback // NEW: Direct swappable component imports import { Progress, NotFoundErrorPage, ErrorDisplay } from '@backstage/frontend-plugin-api'; // Use directly as React components <Progress /> <NotFoundErrorPage /> <ErrorDisplay plugin={plugin} error={error} resetError={resetError} /> - Removed:
-
6a75e00: BREAKING: Removed the deprecatedcreateFrontendPluginvariant where the plugin ID is passed via anidoption. To update existing code, switch to using thepluginIdoption instead. -
1e6410b: BREAKING: TheResolveInputValueOverridestype is no longer exported.
Patch Changes
9831f4e: Adjusted the dialog API types to have more sensible defaults1c2cc37: Improved runtime error message clarity when extension factories don't return an iterable object.24558f0: Added inline documentation forcreateExtension,createExtensionBlueprint,createFrontendPlugin, andcreateFrontendModule.- Updated dependencies
- @backstage/core-components@0.17.5-next.2
0.11.0-next.1
Minor Changes
-
c5f88b5: BREAKING: Remove deprecatedsourceproperty from theAppNodeSpectype, useAppNodeSpec.plugininstead. -
e4ddf22: BREAKING: ThedefaultPathparam ofPageBlueprinthas been renamed topath. This change does not affect the compatibility of extensions created with older versions of this blueprint. -
37f2989: BREAKING: Removed theroutableproperty fromExtensionBoundary. This property was never needed in practice and is instead inferred from whether or not the extension outputs a route reference. It can be safely removed. -
3243fa6: BREAKING: Removed the ability to define a default extensionnamein blueprints. This option had no practical purpose as blueprints already use thekindto identity the source of the extension. -
a082429: BREAKING: The separateRouteResolutionApiResolveOptionstype has been removed. -
5d31d66: BREAKING: In an attempt to align some of the API's around providing components toBlueprints, we've renamed the parameters for both theRouterBlueprintandAppRootWrapperBlueprintfromComponenttocomponent.// old RouterBlueprint.make({ params: { Component: ({ children }) => <div>{children}</div>, }, }); // new RouterBlueprint.make({ params: { component: ({ children }) => <div>{children}</div>, }, });// old AppRootWrapperBlueprint.make({ params: { Component: ({ children }) => <div>{children}</div>, }, }); // new AppRootWrapperBlueprint.make({ params: { component: ({ children }) => <div>{children}</div>, }, });As part of this change, the type for
componenthas also changed fromComponentType<PropsWithChildren<{}>>to(props: { children: ReactNode }) => JSX.Element | nullwhich is not breaking, just a little more reflective of the actual expected component. -
45ead4a: BREAKING: TheAnyRoutesandAnyExternalRoutestypes have been removed and their usage has been inlined instead.Existing usage can be replaced according to their previous definitions:
type AnyRoutes = { [name in string]: RouteRef | SubRouteRef }; type AnyExternalRoutes = { [name in string]: ExternalRouteRef }; -
121899a: BREAKING: Theelementparam forAppRootElementBlueprintno longer accepts a component. If you are currently passing a component such aselement: () => <MyComponent />orelement: MyComponent, simply switch toelement: <MyComponent />. -
a321f3b: BREAKING: TheCommonAnalyticsContexthas been removed, and inlined intoAnalyticsContextValueinstead.
Patch Changes
-
d9e00e3: Add support for a newaliasForoption forcreateRouteRef. This allows for the creation of a new route ref that acts as an alias for an existing route ref that is installed in the app. This is particularly useful when creating modules that override existing plugin pages, without referring to the existing plugin. For example:export default createFrontendModule({ pluginId: 'catalog', extensions: [ PageBlueprint.make({ params: { defaultPath: '/catalog', routeRef: createRouteRef({ aliasFor: 'catalog.catalogIndex' }), loader: () => import('./CustomCatalogIndexPage').then(m => ( <m.CustomCatalogIndexPage /> )), }, }), ], }); -
93b5e38: Plugins should now use the newAnalyticsImplementationBlueprintto define and provide concrete analytics implementations. For example:import { AnalyticsImplementationBlueprint } from '@backstage/frontend-plugin-api'; const AcmeAnalytics = AnalyticsImplementationBlueprint.make({ name: 'acme-analytics', params: define => define({ deps: { config: configApiRef }, factory: ({ config }) => AcmeAnalyticsImpl.fromConfig(config), }), }); -
948de17: Tweaked the return types fromcreateExtensionandcreateExtensionBlueprintto avoid the forwarding ofConfigurableExtensionDataRefinto exported types. -
147482b: Updated the recommended naming of the blueprint param callback fromdefinetodefineParams, making the syntaxdefineParams => defineParams(...). -
3c3c882: Added added defaults for all type parameters ofExtensionDataRefand deprecatedAnyExtensionDataRef, as it is now redundant. -
Updated dependencies
- @backstage/core-components@0.17.5-next.1
- @backstage/core-plugin-api@1.10.9
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.11.0-next.0
Minor Changes
-
29786f6: BREAKING: TheNavLogoBlueprinthas been removed and replaced byNavContentBlueprint, which instead replaces the entire navbar. The default navbar has also been switched to a more minimal implementation.To use
NavContentBlueprintto install new logos, you can use it as follows:NavContentBlueprint.make({ params: { component: ({ items }) => { return compatWrapper( <Sidebar> <SidebarLogo /> {/* Other sidebar content */} <SidebarScrollWrapper> {items.map((item, index) => ( <SidebarItem {...item} key={index} /> ))} </SidebarScrollWrapper> {/* Other sidebar content */} </Sidebar>, ); }, }, }); -
805c298: BREAKING: TheApiBlueprinthas been updated to use the new advanced type parameters through the newdefineParamsblueprint option. This is an immediate breaking change that requires all existing usages ofApiBlueprintto switch to the new callback format. Existing extensions created with the old format are still compatible with the latest version of the plugin API however, meaning that this does not break existing plugins.To update existing usages of
ApiBlueprint, you remove the outer level of theparamsobject and replacecreateApiFactory(...)withdefine => define(...).For example, the following old usage:
ApiBlueprint.make({ name: 'error', params: { factory: createApiFactory({ api: errorApiRef, deps: { alertApi: alertApiRef }, factory: ({ alertApi }) => { return ...; }, }) }, })is migrated to the following:
ApiBlueprint.make({ name: 'error', params: define => define({ api: errorApiRef, deps: { alertApi: alertApiRef }, factory: ({ alertApi }) => { return ...; }, }), }) -
805c298: Added support for advanced parameter types in extension blueprints. The primary purpose of this is to allow extension authors to use type inference in the definition of the blueprint parameters. This often removes the need for extra imports and improves discoverability of blueprint parameters.This feature is introduced through the new
defineParamsoption ofcreateExtensionBlueprint, along with accompanyingcreateExtensionBlueprintParamsfunction to help implement the new format.The following is an example of how to create an extension blueprint that uses the new option:
const ExampleBlueprint = createExtensionBlueprint({ kind: 'example', attachTo: { id: 'example', input: 'example' }, output: [exampleComponentDataRef, exampleFetcherDataRef], defineParams<T>(params: { component(props: ExampleProps<T>): JSX.Element | null; fetcher(options: FetchOptions): Promise<FetchResult<T>>; }) { // The returned params must be wrapped with `createExtensionBlueprintParams` return createExtensionBlueprintParams(params); }, *factory(params) { // These params are now inferred yield exampleComponentDataRef(params.component); yield exampleFetcherDataRef(params.fetcher); }, });Usage of the above example looks as follows:
const example = ExampleBlueprint.make({ params: define => define({ component: ..., fetcher: ..., }), });This
define => define(<params>)is also known as the "callback syntax" and is required if a blueprint is created with the newdefineParamsoption. The callback syntax can also optionally be used for other blueprints too, which means that it is not a breaking change to remove thedefineParamsoption, as long as the external parameter types remain compatible.
Patch Changes
- Updated dependencies
- @backstage/core-components@0.17.5-next.0
- @backstage/core-plugin-api@1.10.9
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.4
Patch Changes
- Updated dependencies
0.10.4-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.17.4-next.1
- @backstage/core-plugin-api@1.10.9-next.0
0.10.4-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.17.4-next.0
- @backstage/core-plugin-api@1.10.8
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.3
Patch Changes
-
0169b23: Internal tweak to avoid circular dependencies -
9e3868f: Added a new optionalinfooption tocreateFrontendPluginthat lets you provide a loaders for different sources of metadata information about the plugin.There are two available loaders. The first one is
info.packageJson, which can be used to point to apackage.jsonfile for the plugin. This is recommended for any plugin that is defined within its own package, especially all plugins that are published to a package registry. Typical usage looks like this:export default createFrontendPlugin({ pluginId: '...', info: { packageJson: () => import('../package.json'), }, });The second loader is
info.manifest, which can be used to point to an opaque plugin manifest. This MUST ONLY be used by plugins that are intended for use within a single organization. Plugins that are published to an open package registry should NOT use this loader. The loader is useful for adding additional internal metadata associated with the plugin, and it is up to the Backstage app to decide how these manifests are parsed and used. The default manifest parser in an app created withcreateAppfrom@backstage/frontend-defaultsis able to parse the defaultcatalog-info.yamlformat and built-in fields such asspec.owner.Typical usage looks like this:
export default createFrontendPlugin({ pluginId: '...', info: { manifest: () => import('../catalog-info.yaml'), }, }); -
6f48f71: Added a newuseAppNodehook, which can be used to get a reference to theAppNodefrom by the closestExtensionBoundary. -
Updated dependencies
- @backstage/core-components@0.17.3
- @backstage/core-plugin-api@1.10.8
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.3-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.17.3-next.0
- @backstage/core-plugin-api@1.10.7
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.3-next.0
Patch Changes
-
9e3868f: Added a new optionalinfooption tocreateFrontendPluginthat lets you provide a loaders for different sources of metadata information about the plugin.There are two available loaders. The first one is
info.packageJson, which can be used to point to apackage.jsonfile for the plugin. This is recommended for any plugin that is defined within its own package, especially all plugins that are published to a package registry. Typical usage looks like this:export default createFrontendPlugin({ pluginId: '...', info: { packageJson: () => import('../package.json'), }, });The second loader is
info.manifest, which can be used to point to an opaque plugin manifest. This MUST ONLY be used by plugins that are intended for use within a single organization. Plugins that are published to an open package registry should NOT use this loader. The loader is useful for adding additional internal metadata associated with the plugin, and it is up to the Backstage app to decide how these manifests are parsed and used. The default manifest parser in an app created withcreateAppfrom@backstage/frontend-defaultsis able to parse the defaultcatalog-info.yamlformat and built-in fields such asspec.owner.Typical usage looks like this:
export default createFrontendPlugin({ pluginId: '...', info: { manifest: () => import('../catalog-info.yaml'), }, }); -
6f48f71: Added a newuseAppNodehook, which can be used to get a reference to theAppNodefrom by the closestExtensionBoundary.
0.10.2
Patch Changes
-
173db8f: Thesourceproperty ofAppNodeSpechas been renamed toplugin. The old property has been deprecated and will be removed in a future release. -
fb58f20: Theidoption ofcreateFrontendPluginhas been renamed topluginIdin order to better align with similar APIs in the frontend and backend systems.The old
idoption is deprecated and will be removed in a future release. -
72d019d: Removed various typos -
Updated dependencies
- @backstage/core-components@0.17.2
- @backstage/core-plugin-api@1.10.7
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.2-next.1
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.10.7-next.0
- @backstage/core-components@0.17.2-next.1
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.2-next.0
Patch Changes
-
fb58f20: Theidoption ofcreateFrontendPluginhas been renamed topluginIdin order to better align with similar APIs in the frontend and backend systems.The old
idoption is deprecated and will be removed in a future release. -
72d019d: Removed various typos -
Updated dependencies
- @backstage/core-components@0.17.2-next.0
- @backstage/core-plugin-api@1.10.6
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.1
Patch Changes
-
a47fd39: Removes instances of default React imports, a necessary update for the upcoming React 19 migration.https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
-
Updated dependencies
- @backstage/core-components@0.17.1
- @backstage/core-plugin-api@1.10.6
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.1-next.1
Patch Changes
-
a47fd39: Removes instances of default React imports, a necessary update for the upcoming React 19 migration.https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html
-
Updated dependencies
- @backstage/core-components@0.17.1-next.1
- @backstage/core-plugin-api@1.10.6-next.0
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.17.1-next.0
- @backstage/core-plugin-api@1.10.5
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.0
Minor Changes
4823831: Introduced acreateFrontendFeatureLoader()function, as well as aFrontendFeatureLoaderinterface, to gather several frontend plugins, modules or feature loaders in a single exported entrypoint and load them, possibly asynchronously. This new feature, very similar to thecreateBackendFeatureLoader()already available on the backend, supersedes the previousCreateAppFeatureLoadertype which has been deprecated.8250ffe: BREAKING: Removed the deprecatedExtensionOverridesandFrontendFeaturetypes.0d1a397: BREAKING: Removed deprecated variant ofcreateExtensionDataRefwhere the ID is passed directly.
Patch Changes
5aa7f2c: Added a new Utility API,DialogApi, which can be used to show dialogs in the React tree that can collect input from the user.e23f5e0: Added newExtensionMiddlewareFactorytype.a6cb67d: The extensions map for plugins created withcreateFrontendPluginis now sorted alphabetically by ID in the TypeScript type.de72253: Added a newExtensionBoundary.lazyComponenthelper in addition to the existingExtensionBoundary.lazyhelper.- Updated dependencies
- @backstage/core-components@0.17.0
- @backstage/core-plugin-api@1.10.5
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.10.0-next.2
Minor Changes
8250ffe: BREAKING: Removed the deprecatedExtensionOverridesandFrontendFeaturetypes.0d1a397: BREAKING: Removed deprecated variant ofcreateExtensionDataRefwhere the ID is passed directly.
Patch Changes
5aa7f2c: Added a new Utility API,DialogApi, which can be used to show dialogs in the React tree that can collect input from the user.e23f5e0: Added newExtensionMiddlewareFactorytype.a6cb67d: The extensions map for plugins created withcreateFrontendPluginis now sorted alphabetically by ID in the TypeScript type.- Updated dependencies
- @backstage/core-components@0.16.5-next.1
- @backstage/core-plugin-api@1.10.4
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.9.6-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.5-next.0
- @backstage/core-plugin-api@1.10.4
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11
0.9.6-next.0
Patch Changes
de72253: Added a newExtensionBoundary.lazyComponenthelper in addition to the existingExtensionBoundary.lazyhelper.
0.9.5
Patch Changes
3e21b8d: AddedgetNodesByRoutePathmethod to theAppTreeApi.f1efb47: Add support for defining multiple attachment points for extensions and blueprints.58ec9e7: Removed older versions of React packages as a preparatory step for upgrading to React 19. This commit does not introduce any functional changes, but removes dependencies on previous React versions, allowing for a cleaner upgrade path in subsequent commits.9ff3322: Allow route references to be installed in multiple app instances as long as their name is the same.- Updated dependencies
- @backstage/core-components@0.16.4
- @backstage/core-plugin-api@1.10.4
- @backstage/version-bridge@1.0.11
- @backstage/types@1.2.1
0.9.5-next.3
Patch Changes
f1efb47: Add support for defining multiple attachment points for extensions and blueprints.- Updated dependencies
- @backstage/core-components@0.16.4-next.1
- @backstage/core-plugin-api@1.10.4-next.0
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11-next.0
0.9.5-next.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.4-next.1
- @backstage/core-plugin-api@1.10.4-next.0
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.11-next.0
0.9.5-next.1
Patch Changes
58ec9e7: Removed older versions of React packages as a preparatory step for upgrading to React 19. This commit does not introduce any functional changes, but removes dependencies on previous React versions, allowing for a cleaner upgrade path in subsequent commits.9ff3322: Allow route references to be installed in multiple app instances as long as their name is the same.- Updated dependencies
- @backstage/core-components@0.16.4-next.0
- @backstage/core-plugin-api@1.10.4-next.0
- @backstage/version-bridge@1.0.11-next.0
- @backstage/types@1.2.1
0.9.5-next.0
Patch Changes
3e21b8d: AddedgetNodesByRoutePathmethod to theAppTreeApi.- Updated dependencies
- @backstage/core-components@0.16.3
- @backstage/core-plugin-api@1.10.3
- @backstage/types@1.2.1
- @backstage/version-bridge@1.0.10
0.9.4
Patch Changes
b40eb41: MoveExpandandExpandRecursiveto@backstage/types- Updated dependencies
- @backstage/core-plugin-api@1.10.3
- @backstage/types@1.2.1
- @backstage/core-components@0.16.3
- @backstage/version-bridge@1.0.10
0.9.4-next.0
Patch Changes
b40eb41: MoveExpandandExpandRecursiveto@backstage/types- Updated dependencies
- @backstage/core-plugin-api@1.10.3-next.0
- @backstage/types@1.2.1-next.0
- @backstage/core-components@0.16.3-next.0
- @backstage/version-bridge@1.0.10
0.9.3
Patch Changes
5f04976: Fixed a bug that caused missing code in published packages.- Updated dependencies
- @backstage/core-components@0.16.2
- @backstage/core-plugin-api@1.10.2
- @backstage/types@1.2.0
- @backstage/version-bridge@1.0.10
0.9.3-next.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.2-next.2
- @backstage/core-plugin-api@1.10.2-next.0
- @backstage/types@1.2.0
- @backstage/version-bridge@1.0.10
0.9.3-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.2-next.1
- @backstage/core-plugin-api@1.10.1
- @backstage/types@1.2.0
- @backstage/version-bridge@1.0.10
0.9.3-next.0
Patch Changes
5f04976: Fixed a bug that caused missing code in published packages.- Updated dependencies
- @backstage/core-components@0.16.2-next.0
- @backstage/core-plugin-api@1.10.1
- @backstage/types@1.2.0
- @backstage/version-bridge@1.0.10
0.9.1
Patch Changes
- Updated dependencies
- @backstage/types@1.2.0
- @backstage/core-components@0.16.0
- @backstage/core-plugin-api@1.10.1
- @backstage/version-bridge@1.0.10
0.9.1-next.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.0-next.2
- @backstage/core-plugin-api@1.10.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.10
0.9.1-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.0-next.1
- @backstage/core-plugin-api@1.10.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.10
0.9.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.16.0-next.0
- @backstage/core-plugin-api@1.10.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.10
0.9.0
Minor Changes
-
4a5ba19: Removed deprecatednamespaceoption fromcreateExtensionandcreateExtensionBlueprint, including.makeand.makeWithOverides, it's no longer necessary and will use thepluginIdinstead.Removed deprecated
createExtensionOverridesthis should be replaced withcreateFrontendModuleinstead.Removed deprecated
BackstagePlugintype, useFrontendPlugintype instead from this same package. -
bfd4bec: BREAKING PRODUCERS: TheIconComponentno longer acceptsfontSize="default". This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time.This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective
SvgIcontypes into interfaces where relevant (e.g. as app icons).
Patch Changes
-
e969dc7: Move@types/reactto a peer dependency. -
873e424: Internal refactor of usage of opaque types. -
323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint:const myExtension = MyBlueprint.make({ params: { myParam: 'myDefault', }, }); const myOverride = myExtension.override({ params: { myParam: 'myOverride', }, }); const myFactoryOverride = myExtension.override({ factory(origFactory) { return origFactory({ params: { myParam: 'myOverride', }, }); }, });The provided parameters will be merged with the original parameters of the extension.
-
Updated dependencies
- @backstage/core-components@0.15.1
- @backstage/core-plugin-api@1.10.0
- @backstage/version-bridge@1.0.10
- @backstage/types@1.1.1
0.9.0-next.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.15.1-next.2
- @backstage/core-plugin-api@1.10.0-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.10-next.0
0.9.0-next.1
Patch Changes
e969dc7: Move@types/reactto a peer dependency.- Updated dependencies
- @backstage/core-components@0.15.1-next.1
- @backstage/core-plugin-api@1.10.0-next.1
- @backstage/version-bridge@1.0.10-next.0
- @backstage/types@1.1.1
0.9.0-next.0
Minor Changes
-
4a5ba19: Removed deprecatednamespaceoption fromcreateExtensionandcreateExtensionBlueprint, including.makeand.makeWithOverides, it's no longer necessary and will use thepluginIdinstead.Removed deprecated
createExtensionOverridesthis should be replaced withcreateFrontendModuleinstead.Removed deprecated
BackstagePlugintype, useFrontendPlugintype instead from this same package. -
bfd4bec: BREAKING PRODUCERS: TheIconComponentno longer acceptsfontSize="default". This has effectively been removed from Material-UI since its last two major versions, and has not worked properly for them in a long time.This change should not have an effect on neither users of MUI4 nor MUI5/6, since the updated interface should still let you send the respective
SvgIcontypes into interfaces where relevant (e.g. as app icons).
Patch Changes
-
873e424: Internal refactor of usage of opaque types. -
323aae8: It is now possible to override the blueprint parameters when overriding an extension created from a blueprint:const myExtension = MyBlueprint.make({ params: { myParam: 'myDefault', }, }); const myOverride = myExtension.override({ params: { myParam: 'myOverride', }, }); const myFactoryOverride = myExtension.override({ factory(origFactory) { return origFactory({ params: { myParam: 'myOverride', }, }); }, });The provided parameters will be merged with the original parameters of the extension.
-
Updated dependencies
- @backstage/core-components@0.15.1-next.0
- @backstage/core-plugin-api@1.10.0-next.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.9
0.8.0
Minor Changes
-
5446061: BREAKING: Removed support for "v1" extensions. This means that it is no longer possible to declare inputs and outputs as objects when usingcreateExtension. In addition, all extension creators except forcreateComponentExtensionhave been removed, use the equivalent blueprint instead. See the 1.30 migration documentation for more information on this change. -
fec8b57: BREAKING: Updated the type parameters forExtensionDefinitionandExtensionBlueprintto only have a single object parameter. The base type parameter is exported asExtensionDefinitionParametersandExtensionBlueprintParametersrespectively. This is shipped as an immediate breaking change as we expect usage of these types to be rare, and it does not affect the runtime behavior of the API.This is a breaking change as it changes the type parameters. Existing usage can generally be updated as follows:
ExtensionDefinition<any>->ExtensionDefinitionExtensionDefinition<any, any>->ExtensionDefinitionExtensionDefinition<TConfig>->ExtensionDefinition<{ config: TConfig }>ExtensionDefinition<TConfig, TConfigInput>->ExtensionDefinition<{ config: TConfig, configInput: TConfigInput }>
If you need to infer the parameter you can use
ExtensionDefinitionParameters, for example:import { ExtensionDefinition, ExtensionDefinitionParameters, } from '@backstage/frontend-plugin-api'; function myUtility<T extends ExtensionDefinitionParameters>( ext: ExtensionDefinition<T>, ): T['config'] { // ... }The same patterns apply to
ExtensionBlueprint.This change is made to improve the readability of API references and ability to evolve the type parameters in the future.
Patch Changes
-
2bb9517: Introduce the@backstage/plugin-apppackage to hold all of the built-in extensions for easy consumption and overriding. -
c816e2d: AddedcreateFrontendModuleas a replacement forcreateExtensionOverrides, which is now deprecated.Deprecated the
BackstagePluginandFrontendFeaturetype in favor ofFrontendPluginandFrontendFeaturefrom@backstage/frontend-app-apirespectively. -
52f9c5a: Deprecated thenamespaceoption forcreateExtensionBlueprintandcreateExtension, these are no longer required and will default to thepluginIdinstead.You can migrate some of your extensions that use
createExtensionOverridesto usingcreateFrontendModuleinstead and providing apluginIdthere.// Before createExtensionOverrides({ extensions: [ createExtension({ name: 'my-extension', namespace: 'my-namespace', kind: 'test', ... }) ], }); // After createFrontendModule({ pluginId: 'my-namespace', extensions: [ createExtension({ name: 'my-extension', kind: 'test', ... }) ], }); -
f3a2b91: Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from theappextension to the respective API extensions. For example, extensions created withThemeBlueprintare now attached to thethemesinput ofapi:app-themerather than theappextension. -
836127c: Updated dependency@testing-library/reactto^16.0.0. -
948d431: Removing deprecatednamespaceparameter in favour ofpluginIdinstead -
043d7cd: Internal refactor -
220f4f7: Remove unnecessary config object on IconBundleBlueprint -
2a61422: Thefactoryoption is no longer required when overriding an extension. -
98850de: Added support for definingreplacesincreateExtensionInputwhich will allow extensions to redirect missingattachTopoints to an input of the created extension.export const AppThemeApi = ApiBlueprint.makeWithOverrides({ name: 'app-theme', inputs: { themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], { // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead replaces: [{ id: 'app', input: 'themes' }], }), }, factory: () { ... } }); -
4a66456: A newapisparameter has been added tofactoryfor extensions. This is a way to access utility APIs without being coupled to the React context. -
Updated dependencies
- @backstage/core-components@0.15.0
- @backstage/core-plugin-api@1.9.4
- @backstage/version-bridge@1.0.9
- @backstage/types@1.1.1
0.8.0-next.2
Patch Changes
836127c: Updated dependency@testing-library/reactto^16.0.0.043d7cd: Internal refactor2a61422: Thefactoryoption is no longer required when overriding an extension.- Updated dependencies
- @backstage/core-components@0.14.11-next.1
- @backstage/core-plugin-api@1.9.4-next.0
- @backstage/version-bridge@1.0.9-next.0
- @backstage/types@1.1.1
0.8.0-next.1
Patch Changes
-
c816e2d: AddedcreateFrontendModuleas a replacement forcreateExtensionOverrides, which is now deprecated.Deprecated the
BackstagePluginandFrontendFeaturetype in favor ofFrontendPluginandFrontendFeaturefrom@backstage/frontend-app-apirespectively. -
52f9c5a: Deprecated thenamespaceoption forcreateExtensionBlueprintandcreateExtension, these are no longer required and will default to thepluginIdinstead.You can migrate some of your extensions that use
createExtensionOverridesto usingcreateFrontendModuleinstead and providing apluginIdthere.// Before createExtensionOverrides({ extensions: [ createExtension({ name: 'my-extension', namespace: 'my-namespace', kind: 'test', ... }) ], }); // After createFrontendModule({ pluginId: 'my-namespace', extensions: [ createExtension({ name: 'my-extension', kind: 'test', ... }) ], }); -
948d431: Removing deprecatednamespaceparameter in favour ofpluginIdinstead -
Updated dependencies
- @backstage/core-components@0.14.11-next.0
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.8.0-next.0
Minor Changes
-
5446061: BREAKING: Removed support for "v1" extensions. This means that it is no longer possible to declare inputs and outputs as objects when usingcreateExtension. In addition, all extension creators except forcreateComponentExtensionhave been removed, use the equivalent blueprint instead. See the 1.30 migration documentation for more information on this change. -
fec8b57: BREAKING: Updated the type parameters forExtensionDefinitionandExtensionBlueprintto only have a single object parameter. The base type parameter is exported asExtensionDefinitionParametersandExtensionBlueprintParametersrespectively. This is shipped as an immediate breaking change as we expect usage of these types to be rare, and it does not affect the runtime behavior of the API.This is a breaking change as it changes the type parameters. Existing usage can generally be updated as follows:
ExtensionDefinition<any>->ExtensionDefinitionExtensionDefinition<any, any>->ExtensionDefinitionExtensionDefinition<TConfig>->ExtensionDefinition<{ config: TConfig }>ExtensionDefinition<TConfig, TConfigInput>->ExtensionDefinition<{ config: TConfig, configInput: TConfigInput }>
If you need to infer the parameter you can use
ExtensionDefinitionParameters, for example:import { ExtensionDefinition, ExtensionDefinitionParameters, } from '@backstage/frontend-plugin-api'; function myUtility<T extends ExtensionDefinitionParameters>( ext: ExtensionDefinition<T>, ): T['config'] { // ... }The same patterns apply to
ExtensionBlueprint.This change is made to improve the readability of API references and ability to evolve the type parameters in the future.
Patch Changes
-
2bb9517: Introduce the@backstage/plugin-apppackage to hold all of the built-in extensions for easy consumption and overriding. -
f3a2b91: Moved several implementations of built-in APIs from being hardcoded in the app to instead be provided as API extensions. This moves all API-related inputs from theappextension to the respective API extensions. For example, extensions created withThemeBlueprintare now attached to thethemesinput ofapi:app-themerather than theappextension. -
98850de: Added support for definingreplacesincreateExtensionInputwhich will allow extensions to redirect missingattachTopoints to an input of the created extension.export const AppThemeApi = ApiBlueprint.makeWithOverrides({ name: 'app-theme', inputs: { themes: createExtensionInput([ThemeBlueprint.dataRefs.theme], { // attachTo: { id: 'app', input: 'themes'} will be redirected to this input instead replaces: [{ id: 'app', input: 'themes' }], }), }, factory: () { ... } }); -
4a66456: A newapisparameter has been added tofactoryfor extensions. This is a way to access utility APIs without being coupled to the React context. -
Updated dependencies
- @backstage/core-components@0.14.10
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.7.0
Minor Changes
-
72754db: BREAKING: All types of route refs are always considered optional byuseRouteRef, which means the caller must always handle a potentialundefinedreturn value. Related to this change, theoptionaloption fromcreateExternalRouteRefhas been removed, since it is no longer necessary.This is released as an immediate breaking change as we expect the usage of the new route refs to be extremely low or zero, since plugins that support the new system will still use route refs and
useRouteReffrom@backstage/core-plugin-apiin combination withconvertLegacyRouteReffrom@backstage/core-compat-api.
Patch Changes
-
6f72c2b: Fixing issue with extension blueprintsinputsmerging. -
210d066: Added support for using theparamsin other properties of thecreateExtensionBlueprintoptions by providing a callback. -
9b356dc: RenamedcreatePlugintocreateFrontendPlugin. The old symbol is still exported but deprecated. -
a376559: Correct theTConfigtype of data references to only contain config -
4e53ad6: Introduce a new way to encapsulate extension kinds that replaces the extension creator pattern withcreateExtensionBlueprintThis allows the creation of extension instances with the following pattern:
// create the extension blueprint which is used to create instances const EntityCardBlueprint = createExtensionBlueprint({ kind: 'entity-card', attachTo: { id: 'test', input: 'default' }, output: [coreExtensionData.reactElement], factory(params: { text: string }) { return [coreExtensionData.reactElement(<h1>{params.text}</h1>)]; }, }); // create an instance of the extension blueprint with params const testExtension = EntityCardBlueprint.make({ name: 'foo', params: { text: 'Hello World', }, }); -
9b89b82: TheExtensionBoundarynow by default infers whether it's routable from whether it outputs a route path. -
e493020: DeprecatedinputsandconfigSchemaoptions forcreateComponentExtenion, these will be removed in a future release -
7777b5f: Added a newIconBundleBlueprintthat lets you create icon bundle extensions that can be installed in an App in order to override or add new app icons.import { IconBundleBlueprint } from '@backstage/frontend-plugin-api'; const exampleIconBundle = IconBundleBlueprint.make({ name: 'example-bundle', params: { icons: { user: MyOwnUserIcon, }, }, }); -
99abb6b: Support overriding of plugin extensions using the newplugin.withOverridesmethod.import homePlugin from '@backstage/plugin-home'; export default homePlugin.withOverrides({ extensions: [ homePage.getExtension('page:home').override({ *factory(originalFactory) { yield* originalFactory(); yield coreExtensionData.reactElement(<h1>My custom home page</h1>); }, }), ], }); -
813cac4: Add anExtensionBoundary.lazyfunction to create properly wrapped lazy-loading enabled elements, suitable for use withcoreExtensionData.reactElement. The page blueprint now automatically leverages this. -
a65cfc8: Add support for accessing extensions definitions provided by a plugin viaplugin.getExtension(...). For this to work the extensions must be defined using the v2 format, typically using an extension blueprint. -
3be9aeb: Extensions have been changed to be declared with an array of inputs and outputs, rather than a map of named data refs. This change was made to reduce confusion around the role of the input and output names, as well as enable more powerful APIs for overriding extensions.An extension that was previously declared like this:
const exampleExtension = createExtension({ name: 'example', inputs: { items: createExtensionInput({ element: coreExtensionData.reactElement, }), }, output: { element: coreExtensionData.reactElement, }, factory({ inputs }) { return { element: ( <div> Example {inputs.items.map(item => { return <div>{item.output.element}</div>; })} </div> ), }; }, });Should be migrated to the following:
const exampleExtension = createExtension({ name: 'example', inputs: { items: createExtensionInput([coreExtensionData.reactElement]), }, output: [coreExtensionData.reactElement], factory({ inputs }) { return [ coreExtensionData.reactElement( <div> Example {inputs.items.map(item => { return <div>{item.get(coreExtensionData.reactElement)}</div>; })} </div>, ), ]; }, }); -
34f1b2a: Support merging ofinputsin extension blueprints, but stop mergingoutput. In addition, the original factory in extension blueprints now returns a data container that both provides access to the returned data, but can also be forwarded as output. -
3fb421d: Added support to be able to definezodconfig schema in Blueprints, with built in schema merging from the Blueprint and the extension instances. -
2d21599: Added support for being able to override extension definitions.const TestCard = EntityCardBlueprint.make({ ... }); TestCard.override({ // override attachment points attachTo: { id: 'something-else', input: 'overridden' }, // extend the config schema config: { schema: { newConfig: z => z.string().optional(), } }, // override factory *factory(originalFactory, { inputs, config }){ const originalOutput = originalFactory(); yield coreExentsionData.reactElement( <Wrapping> {originalOutput.get(coreExentsionData.reactElement)} </Wrapping> ); } }); -
31bfc44: Extension data references can now be defined in a way that encapsulates the ID string in the type, in addition to the data type itself. The old way of creating extension data references is deprecated and will be removed in a future release.For example, the following code:
export const myExtension = createExtensionDataRef<MyType>('my-plugin.my-data');Should be updated to the following:
export const myExtension = createExtensionDataRef<MyType>().with({ id: 'my-plugin.my-data', }); -
6349099: Added config input type to the extensions -
Updated dependencies
- @backstage/core-components@0.14.10
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.7.0-next.3
Patch Changes
-
6f72c2b: Fixing issue with extension blueprintsinputsmerging. -
99abb6b: Support overriding of plugin extensions using the newplugin.withOverridesmethod.import homePlugin from '@backstage/plugin-home'; export default homePlugin.withOverrides({ extensions: [ homePage.getExtension('page:home').override({ *factory(originalFactory) { yield* originalFactory(); yield coreExtensionData.reactElement(<h1>My custom home page</h1>); }, }), ], }); -
a65cfc8: Add support for accessing extensions definitions provided by a plugin viaplugin.getExtension(...). For this to work the extensions must be defined using the v2 format, typically using an extension blueprint. -
34f1b2a: Support merging ofinputsin extension blueprints, but stop mergingoutput. In addition, the original factory in extension blueprints now returns a data container that both provides access to the returned data, but can also be forwarded as output. -
2d21599: Added support for being able to override extension definitions.const TestCard = EntityCardBlueprint.make({ ... }); TestCard.override({ // override attachment points attachTo: { id: 'something-else', input: 'overridden' }, // extend the config schema config: { schema: { newConfig: z => z.string().optional(), } }, // override factory *factory(originalFactory, { inputs, config }){ const originalOutput = originalFactory(); yield coreExentsionData.reactElement( <Wrapping> {originalOutput.get(coreExentsionData.reactElement)} </Wrapping> ); } }); -
Updated dependencies
- @backstage/core-components@0.14.10-next.0
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.7.0-next.2
Minor Changes
-
72754db: BREAKING: All types of route refs are always considered optional byuseRouteRef, which means the caller must always handle a potentialundefinedreturn value. Related to this change, theoptionaloption fromcreateExternalRouteRefhas been removed, since it is no longer necessary.This is released as an immediate breaking change as we expect the usage of the new route refs to be extremely low or zero, since plugins that support the new system will still use route refs and
useRouteReffrom@backstage/core-plugin-apiin combination withconvertLegacyRouteReffrom@backstage/core-compat-api.
Patch Changes
210d066: Added support for using theparamsin other properties of thecreateExtensionBlueprintoptions by providing a callback.- Updated dependencies
- @backstage/core-components@0.14.10-next.0
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.8-next.1
Patch Changes
-
3be9aeb: Extensions have been changed to be declared with an array of inputs and outputs, rather than a map of named data refs. This change was made to reduce confusion around the role of the input and output names, as well as enable more powerful APIs for overriding extensions.An extension that was previously declared like this:
const exampleExtension = createExtension({ name: 'example', inputs: { items: createExtensionInput({ element: coreExtensionData.reactElement, }), }, output: { element: coreExtensionData.reactElement, }, factory({ inputs }) { return { element: ( <div> Example {inputs.items.map(item => { return <div>{item.output.element}</div>; })} </div> ), }; }, });Should be migrated to the following:
const exampleExtension = createExtension({ name: 'example', inputs: { items: createExtensionInput([coreExtensionData.reactElement]), }, output: [coreExtensionData.reactElement], factory({ inputs }) { return [ coreExtensionData.reactElement( <div> Example {inputs.items.map(item => { return <div>{item.get(coreExtensionData.reactElement)}</div>; })} </div>, ), ]; }, }); -
3fb421d: Added support to be able to definezodconfig schema in Blueprints, with built in schema merging from the Blueprint and the extension instances. -
6349099: Added config input type to the extensions -
Updated dependencies
- @backstage/core-components@0.14.10-next.0
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.8-next.0
Patch Changes
-
4e53ad6: Introduce a new way to encapsulate extension kinds that replaces the extension creator pattern withcreateExtensionBlueprintThis allows the creation of extension instances with the following pattern:
// create the extension blueprint which is used to create instances const EntityCardBlueprint = createExtensionBlueprint({ kind: 'entity-card', attachTo: { id: 'test', input: 'default' }, output: { element: coreExtensionData.reactElement, }, factory(params: { text: string }) { return { element: <h1>{params.text}</h1>, }; }, }); // create an instance of the extension blueprint with params const testExtension = EntityCardBlueprint.make({ name: 'foo', params: { text: 'Hello World', }, }); -
9b89b82: TheExtensionBoundarynow by default infers whether it's routable from whether it outputs a route path. -
7777b5f: Added a newIconBundleBlueprintthat lets you create icon bundle extensions that can be installed in an App in order to override or add new app icons.import { IconBundleBlueprint } from '@backstage/frontend-plugin-api'; const exampleIconBundle = IconBundleBlueprint.make({ name: 'example-bundle', params: { icons: { user: MyOwnUserIcon, }, }, }); -
31bfc44: Extension data references can now be defined in a way that encapsulates the ID string in the type, in addition to the data type itself. The old way of creating extension data references is deprecated and will be removed in a future release.For example, the following code:
export const myExtension = createExtensionDataRef<MyType>('my-plugin.my-data');Should be updated to the following:
export const myExtension = createExtensionDataRef<MyType>().with({ id: 'my-plugin.my-data', }); -
Updated dependencies
- @backstage/core-components@0.14.10-next.0
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.7
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.9
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.7-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.9-next.1
0.6.7-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.9-next.0
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.6
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.8
- @backstage/core-plugin-api@1.9.3
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.6-next.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.8-next.2
- @backstage/core-plugin-api@1.9.3-next.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.6-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.8-next.1
- @backstage/core-plugin-api@1.9.3-next.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.6-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.8-next.0
- @backstage/core-plugin-api@1.9.2
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.5
Patch Changes
- Updated dependencies
0.6.5-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.6-next.1
0.6.5-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.5-next.0
- @backstage/core-plugin-api@1.9.2
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.8
0.6.4
Patch Changes
abfbcfc: Updated dependency@testing-library/reactto^15.0.0.35452b3: Fixed the type foruseRouteRef, which wasn't handling optional external route refs correctly.- Updated dependencies
- @backstage/core-components@0.14.4
- @backstage/core-plugin-api@1.9.2
- @backstage/version-bridge@1.0.8
- @backstage/types@1.1.1
0.6.4-next.1
Patch Changes
35452b3: Fixed the type foruseRouteRef, which wasn't handling optional external route refs correctly.- Updated dependencies
- @backstage/core-components@0.14.4-next.0
- @backstage/core-plugin-api@1.9.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.4-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.4-next.0
- @backstage/core-plugin-api@1.9.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.3
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.3
- @backstage/core-plugin-api@1.9.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.2
- @backstage/core-plugin-api@1.9.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.1
- @backstage/core-plugin-api@1.9.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.1-next.2
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.1-next.2
- @backstage/core-plugin-api@1.9.1-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.1-next.1
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.1-next.1
- @backstage/core-plugin-api@1.9.1-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.1-next.0
- @backstage/core-plugin-api@1.9.1-next.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.0
Minor Changes
e586f79: BREAKING: Replace default plugin extension and plugin ids to beappinstead ofroot.
Patch Changes
7eae3e0: Added initialIconsApidefinition.f919be9: Added a utility API for VMware Cloud auth; the API ref is available in the@backstage/core-plugin-apiand@backstage/frontend-plugin-apipackages, the implementation is in@backstage/core-app-apiand a factory has been added to@backstage/app-defaults.8fe56a8: Widen@types/reactdependency range to include version 18.bc621aa: AddedRouteResolutionsApias a replacement for the routing context.1e61ad3: App component extensions are no longer wrapped in anExtensionBoundary, allowing them to inherit the outer context instead.46b63de: Allow external route refs in the new system to have adefaultTargetpointing to a route that it'll resolve to by default if no explicit bindings were made by the adopter.- Updated dependencies
- @backstage/core-components@0.14.0
- @backstage/core-plugin-api@1.9.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.0-next.3
Patch Changes
- Updated dependencies
- @backstage/core-components@0.14.0-next.2
- @backstage/core-plugin-api@1.9.0-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.0-next.2
Patch Changes
f919be9: Added a utility API for VMware Cloud auth; the API ref is available in the@backstage/core-plugin-apiand@backstage/frontend-plugin-apipackages, the implementation is in@backstage/core-app-apiand a factory has been added to@backstage/app-defaults.8fe56a8: Widen@types/reactdependency range to include version 18.- Updated dependencies
- @backstage/core-components@0.14.0-next.1
- @backstage/core-plugin-api@1.9.0-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.6.0-next.1
Minor Changes
e586f79: BREAKING: Replace default plugin extension and plugin ids to beappinstead ofroot.
Patch Changes
bc621aa: AddedRouteResolutionsApias a replacement for the routing context.1e61ad3: App component extensions are no longer wrapped in anExtensionBoundary, allowing them to inherit the outer context instead.46b63de: Allow external route refs in the new system to have adefaultTargetpointing to a route that it'll resolve to by default if no explicit bindings were made by the adopter.- Updated dependencies
- @backstage/core-components@0.14.0-next.0
- @backstage/core-plugin-api@1.8.3-next.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.5.1-next.0
Patch Changes
7eae3e0: Added initialIconsApidefinition.- Updated dependencies
- @backstage/core-components@0.13.10
- @backstage/core-plugin-api@1.8.2
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.5.0
Minor Changes
d4149bf: BREAKING: Renamed theapp/routerextension toapp/root.
Patch Changes
b2d370e: ExposedcreateComponentRef, and ensured that produced refs and feature bits have atoStringfor easier debugging7d63b32: Accepts sub route refs on the newcreatePluginroutes map.516fd3e: Updated README to reflect release status4016f21: Remove some unused dependenciesc97fa1c: Addedelements,wrappers, androuterinputs toapp/root, that let you add things to the root of the React tree above the layout. You can use thecreateAppRootElementExtension,createAppRootWrapperExtension, andcreateRouterExtensionextension creator, respectively, to conveniently create such extensions. These are all optional, and if you do not supply a router a default one will be used (BrowserRouterin regular runs,MemoryRouterin tests/CI).- Updated dependencies
- @backstage/core-components@0.13.10
- @backstage/core-plugin-api@1.8.2
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.4.1-next.2
Patch Changes
516fd3e: Updated README to reflect release status
0.4.1-next.1
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.8.2-next.0
- @backstage/core-components@0.13.10-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.4.1-next.0
Patch Changes
4016f21: Remove some unused dependencies- Updated dependencies
- @backstage/core-components@0.13.10-next.0
- @backstage/core-plugin-api@1.8.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.4.0
Minor Changes
-
af7bc3e: Switched all core extensions to instead use the namespace'app'. -
5cdf2b3: ChangedExtensionandExtensionDefinitionto use opaque types. -
8f5d6c1: Extension inputs are now wrapped into an additional object when passed to the extension factory, with the previous values being available at theoutputproperty. TheExtensionInputValuestype has also been replaced byResolvedExtensionInputs. -
8837a96: BREAKING: This version changes how extensions are created and how their IDs are determined. ThecreateExtensionfunction now acceptskind,namespaceandnameinstead ofid. All of the new options are optional, and are used to construct the final extension ID. By convention extension creators should set thekindto match their own name, for examplecreateNavItemExtensionsets the kindnav-item.The
createExtensionfunction as well as all extension creators now also return anExtensionDefinitionrather than anExtension, which in turn needs to be passed tocreatePluginorcreateExtensionOverridesto be used. -
f9ef632: Moved several extension data references fromcoreExtensionDatato their respective extension creators. -
a5a0473: The extensionfactoryfunction now longer receivesidorsource, but instead now provides the extension'sAppNodeasnode. TheExtensionBoundarycomponent has also been updated to receive anodeprop rather thanidandsource.
Patch Changes
a379243: Add theFrontendFeaturetype, which is the union ofBackstagePluginandExtensionOverridesb7adf24: Update alpha component ref type to be more specific than any, delete boot page component and use new plugin type for error boundary component extensions.5eb6b8a: Added the nav logo extension for customization of sidebar logo1f12fb7: Create factories for overriding default core components extensions.5970928: Add feature flags to plugins and extension overrides.e539735: AddedcreateSignInPageExtension.73246ec: Added translation APIs as well ascreateTranslationExtension.cb4197a: Forwardnode`` instead ofextensionId` to resolved extension inputs.f27ee7d: Migrate analytics api and context files.0cbb03b: Fixing regular expression ReDoS with zod packages. Upgrading to latest. ref: https://security.snyk.io/vuln/SNYK-JS-ZOD-5925617f1183b7: Renamed thecomponentoption ofcreateComponentExtensiontoloader.- Updated dependencies
- @backstage/core-plugin-api@1.8.1
- @backstage/core-components@0.13.9
- @backstage/config@1.1.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.4.0-next.3
Patch Changes
- Updated dependencies
- @backstage/core-components@0.13.9-next.3
- @backstage/config@1.1.1
- @backstage/core-plugin-api@1.8.1-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.4.0-next.2
Minor Changes
-
8f5d6c1: Extension inputs are now wrapped into an additional object when passed to the extension factory, with the previous values being available at theoutputproperty. TheExtensionInputValuestype has also been replaced byResolvedExtensionInputs. -
8837a96: BREAKING: This version changes how extensions are created and how their IDs are determined. ThecreateExtensionfunction now acceptskind,namespaceandnameinstead ofid. All of the new options are optional, and are used to construct the final extension ID. By convention extension creators should set thekindto match their own name, for examplecreateNavItemExtensionsets the kindnav-item.The
createExtensionfunction as well as all extension creators now also return anExtensionDefinitionrather than anExtension, which in turn needs to be passed tocreatePluginorcreateExtensionOverridesto be used.
Patch Changes
b7adf24: Update alpha component ref type to be more specific than any, delete boot page component and use new plugin type for error boundary component extensions.73246ec: Added translation APIs as well ascreateTranslationExtension.cb4197a: Forwardnode`` instead ofextensionId` to resolved extension inputs.- Updated dependencies
- @backstage/config@1.1.1
- @backstage/core-components@0.13.9-next.2
- @backstage/core-plugin-api@1.8.1-next.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.4.0-next.1
Minor Changes
a5a04739e1: The extensionfactoryfunction now longer receivesidorsource, but instead now provides the extension'sAppNodeasnode. TheExtensionBoundarycomponent has also been updated to receive anodeprop rather thanidandsource.
Patch Changes
5eb6b8a7bc: Added the nav logo extension for customization of sidebar logo1f12fb762c: Create factories for overriding default core components extensions.59709286b3: Add feature flags to plugins and extension overrides.e539735435: AddedcreateSignInPageExtension.f27ee7d937: Migrate analytics api and context files.- Updated dependencies
- @backstage/core-components@0.13.9-next.1
- @backstage/core-plugin-api@1.8.1-next.1
- @backstage/config@1.1.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.3.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.8.1-next.0
- @backstage/core-components@0.13.9-next.0
- @backstage/config@1.1.1
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7
0.3.0
Minor Changes
68fc9dc60e: AddedRouteRef,SubRouteRef,ExternalRouteRef, and related types. All exports from this package that previously relied on the types with the same name from@backstage/core-plugin-apinow use the new types instead. To convert and existing legacy route ref to be compatible with the APIs from this package, use theconvertLegacyRouteRefutility from@backstage/core-plugin-api/alpha.77f009b35d: Extensions now return their output from the factory function rather than callingbind(...).
Patch Changes
6c2b872153: Add official support for React 18.733bd95746: Add newAppTreeApi.6af88a05ff: Improve the extension boundary component and create a default extension suspense component.- Updated dependencies
- @backstage/core-components@0.13.8
- @backstage/core-plugin-api@1.8.0
- @backstage/version-bridge@1.0.7
- @backstage/types@1.1.1
0.3.0-next.2
Patch Changes
-
#20888
733bd95746Thanks @Rugvip! - Add newAppTreeApi. -
Updated dependencies
- @backstage/core-components@0.13.8-next.2
0.3.0-next.1
Minor Changes
77f009b35d: Extensions now return their output from the factory function rather than callingbind(...).
Patch Changes
- Updated dependencies
- @backstage/core-components@0.13.8-next.1
- @backstage/core-plugin-api@1.8.0-next.0
- @backstage/types@1.1.1
- @backstage/version-bridge@1.0.7-next.0
0.3.0-next.0
Minor Changes
68fc9dc60e: AddedRouteRef,SubRouteRef,ExternalRouteRef, and related types. All exports from this package that previously relied on the types with the same name from@backstage/core-plugin-apinow use the new types instead. To convert and existing legacy route ref to be compatible with the APIs from this package, use theconvertLegacyRouteRefutility from@backstage/core-plugin-api/alpha.
Patch Changes
6c2b872153: Add official support for React 18.6af88a05ff: Improve the extension boundary component and create a default extension suspense component.- Updated dependencies
- @backstage/core-components@0.13.7-next.0
- @backstage/core-plugin-api@1.8.0-next.0
- @backstage/version-bridge@1.0.7-next.0
- @backstage/types@1.1.1
0.2.0
Minor Changes
06432f900c: Extension attachment point is now configured viaattachTo: { id, input }instead ofat: 'id/input'.4461d87d5a: Removed support for the newuseRouteRef.
Patch Changes
d3a37f55c0: Add support forSidebarGroupon the sidebar item extension.2ecd33618a: Plugins can now be assignedroutesandexternalRouteswhen created.9a1fce352e: Updated dependency@testing-library/jest-domto^6.0.0.c1e9ca6500: AddedcreateExtensionOverrideswhich can be used to install a collection of extensions in an app that will replace any existing ones.52366db5b3: AddedcreateThemeExtensionandcoreExtensionData.theme.- Updated dependencies
- @backstage/core-plugin-api@1.7.0
- @backstage/types@1.1.1
0.2.0-next.2
Minor Changes
06432f900c: Extension attachment point is now configured viaattachTo: { id, input }instead ofat: 'id/input'.4461d87d5a: Removed support for the newuseRouteRef.
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.7.0-next.1
- @backstage/types@1.1.1
0.1.1-next.1
Patch Changes
d3a37f55c0: Add support forSidebarGroupon the sidebar item extension.52366db5b3: AddedcreateThemeExtensionandcoreExtensionData.theme.- Updated dependencies
- @backstage/core-plugin-api@1.7.0-next.0
- @backstage/types@1.1.1
0.1.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.7.0-next.0
- @backstage/types@1.1.1
0.1.0
Minor Changes
628ca7e458: Initial release
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.6.0
- @backstage/types@1.1.1
0.1.0-next.0
Minor Changes
628ca7e458: Initial release
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.6.0-next.3
- @backstage/types@1.1.1-next.0
0.0.1-next.0
Patch Changes
- Updated dependencies
- @backstage/core-plugin-api@1.6.0-next.2
- @backstage/types@1.1.0