Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@backstage/plugin-catalog-react

backstage349.2kApache-2.01.18.0TypeScript support: included

A frontend library that helps other Backstage plugins interact with the catalog

backstage

readme

headline

Backstage

English | 한국어 | 中文版 | Français

License CNCF Status Discord Code style Codecov OpenSSF Best Practices OpenSSF Scorecard

What is Backstage?

Backstage is an open source framework for building developer portals. Powered by a centralized software catalog, Backstage restores order to your microservices and infrastructure and enables your product teams to ship high-quality code quickly without compromising autonomy.

Backstage unifies all your infrastructure tooling, services, and documentation to create a streamlined development environment from end to end.

software-catalog

Out of the box, Backstage includes:

  • Backstage Software Catalog for managing all your software such as microservices, libraries, data pipelines, websites, and ML models
  • Backstage Software Templates for quickly spinning up new projects and standardizing your tooling with your organization’s best practices
  • Backstage TechDocs for making it easy to create, maintain, find, and use technical documentation, using a "docs like code" approach
  • Plus, a growing ecosystem of open source plugins that further expand Backstage’s customizability and functionality

Backstage was created by Spotify but is now hosted by the Cloud Native Computing Foundation (CNCF) as an Incubation level project. For more information, see the announcement.

Project roadmap

For information about the detailed project roadmap including delivered milestones, see the Roadmap.

Getting Started

To start using Backstage, see the Getting Started documentation.

Documentation

The documentation of Backstage includes:

Community

To engage with our community, you can use the following resources:

Governance

See the GOVERNANCE.md document in the backstage/community repository.

License

Copyright 2020-2025 © The Backstage Authors. All rights reserved. The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our Trademark Usage page: https://www.linuxfoundation.org/trademark-usage

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Security

Please report sensitive security issues using Spotify's bug-bounty program rather than GitHub.

For further details, see our complete security release process.

changelog

@backstage/plugin-catalog-react

1.18.0

Minor Changes

  • d47aaa3: Added EntityOrderFilter to sort entities by different fields/columns. This new filter allows users to specify the order in which entities are displayed in the catalog.

    Example usage:

    import {
      EntityOrderFilter,
      useEntityList,
    } from '@backstage/plugin-catalog-react';
    // ...
    const { updateFilters } = useEntityList();
    
    // ...
    updateFilters({
      order: new EntityOrderFilter([
        {
          field: 'metadata.name',
          order: 'desc',
        },
      ]),
    });
  • 1a003ff: Add getLocations method to CatalogApi and CatalogClient. This method calls the GET /locations endpoint from the catalog backend.

Patch Changes

1.18.0-next.3

Patch Changes

1.18.0-next.2

Patch Changes

1.18.0-next.1

Patch Changes

1.18.0-next.0

Minor Changes

  • d47aaa3: Added EntityOrderFilter to sort entities by different fields/columns. This new filter allows users to specify the order in which entities are displayed in the catalog.

    Example usage:

    import {
      EntityOrderFilter,
      useEntityList,
    } from '@backstage/plugin-catalog-react';
    // ...
    const { updateFilters } = useEntityList();
    
    // ...
    updateFilters({
      order: new EntityOrderFilter([
        {
          field: 'metadata.name',
          order: 'desc',
        },
      ]),
    });
  • 1a003ff: Add getLocations method to CatalogApi and CatalogClient. This method calls the GET /locations endpoint from the catalog backend.

Patch Changes

1.17.0

Minor Changes

  • 0f37fa8: entityRouteParams now also accepts entity refs, and can help with encoding the resulting parameters.
  • 61d350f: BREAKING ALPHA: CatalogFilterBlueprint, used in the new frontend system, is now exported under plugin-catalog-react instead of plugin-catalog.

    + import { CatalogFilterBlueprint } from '@backstage/plugin-catalog-react/alpha';
    - import { CatalogFilterBlueprint } from '@backstage/plugin-catalog/alpha';
  • 09afd67: Adds EntityContextMenuItemBlueprint to enable extending the entity page's context menu with user defined items.

    For example:

    import { EntityContextMenuItemBlueprint } from '@backstage/plugin-catalog-react/alpha';
    
    const myCustomHref = EntityContextMenuItemBlueprint.make({
      name: 'test-href',
      params: {
        icon: <span>Example Icon</span>,
        useProps: () => ({
          title: 'Example Href',
          href: '/example-path',
          disabled: false,
          component: 'a',
        }),
      },
    });
    
    const myCustomOnClick = EntityContextMenuItemBlueprint.make({
      name: 'test-click',
      params: {
        icon: <span>Test Icon</span>,
        useProps: () => ({
          title: 'Example onClick',
          onClick: () => window.alert('Hello world!'),
          disabled: false,
        }),
      },
    });

Patch Changes

1.17.0-next.2

Minor Changes

  • 61d350f: BREAKING ALPHA: CatalogFilterBlueprint, used in the new frontend system, is now exported under plugin-catalog-react instead of plugin-catalog.

    + import { CatalogFilterBlueprint } from '@backstage/plugin-catalog-react/alpha';
    - import { CatalogFilterBlueprint } from '@backstage/plugin-catalog/alpha';
  • 09afd67: Adds EntityContextMenuItemBlueprint to enable extending the entity page's context menu with user defined items.

    For example:

    import { EntityContextMenuItemBlueprint } from '@backstage/plugin-catalog-react/alpha';
    
    const myCustomHref = EntityContextMenuItemBlueprint.make({
      name: 'test-href',
      params: {
        icon: <span>Example Icon</span>,
        useProps: () => ({
          title: 'Example Href',
          href: '/example-path',
          disabled: false,
          component: 'a',
        }),
      },
    });
    
    const myCustomOnClick = EntityContextMenuItemBlueprint.make({
      name: 'test-click',
      params: {
        icon: <span>Test Icon</span>,
        useProps: () => ({
          title: 'Example onClick',
          onClick: () => window.alert('Hello world!'),
          disabled: false,
        }),
      },
    });

Patch Changes

1.16.1-next.1

Patch Changes

1.16.1-next.0

Patch Changes

1.16.0

Minor Changes

  • 7f57365: Add support for a new entity predicate syntax when defining filters related to the blueprints exported via /alpha for the new frontend system. For more information, see the entity filters documentation.
  • ba9649a: Add a new defaultGroup parameter to the EntityContentBlueprint, here are usage examples:

    Set a default group while creating the extension:

    const entityKubernetesContent = EntityContentBlueprint.make({
      name: 'kubernetes',
      params: {
        defaultPath: '/kubernetes',
        defaultTitle: 'Kubernetes',
    +   defaultGroup: 'deployment',
        filter: 'kind:component,resource',
        loader: () =>
          import('./KubernetesContentPage').then(m =>
            compatWrapper(<m.KubernetesContentPage />),
          ),
      },
    });

    Disassociate an entity content from a default group:

    # app-config.yaml
    app:
      extensions:
        # Entity page content
    -   - entity-content:kubernetes/kubernetes
    +   - entity-content:kubernetes/kubernetes:
    +       config:
    +         group: false

    Associate an entity content with a different default or custom group than the one defined in code when the extension was created:

    # app-config.yaml
    app:
      extensions:
        # Entity page content
    -   - entity-content:kubernetes/kubernetes
    +   - entity-content:kubernetes/kubernetes:
    +       config:
    +         group: custom # associating this extension with a custom group id, the group should have previously been created via entity page configuration
    
  • 247a40b: Introduces a new EntityHeaderBlueprint that allows you to override the default entity page header.

    import { EntityHeaderBlueprint } from '@backstage/plugin-catalog-react/alpha';
    
    EntityHeaderBlueprint.make({
      name: 'my-default-header',
      params: {
        loader: () =>
          import('./MyDefaultHeader').then(m => <m.MyDefaultHeader />),
      },
    });
  • a3d93ca: Introduces a new EntityContentLayoutBlueprint that creates custom entity content layouts.

    The layout components receive card elements and can render them as they see fit. Cards is an array of objects with the following properties:

    • element: JSx.Element;
    • type: "peek" | "info" | "full" | undefined;

    Usage example

    Creating a custom overview tab layout:

    import {
      EntityContentLayoutProps,
      EntityContentLayoutBlueprint,
    } from '@backstage/plugin-catalog-react/alpha';
    // ...
    
    function StickyEntityContentOverviewLayout(props: EntityContentLayoutProps) {
      const { cards } = props;
      const classes = useStyles();
      return (
        <Grid container spacing={3}>
          <Grid
            className={classes.infoArea}
            xs={12}
            md={4}
            item
          >
            <Grid container spacing={3}>
              {cards
                .filter(card => card.type === 'info')
                .map((card, index) => (
                  <Grid key={index} xs={12} item>
                    {card.element}
                  </Grid>
                ))}
            </Grid>
          </Grid>
          <Grid xs={12} md={8} item>
            <Grid container spacing={3}>
              {cards
                .filter(card => card.type === 'peek')
                .map((card, index) => (
                  <Grid key={index} className={classes.card} xs={12} md={6} item>
                    {card.element}
                  </Grid>
                ))}
              {cards
                .filter(card => !card.type || card.type === 'full')
                .map((card, index) => (
                  <Grid key={index} className={classes.card} xs={12} md={6} item>
                    {card.element}
                  </Grid>
                ))}
            </Grid>
          </Grid>
        </Grid>
      );
    }
    
    export const customEntityContentOverviewStickyLayoutModule = createFrontendModule({
      pluginId: 'app',
      extensions: [
        EntityContentLayoutBlueprint.make({
          name: 'sticky',
          params: {
            // (optional) defaults the `() => false` filter function
            defaultFilter: 'kind:template'
            loader: async () => StickyEntityContentOverviewLayout,
          },
        }),
      ],

    Disabling the custom layout:

    # app-config.yaml
    app:
      extensions:
        - entity-content-layout:app/sticky: false

    Overriding the custom layout filter:

    # app-config.yaml
    app:
      extensions:
        - entity-content-layout:app/sticky:
            config:
              # This layout will be used only with component entities
              filter: 'kind:component'
  • d78bb71: Added hidden prop to EntityTagPicker, EntityAutocompletePicker and UserListPicker. Added initialFilter prop to EntityTagPicker to set an initial filter for the picker. Added alwaysKeepFilters prop to UserListPicker to prevent filters from resetting when no entities match the initial filters.

  • a3d93ca: Add an optional type parameter to EntityCard extensions. A card's type determines characteristics such as its expected size and where it will be rendered by the entity content layout.

    Initially the following three types are supported:

    • peek: small vertical cards that provide information at a glance, for example recent builds, deployments, and service health.
    • info: medium size cards with high priority and frequently used information such as common actions, entity metadata, and links.
    • full: Large cards that are more feature rich with more information, typically used by plugins that don't quite need the full content view and want to show a card instead.

    Usage examples

    Defining a default type when creating a card:

    const myCard = EntityCardBlueprint.make({
      name: 'myCard',
      params: {
    +   type: 'info',
        loader: import('./MyCard).then(m => { default: m.MyCard }),
      },
    });

    Changing the card type via app-config.yaml file:

    app:
      extensions:
    +   - entity-card:myPlugin/myCard:
    +       config:
    +         type: info

Patch Changes

1.16.0-next.2

Minor Changes

  • 7f57365: Add support for a new entity predicate syntax when defining filters related to the blueprints exported via /alpha for the new frontend system. For more information, see the entity filters documentation.
  • 247a40b: Introduces a new EntityHeaderBlueprint that allows you to override the default entity page header.

    import { EntityHeaderBlueprint } from '@backstage/plugin-catalog-react/alpha';
    
    EntityHeaderBlueprint.make({
      name: 'my-default-header',
      params: {
        loader: () =>
          import('./MyDefaultHeader').then(m => <m.MyDefaultHeader />),
      },
    });

Patch Changes

1.16.0-next.1

Patch Changes

1.16.0-next.0

Minor Changes

  • ba9649a: Add a new defaultGroup parameter to the EntityContentBlueprint, here are usage examples:

    Set a default group while creating the extension:

    const entityKubernetesContent = EntityContentBlueprint.make({
      name: 'kubernetes',
      params: {
        defaultPath: '/kubernetes',
        defaultTitle: 'Kubernetes',
    +   defaultGroup: 'deployment',
        filter: 'kind:component,resource',
        loader: () =>
          import('./KubernetesContentPage').then(m =>
            compatWrapper(<m.KubernetesContentPage />),
          ),
      },
    });

    Disassociate an entity content from a default group:

    # app-config.yaml
    app:
      extensions:
        # Entity page content
    -   - entity-content:kubernetes/kubernetes
    +   - entity-content:kubernetes/kubernetes:
    +       config:
    +         group: false

    Associate an entity content with a different default or custom group than the one defined in code when the extension was created:

    # app-config.yaml
    app:
      extensions:
        # Entity page content
    -   - entity-content:kubernetes/kubernetes
    +   - entity-content:kubernetes/kubernetes:
    +       config:
    +         group: custom # associating this extension with a custom group id, the group should have previously been created via entity page configuration
    
  • a3d93ca: Introduces a new EntityContentLayoutBlueprint that creates custom entity content layouts.

    The layout components receive card elements and can render them as they see fit. Cards is an array of objects with the following properties:

    • element: JSx.Element;
    • type: "summary" | "info" | "content" | undefined;

    Usage example

    Creating a custom overview tab layout:

    import {
      EntityContentLayoutProps,
      EntityContentLayoutBlueprint,
    } from '@backstage/plugin-catalog-react/alpha';
    // ...
    
    function StickyEntityContentOverviewLayout(props: EntityContentLayoutProps) {
      const { cards } = props;
      const classes = useStyles();
      return (
        <Grid container spacing={3}>
          <Grid
            className={classes.infoArea}
            xs={12}
            md={4}
            item
          >
            <Grid container spacing={3}>
              {cards
                .filter(card => card.type === 'info')
                .map((card, index) => (
                  <Grid key={index} xs={12} item>
                    {card.element}
                  </Grid>
                ))}
            </Grid>
          </Grid>
          <Grid xs={12} md={8} item>
            <Grid container spacing={3}>
              {cards
                .filter(card => card.type === 'summary')
                .map((card, index) => (
                  <Grid key={index} className={classes.card} xs={12} md={6} item>
                    {card.element}
                  </Grid>
                ))}
              {cards
                .filter(card => !card.type || card.type === 'content')
                .map((card, index) => (
                  <Grid key={index} className={classes.card} xs={12} md={6} item>
                    {card.element}
                  </Grid>
                ))}
            </Grid>
          </Grid>
        </Grid>
      );
    }
    
    export const customEntityContentOverviewStickyLayoutModule = createFrontendModule({
      pluginId: 'app',
      extensions: [
        EntityContentLayoutBlueprint.make({
          name: 'sticky',
          params: {
            // (optional) defaults the `() => false` filter function
            defaultFilter: 'kind:template'
            loader: async () => StickyEntityContentOverviewLayout,
          },
        }),
      ],

    Disabling the custom layout:

    # app-config.yaml
    app:
      extensions:
        - entity-content-layout:app/sticky: false

    Overriding the custom layout filter:

    # app-config.yaml
    app:
      extensions:
        - entity-content-layout:app/sticky:
            config:
              # This layout will be used only with component entities
              filter: 'kind:component'
  • d78bb71: Added hidden prop to EntityTagPicker, EntityAutocompletePicker and UserListPicker. Added initialFilter prop to EntityTagPicker to set an initial filter for the picker. Added alwaysKeepFilters prop to UserListPicker to prevent filters from resetting when no entities match the initial filters.

  • a3d93ca: Add an optional type parameter to EntityCard extensions. A card's type determines characteristics such as its expected size and where it will be rendered by the entity content layout.

    Initially the following three types are supported:

    • summary: small vertical cards that provide information at a glance, for example recent builds, deployments, and service health.
    • info: medium size cards with high priority and frequently used information such as common actions, entity metadata, and links.
    • content: Large cards that are more feature rich with more information, typically used by plugins that don't quite need the content content view and want to show a card instead.

    Usage examples

    Defining a default type when creating a card:

    const myCard = EntityCardBlueprint.make({
      name: 'myCard',
      params: {
    +   type: 'info',
        loader: import('./MyCard).then(m => { default: m.MyCard }),
      },
    });

    Changing the card type via app-config.yaml file:

    app:
      extensions:
    +   - entity-card:myPlugin/myCard:
    +       config:
    +         type: info

Patch Changes

1.15.2

Patch Changes

1.15.2-next.3

Patch Changes

1.15.2-next.2

Patch Changes

1.15.2-next.1

Patch Changes

1.15.2-next.0

Patch Changes

1.15.1

Patch Changes

1.15.1-next.1

Patch Changes

1.15.1-next.0

Patch Changes

1.15.0

Minor Changes

  • 1ffb9f3: Update EntityKindFilter to include a label field with the properly capitalized Kind facet string
  • ceaf602: Sort EntityTypePicker by default

Patch Changes

1.14.3-next.2

Patch Changes

1.14.3-next.1

Patch Changes

1.14.3-next.0

Patch Changes

1.14.1

Patch Changes

1.14.1-next.3

Patch Changes

1.14.1-next.2

Patch Changes

1.14.1-next.1

Patch Changes

1.14.1-next.0

Patch Changes

1.14.0

Minor Changes

  • 0801db6: Add catalog service mocks under the /testUtils subpath export.

    You can now use e.g. const catalog = catalogApiMock.mock() in your test and then do assertions on catalog.getEntities without awkward type casting.

  • 6812980: Added a new prop, disableTooltip to the EntityRefLink component

Patch Changes

1.14.0-next.2

Minor Changes

  • 0801db6: Add catalog service mocks under the /testUtils subpath export.

    You can now use e.g. const catalog = catalogApiMock.mock() in your test and then do assertions on catalog.getEntities without awkward type casting.

Patch Changes

1.14.0-next.1

Minor Changes

  • 6812980: Added a new prop, disableTooltip to the EntityRefLink component

Patch Changes

1.13.1-next.0

Patch Changes

1.13.0

Minor Changes

  • 78475c3: Allow offset mode paging in entity list provider

Patch Changes

1.13.0-next.2

Minor Changes

  • 78475c3: Allow offset mode paging in entity list provider

Patch Changes

1.12.4-next.1

Patch Changes

1.12.4-next.0

Patch Changes

1.12.3

Patch Changes

1.12.3-next.3

Patch Changes

1.12.3-next.2

Patch Changes

1.12.3-next.1

Patch Changes

1.12.3-next.0

Patch Changes

1.12.2

Patch Changes

1.12.2-next.2

Patch Changes

1.12.2-next.1

Patch Changes

1.12.2-next.0

Patch Changes

1.12.1

Patch Changes

1.12.1-next.2

Patch Changes

1.12.1-next.1

Patch Changes

1.12.1-next.0

Patch Changes

1.12.0

Minor Changes

  • 8834daf: Updated the presentation API to return a promise, in addition to the snapshot and observable that were there before. This makes it much easier to consume the API in a non-React context.

Patch Changes

1.12.0-next.2

Minor Changes

  • 8834daf: Updated the presentation API to return a promise, in addition to the snapshot and observable that were there before. This makes it much easier to consume the API in a non-React context.

Patch Changes

1.11.4-next.1

Patch Changes

1.11.4-next.0

Patch Changes

1.11.3

Patch Changes

1.11.3-next.1

Patch Changes

1.11.3-next.0

Patch Changes

1.11.2

Patch Changes

1.11.1

Patch Changes

1.11.0

Minor Changes

  • 72b8827: Number of results is now directly added as the field totalItems on useEntityList.

Patch Changes

1.11.0-next.2

Minor Changes

  • 72b8827: Number of results is now directly added as the field totalItems on useEntityList.

Patch Changes

1.10.1-next.1

Patch Changes

1.10.1-next.0

Patch Changes

1.10.0

Minor Changes

  • d208a93: Added support for server side text filtering to paginated entity requests.
  • 3dc64e9: Add support to configSchema option on the createEntityCardExtension factory function.

Patch Changes

1.10.0-next.3

Patch Changes

1.10.0-next.2

Minor Changes

  • 3dc64e9: Add support to configSchema option on the createEntityCardExtension factory function.

Patch Changes

1.9.4-next.1

Patch Changes

1.9.4-next.0

Patch Changes

1.9.3

Patch Changes

1.9.3-next.2

Patch Changes

1.9.3-next.1

Patch Changes

1.9.3-next.0

Patch Changes

1.9.2

Patch Changes

1.9.2-next.3

Patch Changes

1.9.2-next.2

Patch Changes

1.9.2-next.1

Patch Changes

1.9.2-next.0

Patch Changes

1.9.0

Minor Changes

  • 1e5b7d993a: Added an EntityPresentationApi and associated entityPresentationApiRef. This API lets you control how references to entities (e.g. in links, headings, iconography etc) are represented in the user interface.

    Usage of this API is initially added to the EntityRefLink and EntityRefLinks components, so that they can render richer, more correct representation of entity refs. There's also a new EntityDisplayName component, which works just like the EntityRefLink but without the link.

    Along with that change, the fetchEntities and getTitle props of EntityRefLinksProps are deprecated and no longer used, since the same need instead is fulfilled (and by default always enabled) by the entityPresentationApiRef.

  • 1fd53fa0c6: The UserListPicker component has undergone improvements to enhance its performance.

    The previous implementation inferred the number of owned and starred entities based on the entities available in the EntityListContext. The updated version no longer relies on the EntityListContext for inference, allowing for better decoupling.

    The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as EntityTagFilter, EntityOwnerFilter, EntityLifecycleFilter and EntityNamespaceFilter have now the getCatalogFilters method implemented.

Patch Changes

1.9.0-next.2

Patch Changes

1.9.0-next.1

Patch Changes

1.9.0-next.0

Minor Changes

  • 1e5b7d993a: Added an EntityPresentationApi and associated entityPresentationApiRef. This API lets you control how references to entities (e.g. in links, headings, iconography etc) are represented in the user interface.

    Usage of this API is initially added to the EntityRefLink and EntityRefLinks components, so that they can render richer, more correct representation of entity refs. There's also a new EntityDisplayName component, which works just like the EntityRefLink but without the link.

    Along with that change, the fetchEntities and getTitle props of EntityRefLinksProps are deprecated and no longer used, since the same need instead is fulfilled (and by default always enabled) by the entityPresentationApiRef.

  • 1fd53fa0c6: The UserListPicker component has undergone improvements to enhance its performance.

    The previous implementation inferred the number of owned and starred entities based on the entities available in the EntityListContext. The updated version no longer relies on the EntityListContext for inference, allowing for better decoupling.

    The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as EntityTagFilter, EntityOwnerFilter, EntityLifecycleFilter and EntityNamespaceFilter have now the getCatalogFilters method implemented.

Patch Changes

1.8.5

Patch Changes

1.8.5-next.2

Patch Changes

1.8.5-next.1

Patch Changes

1.8.5-next.0

Patch Changes

1.8.4

Patch Changes

1.8.4-next.3

Patch Changes

1.8.4-next.2

Patch Changes

1.8.4-next.1

Patch Changes

1.8.3-next.0

Patch Changes

1.8.1

Patch Changes

1.8.1-next.1

Patch Changes

  • aa3feedce10a: Allow specifying screen size when catalog filters are hidden in drawer

1.8.1-next.0

Patch Changes

1.8.0

Minor Changes

  • eae0352d3864: Tables which use EntityTableProps now have an additional tableOptions prop which can be used to provide additional table options to these components.

Patch Changes

1.8.0-next.2

Minor Changes

  • eae0352d3864: Tables which use EntityTableProps now have an additional tableOptions prop which can be used to provide additional table options to these components.

Patch Changes

1.7.1-next.1

Patch Changes

1.7.1-next.0

Patch Changes

1.7.0

Minor Changes

  • cb4c15989b6b: The EntityOwnerPicker component has undergone improvements to enhance its performance. The previous implementation inferred users and groups displayed by the EntityOwnerPicker component based on the entities available in the EntityListContext. The updated version no longer relies on the EntityListContext for inference, allowing for better decoupling and improved performance.

    The component now loads entities asynchronously, resulting in improved performance and responsiveness. A new mode prop has been introduced which provides two different behaviours:

    • <EntityOwnerPicker mode="owners-only" />: loads the owners data asynchronously using the facets endpoint. The data is kept in memory and rendered asynchronously as the user scrolls. This is the default mode and is supposed to be retro-compatible with the previous implementation.

    • <EntityOwnerPicker mode="all" /> loads all users and groups present in the catalog asynchronously. The data is loaded in batches as the user scrolls. This is more efficient than owners-only, but has the drawback of displaying users and groups who aren't owner of any entity.

Patch Changes

1.7.0-next.3

Patch Changes

1.7.0-next.2

Patch Changes

1.7.0-next.1

Patch Changes

1.7.0-next.0

Minor Changes

  • cb4c15989b6b: The EntityOwnerPicker component has undergone improvements to enhance its performance.

    The component now loads entities asynchronously, resulting in improved performance and responsiveness. Instead of loading all entities upfront, they are now loaded in batches as the user scrolls. The previous implementation inferred users and groups displayed by the EntityOwnerPicker component based on the entities available in the EntityListContext. The updated version no longer relies on the EntityListContext for inference, allowing for better decoupling and improved performance.

Patch Changes

1.6.0

Minor Changes

  • 2258dcae970: Added an entity namespace filter and column on the default catalog page.

    If you have a custom version of the catalog page, you can add this filter in your CatalogPage code:

    <CatalogFilterLayout>
      <CatalogFilterLayout.Filters>
        <EntityTypePicker />
        <UserListPicker initialFilter={initiallySelectedFilter} />
        <EntityTagPicker />
        /* if you want namespace picker */
        <EntityNamespacePicker />
      </CatalogFilterLayout.Filters>
      <CatalogFilterLayout.Content>
        <CatalogTable columns={columns} actions={actions} />
      </CatalogFilterLayout.Content>
    </CatalogFilterLayout>

    The namespace column can be added using createNamespaceColumn();. This is only needed if you customized the columns for CatalogTable.

Patch Changes

1.6.0-next.2

Patch Changes

1.6.0-next.1

Patch Changes

1.6.0-next.0

Minor Changes

  • 2258dcae970: Added an entity namespace filter and column on the default catalog page.

    If you have a custom version of the catalog page, you can add this filter in your CatalogPage code:

    <CatalogFilterLayout>
      <CatalogFilterLayout.Filters>
        <EntityTypePicker />
        <UserListPicker initialFilter={initiallySelectedFilter} />
        <EntityTagPicker />
        /* if you want namespace picker */
        <EntityNamespacePicker />
      </CatalogFilterLayout.Filters>
      <CatalogFilterLayout.Content>
        <CatalogTable columns={columns} actions={actions} />
      </CatalogFilterLayout.Content>
    </CatalogFilterLayout>

    The namespace column can be added using createNamespaceColumn();. This is only needed if you customized the columns for CatalogTable.

Patch Changes

1.5.0

Minor Changes

  • a49fb39df5a: Attempt to load entity owner names in the EntityOwnerPicker through the by-refs endpoint. If spec.profile.displayName or metadata.title are populated, we now attempt to show those before showing the humanizeEntityRef'd version.

    BREAKING: EntityOwnerFilter now uses the full entity ref instead of the humanizeEntityRef. If you rely on EntityOwnerFilter.values or the queryParameters.owners of useEntityList, you will need to adjust your code like the following.

    const { queryParameters: { owners } } = useEntityList();
    // or
    const { filter: { owners } } = useEntityList();
    
    // Instead of,
    if (owners.some(ref => ref === humanizeEntityRef(myEntity))) ...
    
    // You'll need to use,
    if (owners.some(ref => ref === stringifyEntityRef(myEntity))) ...

Patch Changes

1.5.0-next.3

Minor Changes

  • a49fb39df5a: Attempt to load entity owner names in the EntityOwnerPicker through the by-refs endpoint. If spec.profile.displayName or metadata.title are populated, we now attempt to show those before showing the humanizeEntityRef'd version.

    BREAKING: EntityOwnerFilter now uses the full entity ref instead of the humanizeEntityRef. If you rely on EntityOwnerFilter.values or the queryParameters.owners of useEntityList, you will need to adjust your code like the following.

    const { queryParameters: { owners } } = useEntityList();
    // or
    const { filter: { owners } } = useEntityList();
    
    // Instead of,
    if (owners.some(ref => ref === humanizeEntityRef(myEntity))) ...
    
    // You'll need to use,
    if (owners.some(ref => ref === stringifyEntityRef(myEntity))) ...

Patch Changes

1.4.1-next.2

Patch Changes

1.4.1-next.1

Patch Changes

1.4.1-next.0

Patch Changes

1.4.0

Minor Changes

  • 0a5b73b2926: Add possibility to re-use EntityPicker for filters with multiple select.

Patch Changes

1.4.0-next.2

Patch Changes

1.4.0-next.1

Patch Changes

1.4.0-next.0

Minor Changes

  • 0a5b73b292: Add possibility to re-use EntityPicker for filters with multiple select.

Patch Changes

1.3.0

Minor Changes

  • 929e1afe1b: Add initialFilter prop to EntityLifecyclePicker. This allows you to set an initial lifecycle for the catalog.
  • fab93c2fe8: Aligned buttons on "Unregister entity" dialog to keep them on the same line

Patch Changes

1.3.0-next.2

Patch Changes

1.3.0-next.1

Minor Changes

  • fab93c2fe8: Aligned buttons on "Unregister entity" dialog to keep them on the same line

Patch Changes

1.3.0-next.0

Minor Changes

  • 929e1afe1b: Add initialFilter prop to EntityLifecyclePicker. This allows you to set an initial lifecycle for the catalog.

Patch Changes

1.2.4

Patch Changes

1.2.4-next.2

Patch Changes

1.2.4-next.1

Patch Changes

1.2.4-next.0

Patch Changes

1.2.3

Patch Changes

1.2.2

Patch Changes

1.2.2-next.4

Patch Changes

1.2.2-next.3

Patch Changes

1.2.2-next.2

Patch Changes

1.2.2-next.1

Patch Changes

1.2.2-next.0

Patch Changes

1.2.1

Patch Changes

1.2.1-next.1

Patch Changes

1.2.1-next.0

Patch Changes

1.2.0

Minor Changes

  • 4efadb6968: Implemented the visual parts of EntityKindPicker so that it can be shown alongside the other filters on the left side of your catalog pages.

Patch Changes

1.2.0-next.2

Patch Changes

1.2.0-next.1

Minor Changes

  • 4efadb6968: Implemented the visual parts of EntityKindPicker so that it can be shown alongside the other filters on the left side of your catalog pages.

Patch Changes

1.1.5-next.0

Patch Changes

1.1.4

Patch Changes

1.1.4-next.2

Patch Changes

1.1.4-next.1

Patch Changes

1.1.4-next.0

Patch Changes

1.1.3

Patch Changes

1.1.3-next.2

Patch Changes

1.1.3-next.1

Patch Changes

1.1.3-next.0

Patch Changes

1.1.2

Patch Changes

1.1.2-next.3

Patch Changes

1.1.2-next.2

Patch Changes

  • be26d95141: Added new EntityProcessingStatusPicker that will filter for entities with orphans and/or errors.

    If you are using the default Catalog page this picker will be added automatically. For those who have customized their Catalog page you'll need to add this manually by doing something like this:

    ...
    import {
      CatalogFilterLayout,
      EntityTypePicker,
      UserListPicker,
      EntityTagPicker
    + EntityProcessingStatusPicker,
    } from '@backstage/plugin-catalog-react';
    ...
    export const CustomCatalogPage = ({
      columns,
      actions,
      initiallySelectedFilter = 'owned',
    }: CatalogPageProps) => {
      return (
        ...
            <EntityListProvider>
              <CatalogFilterLayout>
                <CatalogFilterLayout.Filters>
                  <EntityKindPicker initialFilter="component" hidden />
                  <EntityTypePicker />
                  <UserListPicker initialFilter={initiallySelectedFilter} />
                  <EntityTagPicker />
    +             <EntityProcessingStatusPicker />
                <CatalogFilterLayout.Filters>
                <CatalogFilterLayout.Content>
                  <CatalogTable columns={columns} actions={actions} />
                </CatalogFilterLayout.Content>
              </CatalogFilterLayout>
            </EntityListProvider>
        ...
    };
  • Updated dependencies

1.1.2-next.1

Patch Changes

1.1.2-next.0

Patch Changes

1.1.1

Patch Changes

1.1.1-next.1

Patch Changes

1.1.1-next.0

Patch Changes

  • 1f70704580: Accessibility updates:

    • Wrapped the EntityLifecyclePicker, EntityOwnerPicker, EntityTagPicker, in label elements
    • Changed group name Typography component to span (from default h6), added aria-label to the List component, and role of menuitem to the container of the MenuItem component
  • Updated dependencies

1.1.0

Minor Changes

  • 4274844a8c: Use InfoCardVariants on custom cards variant attribute

Patch Changes

1.1.0-next.2

Patch Changes

1.1.0-next.1

Patch Changes

1.1.0-next.0

Minor Changes

  • 4274844a8c: Use InfoCardVariants on custom cards variant attribute

Patch Changes

1.0.1

Patch Changes

  • 0ffd88a90e: Prevent permissions with types other than ResourcePermission<'catalog-entity'> from being used with the useEntityPermission hook.
  • 7c7919777e: build(deps-dev): bump @testing-library/react-hooks from 7.0.2 to 8.0.0
  • 24254fd433: build(deps): bump @testing-library/user-event from 13.5.0 to 14.0.0
  • 4af82967f4: Decouple tags picker from backend entities

    EntityTagPicker fetches all the tags independently and it doesn't require all the entities to be available client side.

  • 4be0d1e777: Changed catalog filter components to only pay attention to query parameters relevant to the component.

  • 5d5fdbe541: Columns in CatalogTable now change depending on the entity kind, ensuring only relevant columns are displayed.
  • 863e7bcb7b: Updated the "unregister location" behavior in UnregisterEntityDialog. Removed unnecessary entity deletion requests that were sent after successfully deleting a location.
  • 37b04b5a5e: Removed broken link from Labels section of entity inspector.
  • a496cee4d1: Add support for string refs to the EntityRefLinks component
  • d34900af81: Added a new NextScaffolderRouter which will eventually replace the exiting router
  • 99063c39ae: Minor API report cleanup
  • 4431873583: Update usePermission usage.
  • Updated dependencies

1.0.1-next.3

Patch Changes

1.0.1-next.2

Patch Changes

  • 4be0d1e777: Changed catalog filter components to only pay attention to query parameters relevant to the component.
  • 5d5fdbe541: Columns in CatalogTable now change depending on the entity kind, ensuring only relevant columns are displayed.
  • 99063c39ae: Minor API report cleanup
  • Updated dependencies

1.0.1-next.1

Patch Changes

1.0.1-next.0

Patch Changes

1.0.0

Major Changes

  • b58c70c223: This package has been promoted to v1.0! To understand how this change affects the package, please check out our versioning policy.

Minor Changes

  • f7fb7295e6: BREAKING: Removed the deprecated favoriteEntityTooltip and favoriteEntityIcon functions.
  • 4cd92028b8: BREAKING: The following deprecated annotation reading helper functions were removed:

    • getEntityMetadataViewUrl, use entity.metadata.annotations?.[ANNOTATION_VIEW_URL] instead.
    • getEntityMetadataEditUrl, use entity.metadata.annotations?.[ANNOTATION_EDIT_URL] instead.
  • 1f2757bb07: BREAKING: The useEntity hook no longer returns loading or error states, and will throw an error if the entity is not immediately available. In practice this means that useEntity can only be used in contexts where the entity is guaranteed to have been loaded, for example inside an EntityLayout. To access the loading state of the entity, use useAsyncEntity instead.

  • 0f3520d499: BREAKING: Removed the deprecated formatEntityRefTitle, use humanizeEntityRef instead.

Patch Changes

0.9.0

Minor Changes

  • b0af81726d: BREAKING: Removed reduceCatalogFilters and reduceEntityFilters due to low external utility value.
  • 7ffb2c73c9: BREAKING: Removed the deprecated loadCatalogOwnerRefs function. Usages of this function can be directly replaced with ownershipEntityRefs from identityApi.getBackstageIdentity().

    This also affects the useEntityOwnership hook in that it no longer uses loadCatalogOwnerRefs, meaning it will no longer load in additional relations and instead only rely on the ownershipEntityRefs from the IdentityApi.

  • dd88d1e3ac: BREAKING: Removed useEntityFromUrl.

  • 9844d4d2bd: BREAKING: Removed useEntityCompoundName, use useRouteRefParams(entityRouteRef) instead.
  • 2b8c986ce0: BREAKING: Removed useEntityListProvider use useEntityList instead.
  • f3a7a9de6d: BREAKING: Removed useOwnedEntities and moved its usage internally to the scaffolder-backend where it's used.

    BREAKING: Removed EntityTypeReturn type which is now inlined.

  • cf1ff5b438: BREAKING: Removed the useEntityKinds hook, use catalogApi.getEntityFacets({ facets: ['kind'] }) instead.

  • fc6290a76d: BREAKING: Removed the deprecated useOwnUser hook. Existing usage can be replaced with identityApi.getBackstageIdentity(), followed by a call to catalogClient.getEntityByRef(identity.userEntityRef).

Patch Changes

0.9.0-next.0

Minor Changes

  • b0af81726d: BREAKING: Removed reduceCatalogFilters and reduceEntityFilters due to low external utility value.
  • 7ffb2c73c9: BREAKING: Removed the deprecated loadCatalogOwnerRefs function. Usages of this function can be directly replaced with ownershipEntityRefs from identityApi.getBackstageIdentity().

    This also affects the useEntityOwnership hook in that it no longer uses loadCatalogOwnerRefs, meaning it will no longer load in additional relations and instead only rely on the ownershipEntityRefs from the IdentityApi.

  • dd88d1e3ac: BREAKING: Removed useEntityFromUrl.

  • 9844d4d2bd: BREAKING: Removed useEntityCompoundName, use useRouteRefParams(entityRouteRef) instead.
  • 2b8c986ce0: BREAKING: Removed useEntityListProvider use useEntityList instead.
  • f3a7a9de6d: BREAKING: Removed useOwnedEntities and moved its usage internally to the scaffolder-backend where it's used.

    BREAKING: Removed EntityTypeReturn type which is now inlined.

  • cf1ff5b438: BREAKING: Removed the useEntityKinds hook, use catalogApi.getEntityFacets({ facets: ['kind'] }) instead.

  • fc6290a76d: BREAKING: Removed the deprecated useOwnUser hook. Existing usage can be replaced with identityApi.getBackstageIdentity(), followed by a call to catalogClient.getEntityByRef(identity.userEntityRef).

Patch Changes

0.8.1

Patch Changes

0.8.0

Minor Changes

  • da79aac2a6: Removed some previously deprecated routeRefs as follows:

    • BREAKING: Removed entityRoute in favor of entityRouteRef.
    • BREAKING: Removed the previously deprecated rootRoute and catalogRouteRef. If you want to refer to the catalog index page from a public plugin you now need to use an ExternalRouteRef instead. For private plugins it is possible to take the shortcut of referring directly to catalogPlugin.routes.indexPage instead.
  • e26fd1c7ab: Marked useEntityPermission as alpha since the underlying permission framework is under active development.

  • 2de1d82bd1: Removing the EntityName path for the useEntityOwnership as it has never worked correctly. Please pass in an entire Entity instead.

Patch Changes

  • 899f196af5: Use getEntityByRef instead of getEntityByName in the catalog client
  • f41a293231: - DEPRECATION: Deprecated formatEntityRefTitle in favor of the new humanizeEntityRef method instead. Please migrate to using the new method instead.
  • f590d1681b: Deprecated favoriteEntityTooltip and favoriteEntityIcon since the utility value is very low.
  • 72431d7bed: - BREAKING: The isOwnerOf function has been marked as @alpha and is now only available via the @backstage/plugin-catalog-react/alpha import. The limitations of this function with regards to only supporting direct relations have also been documented.
  • 03ec06bf7f: BREAKING: Moved DefaultStarredEntitiesApi to @backstage/plugin-catalog. If you were using this in tests, you can use the new MockStarredEntitiesApi from @backstage/plugin-catalog-react instead.

    Fixed a risky behavior where DefaultStarredEntitiesApi forwarded values to observers that were later mutated.

    Removed the isStarred method from DefaultStarredEntitiesApi, as it is not part of the StarredEntitiesApi.

  • 44403296e7: Added the following deprecations to the catalog-react package:

    • DEPRECATION: useEntity will now warn if the entity has not yet been loaded, and will soon throw errors instead. If you're using the default implementation of EntityLayout and EntitySwitch then these components will ensure that there is an entity loaded before rendering children. If you're implementing your own EntityLayout or EntitySwitch or something that operates outside or adjacent to them, then use useAsyncEntity.

    • DEPRECATION: the loading, error and refresh properties that are returned from useEntity have been deprecated, and are available on useAsyncEntity instead.

  • 8f0e8e039b: Deprecated getEntityMetadataEditUrl and getEntityMetadataViewUrl as these just return one annotation from the entity passed in.

  • 36aa63022b: Use CompoundEntityRef instead of EntityName, and getCompoundEntityRef instead of getEntityName, from @backstage/catalog-model.
  • bb2bb36651: Updated usage of StorageApi to use snapshot method instead of get
  • Updated dependencies

0.7.0

Minor Changes

  • 3334ad47d4: Removed the deprecated EntityContext which have been replaced by useEntity, EntityProvider and AsyncEntityProvider.
  • e2e0b6625c: Improved API documentation.

    BREAKING: The individual table column factories (e.g. createEntityRefColumn) are now no longer available directly, but only through EntityTable.columns.

  • c4276915c0: BREAKING: Deleted the deprecated loadIdentityOwnerRefs function which is replaced by ownershipEntityRefs from identityApi.getBackstageIdentity().

    Deprecated the loadCatalogOwnerRefs hook as membership references should be added as ent inside claims sections of the SignInResolver when issuing tokens. See https://backstage.io/docs/auth/identity-resolver for more details on how to prepare your SignInResolver if not done already. Usage of the loadCatalogOwnerRefs hook should be replaced by ownershipEntityRefs from identityApi.getBackstageIdentity() instead.

Patch Changes

  • a8331830f1: Deprecated the useEntityKinds hook due to low usage and utility value.
  • 6e1cbc12a6: Updated according to the new getEntityFacets catalog API method
  • b776ce5aab: Deprecated the useEntityListProvider hook which is now renamed to useEntityList
  • b3ef24038b: Deprecated reduceCatalogFilters and reduceEntityFilters as these helper functions are used internally and provides low external value.
  • 2d339b5f2c: Deprecated useEntityFromUrl and the useEntityCompoundName hooks as these have very low utility value.
  • 96b8ae9a9e: Deprecated the EntityTypeReturn type and inlined the return type to useEntityTypeFilter as the type and function name does not align
  • d4f67fa728: Deprecated the useOwnedEntities hook which is replaced by the IdentityAPI. Deprecated the useOwnUser hook due to low external value.
  • 919cf2f836: Minor updates to match the new targetRef field of relations, and to stop consuming the target field
  • Updated dependencies

0.6.15

Patch Changes

0.6.14

Patch Changes

  • 680e7c7452: Updated useEntityListProvider and catalog pickers to respond to external changes to query parameters in the URL, such as two sidebar links that apply different catalog filters.
  • f8633307c4: Added an "inspect" entry in the entity three-dots menu, for lower level catalog insights and debugging.
  • 19155e0939: Updated React component type declarations to avoid exporting exotic component types.
  • 7bb1bde7f6: Minor API cleanups
  • Updated dependencies

0.6.14-next.0

Patch Changes

  • 680e7c7452: Updated useEntityListProvider and catalog pickers to respond to external changes to query parameters in the URL, such as two sidebar links that apply different catalog filters.
  • 7bb1bde7f6: Minor API cleanups
  • Updated dependencies

0.6.13

Patch Changes

  • f7257dff6f: The <Link /> component now accepts a noTrack prop, which prevents the click event from being captured by the Analytics API. This can be used if tracking is explicitly not warranted, or in order to use custom link tracking in specific situations.
  • 300f8cdaee: Fix bug: previously the filter would be set to "all" on page load, even if the initiallySelectedFilter on the DefaultCatalogPage was set to something else, or a different query parameter was supplied. Now, the prop and query parameters control the filter as expected. Additionally, after this change any filters which match 0 items will be disabled, and the filter will be reverted to 'all' if they're set on page load.
  • 6acc8f7db7: Add caching to the useEntityPermission hook

    The hook now caches the authorization decision based on the permission + the entity, and returns the cache match value as the default allowed value while loading. This helps avoid flicker in UI elements that would be conditionally rendered based on the allowed result of this hook.

  • Updated dependencies

0.6.13-next.1

Patch Changes

  • f7257dff6f: The <Link /> component now accepts a noTrack prop, which prevents the click event from being captured by the Analytics API. This can be used if tracking is explicitly not warranted, or in order to use custom link tracking in specific situations.
  • 300f8cdaee: Fix bug: previously the filter would be set to "all" on page load, even if the initiallySelectedFilter on the DefaultCatalogPage was set to something else, or a different query parameter was supplied. Now, the prop and query parameters control the filter as expected. Additionally, after this change any filters which match 0 items will be disabled, and the filter will be reverted to 'all' if they're set on page load.
  • 6acc8f7db7: Add caching to the useEntityPermission hook

    The hook now caches the authorization decision based on the permission + the entity, and returns the cache match value as the default allowed value while loading. This helps avoid flicker in UI elements that would be conditionally rendered based on the allowed result of this hook.

  • Updated dependencies

0.6.13-next.0

Patch Changes

0.6.12

Patch Changes

0.6.12-next.0

Patch Changes

0.6.11

Patch Changes

0.6.10

Patch Changes

0.6.9

Patch Changes

  • c6fdddec77: When a user has zero owned entities when viewing an entity kind in the catalog page, it will be automatically redirected to see all the entities. Furthermore, for the kind User and Group there are no longer the owned selector.
  • Updated dependencies

0.6.8

Patch Changes

0.6.7

Patch Changes

0.6.6

Patch Changes

  • 4c0f0b2003: Removed dependency on @backstage/core-app-api.

0.6.5

Patch Changes

0.6.4

Patch Changes

0.6.3

Patch Changes

0.6.2

Patch Changes

0.6.1

Patch Changes

0.6.0

Minor Changes

  • 82fbda923e: Introduce a new StarredEntitiesApi that is used in the useStarredEntities hook. The @backstage/plugin-catalog installs a default implementation that is backed by the StorageApi, but one can also override the starredEntitiesApiRef.

    This change also updates the storage format from a custom string to an entity reference and moves the location in the local storage. A migration will convert the previously starred entities to the location on the first load of Backstage.

Patch Changes

  • 0366c9b667: Introduce a useStarredEntity hook to check if a single entity is starred. It provides a more efficient implementation compared to the useStarredEntities hook, because the rendering is only triggered if the selected entity is starred, not if any entity is starred.
  • 4aca84f86b: Support material-ui overrides in plugin-catalog-react components
  • b03b9f19e0: added sorting in entity Name column by metadata.title if present
  • Updated dependencies

0.5.2

Patch Changes

0.5.1

Patch Changes

0.5.0

Minor Changes

  • dbcaa6387a: Extends the CatalogClient interface with a refreshEntity method.

Patch Changes

0.4.6

Patch Changes

0.4.5

Patch Changes

0.4.4

Patch Changes

  • 5a1eb6bfc: Memoize the context value in EntityListProvider.

    This removes quite a few unnecessary rerenders of the inner components.

    When running the full CatalogPage test:

    • Before: 98 table render calls total, 16 seconds runtime
    • After: 57 table render calls total, 14 seconds runtime

    This doesn't account for all of the slowness, but does give a minor difference in perceived speed in the browser too.

  • d39e7d141: Use the history API directly in useEntityListProvider.

    This replaces useSearchParams/useNavigate, since they cause at least one additional re-render compared to using this method.

    Table re-render count is down additionally:

    • Initial render of catalog page: 12 -> 9
    • Full CatalogPage test: 57 -> 48
  • Updated dependencies

0.4.3

Patch Changes

0.4.2

Patch Changes

0.4.1

Patch Changes

0.4.0

Minor Changes

  • c5cb55803: Introduce the useEntityOwnership hook, which implements the full new ownership model.

    This also means a breaking change to the interface of UserListFilter. It no longer accepts a user entity as input, but rather a function that checks ownership of an entity. This function is taken from the above mentioned hook output. So if you are instantiating the filter yourself, you will change from something like

    const { entity } = useOwnUser();
    const filter = new UserListFilter('owned', user, ...);

    to

    const { isOwnedEntity } = useEntityOwnership();
    const filter = new UserListFilter('owned', isOwnedEntity, ...);

Patch Changes

  • 19d9995b6: Improve accessibility of core & catalog components by adjusting them with non-breaking changes.
  • 11c370af2: Export CATALOG_FILTER_EXISTS symbol
  • 9d40fcb1e: - Bumping material-ui/core version to at least 4.12.2 as they made some breaking changes in later versions which broke Pagination of the Table.
    • Switching out material-table to @material-table/core for support for the later versions of material-ui/core
    • This causes a minor API change to @backstage/core-components as the interface for Table re-exports the prop from the underlying Table components.
    • onChangeRowsPerPage has been renamed to onRowsPerPageChange
    • onChangePage has been renamed to onPageChange
    • Migration guide is here: https://material-table-core.com/docs/breaking-changes
  • 043a4238f: Fix EntityListProvider to not update url if unmounted
  • Updated dependencies

0.3.1

Patch Changes

0.3.0

Minor Changes

  • 976b61080: Updated the software templates list page (ScaffolderPage) to use the useEntityListProvider hook from #5643. This reduces the code footprint, making it easier to customize the display of this page, and consolidates duplicate approaches to querying the catalog with filters.

    • The useEntityTypeFilter hook has been updated along with the underlying EntityTypeFilter to work with multiple values, to allow more flexibility for different user interfaces. It's unlikely that this change affects you; however, if you're using either of these directly, you'll need to update your usage.
    • SearchToolbar was renamed to EntitySearchBar and moved to catalog-react to be usable by other entity list pages
    • UserListPicker now has an availableTypes prop to restrict which user-related options to present

Patch Changes

  • d84778c25: Store filter values set in EntityListProvider in query parameters. This allows selected filters to be restored when returning to pages that list catalog entities.
  • e13f0fb9d: Fix EntityTypeFilter so it produces unique case-insensitive set of available types

0.2.6

Patch Changes

0.2.5

Patch Changes

0.2.4

Patch Changes

0.2.3

Patch Changes

0.2.2

Patch Changes

0.2.1

Patch Changes

0.2.0

Minor Changes

  • 17c497b81: The default CatalogPage has been reworked to be more composable and make customization easier. This change only affects those who have replaced the default CatalogPage with a custom implementation; others can safely ignore the rest of this changelog.

    If you created a custom CatalogPage to add or remove tabs from the catalog, a custom page is no longer necessary. The fixed tabs have been replaced with a spec.type dropdown that shows all available Component types in the catalog.

    For other needs, customizing the CatalogPage should now be easier. The new CatalogPage.tsx shows the default implementation. Overriding this with your own, similar CatalogPage component in your App.tsx routing allows you to adjust the layout, header, and which filters are available.

    See the documentation added on Catalog Customization for instructions.

Patch Changes

0.1.6

Patch Changes

  • 062bbf90f: chore: bump @testing-library/user-event from 12.8.3 to 13.1.8
  • 675a569a9: chore: bump react-use dependency in all packages
  • Updated dependencies [062bbf90f]
  • Updated dependencies [10c008a3a]
  • Updated dependencies [889d89b6e]
  • Updated dependencies [16be1d093]
  • Updated dependencies [3f988cb63]
  • Updated dependencies [675a569a9]

0.1.5

Patch Changes

0.1.4

Patch Changes

0.1.3

Patch Changes

  • 01ccef4c7: Introduce useRouteRefParams to core-api to retrieve typed route parameters.
  • Updated dependencies [fcc3ada24]
  • Updated dependencies [4618774ff]
  • Updated dependencies [df59930b3]

0.1.2

Patch Changes

  • 9ca0e4009: use local version of lowerCase and upperCase methods
  • Updated dependencies [8686eb38c]
  • Updated dependencies [8686eb38c]
  • Updated dependencies [9ca0e4009]
  • Updated dependencies [34ff49b0f]

0.1.1

Patch Changes

  • 9d455f69a: Introduce parameters for namespace, kind, and name to entityRouteRef.
  • 02816ecd7: Fixed EntityProvider setting 'loading' bool erroneously to true
  • Updated dependencies [12d8f27a6]
  • Updated dependencies [40c0fdbaa]
  • Updated dependencies [2a271d89e]
  • Updated dependencies [bece09057]
  • Updated dependencies [169f48deb]
  • Updated dependencies [8a1566719]
  • Updated dependencies [4c049a1a1]

0.1.0

Minor Changes

  • d0760ecdf: Moved common useStarredEntities hook to plugin-catalog-react

Patch Changes

  • 88f1f1b60: Truncate and show ellipsis with tooltip if content of createMetadataDescriptionColumn is too wide.
  • 9615e68fb: Forward link styling of EntityRefLink and EnriryRefLinks into the underling Link.
  • 5c2e2863f: Added the proper type parameters to entityRouteRef.
  • Updated dependencies [3a58084b6]
  • Updated dependencies [e799e74d4]
  • Updated dependencies [1407b34c6]
  • Updated dependencies [bad21a085]
  • Updated dependencies [9615e68fb]
  • Updated dependencies [49f9b7346]
  • Updated dependencies [3a58084b6]
  • Updated dependencies [2c1f2a7c2]

0.0.4

Patch Changes

  • d34d26125: Limit the props that are forwarded to the Link component in the EntityRefLink.
  • 0af242b6d: Introduce new cards to @backstage/plugin-catalog that can be added to entity pages:

    • EntityHasSystemsCard to display systems of a domain.
    • EntityHasComponentsCard to display components of a system.
    • EntityHasSubcomponentsCard to display subcomponents of a subcomponent.
    • In addition, EntityHasApisCard to display APIs of a system is added to @backstage/plugin-api-docs.

    @backstage/plugin-catalog-react now provides an EntityTable to build own cards for entities. The styling of the tables and new cards was also applied to the existing EntityConsumedApisCard, EntityConsumingComponentsCard, EntityProvidedApisCard, and EntityProvidingComponentsCard.

  • 10a0124e0: Expose useRelatedEntities from @backstage/plugin-catalog-react to retrieve entities references via relations from the API.

  • Updated dependencies [fd3f2a8c0]
  • Updated dependencies [f4c2bcf54]
  • Updated dependencies [07e226872]
  • Updated dependencies [f62e7abe5]
  • Updated dependencies [96f378d10]
  • Updated dependencies [688b73110]

0.0.3

Patch Changes

  • 19d354c78: Make EntityRefLink a React.forwardRef in order to use it as root component in other components like ListItem.
  • Updated dependencies [6ed2b47d6]
  • Updated dependencies [72b96e880]
  • Updated dependencies [b51ee6ece]

0.0.2

Patch Changes

  • 7fc89bae2: Display owner and system as entity page links in the tables of the api-docs plugin.

    Move isOwnerOf and getEntityRelations from @backstage/plugin-catalog to @backstage/plugin-catalog-react and export it from there to use it by other plugins.

  • Updated dependencies [12ece98cd]

  • Updated dependencies [d82246867]
  • Updated dependencies [5fa3bdb55]
  • Updated dependencies [6e612ce25]
  • Updated dependencies [025e122c3]
  • Updated dependencies [21e624ba9]
  • Updated dependencies [da9f53c60]
  • Updated dependencies [32c95605f]
  • Updated dependencies [7881f2117]
  • Updated dependencies [54c7d02f7]
  • Updated dependencies [11cb5ef94]