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

Package detail

@backstage/plugin-techdocs

backstage195.7kApache-2.01.12.5TypeScript support: included

The Backstage plugin that renders technical documentation for your components

backstage, techdocs

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-techdocs

1.12.5

Patch Changes

1.12.5-next.2

Patch Changes

1.12.5-next.1

Patch Changes

1.12.5-next.0

Patch Changes

1.12.4

Patch Changes

1.12.4-next.2

Patch Changes

1.12.4-next.1

Patch Changes

1.12.4-next.0

Patch Changes

1.12.3

Patch Changes

  • eb3d91a: Use the custom error page if provided for displaying errors instead of the default error page
  • 524f0af: Add missing route ref to the /alpha entity content extension.
  • f4be934: Changed the base URL in addLinkClickListener from window.location.origin to app.baseUrl for improved path handling. This fixes an issue where Backstage, when running on a subpath, was unable to handle non-Backstage URLs of the same origin correctly.
  • 1f40e6b: Add optional props to TechDocCustomHome to allow for more flexibility:

    import { TechDocsCustomHome } from '@backstage/plugin-techdocs';
    //...
    
    const options = { emptyRowsWhenPaging: false };
    const linkDestination = (entity: Entity): string | undefined => {
      return entity.metadata.annotations?.['external-docs'];
    };
    const techDocsTabsConfig = [
      {
        label: 'Recommended Documentation',
        panels: [
          {
            title: 'Golden Path',
            description: 'Documentation about standards to follow',
            panelType: 'DocsCardGrid',
            panelProps: { CustomHeader: () => <ContentHeader title='Golden Path'/> },
            filterPredicate: entity =>
              entity?.metadata?.tags?.includes('golden-path') ?? false,
          },
          {
            title: 'Recommended',
            description: 'Useful documentation',
            panelType: 'InfoCardGrid',
            panelProps: {
              CustomHeader: () => <ContentHeader title='Recommended' />
              linkDestination: linkDestination,
            },
            filterPredicate: entity =>
              entity?.metadata?.tags?.includes('recommended') ?? false,
          },
        ],
      },
      {
        label: 'Browse All',
        panels: [
          {
            description: 'Browse all docs',
            filterPredicate: filterEntity,
            panelType: 'TechDocsIndexPage',
            title: 'All',
            panelProps: { PageWrapper: React.Fragment, CustomHeader: React.Fragment, options: options },
          },
        ],
      },
    ];
    
    const AppRoutes = () => {
      <FlatRoutes>
        <Route
          path="/docs"
          element={
            <TechDocsCustomHome
              tabsConfig={techDocsTabsConfig}
              filter={{
                kind: ['Location', 'Resource', 'Component'],
                'metadata.annotations.featured-docs': CATALOG_FILTER_EXISTS,
              }}
              CustomPageWrapper={({ children }: React.PropsWithChildren<{}>) => (<PageWithHeader title="Docs" themeId="documentation">{children}</PageWithHeader>)}
            />
          }
        />
      </FlatRoutes>;
    };

    Add new Grid option called InfoCardGrid which is a more customizable card option for the Docs grid.

    <InfoCardGrid
      entities={entities}
      linkContent="Learn more"
      linkDestination={entity => entity.metadata['external-docs']}
    />

    Expose existing CustomDocsPanel so that it can be used independently if desired.

    const panels: PanelConfig[] = [
      {
        description: '',
        filterPredicate: entity => {},
        panelType: 'InfoCardGrid',
        title: 'Standards',
        panelProps: {
              CustomHeader: () => <ContentHeader title='Recommended' />
              linkDestination: linkDestination,
            },
      },
      {
        description: '',
        filterPredicate: entity => {},
        panelType: 'DocsCardGrid',
        title: 'Contribute',
      },
    ];
    {
      panels.map((config, index) => (
        <CustomDocsPanel
          key={index}
          config={config}
          entities={!!entities ? entities : []}
          index={index}
        />
      ));
    }
  • 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.

  • Updated dependencies

1.12.3-next.3

Patch Changes

1.12.3-next.2

Patch Changes

1.12.2-next.1

Patch Changes

1.12.2-next.0

Patch Changes

  • f4be934: Changed the base URL in addLinkClickListener from window.location.origin to app.baseUrl for improved path handling. This fixes an issue where Backstage, when running on a subpath, was unable to handle non-Backstage URLs of the same origin correctly.
  • 1f40e6b: Add optional props to TechDocCustomHome to allow for more flexibility:

    import { TechDocsCustomHome } from '@backstage/plugin-techdocs';
    //...
    
    const options = { emptyRowsWhenPaging: false };
    const linkDestination = (entity: Entity): string | undefined => {
      return entity.metadata.annotations?.['external-docs'];
    };
    const techDocsTabsConfig = [
      {
        label: 'Recommended Documentation',
        panels: [
          {
            title: 'Golden Path',
            description: 'Documentation about standards to follow',
            panelType: 'DocsCardGrid',
            panelProps: { CustomHeader: () => <ContentHeader title='Golden Path'/> },
            filterPredicate: entity =>
              entity?.metadata?.tags?.includes('golden-path') ?? false,
          },
          {
            title: 'Recommended',
            description: 'Useful documentation',
            panelType: 'InfoCardGrid',
            panelProps: {
              CustomHeader: () => <ContentHeader title='Recommended' />
              linkDestination: linkDestination,
            },
            filterPredicate: entity =>
              entity?.metadata?.tags?.includes('recommended') ?? false,
          },
        ],
      },
      {
        label: 'Browse All',
        panels: [
          {
            description: 'Browse all docs',
            filterPredicate: filterEntity,
            panelType: 'TechDocsIndexPage',
            title: 'All',
            panelProps: { PageWrapper: React.Fragment, CustomHeader: React.Fragment, options: options },
          },
        ],
      },
    ];
    
    const AppRoutes = () => {
      <FlatRoutes>
        <Route
          path="/docs"
          element={
            <TechDocsCustomHome
              tabsConfig={techDocsTabsConfig}
              filter={{
                kind: ['Location', 'Resource', 'Component'],
                'metadata.annotations.featured-docs': CATALOG_FILTER_EXISTS,
              }}
              CustomPageWrapper={({ children }: React.PropsWithChildren<{}>) => (<PageWithHeader title="Docs" themeId="documentation">{children}</PageWithHeader>)}
            />
          }
        />
      </FlatRoutes>;
    };

    Add new Grid option called InfoCardGrid which is a more customizable card option for the Docs grid.

    <InfoCardGrid
      entities={entities}
      linkContent="Learn more"
      linkDestination={entity => entity.metadata['external-docs']}
    />

    Expose existing CustomDocsPanel so that it can be used independently if desired.

    const panels: PanelConfig[] = [
      {
        description: '',
        filterPredicate: entity => {},
        panelType: 'InfoCardGrid',
        title: 'Standards',
        panelProps: {
              CustomHeader: () => <ContentHeader title='Recommended' />
              linkDestination: linkDestination,
            },
      },
      {
        description: '',
        filterPredicate: entity => {},
        panelType: 'DocsCardGrid',
        title: 'Contribute',
      },
    ];
    {
      panels.map((config, index) => (
        <CustomDocsPanel
          key={index}
          config={config}
          entities={!!entities ? entities : []}
          index={index}
        />
      ));
    }
  • Updated dependencies

1.12.1

Patch Changes

1.12.1-next.1

Patch Changes

1.12.1-next.0

Patch Changes

1.12.0

Minor Changes

  • e153ca6: Add pagination support to TechDocs Index Page and make it the default

Patch Changes

1.11.3-next.2

Patch Changes

1.11.3-next.1

Patch Changes

1.11.3-next.0

Patch Changes

1.11.1

Patch Changes

1.11.1-next.3

Patch Changes

1.11.1-next.2

Patch Changes

1.11.1-next.1

Patch Changes

1.11.1-next.0

Patch Changes

1.11.0

Minor Changes

  • e77ff3d: Adds support for custom background colors in code blocks and inline code within TechDocs.

Patch Changes

1.11.0-next.2

Minor Changes

  • e77ff3d: Adds support for custom background colors in code blocks and inline code within TechDocs.

Patch Changes

1.10.11-next.1

Patch Changes

1.10.10-next.0

Patch Changes

1.10.9

Patch Changes

1.10.9-next.2

Patch Changes

1.10.9-next.1

Patch Changes

1.10.9-next.0

Patch Changes

1.10.8

Patch Changes

1.10.8-next.3

Patch Changes

1.10.8-next.2

Patch Changes

1.10.8-next.1

Patch Changes

1.10.8-next.0

Patch Changes

1.10.7

Patch Changes

1.10.7-next.2

Patch Changes

1.10.7-next.1

Patch Changes

1.10.7-next.0

Patch Changes

1.10.6

Patch Changes

1.10.6-next.2

Patch Changes

1.10.6-next.1

Patch Changes

1.10.6-next.0

Patch Changes

1.10.5

Patch Changes

1.10.5-next.2

Patch Changes

1.10.5-next.1

Patch Changes

1.10.5-next.0

Patch Changes

1.10.4

Patch Changes

1.10.4-next.1

Patch Changes

1.10.4-next.0

Patch Changes

1.10.3

Patch Changes

1.10.2

Patch Changes

1.10.1

Patch Changes

1.10.1-next.2

Patch Changes

1.10.1-next.1

Patch Changes

1.10.1-next.0

Patch Changes

1.10.0

Minor Changes

  • af4d147: Updated the styling for <code> tags to avoid word break.

Patch Changes

1.10.0-next.3

Patch Changes

1.10.0-next.2

Patch Changes

1.10.0-next.1

Minor Changes

  • af4d147: Updated the styling for <code> tags to avoid word break.

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.4

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

  • 17f93d5589: A new analytics event not-found will be published when a user visits a documentation site that does not exist

Patch Changes

1.9.0-next.2

Minor Changes

  • #20851 17f93d5589 Thanks @agentbellnorm! - A new analytics event not-found will be published when a user visits a documentation site that does not exist

Patch Changes

1.8.1-next.1

Patch Changes

1.8.1-next.0

Patch Changes

1.8.0

Minor Changes

  • 27740caa2d: Added experimental support for declarative integration via the /alpha subpath.

Patch Changes

1.7.1-next.2

Patch Changes

1.7.1-next.1

Patch Changes

1.7.1-next.0

Patch Changes

1.7.0

Minor Changes

  • e44f45ac4515: This change allows a new annotation of backstage.io/techdocs-entity this ref allows you to reference another entity for its TechDocs. This allows you have a single TechDoc for all items in a system, for example you might have a frontend and a backend in the same repo. This would allow you to have TechDocs build under a System entity while referencing the system e.g.: backstage.io/techdocs-entity: system:default/example that will show the systems docs in both the TechDocs button and the TechDocs tab without needing to do duplicate builds and filling the TechDocs page with garbage.

Patch Changes

1.7.0-next.3

Patch Changes

1.7.0-next.2

Minor Changes

  • e44f45ac4515: This change allows a new annotation of backstage.io/techdocs-entity this ref allows you to reference another entity for its TechDocs. This allows you have a single TechDoc for all items in a system, for example you might have a frontend and a backend in the same repo. This would allow you to have TechDocs build under a System entity while referencing the system e.g.: backstage.io/techdocs-entity: system:default/example that will show the systems docs in both the TechDocs button and the TechDocs tab without needing to do duplicate builds and filling the TechDocs page with garbage.

Patch Changes

1.6.9-next.1

Patch Changes

1.6.8-next.0

Patch Changes

1.6.6

Patch Changes

1.6.6-next.2

Patch Changes

1.6.6-next.1

Patch Changes

1.6.6-next.0

Patch Changes

1.6.5

Patch Changes

1.6.5-next.2

Patch Changes

1.6.5-next.1

Patch Changes

1.6.5-next.0

Patch Changes

1.6.4

Patch Changes

1.6.4-next.3

Patch Changes

1.6.3-next.2

Patch Changes

1.6.3-next.1

Patch Changes

1.6.3-next.0

Patch Changes

1.6.2

Patch Changes

1.6.2-next.2

Patch Changes

1.6.2-next.1

Patch Changes

1.6.2-next.0

Patch Changes

1.6.1

Patch Changes

1.6.1-next.3

Patch Changes

1.6.1-next.2

Patch Changes

1.6.1-next.1

Patch Changes

1.6.1-next.0

Patch Changes

1.6.0

Minor Changes

  • 3f75b7607ca: Add ability to pass icon as function to have ability to customize it by search item

Patch Changes

1.6.0-next.2

Patch Changes

1.6.0-next.1

Patch Changes

1.6.0-next.0

Minor Changes

  • 3f75b7607c: Add ability to pass icon as function to have ability to customize it by search item

Patch Changes

1.5.0

Minor Changes

  • 20840b36b4: Update DocsTable and EntityListDocsTable to accept overrides for Material Table options.
  • 0eaa579f89: The TechDocsSearchResultListItem component is now a search result extension. This means that when rendered as a child of components that render search extensions, the result, rank, and highlight properties are optional. See the documentation for more details.

Patch Changes

1.5.0-next.2

Patch Changes

1.5.0-next.1

Minor Changes

  • 20840b36b4: Update DocsTable and EntityListDocsTable to accept overrides for Material Table options.
  • 0eaa579f89: The TechDocsSearchResultListItem component is now a search result extension. This means that when rendered as a child of components that render search extensions, the result, rank, and highlight properties are optional. See the documentation for more details.

Patch Changes

1.4.4-next.0

Patch Changes

1.4.3

Patch Changes

1.4.3-next.2

Patch Changes

1.4.3-next.1

Patch Changes

1.4.3-next.0

Patch Changes

1.4.2

Patch Changes

1.4.1

Patch Changes

1.4.1-next.4

Patch Changes

1.4.1-next.3

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

  • 5691baea69: Add ability to configure filters when using EntityListDocsGrid

    The following example will render two sections of cards grid:

    • One section for documentations tagged as recommended
    • One section for documentations tagged as runbook
    <EntityListDocsGrid groups={{[
      {
        title: "Recommended Documentation",
        filterPredicate: entity =>
          entity?.metadata?.tags?.includes('recommended') ?? false,
      },
      {
        title: "RunBooks Documentation",
        filterPredicate: entity =>
          entity?.metadata?.tags?.includes('runbook') ?? false,
      }
    ]}} />
  • 63705e73d9: Hide document description if not provided

  • 847fc588a6: Updated TechDocs header to include label for source code icon and updated label to reflect Kind name

Patch Changes

1.4.0-next.2

Patch Changes

1.4.0-next.1

Patch Changes

  • 9e4d8e6198: Fix logic bug that broke techdocs-cli-embedded-app

1.4.0-next.0

Minor Changes

  • 5691baea69: Add ability to configure filters when using EntityListDocsGrid

    The following example will render two sections of cards grid:

    • One section for documentations tagged as recommended
    • One section for documentations tagged as runbook
    <EntityListDocsGrid groups={{[
      {
        title: "Recommended Documentation",
        filterPredicate: entity =>
          entity?.metadata?.tags?.includes('recommended') ?? false,
      },
      {
        title: "RunBooks Documentation",
        filterPredicate: entity =>
          entity?.metadata?.tags?.includes('runbook') ?? false,
      }
    ]}} />

Patch Changes

1.3.3

Patch Changes

1.3.3-next.2

Patch Changes

1.3.3-next.1

Patch Changes

1.3.3-next.0

Patch Changes

1.3.2

Patch Changes

1.3.2-next.3

Patch Changes

1.3.2-next.2

Patch Changes

1.3.2-next.1

Patch Changes

1.3.2-next.0

Patch Changes

1.3.1

Patch Changes

1.3.1-next.2

Patch Changes

1.3.1-next.1

Patch Changes

1.3.1-next.0

Patch Changes

1.3.0

Minor Changes

  • ebf3eb1641: Use the same initial filter owned for the TechDocsIndexPage as for the CatalogPage.

    If you prefer to keep the previous behavior, you can change the default for the initial filter to all (or starred if you rather prefer that).

    <TechDocsIndexPage initiallySelectedFilter="all" />

    In general, with this change you will be able to set props at TechDocsIndexPage.

Patch Changes

1.2.1-next.3

Patch Changes

1.2.1-next.2

Patch Changes

1.2.1-next.1

Patch Changes

1.2.1-next.0

Patch Changes

1.2.0

Minor Changes

  • fe7614ea54: Add an optional icon to the Catalog and TechDocs search results

Patch Changes

  • d047d81295: Use entity title as label in TechDocsReaderPageHeader if available
  • 8f7b1835df: Updated dependency msw to ^0.41.0.
  • bff65e6958: Updated sidebar-related logic to use <SidebarPinStateProvider> + useSidebarPinState() and/or <SidebarOpenStateProvider> + useSidebarOpenState() from @backstage/core-components.
  • 915700f64f: In order to simplify analytics on top of the search experience in Backstage, the provided <*ResultListItem /> component now captures a discover analytics event instead of a click event. This event includes the result rank as its value and, like a click, the URL/path clicked to as its to attribute.
  • 881fbd7e8d: Fix EntityTechdocsContent component to use objects instead of <Route> elements, otherwise "outlet" will be null on sub-pages and add-ons won't render.
  • 17c059dfd0: Restructures reader style transformations to improve code readability:

    • Extracts the style rules to separate files;
    • Creates a hook that processes each rule;
    • And creates another hook that returns a transformer responsible for injecting them into the head tag of a given element.
  • 3b45ad701f: Packages a set of tweaks to the TechDocs addons rendering process:

    • Prevents displaying sidebars until page styles are loaded and the sidebar position is updated;
    • Prevents new sidebar locations from being created every time the reader page is rendered if these locations already exist;
    • Centers the styles loaded event to avoid having multiple locations setting the opacity style in Shadow Dom causing the screen to flash multiple times.
  • 9b94ade898: Use entity title in TechDocsSearch placeholder if available.

  • 816f7475ec: Convert sanitizeDOM transformer to hook as part of code readability improvements in dom file.
  • 50ff56a80f: Change the EntityDocsPage path to be more specific and also add integration tests for sub-routes on this page.
  • Updated dependencies

1.1.2-next.1

Patch Changes

1.1.2-next.0

Patch Changes

  • 881fbd7e8d: Fix EntityTechdocsContent component to use objects instead of <Route> elements, otherwise "outlet" will be null on sub-pages and add-ons won't render.
  • 17c059dfd0: Restructures reader style transformations to improve code readability:

    • Extracts the style rules to separate files;
    • Creates a hook that processes each rule;
    • And creates another hook that returns a transformer responsible for injecting them into the head tag of a given element.
  • 3b45ad701f: Packages a set of tweaks to the TechDocs addons rendering process:

    • Prevents displaying sidebars until page styles are loaded and the sidebar position is updated;
    • Prevents new sidebar locations from being created every time the reader page is rendered if these locations already exist;
    • Centers the styles loaded event to avoid having multiple locations setting the opacity style in Shadow Dom causing the screen to flash multiple times.
  • 816f7475ec: Convert sanitizeDOM transformer to hook as part of code readability improvements in dom file.

  • 50ff56a80f: Change the EntityDocsPage path to be more specific and also add integration tests for sub-routes on this page.
  • Updated dependencies

1.1.1

Patch Changes

1.1.1-next.3

Patch Changes

1.1.1-next.2

Patch Changes

1.1.1-next.1

Patch Changes

1.1.1-next.0

Patch Changes

1.1.0

Minor Changes

  • ace749b785: TechDocs supports a new, experimental method of customization: addons!

    To customize the standalone TechDocs reader page experience, update your /packages/app/src/App.tsx in the following way:

    import { TechDocsIndexPage, TechDocsReaderPage } from '@backstage/plugin-techdocs';
    + import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
    + import { SomeAddon } from '@backstage/plugin-some-plugin';
    
    // ...
    
        <Route path="/docs" element={<TechDocsIndexPage />} />
        <Route
          path="/docs/:namespace/:kind/:name/*"
          element={<TechDocsReaderPage />}
        >
    +      <TechDocsAddons>
    +        <SomeAddon />
    +      </TechDocsAddons>
        </Route>
    
    // ...

    To customize the TechDocs reader experience on the Catalog entity page, update your packages/app/src/components/catalog/EntityPage.tsx in the following way:

    import { EntityTechdocsContent } from '@backstage/plugin-techdocs';
    + import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
    + import { SomeAddon } from '@backstage/plugin-some-plugin';
    
    // ...
    
      <EntityLayoutWrapper>
        <EntityLayout.Route path="/" title="Overview">
          {overviewContent}
        </EntityLayout.Route>
    
        <EntityLayout.Route path="/docs" title="Docs">
    -      <EntityTechDocsContent />
    +      <EntityTechdocsContent>
    +        <TechDocsAddons>
    +          <SomeAddon />
    +        </TechDocsAddons>
    +      </EntityTechdocsContent>
        </EntityLayout.Route>
      </EntityLayoutWrapper>
    
    // ...

    If you do not wish to customize your TechDocs reader experience in this way at this time, no changes are necessary!

Patch Changes

1.1.0-next.3

Minor Changes

  • ace749b785: TechDocs supports a new, experimental method of customization: addons!

    To customize the standalone TechDocs reader page experience, update your /packages/app/src/App.tsx in the following way:

    import { TechDocsIndexPage, TechDocsReaderPage } from '@backstage/plugin-techdocs';
    + import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
    + import { SomeAddon } from '@backstage/plugin-some-plugin';
    
    // ...
    
        <Route path="/docs" element={<TechDocsIndexPage />} />
        <Route
          path="/docs/:namespace/:kind/:name/*"
          element={<TechDocsReaderPage />}
        >
    +      <TechDocsAddons>
    +        <SomeAddon />
    +      </TechDocsAddons>
        </Route>
    
    // ...

    To customize the TechDocs reader experience on the Catalog entity page, update your packages/app/src/components/catalog/EntityPage.tsx in the following way:

    import { EntityTechdocsContent } from '@backstage/plugin-techdocs';
    + import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
    + import { SomeAddon } from '@backstage/plugin-some-plugin';
    
    // ...
    
      <EntityLayoutWrapper>
        <EntityLayout.Route path="/" title="Overview">
          {overviewContent}
        </EntityLayout.Route>
    
        <EntityLayout.Route path="/docs" title="Docs">
    -      <EntityTechDocsContent />
    +      <EntityTechdocsContent>
    +        <TechDocsAddons>
    +          <SomeAddon />
    +        </TechDocsAddons>
    +      </EntityTechdocsContent>
        </EntityLayout.Route>
      </EntityLayoutWrapper>
    
    // ...

    If you do not wish to customize your TechDocs reader experience in this way at this time, no changes are necessary!

Patch Changes

1.0.1-next.2

Patch Changes

1.0.1

Patch Changes

  • Pin the event-source-polyfill dependency to version 1.0.25

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

  • 700d93ff41: Removed deprecated exports, including:

    • deprecated DocsResultListItem is now deleted and fully replaced with TechDocsSearchResultListItem
    • deprecated TechDocsPage is now deleted and fully replaced with TechDocsReaderPage
    • deprecated TechDocsPageHeader is now deleted and fully replaced with TechDocsReaderPageHeader
    • deprecated TechDocsPageHeaderProps is now deleted and fully replaced with TechDocsReaderPageHeaderProps
    • deprecated TechDocsPageRenderFunction is now deleted and fully replaced with TechDocsReaderPageRenderFunction
    • deprecated config techdocs.requestUrl is now deleted and fully replaced with the discoveryApi

Patch Changes

0.15.1

Patch Changes

0.15.1-next.0

Patch Changes

0.15.0

Minor Changes

  • ee3d6c6f10: BREAKING: Table column utilities createNameColumn, createOwnerColumn, createTypeColumn as well as actions utilities createCopyDocsUrlAction and createStarEntityAction are no longer directly exported. Instead accessible through DocsTable and EntityListDocsTable.

    Use as following:

    DocsTable.columns.createNameColumn();
    DocsTable.columns.createOwnerColumn();
    DocsTable.columns.createTypeColumn();
    
    DocsTable.actions.createCopyDocsUrlAction();
    DocsTable.actions.createStarEntityAction();
    • Renamed DocsResultListItem to TechDocsSearchResultListItem, leaving the old name in place as a deprecations.

    • Renamed TechDocsPage to TechDocsReaderPage, leaving the old name in place as a deprecations.

    • Renamed TechDocsPageRenderFunction to TechDocsPageRenderFunction, leaving the old name in place as a deprecations.

    • Renamed TechDocsPageHeader to TechDocsReaderPageHeader, leaving the old name in place as a deprecations.

    • LegacyTechDocsHome marked as deprecated and will be deleted in next release, use TechDocsCustomHome instead.

    • LegacyTechDocsPage marked as deprecated and will be deleted in next release, use TechDocsReaderPage instead.

Patch Changes

0.14.0

Minor Changes

  • 2262fe19c9: BREAKING: Removed support for passing in an explicit entity prop to entity page extensions, which has been deprecated for a long time. This is only a breaking change at the TypeScript level, as this property was already ignored.
  • 4faae902eb: Adjust the Tech Docs page theme as a side effect of the mkdocs-material theme update.

    If you use the spofify/techdocs image to build your documentation, make sure you use version spotify/techdocs:v0.3.7.

    Breaking: The PyMdown extensions have also been updated and some syntax may have changed, so it is recommended that you check the extension's documentation if something stops working. For example, the syntax of tags below was deprecated in PyMdown extensions v.7.0 and in v.8.0.0 it has been removed. This means that the old syntax specified below no longer works.

    ```markdown tab="tab"
    This is some markdown
    ```
    
    ```markdown tab="tab 2"
    This is some markdown in tab 2
    ```

Patch Changes

0.13.4

Patch Changes

0.13.3

Patch Changes

0.13.3-next.0

Patch Changes

0.13.2

Patch Changes

0.13.2-next.1

Patch Changes

0.13.2-next.0

Patch Changes

0.13.1

Patch Changes

0.13.0

Minor Changes

  • aecfe4f403: Make TechDocsClient and TechDocsStorageClient use the FetchApi. You now need to pass in an instance of that API when constructing the client, if you create a custom instance in your app.

    If you are replacing the factory:

    +import { fetchApiRef } from '@backstage/core-plugin-api';
    
     createApiFactory({
       api: techdocsStorageApiRef,
       deps: {
         configApi: configApiRef,
         discoveryApi: discoveryApiRef,
         identityApi: identityApiRef,
    +    fetchApi: fetchApiRef,
       },
       factory: ({
         configApi,
         discoveryApi,
         identityApi,
    +    fetchApi,
       }) =>
         new TechDocsStorageClient({
           configApi,
           discoveryApi,
           identityApi,
    +      fetchApi,
         }),
     }),
     createApiFactory({
       api: techdocsApiRef,
       deps: {
         configApi: configApiRef,
         discoveryApi: discoveryApiRef,
    -    identityApi: identityApiRef,
    +    fetchApi: fetchApiRef,
       },
       factory: ({
         configApi,
         discoveryApi,
    -    identityApi,
    +    fetchApi,
       }) =>
         new TechDocsClient({
           configApi,
           discoveryApi,
    -      identityApi,
    +      fetchApi,
         }),
     }),

    If instantiating directly:

    +import { fetchApiRef } from '@backstage/core-plugin-api';
    
    +const fetchApi = useApi(fetchApiRef);
     const storageClient = new TechDocsStorageClient({
       configApi,
       discoveryApi,
       identityApi,
    +  fetchApi,
     });
     const techdocsClient = new TechDocsClient({
       configApi,
       discoveryApi,
    -  identityApi,
    +  fetchApi,
     }),

Patch Changes

0.12.15-next.0

Patch Changes

0.12.14

Patch Changes

0.12.13

Patch Changes

0.12.12

Patch Changes

0.12.11

Patch Changes

0.12.10

Patch Changes

0.12.9

Patch Changes

0.12.8

Patch Changes

0.12.7

Patch Changes

0.12.6

Patch Changes

0.12.5

Patch Changes

0.12.4

Patch Changes

0.12.3

Patch Changes

0.12.2

Patch Changes

0.12.1

Patch Changes

0.12.0

Minor Changes

  • 82bb0842a3: Adds support for being able to customize and compose your TechDocs reader page in the App.

    You can likely upgrade to this version without issue. If, however, you have imported the <Reader /> component in your custom code, the name of a property has changed. You will need to make the following change anywhere you use it:

    -<Reader entityId={value} />
    +<Reader entityRef={value} />

Patch Changes

0.11.3

Patch Changes

0.11.2

Patch Changes

0.11.1

Patch Changes

0.11.0

Minor Changes

  • c772d9a84: TechDocs sites can now be accessed using paths containing entity triplets of any case (e.g. /docs/namespace/KIND/name or /docs/namespace/kind/name).

    If you do not use an external storage provider for serving TechDocs, this is a transparent change and no action is required from you.

    If you do use an external storage provider for serving TechDocs (one of* GCS, AWS S3, or Azure Blob Storage), you must run a migration command against your storage provider before updating.

    A migration guide is available here.

    • (*) We're seeking help from the community to bring OpenStack Swift support to feature parity with the above.
  • 787bc0826: The TechDocs plugin has completed the migration to the Composability API. In order to update to this version, please ensure you've made all necessary changes to your App.tsx file as outlined in the create-app changelog.

Patch Changes

0.10.4

Patch Changes

0.10.3

Patch Changes

0.10.2

Patch Changes

  • 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
  • 11c370af2: Optimize load times by only fetching entities with the backstage.io/techdocs-ref annotation
  • 2b1ac002d: TechDocs now uses a "safe by default" sanitization library, rather than relying on its own, hard-coded list of allowable tags and attributes.
  • Updated dependencies

0.10.1

Patch Changes

  • 9266b80ab: Add search list item to display tech docs search results
  • 03bf17e9b: Improve the responsiveness of the EntityPage UI. With this the Header component should scale with the screen size & wrapping should not cause overflowing/blocking of links. Additionally enforce the Pages using the Grid Layout to use it across all screen sizes & to wrap as intended.

    To benefit from the improved responsive layout, the EntityPage in existing Backstage applications should be updated to set the xs column size on each grid item in the page, as this does not default. For example:

    -  <Grid item md={6}>
    +  <Grid item xs={12} md={6}>
  • 378cc6a54: Only update the path when the content is updated. If content and path are updated independently, the frontend rendering is triggered twice on each navigation: Once for the path change (with the old content) and once for the new content. This might result in a flickering rendering that is caused by the async frontend preprocessing, and the fact that replacing the shadow dom content is expensive.

  • 214e7c52d: Refactor the techdocs transformers to return Promises and await all transformations.
  • e35b13afa: Handle error responses in getTechDocsMetadata and getEntityMetadata such that <TechDocsPageHeader> doesn't throw errors.
  • Updated dependencies

0.10.0

Minor Changes

  • 94a54dd47: Added a migrateDocsCase() method to TechDocs publishers, along with implementations for AWS, Azure, and GCS.

    This change is in support of a future update to TechDocs that will allow for case-insensitive entity triplet URL access to documentation pages which will require a migration of existing documentation objects in external storage solutions.

    See #4367 for details.

Patch Changes

  • 537c37b0f: Fix displaying owned documents list by fetching associated entity relations
  • 136a91974: Show a "Refresh" button to if the content is stale. This removes the need to do a full page-reload to display more recent TechDocs content.
  • f1200f44c: Rewrite the /sync/:namespace/:kind/:name endpoint to support an event-stream as response. This change allows the sync process to take longer than a normal HTTP timeout. The stream also emits log events, so the caller can follow the build process in the frontend.
  • 3af126cdd: Provide a Drawer component to follow a running build. This can be used to debug the rendering and get build logs in case an error occurs.
  • 2a4a3b32d: Techdocs: fix sidebars not adjusting position automatically
  • Updated dependencies

0.9.9

Patch Changes

0.9.8

Patch Changes

0.9.7

Patch Changes

0.9.6

Patch Changes

  • 938aee2fb: Fix the link to the documentation page when no owned documents are displayed
  • 2e1fbe203: Do not add trailing slash for .html pages during doc links rewriting
  • 9b57fda8b: Fixes a bug that could prevent some externally hosted images (like icons or build badges) from rendering within TechDocs documentation.
  • 667656c8b: Adding support for user owned document filter for TechDocs custom Homepage
  • Updated dependencies

0.9.5

Patch Changes

0.9.4

Patch Changes

  • 4ea9df9d3: Set admonition font size to 1rem in TechDocs to align with the rest of the document's font sizes. Fixes #5448 and #5541.
  • bf805b467: Fixes #5529, a bug that prevented TechDocs from rendering pages containing malformed links.
  • 203ce6f6f: TechDocs now respects the download attribute on anchor tags in generated markup, allowing documentation authors to bundle downloadable files with their documentation.
  • Updated dependencies [0fd4ea443]
  • Updated dependencies [add62a455]
  • Updated dependencies [cc592248b]
  • Updated dependencies [17c497b81]
  • Updated dependencies [704875e26]

0.9.3

Patch Changes

  • 65e6c4541: Remove circular dependencies
  • a62cfe068: Bug fix on sidebar position when Tab-Bar is enabled
  • 35e091604: Handle URLs with a #hash correctly when rewriting link URLs.
  • Updated dependencies [f7f7783a3]
  • Updated dependencies [65e6c4541]
  • Updated dependencies [68fdbf014]
  • Updated dependencies [5da6a561d]

0.9.2

Patch Changes

0.9.1

Patch Changes

0.9.0

Minor Changes

  • 21fddf452: Make techdocsStorageApiRef and techdocsApiRef use interfaces instead of the actual implementation classes.

    This renames the classes TechDocsApi to TechDocsClient and TechDocsStorageApi to TechDocsStorageClient and renames the interfaces TechDocs to TechDocsApi and TechDocsStorage to TechDocsStorageApi to comply the pattern elsewhere in the project. This also fixes the types returned by some methods on those interfaces.

Patch Changes

  • 6fbd7beca: Use EntityRefLink in header and use relations to reference the owner of the document.
  • 15cbe6815: Fix TechDocs landing page table wrong copied link
  • 39bdaa004: Add customization and exportable components for TechDocs landing page
  • cb8c848a3: Disable color transitions on links to avoid issues in dark mode.
  • 17915e29b: Rework state management to avoid rendering multiple while navigating between pages.
  • Updated dependencies [9afcac5af]
  • Updated dependencies [e0c9ed759]
  • Updated dependencies [6eaecbd81]

0.8.0

Minor Changes

  • ac6025f63: Add feedback link icon in Techdocs Reader that directs to GitLab or GitHub repo issue page with pre-filled title and source link. For link to appear, requires repo_url and edit_uri to be filled in mkdocs.yml, as per https://www.mkdocs.org/user-guide/configuration. An edit_uri will need to be specified for self-hosted GitLab/GitHub instances with a different host name. To identify issue URL format as GitHub or GitLab, the host name of source in repo_url is checked if it contains gitlab or github. Alternately this is determined by matching to host values from integrations in app-config.yaml.

Patch Changes

  • e292e393f: Add a test id to the shadow root element of the Reader to access it easily in e2e tests
  • Updated dependencies [94da20976]
  • Updated dependencies [d8cc7e67a]
  • Updated dependencies [99fbef232]
  • Updated dependencies [ab07d77f6]
  • Updated dependencies [931b21a12]
  • Updated dependencies [937ed39ce]
  • Updated dependencies [9a9e7a42f]
  • Updated dependencies [50ce875a0]

0.7.2

Patch Changes

  • fef852ecd: Reworked the TechDocs plugin to support using the configured company name instead of 'Backstage' in the page title.
  • 18f7345a6: Add borders to TechDocs tables and increase font size. Fixes #5264 and #5276.
  • Updated dependencies [bb5055aee]
  • Updated dependencies [d0d1c2f7b]
  • Updated dependencies [5d0740563]
  • Updated dependencies [5cafcf452]
  • Updated dependencies [86a95ba67]
  • Updated dependencies [e27cb6c45]

0.7.1

Patch Changes

0.7.0

Minor Changes

  • aaeb7ecf3: When newer documentation available but not built, show older documentation while async building newer TechDocs backend: /sync endpoint added to support above, returns immediate success if docs don't need a build, returns delayed success after build if needed TechDocs backend: /docs endpoint removed as frontend can directly request to techdocs.storageUrl or /static/docs
  • 3139f83af: Add sticky sidebars and footer navigation links to TechDocs Reader

Patch Changes

0.6.2

Patch Changes

0.6.1

Patch Changes

  • aa095e469: OpenStack Swift publisher added for tech-docs.
  • 2089de76b: Make use of the new core ItemCardGrid and ItemCardHeader instead of the deprecated ItemCard.
  • 868e4cdf2: - Adds a link to the owner entity
    • Corrects the link to the component which includes the namespace
  • ca4a904f6: Add an optional configuration option for setting the url endpoint for AWS S3 publisher: techdocs.publisher.awsS3.endpoint
  • Updated dependencies [d7245b733]
  • Updated dependencies [0b42fff22]
  • Updated dependencies [0b42fff22]
  • Updated dependencies [2ef5bc7ea]
  • Updated dependencies [ff4d666ab]
  • Updated dependencies [aa095e469]
  • Updated dependencies [2089de76b]
  • Updated dependencies [dc1fc92c8]
  • Updated dependencies [bc46435f5]
  • Updated dependencies [a501128db]
  • Updated dependencies [ca4a904f6]

0.6.0

Minor Changes

  • 813c6a4f2: Add authorization header on techdocs api requests. Breaking change as clients now needs the Identity API.

Patch Changes

0.5.8

Patch Changes

0.5.7

Patch Changes

  • Updated dependencies [fd3f2a8c0]
  • Updated dependencies [fb28da212]
  • Updated dependencies [d34d26125]
  • Updated dependencies [0af242b6d]
  • Updated dependencies [f4c2bcf54]
  • Updated dependencies [10a0124e0]
  • Updated dependencies [07e226872]
  • Updated dependencies [26e143e60]
  • Updated dependencies [c6655413d]
  • Updated dependencies [44414239f]
  • Updated dependencies [b0a41c707]
  • Updated dependencies [f62e7abe5]
  • Updated dependencies [96f378d10]
  • Updated dependencies [688b73110]

0.5.6

Patch Changes

  • f5e564cd6: Improve display of error messages
  • 41af18227: Migrated to new composability API, exporting the plugin instance as techdocsPlugin, the top-level page as TechdocsPage, and the entity content as EntityTechdocsContent.
  • 8f3443427: Enhance API calls to support trapping 500 errors from techdocs-backend
  • Updated dependencies [77ad0003a]
  • Updated dependencies [b51ee6ece]
  • Updated dependencies [19d354c78]
  • Updated dependencies [08142b256]
  • Updated dependencies [08142b256]
  • Updated dependencies [b51ee6ece]

0.5.5

Patch Changes

  • 5fa3bdb55: Add href in addition to onClick to ItemCard. Ensure that the height of a ItemCard with and without tags is equal.
  • e44925723: techdocs.requestUrl and techdocs.storageUrl are now optional configs and the discovery API will be used to get the URL where techdocs plugin is hosted.
  • 019fe39a0: Switch dependency from @backstage/plugin-catalog to @backstage/plugin-catalog-react.
  • Updated dependencies [c777df180]
  • Updated dependencies [12ece98cd]
  • Updated dependencies [d82246867]
  • Updated dependencies [7fc89bae2]
  • Updated dependencies [c810082ae]
  • Updated dependencies [5fa3bdb55]
  • Updated dependencies [6e612ce25]
  • Updated dependencies [e44925723]
  • Updated dependencies [025e122c3]
  • Updated dependencies [21e624ba9]
  • Updated dependencies [da9f53c60]
  • Updated dependencies [32c95605f]
  • Updated dependencies [7881f2117]
  • Updated dependencies [f0320190d]
  • Updated dependencies [54c7d02f7]
  • Updated dependencies [11cb5ef94]

0.5.4

Patch Changes

  • a5e27d5c1: Create type for TechDocsMetadata (#3716)

    This change introduces a new type (TechDocsMetadata) in packages/techdocs-common. This type is then introduced in the endpoint response in techdocs-backend and in the api interface in techdocs (frontend).

  • Updated dependencies [def2307f3]

  • Updated dependencies [efd6ef753]
  • Updated dependencies [593632f07]
  • Updated dependencies [33846acfc]
  • Updated dependencies [a187b8ad0]
  • Updated dependencies [f04db53d7]
  • Updated dependencies [53c9c51f2]
  • Updated dependencies [a5e27d5c1]
  • Updated dependencies [a93f42213]

0.5.3

Patch Changes

  • dbe4450c3: Google Cloud authentication in TechDocs has been improved.

    1. techdocs.publisher.googleGcs.credentials is now optional. If it is missing, GOOGLE_APPLICATION_CREDENTIALS environment variable (and some other methods) will be used to authenticate. Read more here https://cloud.google.com/docs/authentication/production

    2. techdocs.publisher.googleGcs.projectId is no longer used. You can remove it from your app-config.yaml.

  • a6f9dca0d: Remove dependency on @backstage/core-api. No plugin should ever depend on that package; it's an internal concern whose important bits are re-exported by @backstage/core which is the public facing dependency to use.

  • b3b9445df: AWS S3 authentication in TechDocs has been improved.

    1. techdocs.publisher.awsS3.bucketName is now the only required config. techdocs.publisher.awsS3.credentials and techdocs.publisher.awsS3.region are optional.

    2. If techdocs.publisher.awsS3.credentials and techdocs.publisher.awsS3.region are missing, the AWS environment variables AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_REGION will be used. There are more better ways of setting up AWS authentication. Read the guide at https://backstage.io/docs/features/techdocs/using-cloud-storage

  • e5d12f705: Use history.pushState for hash link navigation.

  • Updated dependencies [68ad5af51]
  • Updated dependencies [f3b064e1c]
  • Updated dependencies [371f67ecd]
  • Updated dependencies [f1e74777a]
  • Updated dependencies [dbe4450c3]
  • Updated dependencies [c00488983]
  • Updated dependencies [265a7ab30]
  • Updated dependencies [5826d0973]
  • Updated dependencies [b3b9445df]
  • Updated dependencies [abbee6fff]
  • Updated dependencies [147fadcb9]

0.5.2

Patch Changes

0.5.1

Patch Changes

0.5.0

Minor Changes

  • dae4f3983: Breaking changes

    1. Added option to use Google Cloud Storage as a choice to store the static generated files for TechDocs. It can be configured using techdocs.publisher.type option in app-config.yaml. Step-by-step guide to configure GCS is available here https://backstage.io/docs/features/techdocs/using-cloud-storage Set techdocs.publisher.type to 'local' if you want to continue using local filesystem to store TechDocs files.

    2. techdocs.builder is now required and can be set to 'local' or 'external'. (Set it to 'local' for now, since CI/CD build workflow for TechDocs will be available soon (in few weeks)). If builder is set to 'local' and you open a TechDocs page, techdocs-backend will try to generate the docs, publish to storage and show the generated docs afterwords. If builder is set to 'external', techdocs-backend will only fetch the docs and will NOT try to generate and publish. In this case of 'external', we assume that docs are being built in the CI/CD pipeline of the repository. TechDocs will not assume a default value for techdocs.builder. It is better to explicitly define it in the app-config.yaml.

    3. When configuring TechDocs in your backend, there is a difference in how a new publisher is created.

    ---  const publisher = new LocalPublish(logger, discovery);
    +++  const publisher = Publisher.fromConfig(config, logger, discovery);

    Based on the config techdocs.publisher.type, the publisher could be either Local publisher or Google Cloud Storage publisher.

    1. techdocs.storageUrl is now a required config. Should be http://localhost:7000/api/techdocs/static/docs in most setups.

    2. Parts of @backstage/plugin-techdocs-backend have been moved to a new package @backstage/techdocs-common to generate docs. Also to publish docs to-and-fro between TechDocs and a storage (either local or external). However, a Backstage app does NOT need to import the techdocs-common package - app should only import @backstage/plugin-techdocs and @backstage/plugin-techdocs-backend.

    Patch changes

    1. See all of TechDocs config options and its documentation https://backstage.io/docs/features/techdocs/configuration

    2. Logic about serving static files and metadata retrieval have been abstracted away from the router in techdocs-backend to the instance of publisher.

    3. Removed Material UI Spinner from TechDocs header. Spinners cause unnecessary UX distraction. Case 1 (when docs are built and are to be served): Spinners appear for a split second before the name of site shows up. This unnecessarily distracts eyes because spinners increase the size of the Header. A dot (.) would do fine. Definitely more can be done. Case 2 (when docs are being generated): There is already a linear progress bar (which is recommended in Storybook).

Patch Changes

0.4.0

Minor Changes

  • 87a33d2fe: Removed modifyCss transformer and moved the css to injectCss transformer Fixed issue where some internal doc links would cause a reload of the page

Patch Changes

0.3.1

Patch Changes

0.3.0

Minor Changes

  • 4b53294a6: - Use techdocs annotation to add repo_url if missing in mkdocs.yml. Having repo_url creates a Edit button on techdocs pages.
    • techdocs-backend: API endpoint /metadata/mkdocs/* renamed to /metadata/techdocs/*

Patch Changes

0.2.3

Patch Changes

0.2.2

Patch Changes

0.2.1

Patch Changes

0.2.0

Minor Changes

  • 28edd7d29: Create backend plugin through CLI
  • 8351ad79b: Add a message if techdocs takes long time to load

    Fixes #2416.

    The UI after the change should look like this:

    techdocs-progress-bar

Patch Changes

  • 782f3b354: add test case for Progress component
  • 57b54c8ed: While techdocs fetches site name and metadata for the component, the page title was displayed as '[object Object] | Backstage'. This has now been fixed to display the component ID if site name is not present or being fetched.
  • Updated dependencies [28edd7d29]
  • Updated dependencies [819a70229]
  • Updated dependencies [3a4236570]
  • Updated dependencies [ae5983387]
  • Updated dependencies [0d4459c08]
  • Updated dependencies [cbbd271c4]
  • Updated dependencies [482b6313d]
  • Updated dependencies [e0be86b6f]
  • Updated dependencies [f70a52868]
  • Updated dependencies [12b5fe940]
  • Updated dependencies [368fd8243]
  • Updated dependencies [1c60f716e]
  • Updated dependencies [144c66d50]
  • Updated dependencies [a768a07fb]
  • Updated dependencies [b79017fd3]
  • Updated dependencies [6d97d2d6f]
  • Updated dependencies [5adfc005e]
  • Updated dependencies [f0aa01bcc]
  • Updated dependencies [0aecfded0]
  • Updated dependencies [93a3fa3ae]
  • Updated dependencies [782f3b354]
  • Updated dependencies [8b9c8196f]
  • Updated dependencies [2713f28f4]
  • Updated dependencies [406015b0d]
  • Updated dependencies [82759d3e4]
  • Updated dependencies [60d40892c]
  • Updated dependencies [ac8d5d5c7]
  • Updated dependencies [2ebcfac8d]
  • Updated dependencies [fa56f4615]
  • Updated dependencies [ebca83d48]
  • Updated dependencies [aca79334f]
  • Updated dependencies [c0d5242a0]
  • Updated dependencies [b3d57961c]
  • Updated dependencies [0b956f21b]
  • Updated dependencies [26e69ab1a]
  • Updated dependencies [97c2cb19b]
  • Updated dependencies [3beb5c9fc]
  • Updated dependencies [cbab5bbf8]
  • Updated dependencies [754e31db5]
  • Updated dependencies [1611c6dbc]