[id="all-registry-configs_{context}"]
= {registry} configuration options

The following {registry} configuration options are available for each component category:

== 
. configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.app.date`
|`string`
|
|`3.0.4`
|
|`apicurio.app.description`
|`string`
|
|`3.0.4`
|
|`apicurio.app.name`
|`string`
|
|`3.0.4`
|
|`apicurio.app.version`
|`string`
|
|`3.0.4`
|
|===

== api
.api configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.api.errors.include-stack-in-response`
|`boolean`
|`false`
|`2.1.4.Final`
|Include stack trace in errors responses
|`apicurio.apis.v3.base-href`
|`string`
|`_`
|`2.5.0.Final`
|API base href (URI)
|`apicurio.disable.apis`
|`optional<list<string>>`
|
|`2.0.0.Final`
|Disable APIs
|===

== auth
.auth configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.auth.admin-override.claim`
|`string`
|`org-admin`
|`2.1.0.Final`
|Auth admin override claim
|`apicurio.auth.admin-override.claim-value`
|`string`
|`true`
|`2.1.0.Final`
|Auth admin override claim value
|`apicurio.auth.admin-override.enabled`
|`boolean`
|`false`
|`2.1.0.Final`
|Auth admin override enabled
|`apicurio.auth.admin-override.from`
|`string`
|`token`
|`2.1.0.Final`
|Auth admin override from
|`apicurio.auth.admin-override.role`
|`string`
|`sr-admin`
|`2.1.0.Final`
|Auth admin override role
|`apicurio.auth.admin-override.type`
|`string`
|`role`
|`2.1.0.Final`
|Auth admin override type
|`apicurio.auth.admin-override.user`
|`string`
|`admin`
|`3.0.0`
|Auth admin override user name
|`apicurio.auth.anonymous-read-access.enabled`
|`boolean [dynamic]`
|`false`
|`2.1.0.Final`
|Anonymous read access
|`apicurio.auth.authenticated-read-access.enabled`
|`boolean [dynamic]`
|`false`
|`2.1.4.Final`
|Authenticated read access
|`apicurio.auth.owner-only-authorization`
|`boolean [dynamic]`
|`false`
|`2.0.0.Final`
|Artifact owner-only authorization
|`apicurio.auth.owner-only-authorization.limit-group-access`
|`boolean [dynamic]`
|`false`
|`2.1.0.Final`
|Artifact group owner-only authorization
|`apicurio.auth.role-based-authorization`
|`boolean`
|`false`
|`2.1.0.Final`
|Enable role based authorization
|`apicurio.auth.role-source`
|`string`
|`token`
|`2.1.0.Final`
|Auth roles source
|`apicurio.auth.role-source.header.name`
|`string`
|
|`2.4.3.Final`
|Header authorization name
|`apicurio.auth.roles.admin`
|`string`
|`sr-admin`
|`2.0.0.Final`
|Auth roles admin
|`apicurio.auth.roles.developer`
|`string`
|`sr-developer`
|`2.1.0.Final`
|Auth roles developer
|`apicurio.auth.roles.readonly`
|`string`
|`sr-readonly`
|`2.1.0.Final`
|Auth roles readonly
|`apicurio.authn.audit.log.prefix`
|`string`
|`audit`
|`2.2.6`
|Prefix used for application audit logging.
|`apicurio.authn.basic-client-credentials.cache-expiration`
|`integer`
|`10`
|`2.2.6.Final`
|Default client credentials token expiration time in minutes.
|`apicurio.authn.basic-client-credentials.cache-expiration-offset`
|`integer`
|`10`
|`2.5.9.Final`
|Client credentials token expiration offset from JWT expiration, in seconds.
|`apicurio.authn.basic-client-credentials.enabled`
|`boolean [dynamic]`
|`false`
|`2.1.0.Final`
|Enable basic auth client credentials
|`apicurio.authn.basic.scope`
|`optional<string>`
|
|`2.5.0.Final`
|Client credentials scope.
|`quarkus.http.auth.basic`
|`boolean`
|`false`
|`3.0.0`
|Enable basic auth
|`quarkus.oidc.client-id`
|`string`
|
|`2.0.0.Final`
|Client identifier used by the server for authentication.
|`quarkus.oidc.client-secret`
|`optional<string>`
|
|`2.1.0.Final`
|Client secret used by the server for authentication.
|`quarkus.oidc.tenant-enabled`
|`boolean`
|`false`
|`2.0.0.Final`
|Enable auth
|`quarkus.oidc.token-path`
|`string`
|
|`2.1.0.Final`
|Authentication server token endpoint.
|===

== cache
.cache configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.config.cache.enabled`
|`boolean`
|`true`
|`2.2.2.Final`
|Registry cache enabled
|===

== ccompat
.ccompat configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.ccompat.group-concat.enabled`
|`boolean`
|`false`
|`2.6.2.Final`
|Enable group support via concatenation in subject (compatibility API)
|`apicurio.ccompat.group-concat.separator`
|`string`
|`:`
|`2.6.2.Final`
|Separator to use when group concatenation is enabled (compatibility API)
|`apicurio.ccompat.legacy-id-mode.enabled`
|`boolean [dynamic]`
|`false`
|`2.0.2.Final`
|Legacy ID mode (compatibility API)
|`apicurio.ccompat.max-subjects`
|`integer [dynamic]`
|`1000`
|`2.4.2.Final`
|Maximum number of Subjects returned (compatibility API)
|`apicurio.ccompat.use-canonical-hash`
|`boolean [dynamic]`
|`false`
|`2.3.0.Final`
|Canonical hash mode (compatibility API)
|===

== download
.download configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.download.href.ttl.seconds`
|`long [dynamic]`
|`30`
|`2.1.2.Final`
|Download link expiry
|===

== gitops
.gitops configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.gitops.id`
|`string`
|
|`3.0.0`
|Identifier of this Registry instance. Only data that references this identifier will be loaded.
|`apicurio.gitops.repo.origin.branch`
|`string`
|`main`
|`3.0.0`
|Name of the branch in the remote git repository containing data to be loaded.
|`apicurio.gitops.repo.origin.uri`
|`string`
|
|`3.0.0`
|URI of the remote git repository containing data to be loaded.
|`apicurio.gitops.workdir`
|`string`
|`/tmp/apicurio-registry-gitops`
|`3.0.0`
|Path to GitOps working directory, which is used to store the local git repository.
|===

== health
.health configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.liveness.errors.ignored`
|`optional<list<string>>`
|
|`1.2.3.Final`
|Ignored liveness errors
|`apicurio.metrics.persistence-exception-liveness-check.counter-reset-window-duration.seconds`
|`integer`
|`60`
|`1.0.2.Final`
|Counter reset window duration of persistence liveness check
|`apicurio.metrics.persistence-exception-liveness-check.error-threshold`
|`integer`
|`1`
|`1.0.2.Final`
|Error threshold of persistence liveness check
|`apicurio.metrics.persistence-exception-liveness-check.logging.disabled`
|`boolean`
|`false`
|`2.0.0.Final`
|Disable logging of persistence liveness check
|`apicurio.metrics.persistence-exception-liveness-check.status-reset-window-duration.seconds`
|`integer`
|`300`
|`1.0.2.Final`
|Status reset window duration of persistence liveness check
|`apicurio.metrics.persistence-timeout-readiness-check.error-threshold`
|`integer`
|`5`
|`1.0.2.Final`
|Error threshold of persistence readiness check
|`apicurio.metrics.persistence-timeout-readiness-check.timeout.seconds`
|`integer`
|`15`
|`1.0.2.Final`
|Timeout of persistence readiness check
|`apicurio.metrics.persitence-timeout-readiness-check.status-reset-window-duration.seconds`
|`integer`
|`300`
|`1.0.2.Final`
|Status reset window duration of persistence readiness check
|`apicurio.metrics.resonse-error-liveness-check.counter-reset-window-duration.seconds`
|`integer`
|`60`
|`1.0.2.Final`
|Counter reset window duration of response liveness check
|`apicurio.metrics.response-error-liveness-check.counter-reset-window-duration.seconds`
|`integer`
|`60`
|`1.0.2.Final`
|Counter reset window duration of persistence readiness check
|`apicurio.metrics.response-error-liveness-check.disabled`
|`boolean`
|`false`
|`2.0.0.Final`
|Disable logging of response liveness check
|`apicurio.metrics.response-error-liveness-check.error-threshold`
|`integer`
|`1`
|`1.0.2.Final`
|Error threshold of response liveness check
|`apicurio.metrics.response-error-liveness-check.status-reset-window-duration.seconds`
|`integer`
|`300`
|`1.0.2.Final`
|Status reset window duration of response liveness check
|`apicurio.metrics.response-timeout-readiness-check.counter-reset-window-duration.seconds`
|`instance<integer>`
|`60`
|`1.0.2.Final`
|Counter reset window duration of response readiness check
|`apicurio.metrics.response-timeout-readiness-check.error-threshold`
|`instance<integer>`
|`1`
|`1.0.2.Final`
|Error threshold of response readiness check
|`apicurio.metrics.response-timeout-readiness-check.timeout.seconds`
|`instance<integer>`
|`10`
|`1.0.2.Final`
|Timeout of response readiness check
|`apicurio.metrics.response-timeout-rediness-check.status-reset-window-duration.seconds`
|`instance<integer>`
|`300`
|`1.0.2.Final`
|Status reset window duration of response readiness check
|`apicurio.storage.metrics.cache.check-period.ms`
|`long`
|`30000`
|`2.1.0.Final`
|Storage metrics cache check period
|===

== import
.import configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.import.preserveContentId`
|`boolean`
|`true`
|`3.0.0`
|When set to true, content IDs from the import file will be used (otherwise new IDs will be generated).  Defaults to 'true'.
|`apicurio.import.preserveGlobalId`
|`boolean`
|`true`
|`3.0.0`
|When set to true, global IDs from the import file will be used (otherwise new IDs will be generated).  Defaults to 'true'.
|`apicurio.import.requireEmptyRegistry`
|`boolean`
|`true`
|`3.0.0`
|When set to true, importing data will only work when the registry is empty.  Defaults to 'true'.
|`apicurio.import.url`
|`optional<url>`
|
|`2.1.0.Final`
|The import URL
|`apicurio.import.work-dir`
|`string`
|
|`3.0.0`
|Temporary work directory to use when importing data.
|===

== limits
.limits configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.limits.config.max-artifact-labels`
|`long`
|`-1`
|`2.2.3.Final`
|Max artifact labels
|`apicurio.limits.config.max-artifact-properties`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifact properties
|`apicurio.limits.config.max-artifacts`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifacts
|`apicurio.limits.config.max-description-length`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifact description length
|`apicurio.limits.config.max-label-size.bytes`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifact label size
|`apicurio.limits.config.max-name-length`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifact name length
|`apicurio.limits.config.max-property-key-size.bytes`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifact property key size
|`apicurio.limits.config.max-property-value-size.bytes`
|`long`
|`-1`
|`2.1.0.Final`
|Max artifact property value size
|`apicurio.limits.config.max-requests-per-second`
|`long`
|`-1`
|`2.2.3.Final`
|Max artifact requests per second
|`apicurio.limits.config.max-schema-size.bytes`
|`long`
|`-1`
|`2.2.3.Final`
|Max schema size (bytes)
|`apicurio.limits.config.max-total-schemas`
|`long`
|`-1`
|`2.1.0.Final`
|Max total schemas
|`apicurio.limits.config.max-versions-per-artifact`
|`long`
|`-1`
|`2.1.0.Final`
|Max versions per artifacts
|`apicurio.storage.metrics.cache.max-size`
|`long`
|`1000`
|`2.4.1.Final`
|Storage metrics cache max size.
|===

== redirects
.redirects configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.redirects`
|`map<string, string>`
|
|`2.1.2.Final`
|Registry redirects
|`apicurio.redirects.enabled`
|`boolean`
|
|`2.1.2.Final`
|Enable redirects
|`apicurio.url.override.host`
|`optional<string>`
|
|`2.5.0.Final`
|Override the hostname used for generating externally-accessible URLs. The host and port overrides are useful when deploying Registry with HTTPS passthrough Ingress or Route. In cases like these, the request URL (and port) that is then re-used for redirection does not belong to actual external URL used by the client, because the request is proxied. The redirection then fails because the target URL is not reachable.
|`apicurio.url.override.port`
|`optional<integer>`
|
|`2.5.0.Final`
|Override the port used for generating externally-accessible URLs.
|===

== rest
.rest configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.rest.artifact.download.max-size.bytes`
|`int`
|`1000000`
|`2.2.6`
|Max size of the artifact allowed to be downloaded from URL
|`apicurio.rest.artifact.download.ssl-validation.disabled`
|`boolean`
|`false`
|`2.2.6`
|Skip SSL validation when downloading artifacts from URL
|`apicurio.rest.deletion.artifact-version.enabled`
|`boolean [dynamic]`
|`false`
|`2.4.2`
|Enables artifact version deletion
|`apicurio.rest.deletion.artifact.enabled`
|`boolean [dynamic]`
|`false`
|`3.0.0`
|Enables artifact deletion
|`apicurio.rest.deletion.group.enabled`
|`boolean [dynamic]`
|`false`
|`3.0.0`
|Enables group deletion
|`apicurio.rest.mutability.artifact-version-content.enabled`
|`boolean [dynamic]`
|`false`
|`3.0.2`
|Enables artifact version mutability
|`apicurio.rest.search-results.labels.max-size.bytes`
|`int`
|`512`
|`3.0.3`
|Max size of the labels (in bytes) per item from within search results
|===

== semver
.semver configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.semver.branching.coerce`
|`boolean [dynamic]`
|`false`
|`3.0.0`
|If true, invalid versions will be coerced to Semantic Versioning 2 format (https://semver.org) if possible.
|`apicurio.semver.branching.enabled`
|`boolean [dynamic]`
|`false`
|`3.0.0`
|Automatically create or update branches for major ('A.x') and minor ('A.B.x') artifact versions.
|`apicurio.semver.validation.enabled`
|`boolean [dynamic]`
|`false`
|`3.0.0`
|Validate that all artifact versions conform to Semantic Versioning 2 format (https://semver.org).
|===

== storage
.storage configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.datasource.blue.db-kind`
|`string`
|`h2`
|`3.0.0`
|Gitops blue datasource db kind
|`apicurio.datasource.blue.jdbc.initial-size`
|`string`
|`20`
|`3.0.0`
|Gitops blue datasource pool initial size
|`apicurio.datasource.blue.jdbc.max-size`
|`string`
|`100`
|`3.0.0`
|Gitops blue datasource pool max size
|`apicurio.datasource.blue.jdbc.min-size`
|`string`
|`20`
|`3.0.0`
|Gitops blue datasource pool minimum size
|`apicurio.datasource.blue.jdbc.url`
|`string`
|`jdbc:h2:mem:registry_db`
|`3.0.0`
|Gitops blue datasource jdbc url
|`apicurio.datasource.blue.password`
|`string`
|`sa`
|`3.0.0`
|Gitops blue datasource password
|`apicurio.datasource.blue.username`
|`string`
|`sa`
|`3.0.0`
|Gitops blue datasource username
|`apicurio.datasource.green.db-kind`
|`string`
|`h2`
|`3.0.0`
|Gitops green datasource db kind
|`apicurio.datasource.green.jdbc.initial-size`
|`string`
|`20`
|`3.0.0`
|Gitops green datasource pool initial size
|`apicurio.datasource.green.jdbc.max-size`
|`string`
|`100`
|`3.0.0`
|Gitops green datasource pool max size
|`apicurio.datasource.green.jdbc.min-size`
|`string`
|`20`
|`3.0.0`
|Gitops green datasource pool minimum size
|`apicurio.datasource.green.jdbc.url`
|`string`
|`jdbc:h2:mem:registry_db`
|`3.0.0`
|Gitops green datasource jdbc url
|`apicurio.datasource.green.password`
|`string`
|`sa`
|`3.0.0`
|Gitops green datasource password
|`apicurio.datasource.green.username`
|`string`
|`sa`
|`3.0.0`
|Gitops green datasource username
|`apicurio.events.kafka.topic`
|`string`
|`registry-events`
|
|Storage event topic
|`apicurio.kafkasql.bootstrap.servers`
|`string`
|
|
|Kafka sql storage bootstrap servers
|`apicurio.kafkasql.consumer.group-prefix`
|`string`
|`apicurio-`
|
|Kafka sql storage prefix for consumer group name
|`apicurio.kafkasql.consumer.poll.timeout`
|`integer`
|`5000`
|
|Kafka sql storage consumer poll timeout
|`apicurio.kafkasql.coordinator.response-timeout`
|`integer`
|`30000`
|
|Kafka sql storage coordinator response timeout
|`apicurio.kafkasql.security.protocol`
|`optional<string>`
|
|
|Kafka sql storage security protocol
|`apicurio.kafkasql.security.sasl.client-id`
|`string`
|
|
|Kafka sql storage sasl client identifier
|`apicurio.kafkasql.security.sasl.client-secret`
|`string`
|
|
|Kafka sql storage sasl client secret
|`apicurio.kafkasql.security.sasl.enabled`
|`boolean`
|`false`
|
|Kafka sql storage sasl enabled
|`apicurio.kafkasql.security.sasl.login.callback.handler.class`
|`string`
|
|
|Kafka sql storage sasl login callback handler
|`apicurio.kafkasql.security.sasl.mechanism`
|`string`
|
|
|Kafka sql storage sasl mechanism
|`apicurio.kafkasql.security.sasl.token.endpoint`
|`string`
|
|
|Kafka sql storage sasl token endpoint
|`apicurio.kafkasql.security.ssl.truststore.location`
|`optional<string>`
|
|
|Kafka sql storage ssl truststore location
|`apicurio.kafkasql.security.ssl.truststore.type`
|`optional<string>`
|
|
|Kafka sql storage ssl truststore type
|`apicurio.kafkasql.snapshot.every.seconds`
|`string`
|`86400s`
|`3.0.0`
|Kafka sql journal topic snapshot every
|`apicurio.kafkasql.snapshots.topic`
|`string`
|`kafkasql-snapshots`
|`3.0.0`
|Kafka sql storage topic name
|`apicurio.kafkasql.ssl.key.password`
|`optional<string>`
|
|
|Kafka sql storage ssl key password
|`apicurio.kafkasql.ssl.keystore.location`
|`optional<string>`
|
|
|Kafka sql storage ssl keystore location
|`apicurio.kafkasql.ssl.keystore.password`
|`optional<string>`
|
|
|Kafka sql storage ssl keystore password
|`apicurio.kafkasql.ssl.keystore.type`
|`optional<string>`
|
|
|Kafka sql storage ssl keystore type
|`apicurio.kafkasql.ssl.truststore.password`
|`optional<string>`
|
|
|Kafka sql storage ssl truststore password
|`apicurio.kafkasql.topic`
|`string`
|`kafkasql-journal`
|
|Kafka sql storage topic name
|`apicurio.kafkasql.topic.auto-create`
|`boolean`
|`true`
|
|Kafka sql storage topic auto create
|`apicurio.sql.db-schema`
|`string`
|`*`
|`3.0.6`
|Database schema name (only needed when running two instances of Registry against the same database, in multiple schemas)
|`apicurio.sql.init`
|`boolean`
|`true`
|`2.0.0.Final`
|SQL init
|`apicurio.storage.kind`
|`string`
|
|`3.0.0`
|Application storage variant, for example, sql, kafkasql, or gitops
|`apicurio.storage.read-only.enabled`
|`boolean [dynamic]`
|`false`
|`2.5.0.Final`
|Enable Registry storage read-only mode
|`apicurio.storage.snapshot.location`
|`string`
|`./`
|`3.0.0`
|Kafka sql snapshots store location
|`apicurio.storage.sql.kind`
|`string`
|`h2`
|`3.0.0`
|Application datasource database type
|`artifacts.skip.disabled.latest`
|`boolean`
|`true`
|`2.4.2`
|Skip artifact versions with DISABLED state when retrieving latest artifact version
|===

== ui
.ui configuration options
[.table-expandable,width="100%",cols="6,3,2,3,5",options="header"]
|===
|Name
|Type
|Default
|Available from
|Description
|`apicurio.ui.auth.oidc.client-id`
|`string`
|`apicurio-registry-ui`
|`3.0.0`
|The OIDC clientId
|`apicurio.ui.auth.oidc.logout-url`
|`string`
|`f5`
|`3.0.0`
|The OIDC logout URL
|`apicurio.ui.auth.oidc.redirect-uri`
|`string`
|`/`
|`3.0.0`
|The OIDC redirectUri
|`apicurio.ui.auth.oidc.scope`
|`string`
|`openid profile email`
|`3.0.8`
|UI auth OIDC scope value
|`apicurio.ui.contextPath`
|`string`
|`/`
|`3.0.0`
|Context path of the UI
|`apicurio.ui.docsUrl`
|`string`
|`/docs/`
|`3.0.0`
|URL of the Documentation component
|`apicurio.ui.features.breadcrumbs`
|`string`
|`true`
|`3.0.0`
|Enabled to show breadcrumbs in the UI
|`apicurio.ui.features.read-only.enabled`
|`string`
|`false`
|`3.0.0`
|Enabled to set the UI to read-only mode
|`apicurio.ui.features.settings`
|`string`
|`true`
|`3.0.0`
|Enabled to show the Settings tab in the UI
|`apicurio.ui.navPrefixPath`
|`string`
|`/`
|`3.0.0`
|Navigation prefix for all UI paths
|===

