Skip to main content

App Built-in Extensions

Built-in extensions are default app extensions that are always installed when you create a Backstage app.

Disable built-in extensions

All built-in extensions can be disabled in the same way as you disable any other extension:

app-config.yaml
extensions:
# Disabling the built-in app root alert element
- app-root-element:app/alert-display: false
warning

Be careful when disabling built-in extensions, as there may be other extensions depending on their existence. For example, the built-in "alert display" extension displays messages retrieved via AlertApi and disabling this extension will cause the application to no longer display these messages unless you install another extension that displays messages from AlertApi.

Override built-in extensions

You can override any built-in extension whenever their customizations, whether through configuration or input, do not meet a use case for your Backstage instance. Check out this documentation on how to override application extensions.

warning

Be aware there could be some implementation requirements to properly override an built-in extension, such as using same apis and do not remove inputs or configurations otherwise you can cause a side effect in other parts of the system that expects same minimal behavior.

Default built-in extensions

App

This extension is the first extension attached to the extension tree. It is responsible for receiving the application's root element and other Frontend framework inputs.

Inputs

NameDescriptionTypeOptionalDefaultExtension creator
rootThe app root element.coreExtensionData.reactElementfalseThe App/Root extension output.No creator available, configure or override the App/Root extension.
apisThe app apis factories.createApiExtension.factoryDataReffalseSee default apis.createApiExtension
themesThe app themes list.createThemeExtension.themeDataReffalseSee default themes.createThemeExtension
componentsThe app components list.createComponentExtension.componentDataReffalseSee default components.createComponentExtension
translationsThe app translations list.createTranslationExtension.translationDataReffalse-createTranslationExtension

Default theme extensions

Extensions that provides default theme inputs for the App extension.

kindnamespacenameid
themeapplighttheme:app/light
themeappdarktheme:app/dark

Default components extensions

Extensions that provides default components inputs for the App extension.

kindnamespacenameid
componentsappcore.components.progresscomponents:app/core.components.progress
componentsappcore.components.notFoundErrorPagecomponents:app/core.components.notFoundErrorPage
componentsappcore.components.errorBoundaryFallbackcomponents:app/core.components.errorBoundaryFallback

Default apis extensions

Extensions that provides default apis inputs for the App extension.

kindnamespacenameid
apicore.discovery-api:core.discovery
apicore.alert-api:core.alert
apicore.analytics-api:core.analytics
apicore.error-api:core.error
apicore.storage-api:core.storage
apicore.fetch-api:core.fetch
apicore.oauthrequest-api:core.oauthrequest
apicore.auth.google-api:core.auth.google
apicore.auth.microsoft-api:core.auth.microsoft
apicore.auth.github-api:core.auth.github
apicore.auth.okta-api:core.auth.okta
apicore.auth.gitlab-api:core.auth.gitlab
apicore.auth.onelogin-api:core.auth.onelogin
apicore.auth.bitbucket-api:core.auth.bitbucket
apicore.auth.bitbucket-server-api:core.auth.bitbucket-server
apicore.auth.atlassian-api:core.auth.atlassian
apiplugin.permission.api-api:plugin.permission.api

App root

This is the extension that creates the app root element, so it renders root level components such as app router and layout.

Inputs

NameDescriptionRequirementsOptionalDefaultExtension creator
routerA React component that should manager the app routes context.It must be one router component or a custom component compatible with the 'react-router' library.trueBrowserRoutercreateRouterExtension
signInPageA React component that should render the app sign-in page.Should call the onSignInSuccess prop when the user has been successfully authorized, otherwise the user will not be correctly redirected to the application home page.trueThe default AppRoot extension does not use a default component for this input, it bypasses the user authentication check and always renders all routes when a login page is not installed.createSignInPageExtension
childrenA React component that renders the app sidebar and main content in a particular layout.-falseThe App/Layout extension output.No creator available, configure or override the App/Layout extension.
elementsReact elements to be rendered outside of the app layout, such as shared popups.-falseSee default elements.createAppRootElementExtension
wrappersReact components that should wrap the root element.-true-createAppRootWrapperExtension

Default app root elements extensions

Alert Display

An app root element extension that displays messages posted via the AlertApi.

kindnamespacenameid
app-root-elementappalert-displayapp-root-element:app/alert-display
Configurations
KeyTypeDefault valueDescription
transientTimeoutMsnumber5000Time in milliseconds to wait before displaying messages.
anchorOrigin{ vertical: 'top' | 'bottom', horizontal: 'left' | 'center' | 'right' }{ vertical: 'top', horizontal: 'center' }Position on the screen where the message alert will be displayed.
Override or disable the extension

If you do not want to display alerts, disable this extension or if the available settings do not meet your needs, override this extension.

warning

The built-in "alert display" extension displays messages retrieved via AlertApi and disabling this extension will cause the application to no longer display these messages unless you install another extension that displays messages from AlertApi.

OAuth Request Dialog

An app root element extension that renders the oauth request dialog, it is based on the oauthRequestApi.

kindnamespacenameid
app-root-elementappoauth-request-dialogapp-root-element:app/oauth-request-dialog

App layout

Renders the app's sidebar and content in a specific layout.

kindnamespacenameid
-applayoutapp/layout

Inputs

NameDescriptionTypeOptionalDefaultExtension creator
navA React element that renders the app sidebar.coreExtensionData.reactElementfalse-Override the App/Nav extension.
contentA React element that renders the app content.coreExtensionData.reactElementfalse-Override the App/Routes extension.

App nav

Extension responsible for rendering the logo and items in the app's sidebar.

kindnamespacenameid
-appnavapp/nav

Inputs

NameDescriptionTypeOptionalDefaultExtension creator
logosA nav logos object.createNavLogoExtension.logoElementsDataReftrue-createNavLogoExtension
itemsNav items target objects.createNavItemExtension.targetDataReftrue-createNavItemExtension

App routes

Renders a route element for each route received as input and a NotFoundErrorPage component.

kindnamespacenameid
-approutesapp/routes

Caveats

Be careful when overriding this extension, as to do so correctly you must consider these implementation requirements:

  • The routing system is managed by more than one extension, and they all use react-router behind the scenes. There are also some utilities that are based on the same routing library like useRouteRefParams. Therefore, you cannot use a different library without causing side effects in these other extensions and helper utilities;
  • Don't remove configs or inputs, just extend these things yourself with optional new options, otherwise it will cause breaking changes for extensions like createPageExtension that depend on this type of inputs;
  • Remember to user the route refs for getting paths dynamically, otherwise if an adopter modifies a path through configuration, the route is not going to point to the configured path;
  • Adopters expect to be able to customize the NotFoundErrorPage component via Components API, you should render this component for routes not configured.

Inputs

NameDescriptionTypeOptionalDefaultExtension creator
routesThe route objects list.{ path: coreExtensionData.routePath, ref: coreExtensionData.routeRef.optional(), element: coreExtensionData.reactElement }false-createPageExtension