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), setroute: custom-qetato ensure notifications and links use the correct path (no leading or ending forward slash). Default isqeta.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 isfalseallowMetadataInput, boolean, allowscreatedanduserfields to be passed when creating questions, answers, or comments. Useful if migrating information into the system. Default isfalseallowGlobalEdits, boolean, allows editing other users' questions and answers by any user. Only if permission framework is not in use. Default isfalse.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 falsenotifications, 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 createdonCreate.article, string array, list of users or groups to notify when an article is createdonCreate.link, string array, list of users or groups to notify when a link is createdonCreate.answer, string array, list of users or groups to notify when an answer is createdonCreate.comment, string array, list of users or groups to notify when a comment is createdonCreate.collection, string array, list of users or groups to notify when a collection is createdonDelete.question, string array, list of users or groups to notify when a question is deletedonDelete.article, string array, list of users or groups to notify when an article is deletedonDelete.link, string array, list of users or groups to notify when a link is deletedonDelete.answer, string array, list of users or groups to notify when an answer is deletedonDelete.collection, string array, list of users or groups to notify when a collection is deletedonUpdate.question, string array, list of users or groups to notify when a question is updatedonUpdate.article, string array, list of users or groups to notify when an article is updatedonUpdate.link, string array, list of users or groups to notify when a link is updatedonUpdate.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 is3entities.min, integer, minimum number of entities that has to be attached to a post. Default is0.
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 istruetags.allowedTags, string array, list of allowed tags to be attached to posts. Only used iftags.allowCreationis set tofalse.tags.max, integer, maximum number of tags to be attached to a post. Default is5.tags.min, integer, minimum number of tags that has to be attached to a post. Default is0.
Storage
storage.type, string, what kind of storage is used to upload images used in questions. Default isdatabase. Available values are 'filesystem', 'database', 's3' and 'azure'.storage.maxSizeImage, number, the maximum allowed size of upload files in bytes. Default is2500000storage.folder, string, what folder is used to storage temporarily images to convert and send to frontend. Default is/tmp/backstage-qeta-imagesstorage.allowedMimeTypes, string[], A list of allowed upload formats. Default:png,jpg,jpeg,gifstorage.disabled, boolean, If for some specific scenario you want to disable the upload of images. Defaultfalsestorage.bucket, string, bucket ARN for S3 storage, required for S3 storagestorage.endpoint, string, endpoint uri to send requests to. if not set, the default endpoint is built from the configured region, optionalstorage.httpsProxy, string, this allows docs to be published and read from behind a proxy, optionalstorage.forcePathStyle, boolean, allows other providers to be used like localstack, minio, wasabi (and possibly others), optionalstorage.maxAttempts, number, number of attempts to try, optionalstorage.accessKeyId, string, access key ID for S3 storage, optionalstorage.secretAccessKey, string, secret access key for S3 storage, optionalstorage.region, string, region for S3 storage, optionalstorage.sessionToken, string, AWS session token, optionalstorage.blobStorageAccountName, string, Azure Blob Storage account name, optionalstorage.blobStorageConnectionString, string, Connection String to Azure Blob Storage, optionalstorage.blobStorageContainer, string, Azure Blob Storage container name, optional. Defaultbackstage-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 useblobStorageConnectionStringto 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 isfalse.history.retentionDays, number, how many days to keep post revisions before the cleanup job deletes them. Default is180.history.enabledContent, string array, list of content types that should have revision tracking. Possible values:article,question,link. Default is['article'].history.saveAttachments, boolean, whentrue, attachment UUIDs linked to the post are saved in revision snapshots and re-linked on restore. Default isfalse.
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.