Container Image Registry for Quay logo

Backstage Container Image Registry for Quay Plugin

Created by Red Hat

Container Image Registry for Quay gives teams a secure home for container images. It stores images, runs security scans, tracks tags, and exposes rich metadata. The Quay plugin brings that context into Backstage so you do not have to jump between tools to answer simple release and security questions.

Once added, the plugin adds an Image Registry tab to service pages in Backstage. It reads your repository slug and shows the images that belong to that service. You can see tags, last modified time, size, expiry, and the image manifest. Security scan status appears next to each image. Click through to view findings with advisory links, severity, package name, and current plus fixed versions. From there you can follow the advisory to learn more and decide what to patch.

Common use cases include checking image health before a release, watching for vulnerable tags across services, and giving product teams a quick view of what is running in each environment. Platform teams get a single place to review images tied to catalog entities. The plugin works with public or private Quay repositories and fits self hosted Backstage setups.

Installation Instructions

These instructions apply to self-hosted Backstage only.

Install the frontend plugin

  1. Add the Quay plugin to the app workspace

    Copy
    yarn workspace app add @backstage-community/plugin-quay
  2. Add the Quay tab to the service entity page

    Edit packages/app/src/components/catalog/EntityPage.tsx

    Copy
    import { isQuayAvailable, QuayPage } from '@backstage-community/plugin-quay';
    import { EntityLayout } from '@backstage/plugin-catalog';
    // other imports
    
    const serviceEntityPage = (
      <EntityLayout>
        {/* other routes */}
        <EntityLayout.Route if={isQuayAvailable} path="/quay" title="Quay">
          <QuayPage />
        </EntityLayout.Route>
      </EntityLayout>
    );

Configure the proxy

  1. Point the Backstage proxy to your Quay instance

    Edit app-config.yaml

    Copy
    proxy:
      endpoints:
        '/quay/api':
          target: 'https://quay.io'
          credentials: require
          headers:
            X-Requested-With: 'XMLHttpRequest'
            # Authorization: 'Bearer <YOUR TOKEN>'
          changeOrigin: true
          secure: true
    
    quay:
      uiUrl: 'https://quay.io'

    The Authorization header is optional. Use it if you need to access a private Quay repository with a token.

Annotate your entities

  1. Add the Quay repository slug to each entity that should show the Quay tab

    Example catalog-info.yaml

    Copy
    apiVersion: backstage.io/v1alpha1
    kind: Component
    metadata:
      name: my-service
      annotations:
        quay.io/repository-slug: my-org-or-user/my-repository
    spec:
      type: service
      owner: my-team
      lifecycle: production

Where the UI shows up

  1. Open any service entity page that has the annotation
  2. Use the Quay tab to view image tags and security scan details

Backend plugin option

If you need permissions or extra server features, use the Quay backend plugin instead of the proxy. The frontend steps above stay the same. Replace the proxy setup with the backend plugin. Follow the backend plugin documentation for its package name, install command, config, and router wiring.

New backend system or old backend system

You can use the proxy setup with either backend system. No backend code changes are needed when you use the proxy. If you switch to the backend plugin later, follow its documentation for both the new backend system and the old backend system wiring.

Changelog

This changelog is produced from commits made to the Container Image Registry for Quay plugin since 8 months ago, and based on the code located here. It may not contain information about all commits. Releases and version bumps are intentionally omitted. This changelog is generated by AI.

Features

  • Improve error messages and logs when Quay denies access. #4370 3 months ago
  • Add scalprum configuration for dynamic plugin hosts. #3173 7 months ago

Bug Fixes

  • Fix link to Quay repo when only apiUrl is set. Update example config to use apiKey instead of uiKey. #3486 6 months ago
  • Replace byte size formatting with a local implementation that matches prior output. #4254 3 months ago

Improvements

  • Align date formatting utility with ADR012 using Luxon. Keep the same function behavior and output. #4641 2 months ago

Maintenance

  • Remove product specific theme from dev dependencies and the dev app. #4800 2 months ago
  • Remove unused dev dependency entries. #3441 6 months ago
  • Tidy vendor and Janus references in package metadata. #3476 6 months ago
  • Remove usage of the spotify prettier config. #3777 5 months ago
  • Remove support and lifecycle keywords from plugin metadata. #4302 3 months ago

Dependencies

  • Update start server and test to v2.1.2. #5279 3 days ago
  • Update start server and test to v2.0.13. #4895 2 months ago
  • Update start server and test to v2.0.12. #4028 4 months ago
  • Update start server and test to v2.0.11. #3287 6 months ago
  • Update start server and test to v2.0.10. #2821 8 months ago
  • Update Playwright test to v1.51.1. #3276 6 months ago
  • Update Playwright test to v1.51.0. #2921 7 months ago
  • Update shared react library to a newer release. #2871 8 months ago
  • Remove prettier from plugin dev dependencies since it is defined at the workspace level. #3012 7 months ago

Set up Backstage in minutes with Roadie