open-index/open-npm huggingface dataset:
npm package: @janus-idp/backstage-plugin-analytics-module-matomo
Description: This plugin provides an opinionated implementation of the Backstage Analytics API for Matomo Analytics. Once installed and configured, analytics events will be sent to Matomo as your users navigate and use your Backstage instance.
Author: The Backstage Community
Latest version: 1.8.1

# Analytics Module: Matomo Analytics

This plugin provides an opinionated implementation of the Backstage Analytics
API for Matomo Analytics. Once installed and configured, analytics events will
be sent to Matomo as your users navigate and use your Backstage instance.

This module is made to work with backstage's built-in analytics plugin. The usage guide to start tracking analytics for your plugins can be found here: https://backstage.io/docs/plugins/analytics/

## Installation

1. Install the plugin package in your Backstage app:

```sh
# From your Backstage root directory
yarn add --cwd packages/app @janus-idp/backstage-plugin-analytics-module-matomo
```

2. Wire up the API implementation to your App:

```tsx
// packages/app/src/apis.ts
import {
  analyticsApiRef,
  configApiRef,
  identityApiRef,
} from '@backstage/core-plugin-api';

import { MatomoAnalytics } from '@janus-idp/backstage-plugin-analytics-module-matomo';

export const apis: AnyApiFactory[] = [
  // Instantiate and register the Matomo Analytics API Implementation.
  createApiFactory({
    api: analyticsApiRef,
    deps: { configApi: configApiRef },
    factory: ({ configApi }) => MatomoAnalytics.fromConfig(configApi),
  }),
];
```

3. Configure the plugin in your `app-config.yaml`:

The following is the minimum configuration required to start sending analytics
events to Matomo. All that's needed is your Matomo Host and Site Id:

```yaml
# app-config.yaml
app:
  analytics:
    matomo:
      host: ${ANALYTICS_MATOMO_INSTANCE_URL}
      siteId: ${ANALYTICS_MATOMO_SITE_ID}
```

4. Update CSP in your `app-config.yaml`:(optional)

The following is the minimal content security policy required to load scripts from your Matomo Instance.

```yaml
backend:
  csp:
    connect-src: ["'self'", 'http:', 'https:']
    # Add these two lines below
    script-src: ["'self'", "'unsafe-eval'", '<matomo-instance-url>']
```
npm package: @janus-idp/backstage-plugin-analytics-provider-segment
Description: This plugin provides an implementation of the Backstage Analytics API for Segment. Once installed and configured, analytics events will be sent to Segment as your users navigate and use your Backstage instance.
Author: Red Hat
Latest version: 1.10.1

# Analytics Module: Segment

This plugin provides an implementation of the Backstage Analytics API for
Segment. Once installed and configured, analytics events will be sent to
Segment as your users navigate and use your Backstage instance.

This plugin contains no other functionality.

## Installation

1. Install the plugin package in your Backstage app:

   ```console
   yarn workspace app add @janus-idp/backstage-plugin-analytics-provider-segment
   ```

## Configuration

1. Wire up the API implementation to your App in `packages/app/src/apis.ts`:

   ```tsx title="packages/app/src/apis.ts"
   /* highlight-add-start */
   import {
     analyticsApiRef,
     configApiRef,
     identityApiRef,
   } from '@backstage/core-plugin-api';

   import { SegmentAnalytics } from '@janus-idp/backstage-plugin-analytics-provider-segment';

   /* highlight-add-end */

   export const apis: AnyApiFactory[] = [
     // Other APIs...
     // Instantiate and register the GA Analytics API Implementation.
     /* highlight-add-start */
     createApiFactory({
       api: analyticsApiRef,
       deps: { configApi: configApiRef, identityApi: identityApiRef },
       factory: ({ configApi, identityApi }) =>
         SegmentAnalytics.fromConfig(configApi, identityApi),
     }),
     /* highlight-add-end */
   ];
   ```

2. Configure the plugin in your `app-config.yaml`:

The following is the minimum configuration required to start sending analytics
events to Segment. All that's needed is your Segment Write Key

```yaml title="app-config.yaml"
app:
  analytics:
    segment:
      # highlight-start
      writeKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      maskIP: true # prevents IP addresses from being sent if true
      # highlight-end
```

## Debugging and Testing

In pre-production environments, you may wish to set additional configurations
to turn off reporting to Analytics. You can do so like this:

```yaml title="app-config.yaml"
app:
  analytics:
    segment:
      # highlight-next-line
      testMode: true # prevents data from being sent if true
```

You might commonly set the above in an `app-config.local.yaml` file, which is
normally `gitignore`'d but loaded and merged in when Backstage is bootstrapped.
npm package: @janus-idp/backstage-plugin-argocd-common
Description: Welcome to the argocd-common plugin!
Author: Red Hat
Latest version: 1.0.1

# argocd-common

Welcome to the argocd-common plugin!

This plugin contains common utilities for the argocd plugin.

# Argo CD plugin for Backstage

The Argocd plugin displays the information about your argocd applications in your Backstage application.

For more information about Argocd plugin, see the [Argocd plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/argocd) on GitHub.
npm package: @janus-idp/backstage-plugin-bulk-import
Description: This plugin allows bulk import of multiple catalog entities into the catalog.
Author: Red Hat
Latest version: 1.7.1

# Bulk import frontend plugin for Backstage

This plugin allows bulk import of multiple catalog entities into the catalog.

## For administrators

### Installation

#### Installing as a dynamic plugin?

The sections below are relevant for static plugins. If the plugin is expected to be installed as a dynamic one:

- Follow https://github.com/janus-idp/backstage-showcase/blob/main/showcase-docs/dynamic-plugins.md#installing-a-dynamic-plugin-package-in-the-showcase
- Add content of `app-config.janus-idp.yaml` into `app-config.local.yaml`.

#### Prerequisites

- Follow the Bulk import backend plugin [README](https://github.com/janus-idp/backstage-plugins/blob/main/plugins/bulk-import-backend/README.md) to integrate bulk import in your Backstage instance.

- Follow the [GitHub Locations](https://backstage.io/docs/integrations/github/locations) to integrate GitHub integrations in your Backstage instance. For now, the plugin only supports loading catalog entities from github.com or GitHub Enterprise.

---

**NOTE**

- When RBAC permission framework is enabled, for non-admin users to access bulk import UI, the role associated with your user should have the following permission policies associated with it. Add the following in your permission policies configuration file:

```CSV
p, role:default/team_a, bulk.import, use, allow
p, role:default/team_a, catalog-entity.read, read, allow
p, role:default/team_a, catalog-entity.create, create, allow
g, user:default/<login-id/user-name>, role:default/team_a
```

#### Procedure

1. Install the Bulk import UI plugin using the following command:

   ```console
   yarn workspace app add @janus-idp/backstage-plugin-bulk-import
   ```

2. Add Route in `packages/app/src/App.tsx`:

   ```tsx title="packages/app/src/App.tsx"
   /* highlight-add-next-line */
   import { BulkImportPage } from '@janus-idp/backstage-plugin-bulk-import';
   ...
   /* highlight-add-start */
   <Route
        path="/bulk-import"
        element={<Navigate to="repositories" />}
    />
    <Route
        path="/bulk-import/repositories"
        element={<BulkImportPage />}
    />
    /* highlight-add-end */
   ...
   ```

3. Add **Bulk import** Sidebar Item in `packages/app/src/components/Root/Root.tsx`:

   ```tsx title="packages/app/src/components/Root/Root.tsx"
   /* highlight-add-next-line */
   import { BulkImportSidebarItem } from '@janus-idp/backstage-plugin-bulk-import';

   export const Root = ({ children }: PropsWithChildren<{}>) => (
    <SidebarPage>
      <Sidebar>
      ...
      /* highlight-add-next-line */
      <BulkImportSidebarItem />
      ...
    </SidebarPage>
   );
   ```
npm package: @janus-idp/backstage-plugin-dynamic-plugins-info
Description: The dynamic-plugins-info plugin is a frontend component for the [dynamic-plugins-info-backend](https://github.com/janus-idp/backstage-showcase/tree/main/plugins/dynamic-plugins-info-backend) plugin. It offers a simple table of plugins that are currently i
Author: Red Hat
Latest version: 1.6.0

# Dynamic Plugins Info plugin for Backstage

The dynamic-plugins-info plugin is a frontend component for the [dynamic-plugins-info-backend](https://github.com/janus-idp/backstage-showcase/tree/main/plugins/dynamic-plugins-info-backend) plugin. It offers a simple table of plugins that are currently installed in Red Hat Developer Hub or Janus IDP that supports client-side sorting, filtering and pagination.

![dynamic-plugins-info-screenshot](./images/screenshot-plugin-list.png)

The plugin is designed to be installed dynamically in the [backstage-showcase](https://github.com/janus-idp/backstage-showcase/tree/main) app.

## Installing via Helm

To install this plugin into Red Hat Developer Hub or Janus IDP via Helm use this configuration:

```yaml
global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: ./dynamic-plugins/dist/janus-idp-backstage-plugin-dynamic-plugins-info
        disabled: false
```

## Building and installing locally

To build this plugin and the dynamic entrypoint:

`yarn install`

`yarn tsc`

`yarn build`

`yarn export-dynamic`

To install the dynamic plugin from a local build and run it in a local instance of [backstage-showcase](https://github.com/janus-idp/backstage-showcase/tree/main):

```bash
cd dist-scalprum
npm pack .
archive=$(npm pack $pkg)
tar -xzf "$archive" && rm "$archive"
mv package $(echo $archive | sed -e 's:\.tgz$::')
```

Move the resulting directory (`janus-idp-backstage-plugin-dynamic-plugins-info-0.1.0`) into the `dynamic-plugins-root` folder of your [backstage-showcase](https://github.com/janus-idp/backstage-showcase/tree/main) clone, then run `yarn start` to start the app.

This configuration will then enable the plugin to be visible in the UI:

```yaml
dynamicPlugins:
  frontend:
    janus-idp.backstage-plugin-dynamic-plugins-info:
      dynamicRoutes:
        - path: /admin/plugins
          importName: DynamicPluginsInfo
      mountPoints:
        - mountPoint: admin.page.plugins/cards
          importName: DynamicPluginsInfo
          config:
            layout:
              gridColumn: '1 / -1'
              width: 100vw
```
npm package: @janus-idp/backstage-plugin-feedback-backend
Description: This is feedback-backend plugin which provides Rest API to create feedbacks.
Author: The Backstage Community
Latest version: 1.3.11

# Feedback Backend

This is feedback-backend plugin which provides Rest API to create feedbacks.

It is also responsible for creating JIRA tickets,

## Getting started

### Installation

Install the NPM Package

```bash
# From your backstage root directory
yarn workspace backend add @janus-idp/backstage-plugin-feedback-backend
```

#### Adding the plugin to the new backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-plugin-feedback-backend'));

backend.start();
```

#### Adding the plugin to the legacy backend (`@janus-idp/backstage-plugin-feedback-backend@1.2.6` and lower)

1. Create a new file `packages/backend/src/plugins/feedback.ts` and add the following:

   ```ts title="packages/backend/src/plugins/feedback.ts"
   import { Router } from 'express';

   import { createRouter } from '@janus-idp/backstage-plugin-feedback-backend';

   import { PluginEnvironment } from '../types';

   export default async function createPlugin(
     env: PluginEnvironment,
   ): Promise<Router> {
     return await createRouter({
       logger: env.logger,
       config: env.config,
       discovery: env.discovery,
     });
   }
   ```

2. Next we wire this into overall backend router by editing the `packages/backend/src/index.ts` file:

   ```ts title="packages/backend/src/index.ts"
   import feedback from './plugins/feedback';

   // ...
   async function main() {
     // ...
     const feedbackEnv = useHotMemoize(module, () => createEnv('feedback'));
     apiRouter.use('/feedback', await feedback(feedbackEnv));
   }
   ```

### Configurations

Add the following config in your `app-config.yaml` file.

```yaml
feedback:
  integrations:
    jira:
      # Under this object you can define multiple jira hosts
      - host: ${JIRA_HOST_URL}
        # Add your jira token along with Basic or Bearer type eg: Basic/Bearer <token>
        token: ${JIRA_TOKEN}
        # (optional) Due to GDPR limitations on jira cloud instances
        # set hostType: CLOUD to make api work
        # default value is SERVER
        hostType: CLOUD

    email:
      ## Email integration uses nodemailer to send emails
      host: ${EMAIL_HOST}
      port: ${EMAIL_PORT} # defaults to 587, if not found

      ## Email address of sender
      from: ${EMAIL_FROM}

      ## [optional] Authorization using user and password
      auth:
        user: ${EMAIL_USER}
        pass: ${EMAIL_PASS}

      # boolean
      secure: false

      # Path to ca certificate if required by mail server
      caCert: ${NODE_EXTRA_CA_CERTS}
```

### Set up frontend plugin

Follow instructions provided [feedback-plugin](../feedback/README.md)

### API reference

The API specifications file can be found at [docs/openapi3_0](./docs/openapi3_0.yaml)

### Running the plugin

Run `yarn workspace @janus-idp/backstage-plugin-feedback-backend start`.
npm package: @janus-idp/backstage-plugin-feedback-backend-dynamic
Description: This is feedback-backend plugin which provides Rest API to create feedbacks.
Author: The Backstage Community
Latest version: 1.7.2

# Feedback Backend

This is feedback-backend plugin which provides Rest API to create feedbacks.

It is also responsible for creating JIRA tickets,

## Getting started

### Installation

Install the NPM Package

```bash
# From your backstage root directory
yarn workspace backend add @janus-idp/backstage-plugin-feedback-backend
```

#### Adding the plugin to the new backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-plugin-feedback-backend'));

backend.start();
```

#### Adding the plugin to the legacy backend (`@janus-idp/backstage-plugin-feedback-backend@1.2.6` and lower)

1. Create a new file `packages/backend/src/plugins/feedback.ts` and add the following:

   ```ts title="packages/backend/src/plugins/feedback.ts"
   import { Router } from 'express';

   import { createRouter } from '@janus-idp/backstage-plugin-feedback-backend';

   import { PluginEnvironment } from '../types';

   export default async function createPlugin(
     env: PluginEnvironment,
   ): Promise<Router> {
     return await createRouter({
       logger: env.logger,
       config: env.config,
       discovery: env.discovery,
     });
   }
   ```

2. Next we wire this into overall backend router by editing the `packages/backend/src/index.ts` file:

   ```ts title="packages/backend/src/index.ts"
   import feedback from './plugins/feedback';

   // ...
   async function main() {
     // ...
     const feedbackEnv = useHotMemoize(module, () => createEnv('feedback'));
     apiRouter.use('/feedback', await feedback(feedbackEnv));
   }
   ```

### Configurations

Add the following config in your `app-config.yaml` file.

```yaml
feedback:
  integrations:
    jira:
      # Under this object you can define multiple jira hosts
      - host: ${JIRA_HOST_URL}
        # Add your jira token along with Basic or Bearer type eg: Basic/Bearer <token>
        token: ${JIRA_TOKEN}
        # (optional) Due to GDPR limitations on jira cloud instances
        # set hostType: CLOUD to make api work
        # default value is SERVER
        hostType: CLOUD

    email:
      ## Email integration uses nodemailer to send emails
      host: ${EMAIL_HOST}
      port: ${EMAIL_PORT} # defaults to 587, if not found

      ## Email address of sender
      from: ${EMAIL_FROM}

      ## [optional] Authorization using user and password
      auth:
        user: ${EMAIL_USER}
        pass: ${EMAIL_PASS}

      # boolean
      secure: false

      # Path to ca certificate if required by mail server
      caCert: ${NODE_EXTRA_CA_CERTS}
```

### Set up frontend plugin

Follow instructions provided [feedback-plugin](../feedback/README.md)

### API reference

The API specifications file can be found at [docs/openapi3_0](./docs/openapi3_0.yaml)

### Running the plugin

Run `yarn workspace @janus-idp/backstage-plugin-feedback-backend start`.
npm package: @janus-idp/backstage-plugin-jfrog-artifactory
Description: The Jfrog Artifactory plugin displays information about your container images within the Jfrog Artifactory registry.
Author: Red Hat
Latest version: 1.4.13

# Jfrog Artifactory plugin for Backstage

The Jfrog Artifactory plugin displays information about your container images within the Jfrog Artifactory registry.

## For administrators

### Installation and configuration

#### Procedure

1. Run the following command to install the Jfrog Artifactory plugin:

   ```console
   yarn workspace app add @janus-idp/backstage-plugin-jfrog-artifactory
   ```

1. Set the proxy to the desired Artifactory server in the `app-config.yaml` file as follows:

   ```yaml title="app-config.yaml"
   proxy:
     endpoints:
       '/jfrog-artifactory/api':
         target: 'http://<hostname>:8082' # or https://<customer>.jfrog.io
         headers:
           # Authorization: 'Bearer <YOUR TOKEN>'
         # Change to "false" in case of using self hosted artifactory instance with a self-signed certificate
         secure: true
   ```

1. Enable the **JFROG ARTIFACTORY** tab on the entity view page in `packages/app/src/components/catalog/EntityPage.tsx`:

   ```ts title="packages/app/src/components/catalog/EntityPage.tsx"
   /* highlight-add-start */
   import {
     isJfrogArtifactoryAvailable,
     JfrogArtifactoryPage,
   } from '@janus-idp/backstage-plugin-jfrog-artifactory';

   /* highlight-add-end */

   const serviceEntityPage = (
     <EntityLayout>
       // ...
       {/* highlight-add-start */}
       <EntityLayout.Route
         if={isJfrogArtifactoryAvailable}
         path="/jfrog-artifactory"
         title="Jfrog Artifactory"
       >
         <JfrogArtifactoryPage />
       </EntityLayout.Route>
       {/* highlight-add-end */}
     </EntityLayout>
   );
   ```

1. Annotate your entity with the following annotations:

   ```yaml title="catalog-info.yaml"
   metadata:
     annotations:
       'jfrog-artifactory/image-name': '<IMAGE-NAME>'
   ```

## For users

### Using the Jfrog Artifactory plugin in Backstage

Jfrog Artifactory is a front-end plugin that enables you to view the information about the container images that are available in your Jfrog Artifactory registry.

#### Prerequisites

- Your Backstage application is installed and running.
- You have installed the Jfrog Artifactory plugin. For installation and configuration steps, see [Installation and configuration](#installation-and-configuration).

#### Procedure

1. Open your Backstage application and select a component from the **Catalog** page.

1. Go to the **JFROG ARTIFACTORY** tab.

   ![jfrog-tab](./images/jfrog-plugin-user1.png)

   The **JFROG ARTIFACTORY** tab contains a list of container images and related information, such as **VERSION**, **REPOSITORIES**, **MANIFEST**, **MODIFIED**, and **SIZE**.
npm package: @janus-idp/backstage-plugin-kiali-backend
Description: This is the backend part of the Kiali plugin for Backstage. It is called by and responds to requests from the frontend [`@janus-idp/backstage-plugin-kiali`](https://github.com/janus-idp/backstage-plugins/tree/master/plugins/kiali) plugin.
Author: The Backstage Community
Latest version: 1.20.2

# Kiali Backend plugin for Backstage

This is the backend part of the Kiali plugin for Backstage. It is called by and responds to requests from the frontend [`@janus-idp/backstage-plugin-kiali`](https://github.com/janus-idp/backstage-plugins/tree/master/plugins/kiali) plugin.

It directly interfaces with the Kiali API control plane to obtain information about objects that will then be presented at the front end.

## Setup & Configuration

This plugin must be explicitly added to a Backstage app, along with it's peer frontend plugin.

The plugin requires configuration in the Backstage `app-config.yaml` to connect to a Kiali API control plane.

In addition, configuration of an entity's `catalog-info.yaml` helps identify which specific ServiceMesh object(s) should be presented on a specific entity catalog page.

Follow these [`steps`](https://github.com/janus-idp/backstage-plugins/tree/master/plugins/kiali)
npm package: @janus-idp/backstage-plugin-kiali-backend-dynamic
Description: This is the backend part of the Kiali plugin for Backstage. It is called by and responds to requests from the frontend [`@janus-idp/backstage-plugin-kiali`](https://github.com/janus-idp/backstage-plugins/tree/master/plugins/kiali) plugin.
Author: The Backstage Community
Latest version: 1.18.1

# Kiali Backend plugin for Backstage

This is the backend part of the Kiali plugin for Backstage. It is called by and responds to requests from the frontend [`@janus-idp/backstage-plugin-kiali`](https://github.com/janus-idp/backstage-plugins/tree/master/plugins/kiali) plugin.

It directly interfaces with the Kiali API control plane to obtain information about objects that will then be presented at the front end.

## Setup & Configuration

This plugin must be explicitly added to a Backstage app, along with it's peer frontend plugin.

The plugin requires configuration in the Backstage `app-config.yaml` to connect to a Kiali API control plane.

In addition, configuration of an entity's `catalog-info.yaml` helps identify which specific ServiceMesh object(s) should be presented on a specific entity catalog page.

Follow these [`steps`](https://github.com/janus-idp/backstage-plugins/tree/master/plugins/kiali)
npm package: @janus-idp/backstage-plugin-kiali-common
Description: Common functionalities for the kiali plugin
Latest version: 1.4.1

# Kiali Common plugin for Kiali Plugin

Welcome to the common package for the kiali plugin!

For more information about Kiali plugin, see the [Kiali Plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/kiali) on GitHub.
npm package: @janus-idp/backstage-plugin-lightspeed
Description: The Lightspeed plugin enables you to interact with any LLM server running a model with OpenAI's API compatibility.
Author: Red Hat
Latest version: 0.1.2

# Lightspeed plugin for Backstage

The Lightspeed plugin enables you to interact with any LLM server running a model with OpenAI's API compatibility.

## For administrators

### Installation

1. Install the Lightspeed plugin using the following command:

   ```console
   yarn workspace app add @janus-idp/backstage-plugin-lightspeed
   ```

### Configuration

1. Set the proxy to the desired LLM server in the `app-config.yaml` file as follows:

   ```yaml title="app-config.yaml"
   proxy:
     '/lightspeed/api':
       target: http://localhost:11434/v1/
       headers:
         Authorization: Bearer <token>
   ```

2. Add a new nav item **Lightspeed** in App `packages/app/src/App.tsx`:

   ```tsx title="packages/app/src/components/App.tsx"
   /* highlight-add-next-line */ import { LightspeedPage } from '@janus-idp/backstage-plugin-lightspeed';

   <Route path="/lightspeed" element={<LightspeedPage />} />;
   ```

3. Enable **Lightspeed** page in `packages/app/src/components/Root/Root.tsx`:

   ```tsx title="packages/app/src/components/Root/Root.tsx"
   /* highlight-add-next-line */ import { LightspeedIcon } from '@janus-idp/backstage-plugin-lightspeed';

   <SidebarItem
     icon={LightspeedIcon as IconComponent}
     to="lightspeed"
     text="Lightspeed"
   />;
   ```

## For users

### Using the Lightspeed plugin in Backstage

Lightspeed is a front-end plugin that enables you to interact with any LLM server running a model with OpenAI's API compatibility.

#### Prerequisites

- Your Backstage application is installed and running.
- You have installed the Lightspeed plugin. For installation process, see [Installation](#installation).

#### Procedure

1. Open your Backstage application and select a Lightspeed nav item from the **Navigation**.
2. Ask you questions to the Lightspeed chatbot.
npm package: @janus-idp/backstage-plugin-lightspeed-backend
Description: This is the lightspeed backend plugin that enables you to interact with any LLM server running a model with OpenAI's API compatibility.
Latest version: 0.1.0

# Lightspeed Backend

This is the lightspeed backend plugin that enables you to interact with any LLM server running a model with OpenAI's API compatibility.

## Getting Started

### Installing the plugin

```bash
yarn add --cwd packages/backend  @janus-idp/backstage-plugin-lightspeed-backend
```

### Configuring the Backend

#### Old Backend System

1. Create a new file `packages/backend/src/plugins/lightspeed.ts`, and add the following

```ts title="packages/backend/src/plugins/lightspeed.ts"
import { Router } from 'express';

import { createRouter } from '@janus-idp/backstage-plugin-lightspeed-backend';

import { PluginEnvironment } from '../types';

export default async function createPlugin(
  env: PluginEnvironment,
): Promise<Router> {
  return await createRouter({
    config: env.config,
    logger: env.logger,
    discovery: env.discovery,
    catalogApi: env.catalogApi,
  });
}
```

1. Next, in your overall backend router (typically `packages/backend/src/index.ts`) add a route for `/lightspeed`:

```ts title="packages/backend/src/index.ts"
import lightspeed from './plugins/lightspeed';

// ...
async function main() {
  // ...
  // Add the following line
  const lightspeedEnv = useHotMemoize(module, () => createEnv('lightspeed'));
  // ...
  // Add the following line under the other lines that add their routers to apiRouter
  apiRouter.use('/lightspeed', await lightspeed(lightspeedEnv));
  // ...
}
```

#### New Backend System

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-plugin-lightspeed-backend'));

backend.start();
```

### Plugin Configurations

Add the following proxy configurations into your `app-config.yaml` file:

```yaml
proxy:
  endpoints:
    '/lightspeed/api':
      target: '<LLM server URL>'
      headers:
        content-type: 'application/json'
        Authorization: 'Bearer <api-token>'
      secure: true
      changeOrigin: true
      credentials: 'dangerously-allow-unauthenticated' # No Backstage credentials are required to access this proxy target
```

Example local development configuration:

```yaml
proxy:
  endpoints:
    '/lightspeed/api':
      target: 'https://localhost:443/v1'
      headers:
        content-type: 'application/json'
        Authorization: 'Bearer js92n-ssj28dbdk902' # dummy token
      secure: true
      changeOrigin: true
      credentials: 'dangerously-allow-unauthenticated' # No Backstage credentials are required to access this proxy target
```
npm package: @janus-idp/backstage-plugin-matomo
Description: The matomo plugin shows the basic analytics from [Matomo](https://matomo.org/)
Author: The Backstage Community
Latest version: 1.10.1

# Matomo Plugin

The matomo plugin shows the basic analytics from [Matomo](https://matomo.org/)

![Matomo tab](./docs/matomo-tab.png)

## Getting started

1. Install the plugin

```bash
yarn workspace app add @janus-idp/backstage-plugin-matomo
```

2. Make sure the [Matomo backend plugin](../matomo-backend/README.md) is installed and configured

### Entity Pages

1. Add the plugin as a tab to website entity pages

```ts
// In packages/app/src/components/catalog/EntityPage.tsx
import { MatomoPage } from '@janus-idp/plugin-matomo';

const websiteEntityPage = (
  <EntityLayout>
    <EntityLayout.Route path="/matomo" title="Matomo">
      <MatomoPage />
    </EntityLayout.Route>
  </EntityLayout>
);
```

2. Add `matomo.io/site-id`annotation to `catalog-info-yaml`

```yaml
metadata:
  name: matomo-website
  annotations:
    matomo.io/site-id: '<YOUR_MATOMO_SITE_ID'
```

3. Add `contact us` and `matomo instance url` for user guidance

```yaml
matomo:
  frontendBaseUrl: ${MATOMO_INSTANCE_URL}
  contactUsLink: mailto:${MATOMO_CONTACT_EMAIL}
```
npm package: @janus-idp/backstage-plugin-matomo-backend
Description: This is the matomo backend plugin that act as a proxy with matomo instance.
Author: The Backstage Community
Latest version: 1.11.1

# Matomo Backend

This is the matomo backend plugin that act as a proxy with matomo instance.

Plugin will inject the auth token and ensure that the request are only read only operations.

Matomo API cannot be used as proxy layer due to the token auth it follows. Thus this plugin will act as proxy layer

## Getting Started

### Installing the NPM package

```bash
yarn add --cwd packages/backend  @janus-idp/plugin-matomo-backend
```

### Installing the plugin

#### Adding the plugin to the new backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-plugin-matomo-backend'));

backend.start();
```

### Plugin Configurations

Add the following configurations into your `app-config.yaml` file:

```yaml
matomo:
  apiToken: ${MATOMO_API_TOKEN}

  apiUrl: ${MATOMO_API_URL}

  # (OPTIONAL) Set to false if you get SSL certificate error
  secure: ${MATOMO_SECURE_FLAG}
```
npm package: @janus-idp/backstage-plugin-matomo-backend-dynamic
Description: This is the matomo backend plugin that act as a proxy with matomo instance.
Author: The Backstage Community
Latest version: 1.9.2

# Matomo Backend

This is the matomo backend plugin that act as a proxy with matomo instance.

Plugin will inject the auth token and ensure that the request are only read only operations.

Matomo API cannot be used as proxy layer due to the token auth it follows. Thus this plugin will act as proxy layer

## Getting Started

### Installing the NPM package

```bash
yarn add --cwd packages/backend  @janus-idp/plugin-matomo-backend
```

### Installing the plugin

#### Adding the plugin to the new backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-plugin-matomo-backend'));

backend.start();
```

### Plugin Configurations

Add the following configurations into your `app-config.yaml` file:

```yaml
matomo:
  apiToken: ${MATOMO_API_TOKEN}

  apiUrl: ${MATOMO_API_URL}

  # (OPTIONAL) Set to false if you get SSL certificate error
  secure: ${MATOMO_SECURE_FLAG}
```
npm package: @janus-idp/backstage-plugin-ocm-backend
Description: The Open Cluster Management (OCM) plugin integrates your Backstage instance with OCM.
Author: Red Hat
Latest version: 4.4.6

# Open Cluster Management plugin for Backstage

The Open Cluster Management (OCM) plugin integrates your Backstage instance with OCM.

For more information about OCM plugin, see the [Open Cluster Management plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/ocm) on GitHub.
npm package: @janus-idp/backstage-plugin-ocm-common
Description: Common functionalities for the Open Cluster Management plugin
Author: Red Hat
Latest version: 3.6.1

# Open Cluster Management plugin for Backstage

The Open Cluster Management (OCM) plugin integrates your Backstage instance with OCM.

For more information about OCM plugin, see the [Open Cluster Management plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/ocm) on GitHub.
npm package: @janus-idp/backstage-plugin-orchestrator-backend
Description: Welcome to the backend package for the Orchestrator plugin!
Author: The Backstage Community
Latest version: 1.20.102

# Orchestrator Backend Plugin for Backstage

Welcome to the backend package for the Orchestrator plugin!

For more information about the Orchestrator plugin, see the [Orchestrator Plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/orchestrator) on GitHub.
npm package: @janus-idp/backstage-plugin-orchestrator-backend-dynamic
Description: Welcome to the backend package for the Orchestrator plugin!
Author: The Backstage Community
Latest version: 2.3.0

# Orchestrator Backend Plugin for Backstage

Welcome to the backend package for the Orchestrator plugin!

For more information about the Orchestrator plugin, see the [Orchestrator Plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/orchestrator) on GitHub.
npm package: @janus-idp/backstage-plugin-orchestrator-common
Description: Welcome to the common package for the Orchestrator plugin!
Author: The Backstage Community
Latest version: 1.16.101

# Orchestrator Common Plugin for Backstage

Welcome to the common package for the Orchestrator plugin!

For more information about the Orchestrator plugin, see the [Orchestrator Plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/orchestrator) on GitHub.
npm package: @janus-idp/backstage-plugin-orchestrator-form-api
Description: library for orchestrator form api, enabling creating a factory to extend the workflow execution form
Latest version: 1.0.102

# @janus-idp/backstage-plugin-orchestrator-form-api

This library provides the interface for implementing a factory providing a decorator to customize the orchestrator workflow execution form.

Details available [here](../orchestrator/docs/extensibleForm.md).
npm package: @janus-idp/backstage-plugin-orchestrator-form-react
Description: Web library for the orchestrator-form plugin
Latest version: 1.0.103

# backstage-plugin-orchestrator-form-react

This library provides the form component used in the workflow execution form. It is decoupled from the orchestrator plugin to allow plugins implementing the OrchestratorFormApi test the behavior in a simple backstage developer environment.

Details available [here](../orchestrator/docs/extensibleForm.md).
npm package: @janus-idp/backstage-plugin-quay-common
Description: Welcome to the quay-common plugin!
Author: Red Hat
Latest version: 1.3.1

# Quay Common plugin

Welcome to the quay-common plugin!

This plugin contains common utilities for the quay plugin.

# Quay plugin for Backstage

The Quay plugin displays the information about your container images within the Quay registry in your Backstage application.

For more information about Quay plugin, see the [Quay plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/quay) on GitHub.
npm package: @janus-idp/backstage-plugin-rbac-common
Description: Common functionalities for the rbac-common plugin
Author: Red Hat
Latest version: 1.12.1

# @janus-idp/backstage-plugin-rbac-common

The RBAC plugin provides your Backstage instance with role based access control and policy management.

For more information about RBAC plugin, see the [RBAC plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/rbac-backend) on GitHub.
npm package: @janus-idp/backstage-plugin-rbac-node
Description: Node.js library for the rbac plugin
Author: Red Hat
Latest version: 1.8.1

# @backstage/plugin-rbac-node

Welcome to the Node.js library package for the rbac plugin!

For more information about RBAC plugin, see the [RBAC plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/rbac-backend) on GitHub.

## Version bump history

- Bumped to 1.0.6 to re-release changes meant for 1.0.5, which failed due to timeout - see https://github.com/janus-idp/backstage-plugins/issues/1467
npm package: @janus-idp/backstage-plugin-tekton-common
Description: Welcome to the tekton-common plugin!
Author: Red Hat
Latest version: 1.3.1

# Tekton Common plugin

Welcome to the tekton-common plugin!

This plugin contains common utilities for the tekton plugin.

# Tekton plugin for Backstage

The Tekton plugin enables you to visualize the `PipelineRun` resources available on the Kubernetes cluster.

For more information about Tekton plugin, see the [Tekton plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/tekton) on GitHub.
npm package: @janus-idp/backstage-plugin-topology-common
Description: Common functionalities for the topology plugin
Author: Red Hat
Latest version: 1.6.1

# Topology plugin for Backstage

The Topology plugin enables you to visualize the workloads such as Deployment, Job, Daemonset, Statefulset, CronJob, and Pods powering any service on the Kubernetes cluster.

For more information about Topology plugin, see the [Topology plugin documentation](https://github.com/janus-idp/backstage-plugins/tree/main/plugins/topology) on GitHub.
npm package: @janus-idp/backstage-scaffolder-backend-module-kubernetes
Description: The kubernetes module for @backstage/plugin-scaffolder-backend
Author: The Backstage Community
Latest version: 2.3.0

# Kubernetes actions for Backstage

This module provides [Backstage](https://backstage.io/) template [actions](https://backstage.io/docs/features/software-templates/builtin-actions) for [Kubernetes](https://kubernetes.io/docs/home/).

The following actions are currently supported in this module:

- Create a kubernetes namespace

## Installation

Run the following command to install the action package in your Backstage project

```bash
yarn workspace backend add @janus-idp/backstage-scaffolder-backend-module-kubernetes
```

### Installing the action on the backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(
  import('@janus-idp/backstage-scaffolder-backend-module-kubernetes'),
);

backend.start();
```

## Configuration

Add the Kubernetes actions to your templates, see the [example](./examples/templates/01-kubernetes-template.yaml) file in this repository for complete usage examples

```yaml
action: kubernetes:create-namespace
id: create-kubernetes-namespace
name: Create kubernetes namespace
input:
  namespace: foo
  clusterRef: bar
  token: TOKEN
  skipTLSVerify: false
  caData: Zm9v
  labels: app.io/type=ns; app.io/managed-by=org;
```

## Usage

### Action: kubernetes:create-namespace

#### Input

| Parameter Name |  Type   | Required | Description                                         | Example                                |
| -------------- | :-----: | :------: | --------------------------------------------------- | -------------------------------------- |
| namespace      | string  |   Yes    | Kubernetes namespace name                           | foo                                    |
| clusterRef     | string  |    No    | Cluster resource entity reference from the catalog  | bar                                    |
| url            | string  |    No    | API url of the kubernetes cluster                   | <https://api.foo.redhat.com:6443>      |
| token          | string  |    No    | Kubernetes API bearer token used for authentication |                                        |
| skipTLSVerify  | boolean |    No    | If true, certificate verification is skipped        | false                                  |
| caData         | string  |    No    | Base64 encoded certificate data                     |                                        |
| label          | string  |    No    | Labels that will be applied to the namespace        | app.io/type=ns; app.io/managed-by=org; |

#### Output

This action doesn't have any outputs.
npm package: @janus-idp/backstage-scaffolder-backend-module-kubernetes-dynamic
Description: The kubernetes module for @backstage/plugin-scaffolder-backend
Author: The Backstage Community
Latest version: 2.0.3

# Kubernetes actions for Backstage

This module provides [Backstage](https://backstage.io/) template [actions](https://backstage.io/docs/features/software-templates/builtin-actions) for [Kubernetes](https://kubernetes.io/docs/home/).

The following actions are currently supported in this module:

- Create a kubernetes namespace

## Installation

Run the following command to install the action package in your Backstage project

```bash
yarn workspace backend add @janus-idp/backstage-scaffolder-backend-module-kubernetes
```

### Installing the action on the backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(
  import('@janus-idp/backstage-scaffolder-backend-module-kubernetes'),
);

backend.start();
```

## Configuration

Add the Kubernetes actions to your templates, see the [example](./examples/templates/01-kubernetes-template.yaml) file in this repository for complete usage examples

```yaml
action: kubernetes:create-namespace
id: create-kubernetes-namespace
name: Create kubernetes namespace
input:
  namespace: foo
  clusterRef: bar
  token: TOKEN
  skipTLSVerify: false
  caData: Zm9v
  labels: app.io/type=ns; app.io/managed-by=org;
```

## Usage

### Action: kubernetes:create-namespace

#### Input

| Parameter Name |  Type   | Required | Description                                         | Example                                |
| -------------- | :-----: | :------: | --------------------------------------------------- | -------------------------------------- |
| namespace      | string  |   Yes    | Kubernetes namespace name                           | foo                                    |
| clusterRef     | string  |    No    | Cluster resource entity reference from the catalog  | bar                                    |
| url            | string  |    No    | API url of the kubernetes cluster                   | <https://api.foo.redhat.com:6443>      |
| token          | string  |    No    | Kubernetes API bearer token used for authentication |                                        |
| skipTLSVerify  | boolean |    No    | If true, certificate verification is skipped        | false                                  |
| caData         | string  |    No    | Base64 encoded certificate data                     |                                        |
| label          | string  |    No    | Labels that will be applied to the namespace        | app.io/type=ns; app.io/managed-by=org; |

#### Output

This action doesn't have any outputs.
npm package: @janus-idp/backstage-scaffolder-backend-module-regex
Description: The regex custom actions
Author: Red Hat
Latest version: 2.2.1

# Regex actions for Backstage

This plugin provides [Backstage](https://backstage.io/) template [actions](https://backstage.io/docs/features/software-templates/builtin-actions) for [RegExp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp).

The following actions are currently supported in this plugin:

- [String replacement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace)

## Prerequisites

- A [Backstage](https://backstage.io/docs/getting-started/) project

## Installation

Run the following command to install the action package in your Backstage project:

```console
yarn workspace backend add @janus-idp/backstage-scaffolder-backend-module-regex
```

### Installing the action on the new backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-scaffolder-backend-module-regex'));

backend.start();
```

## Usage

### Action : regex:replace

| Parameter Name             |   Type   | Required | Description                                                                     |
| -------------------------- | :------: | :------: | ------------------------------------------------------------------------------- |
| `regExps[].pattern`        |  string  |   Yes    | The regex pattern to match the value like in `String.prototype.replace()`       |
| `regExps[].flags`          | string[] |    No    | The flags for the regex, possible values are: `g`, `m`, `i`, `y`, `u`, `s`, `d` |
| `regExps[].replacement`    |  string  |   Yes    | The replacement value for the regex like in `String.prototype.replace()`        |
| `regExps[].values[].key`   |  string  |   Yes    | The key to access the regex value                                               |
| `regExps[].values[].value` |  string  |   Yes    | The input value of the regex                                                    |

> **Warning**
>
> The `regExps[].pattern` string cannot have a leading or trailing forward slash
>
> The `regExps[].values[].key` values must all be unique since the key is used for `values.<key>` to access the return value

#### Output

| Name           |  Type  | Description                                                                                        |
| -------------- | :----: | -------------------------------------------------------------------------------------------------- |
| `values.<key>` | string | A new string, with one, some, or all matches of the pattern replaced by the specified replacement. |
npm package: @janus-idp/backstage-scaffolder-backend-module-regex-dynamic
Description: The regex custom actions
Author: Red Hat
Latest version: 2.0.4

# Regex actions for Backstage

This plugin provides [Backstage](https://backstage.io/) template [actions](https://backstage.io/docs/features/software-templates/builtin-actions) for [RegExp](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp).

The following actions are currently supported in this plugin:

- [String replacement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace)

## Prerequisites

- A [Backstage](https://backstage.io/docs/getting-started/) project

## Installation

Run the following command to install the action package in your Backstage project:

```console
yarn workspace backend add @janus-idp/backstage-scaffolder-backend-module-regex
```

### Installing the action on the new backend

Add the following to your `packages/backend/src/index.ts` file:

```ts title="packages/backend/src/index.ts"
const backend = createBackend();

// Add the following line
backend.add(import('@janus-idp/backstage-scaffolder-backend-module-regex'));

backend.start();
```

## Usage

### Action : regex:replace

| Parameter Name             |   Type   | Required | Description                                                                     |
| -------------------------- | :------: | :------: | ------------------------------------------------------------------------------- |
| `regExps[].pattern`        |  string  |   Yes    | The regex pattern to match the value like in `String.prototype.replace()`       |
| `regExps[].flags`          | string[] |    No    | The flags for the regex, possible values are: `g`, `m`, `i`, `y`, `u`, `s`, `d` |
| `regExps[].replacement`    |  string  |   Yes    | The replacement value for the regex like in `String.prototype.replace()`        |
| `regExps[].values[].key`   |  string  |   Yes    | The key to access the regex value                                               |
| `regExps[].values[].value` |  string  |   Yes    | The input value of the regex                                                    |

> **Warning**
>
> The `regExps[].pattern` string cannot have a leading or trailing forward slash
>
> The `regExps[].values[].key` values must all be unique since the key is used for `values.<key>` to access the return value

#### Output

| Name           |  Type  | Description                                                                                        |
| -------------- | :----: | -------------------------------------------------------------------------------------------------- |
| `values.<key>` | string | A new string, with one, some, or all matches of the pattern replaced by the specified replacement. |