Plugin configuration

March 10, 2026 ยท View on GitHub

The following configuration options are available for your app-config.yaml:

qeta:
  route: custom-qeta # Optional: set if plugin is mounted at a custom route
  allowAnonymous: true
  allowMetadataInput: false
  permissions: false
  notifications: true
  notificationSettings:
    onCreate:
      question: ['user:default/guest', 'group:default/qeta-moderators']
      article: ['user:default/guest']
    onDelete:
      question: ['group:default/qeta-moderators']
  entities:
    kinds: ['Component']
    max: 3
  tags:
    allowCreation: true
    allowedTags:
      - test
      - tag2
    max: 5
  mentions:
    supportedKinds:
      - User
      - Group
  storage:
    disabled: true
    type: database
    folder: /tmp/my-attachments
  contentHealth:
    postsOlderThan: { months: 6 }

See also config values for AI module here.

The allowed configuration values are:

Global

  • route, string, (optional) set a custom frontend route for the Q&A plugin. If you mount the Qeta plugin at a custom path in your Backstage app (e.g. /custom-qeta), set route: custom-qeta to ensure notifications and links use the correct path (no leading or ending forward slash). Default is qeta.
  • allowAnonymous, boolean, allows anonymous users to post questions and answers anonymously. This enables also guest users to be able to post. Adds checkbox to the forms to post as anonymous. Default is false
  • allowMetadataInput, boolean, allows created and user fields to be passed when creating questions, answers, or comments. Useful if migrating information into the system. Default is false
  • allowGlobalEdits, boolean, allows editing other users' questions and answers by any user. Only if permission framework is not in use. Default is false.
  • moderators, string array, list of moderator groups or users who can edit, delete questions/answers/comments and mark answers correct for any question. Only if permissions framework is not in use.
  • permissions, boolean, enable or disable usage of Backstage permission framework, defaults to false
  • notifications, boolean, enable or disable usage of Backstage notifications, defaults to true

Notification settings

  • onCreate.question, string array, list of users or groups to notify when a question is created
  • onCreate.article, string array, list of users or groups to notify when an article is created
  • onCreate.link, string array, list of users or groups to notify when a link is created
  • onCreate.answer, string array, list of users or groups to notify when an answer is created
  • onCreate.comment, string array, list of users or groups to notify when a comment is created
  • onCreate.collection, string array, list of users or groups to notify when a collection is created
  • onDelete.question, string array, list of users or groups to notify when a question is deleted
  • onDelete.article, string array, list of users or groups to notify when an article is deleted
  • onDelete.link, string array, list of users or groups to notify when a link is deleted
  • onDelete.answer, string array, list of users or groups to notify when an answer is deleted
  • onDelete.collection, string array, list of users or groups to notify when a collection is deleted
  • onUpdate.question, string array, list of users or groups to notify when a question is updated
  • onUpdate.article, string array, list of users or groups to notify when an article is updated
  • onUpdate.link, string array, list of users or groups to notify when a link is updated
  • onUpdate.collection, string array, list of users or groups to notify when a collection is updated

Entities

  • entities.kinds, string array, what kind of catalog entities can be attached to a post. Default is ['Component']
  • entities.max, integer, maximum number of entities to attach to a post. Default is 3
  • entities.min, integer, minimum number of entities that has to be attached to a post. Default is 0.

Tags

  • tags.allowCreation, boolean, determines whether it's possible to add new tags when creating a post. Only affects if permissions are not enabled. Moderators can always add tags from the UI even if this is false. Default is true
  • tags.allowedTags, string array, list of allowed tags to be attached to posts. Only used if tags.allowCreation is set to false.
  • tags.max, integer, maximum number of tags to be attached to a post. Default is 5.
  • tags.min, integer, minimum number of tags that has to be attached to a post. Default is 0.

Storage

  • storage.type, string, what kind of storage is used to upload images used in questions. Default is database. Available values are 'filesystem', 'database', 's3' and 'azure'.
  • storage.maxSizeImage, number, the maximum allowed size of upload files in bytes. Default is 2500000
  • storage.folder, string, what folder is used to storage temporarily images to convert and send to frontend. Default is /tmp/backstage-qeta-images
  • storage.allowedMimeTypes, string[], A list of allowed upload formats. Default: png,jpg,jpeg,gif
  • storage.disabled, boolean, If for some specific scenario you want to disable the upload of images. Default false
  • storage.bucket, string, bucket ARN for S3 storage, required for S3 storage
  • storage.endpoint, string, endpoint uri to send requests to. if not set, the default endpoint is built from the configured region, optional
  • storage.httpsProxy, string, this allows docs to be published and read from behind a proxy, optional
  • storage.forcePathStyle, boolean, allows other providers to be used like localstack, minio, wasabi (and possibly others), optional
  • storage.maxAttempts, number, number of attempts to try, optional
  • storage.accessKeyId, string, access key ID for S3 storage, optional
  • storage.secretAccessKey, string, secret access key for S3 storage, optional
  • storage.region, string, region for S3 storage, optional
  • storage.sessionToken, string, AWS session token, optional
  • storage.blobStorageAccountName, string, Azure Blob Storage account name, optional
  • storage.blobStorageConnectionString, string, Connection String to Azure Blob Storage, optional
  • storage.blobStorageContainer, string, Azure Blob Storage container name, optional. Default backstage-qeta-images

Note: For Azure Blob Storage you can either use passwordless authentication by configuring blobStorageAccountName. This requires your Backstage backend to run as an Azure Managed Identity. Alternatively, you can use blobStorageConnectionString to authenticate with a connection string.

Content Health

  • contentHealth.postsOlderThan, HumanDuration object (e.g. { months: 6 }). Posts older than this duration will be marked as needing review if they haven't been updated recently. Default is { months: 6 }.

Post History

  • history.enabled, boolean, enable or disable revision tracking entirely. Default is false.
  • history.retentionDays, number, how many days to keep post revisions before the cleanup job deletes them. Default is 180.
  • history.enabledContent, string array, list of content types that should have revision tracking. Possible values: article, question, link. Default is ['article'].
  • history.saveAttachments, boolean, when true, attachment UUIDs linked to the post are saved in revision snapshots and re-linked on restore. Default is false.

The cleanup job runs daily at 3:00 AM (not configurable). See Post History for full documentation of the revision tracking feature.

Additionally, there are more config values for the OpenAI module.