Skip to main content

Configuration reference

The Helm chart owns the deployment configuration. This page comes from the chart schema, chart defaults, rendered workloads, application YAML, and Spring configuration metadata.

Set chart values in your Helm values file. The Required column reports the schema at each object. Conditional requirements also apply. See Kubernetes deployment for those requirements, Secret keys, profiles, and operator procedures. The chart values describe each group. Helm validates the complete schema, including conditions on parent objects.

The Constraints column gives units, parsers and schema bounds. Use the format of that parser: Kubernetes quantities, Spring conversion, Spring sizes, PostgreSQL settings, pgBackRest retention, or VictoriaMetrics retention.

When the chart renders them, it converts server.resources.limits.memory to MiB for memory limits. These values, Git-cache sizeLimit values and sandbox.reviewMemory require whole Mi or Gi. Automatic turn admission converts CPU requests to millicores. Use cores or millicores for those requests. Other Kubernetes resource quantities are passed through as written.

Helm values​

config​

KeyTypeDefaultRequired in objectConstraints
config.browserFaultReportsbooleanfalseyes—
config.commitIdentityResolutionEnabledbooleantrueyes—
config.feedbackRetentionstring"P400D"yesRetention of at least 15 whole days, parsed by Spring Boot Duration from ISO-8601 P followed by an integer and D, such as P400D.
pattern: "^P(1[5-9]|[2-9][0-9]|[1-9][0-9]{2,})D$"
config.llmDisplayCurrencystring""yesenum: ["","EUR"]
config.llmPrivateHostsarray[]yesmaxItems: 32
config.llmPrivateHostsAllowHttpbooleanfalseyes—
config.llmUsageRetentionstring"P400D"yesRetention in whole days, parsed by Spring Boot Duration from ISO-8601 P followed by an integer and D, such as P400D.
pattern: "^P[0-9]+D$"
config.pageExperienceMetricsbooleanfalseyes—
config.releaseCheckEnabledbooleantrueyes—
config.researchOrganizationstring""yes—
config.scmPrivateHostsarray[]yesmaxItems: 32
config.workspaceCreationPolicystring"ADMIN_ONLY"yesenum: ["ADMIN_ONLY","SELF_SERVICE"]

config.auth​

KeyTypeDefaultRequired in objectConstraints
config.auth.assuranceEnforcedbooleantrueyes—
config.auth.bootstrapAdminsarray[]yes—
config.auth.browserExtensionIdsarray[]yes—
config.auth.passkeys.adminMaxAgestring"6h"yesTime parsed by Spring Boot Duration. Use a nonnegative integer followed by ms, s, m, h or d; d is 24 hours.
pattern: "^[0-9]+(?:ms|s|m|h|d)$"
config.auth.passkeys.allowedOriginsarray[]yes—
config.auth.passkeys.instanceAdminRequiredbooleantrueyes—
config.auth.passkeys.rpIdstring""yes—
config.auth.passkeys.workspaceAdminRequiredbooleanfalseyes—

config.credentialKey​

KeyTypeDefaultRequired in objectConstraints
config.credentialKey.priorVersionstring""yespattern: "^(?:[1-9][0-9]*)?$"
config.credentialKey.rotationEnabledbooleanfalseyes—
config.credentialKey.versioninteger1yesminimum: 1

config.email​

KeyTypeDefaultRequired in objectConstraints
config.email.fromstring""yes—
config.email.fromNamestring"Hephaestus"yes—
config.email.hoststring""yes—
config.email.portinteger587yesminimum: 1. maximum: 65535
config.email.replyTostring""yes—
config.email.tlsstring"starttls"yesenum: ["starttls","implicit"]
config.email.usernamestring""yes—

config.github​

KeyTypeDefaultRequired in objectConstraints
config.github.appClientIdstring""yes—
config.github.appIdinteger0yesminimum: 0
config.github.appInstallationUrlstring""yes—
config.github.oauthClientIdstring""yes—

config.gitlab​

KeyTypeDefaultRequired in objectConstraints
config.gitlab.enabledbooleanfalseyes—
config.gitlab.oauthBaseUrlstring"https://gitlab.com"yespattern: "^https://"
config.gitlab.oauthClientIdstring""yes—
config.gitlab.oauthDisplayNamestring"GitLab"yes—

config.outline​

KeyTypeDefaultRequired in objectConstraints
config.outline.allowedOriginsarray[]yes—
config.outline.enabledbooleanfalseyes—
config.outline.oauthBaseUrlstring""yes—
config.outline.oauthClientIdstring""yes—
config.outline.oauthDisplayNamestring"Outline"yes—

config.privateCa​

KeyTypeDefaultRequired in objectConstraints
config.privateCa.existingSecretstring""yes—
config.privateCa.keystring"ca.crt"yes—

config.publicActivity​

KeyTypeDefaultRequired in objectConstraints
config.publicActivity.enabledbooleanfalseyes—
config.publicActivity.repositoryVisibilityMaxAgestring"48h"yesTime parsed by Spring Boot Duration. Use a nonnegative integer followed by ms, s, m, h or d; d is 24 hours.
pattern: "^[0-9]+(?:ms|s|m|h|d)$"

config.slack​

KeyTypeDefaultRequired in objectConstraints
config.slack.clientIdstring""yes—
config.slack.enabledbooleanfalseyes—

config.sync​

KeyTypeDefaultRequired in objectConstraints
config.sync.cooldownMinutesinteger60yesWhole minutes, bound to an application integer. This is the minimum interval between syncs.
minimum: 1. maximum: 1440
config.sync.runOnStartupbooleantrueyes—
config.sync.syncCronstring"0 0 * * * *"yesA Spring cron expression with six fields, seconds first.
pattern: "^\\S+( \\S+){5}$"
config.sync.timeframeDaysinteger7yesWhole days, bound to an application integer. This is the initial sync and reconciliation timeframe.
minimum: 1. maximum: 365

config.tracing​

KeyTypeDefaultRequired in objectConstraints
config.tracing.otlpEnabledbooleanfalseyes—
config.tracing.otlpEndpointstring"http://localhost:4318/v1/traces"yes—
config.tracing.samplingProbabilitystring"0.0"yespattern: "^(?:0(?:\\.[0-9]+)?|1(?:\\.0+)?)$"

images​

KeyTypeDefaultRequired in objectConstraints
images.agent-pistringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.alertmanagerstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.application-serverstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.postgresstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.postgres-exporterstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.victoria-metricsstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.vmalertstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"
images.webappstringsupplied by release or operatoryesAn index digest from the verified release lock. Tags are refused.
pattern: "^(?:ghcr\\.io|docker\\.io)/[a-z0-9][a-z0-9._/-]*@sha256:[a-f0-9]{64}$"

migration​

KeyTypeDefaultRequired in objectConstraints
migration.databasePool.maximumPoolSizeinteger2yesminimum: 1. maximum: 400
migration.databasePool.minimumIdleinteger1yesminimum: 0. maximum: 400
migration.enabledbooleantrueyes—
migration.resources.limits.cpustring"2"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
migration.resources.limits.ephemeral-storagestring"256Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
migration.resources.limits.memorystring"1536Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
migration.resources.requests.cpustring"250m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
migration.resources.requests.ephemeral-storagestring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
migration.resources.requests.memorystring"1536Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"

networkPolicy​

KeyTypeDefaultRequired in objectConstraints
networkPolicy.dns.namespacestring"kube-system"yespattern: "^[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?$"
networkPolicy.dns.podLabelsobject{"k8s-app":"kube-dns"}yesadditionalProperties: {"type":"string","maxLength":63}
networkPolicy.externalEgress.cidrstring"0.0.0.0/0"yespattern: "^(?:|[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}|[0-9a-fA-F:]+/[0-9]{1,3})$"
networkPolicy.externalEgress.exceptarray["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","169.254.0.0/16","100.64.0.0/10"]yesmaxItems: 16
networkPolicy.gateway.namespacestring""yespattern: "^[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?$"
networkPolicy.gateway.podLabelsobject{}yesadditionalProperties: {"type":"string","maxLength":63}
networkPolicy.kubernetesApi.cidrstring""yespattern: "^(?:|[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}|[0-9a-fA-F:]+/[0-9]{1,3})$"
networkPolicy.kubernetesApi.portinteger0yesminimum: 0. maximum: 65535
networkPolicy.metrics.namespacestring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
networkPolicy.metrics.podLabelsobject{}yesadditionalProperties: {"type":"string","maxLength":63}
networkPolicy.modelEndpointsarray[]maxItems: 16
networkPolicy.modelGatewayPortsarray[]maxItems: 4
networkPolicy.scmEndpointsarray[]maxItems: 16
networkPolicy.traceCollector.namespacestring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
networkPolicy.traceCollector.podLabelsobject{}yesadditionalProperties: {"type":"string","maxLength":63}

observability​

KeyTypeDefaultRequired in objectConstraints
observability.alertRules.configMapbooleanfalseRender a ConfigMap with the rule file as it is.
observability.alertRules.labelsobject{}Labels for the ConfigMap and the PrometheusRule, for the rule selector of your Prometheus.
additionalProperties: {"type":"string","maxLength":63}
observability.alertRules.prometheusRulebooleanfalseRender a PrometheusRule with the groups of the rule file. The CRD of the Prometheus Operator must exist.
observability.dashboards.namespacestring""An existing namespace for the release dashboards of an external VictoriaMetrics. Empty renders them only with the bundled stack, in the release namespace.
pattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
observability.stack.alertmanager.configSecretstring""The Secret with the key alertmanager.yml. Required when the stack is enabled.
pattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
observability.stack.enabledbooleanfalse—
observability.stack.persistence.sizestring"5Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
observability.stack.persistence.storageClassNamestring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
observability.stack.retentionstring"30d"Sample retention, parsed by VictoriaMetrics retentionPeriod. Use a positive integer followed by d for days or w for weeks.
pattern: "^[1-9][0-9]*[dw]$"

postgresql​

KeyTypeDefaultRequired in objectConstraints
postgresql.backup.clientTlsSecretstring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
postgresql.backup.enabledbooleanfalseyes—
postgresql.backup.resources.limits.cpustring"1"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.backup.resources.limits.ephemeral-storagestring"1Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.backup.resources.limits.memorystring"512Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.backup.resources.requests.cpustring"100m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.backup.resources.requests.ephemeral-storagestring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.backup.resources.requests.memorystring"512Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.backup.restore.enabledbooleanfalseyes—
postgresql.backup.restore.timestring""yespattern: "^(?:[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}(?:\\.[0-9]+)?[+-][0-9]{2}(?::?[0-9]{2})?)?$"
postgresql.backup.retentionFullinteger2yesNumber of full backups, parsed as an integer by pgBackRest repo1-retention-full.
minimum: 1. maximum: 52
postgresql.backup.s3.bucketstring""yespattern: "^(?:[a-z0-9][a-z0-9.-]{1,61}[a-z0-9])?$"
postgresql.backup.s3.cidrstring""yespattern: "^(?:|[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}|[0-9a-fA-F:]+/[0-9]{1,3})$"
postgresql.backup.s3.endpointstring""yespattern: "^[A-Za-z0-9.-]{0,253}(?::[0-9]{1,5})?$"
postgresql.backup.s3.portinteger443yesminimum: 1. maximum: 65535
postgresql.backup.s3.privateCabooleanfalseyes—
postgresql.backup.s3.regionstring""yespattern: "^[A-Za-z0-9-]{0,64}$"
postgresql.backup.s3.uriStylestring"path"yesenum: ["path","host"]
postgresql.backup.schedule.differentialstring"15 2 * * 1-6"yes—
postgresql.backup.schedule.fullstring"15 2 * * 0"yes—
postgresql.bundledbooleantrueyes—
postgresql.databasestring"hephaestus"yespattern: "^[a-z_][a-z0-9_]{0,62}$"
postgresql.external.cidrstring""yespattern: "^(?:|[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}|[0-9a-fA-F:]+/[0-9]{1,3})$"
postgresql.external.hoststring""yespattern: "^[A-Za-z0-9.-]{0,253}$"
postgresql.external.portinteger5432yesminimum: 1. maximum: 65535
postgresql.metrics.enabledbooleanfalseyes—
postgresql.metrics.resources.limits.cpustring"200m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.metrics.resources.limits.ephemeral-storagestring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.metrics.resources.limits.memorystring"96Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.metrics.resources.requests.cpustring"10m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.metrics.resources.requests.ephemeral-storagestring"16Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.metrics.resources.requests.memorystring"32Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.metrics.statementLimitinteger20yesThe statements with the most total execution time that the exporter reports, by query id only.
minimum: 1. maximum: 100
postgresql.parameters.autovacuum_max_workersintegersupplied by release or operatorminimum: 1. maximum: 16
postgresql.parameters.autovacuum_work_memstringsupplied by release or operatorBytes, parsed by PostgreSQL. Use whole kB, MB or GB; their multiplier is 1024.
pattern: "^[1-9][0-9]*(?:kB|MB|GB)$"
postgresql.parameters.effective_cache_sizestringsupplied by release or operatorBytes, parsed by PostgreSQL. Use whole kB, MB or GB; their multiplier is 1024.
pattern: "^[1-9][0-9]*(?:kB|MB|GB)$"
postgresql.parameters.hash_mem_multipliernumbersupplied by release or operatorminimum: 1. maximum: 10
postgresql.parameters.maintenance_work_memstringsupplied by release or operatorBytes, parsed by PostgreSQL. Use whole kB, MB or GB; their multiplier is 1024.
pattern: "^[1-9][0-9]*(?:kB|MB|GB)$"
postgresql.parameters.max_connectionsintegersupplied by release or operatorminimum: 4
postgresql.parameters.max_parallel_workers_per_gatherintegersupplied by release or operatorminimum: 0. maximum: 16
postgresql.parameters.max_wal_sizestringsupplied by release or operatorBytes, parsed by PostgreSQL. Use whole kB, MB or GB; their multiplier is 1024.
pattern: "^[1-9][0-9]*(?:kB|MB|GB)$"
postgresql.parameters.shared_buffersstringsupplied by release or operatorBytes, parsed by PostgreSQL. Use whole kB, MB or GB; their multiplier is 1024.
pattern: "^[1-9][0-9]*(?:kB|MB|GB)$"
postgresql.parameters.work_memstringsupplied by release or operatorBytes, parsed by PostgreSQL. Use whole kB, MB or GB; their multiplier is 1024.
pattern: "^[1-9][0-9]*(?:kB|MB|GB)$"
postgresql.persistence.sizestring"20Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.persistence.storageClassNamestring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
postgresql.resources.limits.cpustring"2"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.resources.limits.ephemeral-storagestring"1Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.resources.limits.memorystring"2Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.resources.requests.cpustring"250m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.resources.requests.ephemeral-storagestring"256Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.resources.requests.memorystring"2Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
postgresql.tls.existingSecretstring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9.]{0,251}[a-z0-9])?)?$"

priorityClasses​

KeyTypeDefaultRequired in objectConstraints
priorityClasses.conversationsstring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
priorityClasses.createbooleantrueyes—
priorityClasses.reviewsstring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
priorityClasses.rolesstring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"

release​

KeyTypeDefaultRequired in objectConstraints
release.commitstring""yespattern: "^[a-f0-9]{40}$"
release.versionstring""yespattern: "^(?:v(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*)\\.(?:0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?|[a-f0-9]{40})$"

route​

KeyTypeDefaultRequired in objectConstraints
route.parentRefsarray[]yesminItems: 1. maxItems: 4

sandbox​

KeyTypeDefaultRequired in objectConstraints
sandbox.budget.cpustringsupplied by release or operatorPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.budget.memorystringsupplied by release or operatorPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.controller.enabledbooleanfalseyes—
sandbox.controller.imagestring"registry.k8s.io/agent-sandbox/agent-sandbox-controller:v1.0.10@sha256:594f4853913bca2b336d0267fe0978445f1aaa5837ed23797e48e745c8d6b610"yesThe controller image of k3s-agent-sandbox.yaml, by digest. A chart test keeps the two equal.
pattern: "^registry\\.k8s\\.io/agent-sandbox/agent-sandbox-controller:[^@]+@sha256:[a-f0-9]{64}$"
sandbox.controller.resources.limits.cpustring"1"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.controller.resources.limits.ephemeral-storagestring"128Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.controller.resources.limits.memorystring"256Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.controller.resources.requests.cpustring"10m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.controller.resources.requests.ephemeral-storagestring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.controller.resources.requests.memorystring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.conversationTurnsstring or integer8yesConcurrent conversation turns: auto derives the largest count within sandbox.budget; an explicit count is checked when a budget is set.
oneOf: [{"const":"auto"},{"type":"integer","minimum":0,"maximum":2147483647}]
sandbox.enabledbooleanfalseyes—
sandbox.gateway.maxConnectionsinteger4096yesConnections that the sandbox gateway holds open at most.
minimum: 1
sandbox.namespacestring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?)?$"
sandbox.quota.enabledbooleantrueyes—
sandbox.reviewMemorystring"3840Mi"yesMemory for review Pods, in whole Mi or Gi, parsed by chart memory conversion and Kubernetes Quantity. Concurrent reviews are this over one review Pod request and its RuntimeClass overhead.
pattern: "^[1-9][0-9]*(?:Mi|Gi)$"
sandbox.runtime.nodeSelectorobject{}yesadditionalProperties: {"type":"string","maxLength":63}
sandbox.runtime.tolerationsarray[]yes—
sandbox.templates.conversation.resources.limits.cpustring"2"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.conversation.resources.limits.ephemeral-storagestring"2Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.conversation.resources.limits.memorystring"1Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.conversation.resources.requests.cpustring"100m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.conversation.resources.requests.ephemeral-storagestring"256Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.conversation.resources.requests.memorystring"384Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.podOverhead.cpuMillisinteger0yesWhole millicores, read as an integer by chart arithmetic. 1000 millicores is one CPU.
minimum: 0
sandbox.templates.podOverhead.memoryMiinteger0yesWhole mebibytes, read as an integer by chart arithmetic. One mebibyte is 1048576 bytes.
minimum: 0
sandbox.templates.review.resources.limits.cpustring"2"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.review.resources.limits.ephemeral-storagestring"4Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.review.resources.limits.memorystring"2Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.review.resources.requests.cpustring"100m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.review.resources.requests.ephemeral-storagestring"1Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.review.resources.requests.memorystring"512Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
sandbox.templates.runtimeClassNamestring""yes—

secret​

KeyTypeDefaultRequired in objectConstraints
secret.namestring""yespattern: "^[a-z0-9](?:[-a-z0-9.]{0,251}[a-z0-9])?$"

server​

KeyTypeDefaultRequired in objectConstraints
server.databasePool.maximumPoolSizeinteger or string"auto"yesoneOf: [{"type":"integer","minimum":1,"maximum":400},{"const":"auto"}]
server.databasePool.minimumIdleinteger5yesminimum: 0. maximum: 400
server.drainTimeoutSecondsinteger1800yesWhole seconds. The chart emits a Spring Boot Duration for the server's drain and an integer Kubernetes termination grace period.
minimum: 0. maximum: 86400
server.gitCache.sizeLimitstring"70Gi"yesThis role's Git cache volume, in whole Mi or Gi. Kubernetes reads this quantity as written. The chart converts it to bytes for the application's eviction threshold. Above 80 % of the limit, the role deletes the Git mirrors that it used least recently.
pattern: "^[1-9][0-9]*(?:Mi|Gi)$"
server.inboxClaimersinteger8yesminimum: 0
server.replicasinteger2yesminimum: 0
server.resources.limits.cpustring"4"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
server.resources.limits.ephemeral-storagestring"72Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
server.resources.limits.memorystring"3Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
server.resources.requests.cpustring"500m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
server.resources.requests.ephemeral-storagestring"512Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
server.resources.requests.memorystring"3Gi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"

top-level​

KeyTypeDefaultRequired in objectConstraints
deploymentEnvironmentstring"local"pattern: "^[a-z0-9._-]{1,64}$"
globalobjectsupplied by release or operator—
hoststring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?$"
priorityClassesobject{"create":true,"roles":"","conversations":"","reviews":""}Create the three PriorityClasses, or name three that exist: the roles' above the conversations' above the reviews'.
trustedProxiesstring""yes—

webapp​

KeyTypeDefaultRequired in objectConstraints
webapp.legalOverridesstring""yespattern: "^(?:[a-z0-9](?:[-a-z0-9.]{0,251}[a-z0-9])?)?$"
webapp.replicasinteger1yesminimum: 1. maximum: 5
webapp.resources.limits.cpustring"500m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
webapp.resources.limits.ephemeral-storagestring"256Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
webapp.resources.limits.memorystring"256Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
webapp.resources.requests.cpustring"50m"yesPositive CPU as a Kubernetes Quantity. 1000m is one CPU.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
webapp.resources.requests.ephemeral-storagestring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
webapp.resources.requests.memorystring"64Mi"yesPositive memory or storage as a Kubernetes Quantity, such as Mi or Gi.
pattern: "^(?:[1-9][0-9]*(?:\\.[0-9]+)?|0\\.[0-9]*[1-9][0-9]*)(?:m|k|M|G|T|P|E|Ki|Mi|Gi|Ti|Pi|Ei)?$"
webapp.securityContactstring""yespattern: "^(?:(?:mailto:|https://|tel:)\\S+)?$"

workspaceSubdomains​

KeyTypeDefaultRequired in objectConstraints
workspaceSubdomains.enabledbooleanfalseyes—

Application environment​

The chart sets these variables on the listed workload containers. Use Helm values and Secret keys for configurable inputs. The chart fixes role flags, profiles, and runtime connections internally. A host .env file does not configure a Pod.

Defaults below come from the application YAML. They are not the deployed values. Configuration readiness reports incomplete instance configuration.

hephaestus.agent​

VariableSettingApplication defaultContainersDescription
AGENT_ENABLEDhephaestus.agent.enableddefault: falseserverTurns on agent jobs, which run practice reviews, on this server.
HEPHAESTUS_AGENT_DRAIN_TIMEOUThephaestus.agent.drain-timeoutserverHow long shutdown waits for leased review runs, with the gateway still available.
HEPHAESTUS_AGENT_IMAGE_REFERENCEhephaestus.agent.image.referenceserverImage reference used by Pi practice sandboxes and the Hephaestus container. Production must be digest-pinned (registry/path@sha256:<64 lowercase hex>).
HEPHAESTUS_AGENT_IMAGE_REQUIRE_DIGESThephaestus.agent.image.require-digestserverRefuses startup unless the agent image reference is pinned by digest.
HEPHAESTUS_AGENT_SANDBOX_GATEWAY_URLhephaestus.agent.sandbox.gateway-urlserverThe gateway address that a claim passes to its sandbox, such as http://10.43.0.12:8081. The server resolves the host to an address when it creates a claim, so the sandbox needs no DNS. Empty where this process creates no claim.
HEPHAESTUS_AGENT_SANDBOX_WARM_POOLS_CONVERSATIONhephaestus.agent.sandbox.warm-pools.conversationserverThe warm pool that a conversation's sandbox is claimed from.
HEPHAESTUS_AGENT_SANDBOX_WARM_POOLS_REVIEWhephaestus.agent.sandbox.warm-pools.reviewserverThe warm pool that a review's sandbox is claimed from.
HEPHAESTUS_MENTOR_TURN_CAPACITYhephaestus.agent.capacity.turnsdefault: (empty)serverHow many conversation turns run at once in the installation; zero stops new turns, and unset runs as many as are asked. The claim leases no turn beyond it, so a question waits for a free Heph instead.

hephaestus.auth​

VariableSettingApplication defaultContainersDescription
GITHUB_OAUTH_CLIENT_IDhephaestus.auth.login-providers.github.client-iddefault: (empty)serverClient ID of the GitHub OAuth App for sign-in. Set it with its client secret: a provider with only one of the two is not seeded. It seeds the github login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
GITHUB_OAUTH_CLIENT_SECREThephaestus.auth.login-providers.github.client-secretdefault: (empty)serverClient secret of the GitHub OAuth App for sign-in. Set it with its client ID. It seeds the github login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
GITLAB_OAUTH_BASE_URLhephaestus.auth.login-providers.gitlab.base-urldefault: https://gitlab.comserverOrigin of the GitLab instance for sign-in, such as https://gitlab.example.com. It seeds the gitlab login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
GITLAB_OAUTH_CLIENT_IDhephaestus.auth.login-providers.gitlab.client-iddefault: (empty)serverClient ID of the GitLab OAuth application for sign-in. Set it with its client secret: a provider with only one of the two is not seeded. It seeds the gitlab login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
GITLAB_OAUTH_CLIENT_SECREThephaestus.auth.login-providers.gitlab.client-secretdefault: (empty)serverClient secret of the GitLab OAuth application for sign-in. Set it with its client ID. It seeds the gitlab login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
GITLAB_OAUTH_DISPLAY_NAMEhephaestus.auth.login-providers.gitlab.display-namedefault: GitLabserverLabel of the GitLab button on the sign-in or account-linking page. It seeds the gitlab login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
HEPHAESTUS_AUTH_ASSURANCE_ENFORCEDhephaestus.auth.assurance-enforceddefault: trueserverRequires passkey verification and a recent sign-in for protected admin actions. Turn it off only on an isolated test instance.
HEPHAESTUS_AUTH_BOOTSTRAP_ADMINShephaestus.auth.bootstrap-adminsserverIdentities that become instance admins when they sign in, as provider:@username or provider:subject. Use the subject where a username can be claimed again. Email addresses are never matched.
HEPHAESTUS_AUTH_BOOTSTRAP_TOKENhephaestus.auth.bootstrap-tokenserverOptional token, controlled by the deployment, that recovers an instance without an active admin. A blank value turns off the recovery endpoint.
HEPHAESTUS_AUTH_BROWSER_EXTENSION_IDShephaestus.auth.browser-extension-idsdefault: (empty)serverChrome extension IDs that may sign in as installed clients. Each ID gets exactly one callback and one CORS origin.
HEPHAESTUS_AUTH_ISSUERhephaestus.auth.issuerdefault: http://localhost:${SERVER_PORT}; prod: http://localhost:${SERVER_PORT}serverCanonical iss claim. Its origin is also the public origin of the API and of the webhook receivers that GitLab and Outline registrations name.
HEPHAESTUS_AUTH_PASSKEYS_ADMIN_MAX_AGEhephaestus.auth.passkeys.admin-max-agedefault: 6hserverHow long one passkey verification opens admin work that a passkey protects. After it, the admin verifies a passkey again; the session itself continues. Sensitive actions keep the shorter hephaestus.auth.step-up-max-age.
HEPHAESTUS_AUTH_PASSKEYS_ALLOWED_ORIGINShephaestus.auth.passkeys.allowed-originsdefault: http://localhost:${WEBAPP_PORT}; prod: (empty)serverBrowser origins that may register and use passkeys, as a comma-separated list. Each must be an HTTPS origin on the RP ID or one of its subdomains. When it is empty, the origin of the auth issuer is used.
HEPHAESTUS_AUTH_PASSKEYS_INSTANCE_ADMIN_REQUIREDhephaestus.auth.passkeys.instance-admin-requireddefault: false; prod: trueserverRequires a verified passkey sign-in from every instance admin. Workspace and account settings cannot turn this off.
HEPHAESTUS_AUTH_PASSKEYS_RP_IDhephaestus.auth.passkeys.rp-iddefault: (empty); prod: (empty)serverWebAuthn relying party ID, the domain that passkeys are bound to. When it is empty, the host of the auth issuer is used. Passkeys registered under one RP ID do not work under another.
HEPHAESTUS_AUTH_PASSKEYS_WORKSPACE_ADMIN_REQUIREDhephaestus.auth.passkeys.workspace-admin-requireddefault: false; prod: falseserverRequires a verified passkey sign-in for workspace administration in every workspace. A workspace cannot turn this off.
HEPHAESTUS_AUTH_STATE_COOKIE_KEYhephaestus.auth.state-cookie-keydefault: (empty); prod: (empty)serverBase64-encoded 32-byte AES key that seals the OAuth state and sign-in intent cookies. Required outside development.
HEPHAESTUS_INTEGRATION_SLACK_CLIENT_IDhephaestus.auth.login-providers.slack.client-id
hephaestus.integration.slack.client-id
default: (empty)serverUse the Slack app's client ID to link a Slack account. It falls back to the Slack workspace-install credentials. Set it with its client secret: a provider with only one of the two is not seeded. It seeds the slack login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers. Use the Slack app's client ID to connect workspaces to Slack.
HEPHAESTUS_INTEGRATION_SLACK_CLIENT_SECREThephaestus.auth.login-providers.slack.client-secret
hephaestus.integration.slack.client-secret
default: (empty)serverUse the Slack app's client secret to link a Slack account. It falls back to the Slack workspace-install credentials. Set it with its client ID. It seeds the slack login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers. Use the Slack app's client secret to connect workspaces to Slack.
OUTLINE_OAUTH_BASE_URLhephaestus.auth.login-providers.outline.base-urldefault: (empty)serverOrigin of the Outline instance for account linking, such as https://wiki.example.com. Required when the client ID is set. It seeds the outline login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
OUTLINE_OAUTH_CLIENT_IDhephaestus.auth.login-providers.outline.client-iddefault: (empty)serverClient ID of the Outline OAuth application for linking an Outline account. Set it with its client secret: a provider with only one of the two is not seeded. It seeds the outline login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
OUTLINE_OAUTH_CLIENT_SECREThephaestus.auth.login-providers.outline.client-secretdefault: (empty)serverClient secret of the Outline OAuth application for linking an Outline account. Set it with its client ID. It seeds the outline login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.
OUTLINE_OAUTH_DISPLAY_NAMEhephaestus.auth.login-providers.outline.display-namedefault: OutlineserverLabel of the Outline button on the sign-in or account-linking page. It seeds the outline login provider at startup only when that provider does not exist yet. Later changes go through Instance administration, Login providers.

hephaestus.commit-identity-resolution​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_COMMIT_IDENTITY_RESOLUTION_ENABLEDhephaestus.commit-identity-resolution.enableddefault: trueserverWhether the job runs.

hephaestus.consent​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_RESEARCH_ORGANIZATIONhephaestus.consent.research-organizationdefault: (empty)serverName of the organization that runs a research study on this instance. When it is set, first-login setup and account settings ask users for research consent. At most 255 characters.

hephaestus.contributors​

VariableSettingApplication defaultContainersDescription
GH_AUTH_TOKENhephaestus.contributors.github.auth-tokendefault: (empty)serverUse a personal access token or fine-grained token to read this application's contributor list from GitHub.

hephaestus.email​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_EMAIL_FROMhephaestus.email.fromdefault: (empty)serverThe sender address in the envelope and the header. Required when spring.mail.host is set. The relay must be allowed to send for its domain through SPF and DKIM.
HEPHAESTUS_EMAIL_FROM_NAMEhephaestus.email.from-namedefault: HephaestusserverThe display name shown next to from.
HEPHAESTUS_EMAIL_REPLY_TOhephaestus.email.reply-todefault: (empty)serverThe address that receives human replies. When it is blank, replies go to the sender address.

hephaestus.fabric​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_FABRIC_ROOThephaestus.fabric.rootdefault: /data/git-reposserverLocal directory for the bare Git mirrors and the evidence folders of running reviews. The process must be able to write to it. Its contents are not durable application state.

hephaestus.features​

VariableSettingApplication defaultContainersDescription
BROWSER_FAULT_REPORTShephaestus.features.flags.browser-fault-reportsdefault: falseserverLets the browser of each reader, signed in or not, report the failures that it met to the server's logs and metrics. In the EU, turning it on can require consent or a documented legal basis.
PAGE_EXPERIENCE_METRICShephaestus.features.flags.page-experience-metricsdefault: falseserverLets the browser of a signed-in reader measure how fast each visit loads and responds and report it to the page experience metrics. In the EU, turning it on can require consent or a documented legal basis.

hephaestus.feedback-retention​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_FEEDBACK_RETENTIONhephaestus.feedback-retentiondefault: P400DserverThe age at which conversation entries, feedback and practice results are erased. An entry counts from when it was written, feedback from its delivery or its creation when never delivered, and a result from when it was recorded, once no kept feedback cites it.

hephaestus.git​

VariableSettingApplication defaultContainersDescription
GIT_CHECKOUT_ENABLEDhephaestus.git.enableddefault: falseserverKeeps local Git mirrors of monitored repositories, which practice reviews read code from. Turn it on wherever agent jobs run. Without it, the practice review health check reports out of service.
GIT_MAX_CACHE_BYTEShephaestus.git.max-cache-bytesdefault: 10737418240serverThe most disk that Git mirrors, review checkouts and staged archives may use on this process's volume. Set it to the size of that volume. Above 80 % of it, Hephaestus deletes the mirrors it used least recently. A deleted mirror costs one full fetch at its next capture.

hephaestus.host-url​

VariableSettingApplication defaultContainersDescription
APPLICATION_HOST_URLhephaestus.host-url
hephaestus.cors.allowed-origins[0]
hephaestus.webapp.url
default: http://localhost:4200; prod: (empty)serverSet the public URL of this Hephaestus instance. Browsers at these origins can make cross-origin requests to this instance. Set the webapp's base URL for generated links.

hephaestus.integration​

VariableSettingApplication defaultContainersDescription
GH_APP_CLIENT_IDhephaestus.integration.github.app.client-iddefault: (empty)serverThe App's client ID, which exchanges the code GitHub returns when an installation requests user authorization.
GH_APP_CLIENT_SECREThephaestus.integration.github.app.client-secretdefault: (empty)serverThe client secret of the GitHub App. Set it together with the client ID.
GH_APP_IDhephaestus.integration.github.app.iddefault: 0; prod: 0serverID of the GitHub App. The value 0 turns GitHub App mode off. Must not be negative.
GH_APP_INSTALLATION_URLhephaestus.integration.github.app.installation-urldefault: (empty)serverURL where users install the GitHub App, such as https://github.com/apps/my-app/installations/new.
GH_APP_PRIVATE_KEYhephaestus.integration.github.app.private-keydefault: (empty); prod: (empty)serverPEM-encoded private key of the GitHub App, as an inline value.
GITLAB_DEFAULT_SERVER_URLhephaestus.integration.gitlab.default-server-urldefault: ${hephaestus.auth.login-providers.gitlab.base-url}server, migrationThe GitLab server URL for a workspace that names no server of its own.
GITLAB_ENABLEDhephaestus.integration.gitlab.enableddefault: falseserverTurns on the GitLab integration, which syncs GitLab groups and projects and delivers feedback on merge requests.
HEPHAESTUS_INTEGRATION_CONSUMER_CLAIMERShephaestus.integration.consumer.claimersserverHow many events one server handles at once, each of another scope. 0 claims none.
HEPHAESTUS_INTEGRATION_OUTLINE_ALLOWED_ORIGINShephaestus.integration.outline.allowed-originsdefault: (empty)serverOutline origins that workspace connections and Outline sign-in may use, as a comma-separated list such as https://wiki.example.com. Each must be an HTTPS origin without a path. Hephaestus refuses every Outline address that is not listed.
HEPHAESTUS_INTEGRATION_OUTLINE_ENABLEDhephaestus.integration.outline.enableddefault: falseserverTurns on the Outline integration, which lets workspaces connect Outline and syncs its documents. Each workspace admin still connects their workspace separately.
HEPHAESTUS_INTEGRATION_SLACK_ENABLEDhephaestus.integration.slack.enableddefault: falseserverMaster toggle for the Slack integration (OAuth install, lifecycle listeners, outbound messaging).
HEPHAESTUS_INTEGRATION_SLACK_SIGNING_SECREThephaestus.integration.slack.signing-secretdefault: (empty)serverSigning secret of the Slack app, which verifies inbound Events API and interactivity requests. Required when the Slack integration is on, or the server does not start.

hephaestus.llm​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_LLM_DISPLAY_CURRENCYhephaestus.llm.display-currencydefault: (empty)serverCode of the second currency in which spend in USD is also shown. Empty shows USD only.
HEPHAESTUS_LLM_EGRESS_PRIVATE_HOSTShephaestus.llm.egress.private-hostsdefault: (empty)serverModel endpoints on private networks that provider base URLs may use, as host names, IP addresses or CIDR ranges. A host name entry lets that name resolve to a private address. A range admits every host name that resolves into it. Only private addresses qualify: loopback, link-local and the known cloud metadata ranges stay blocked. A range wider than /16 (IPv4) or /48 (IPv6), outside the private ranges, or covering this server's own address stops startup. Empty allows public hosts only.
HEPHAESTUS_LLM_EGRESS_PRIVATE_HOSTS_ALLOW_HTTPhephaestus.llm.egress.private-hosts-allow-httpdefault: falseserverAccepts http:// base URLs whose host is in private-hosts. Every other host still needs HTTPS.
HEPHAESTUS_LLM_USAGE_RETENTIONhephaestus.llm.usage.retentiondefault: P400DserverAge from occurred_at at which a ledger row is deleted. Operator-tunable because the ledger is accounting data: a commercial or tax retention obligation can run years beyond the default, and the deletion is irreversible.

hephaestus.public-activity​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_PUBLIC_ACTIVITY_ENABLEDhephaestus.public-activity.enabledserverAllows public activity pages on this instance until an instance admin changes the switch in the admin console. Each workspace must also opt in.
HEPHAESTUS_PUBLIC_ACTIVITY_REPOSITORY_VISIBILITY_MAX_AGEhephaestus.public-activity.repository-visibility-max-ageserverHow recently a sync must have confirmed that a repository is public for its work to appear on public activity pages. Must be positive. Accepts 48h, 2d, PT48H.

hephaestus.release​

VariableSettingApplication defaultContainersDescription
DEPLOYMENT_ENVIRONMENThephaestus.release.environmentdefault: localserver, migrationThe name of this deployment, such as production. The webapp, log lines and traces use the same name.
HEPHAESTUS_IMAGE_APPLICATION_SERVERhephaestus.release.imagedefault: (empty)serverThe digest reference of the image that this container started from. It is empty outside a deployment from a release lock.
HEPHAESTUS_RELEASE_CHECK_ENABLEDhephaestus.release.check-enableddefault: trueserverWhether the server role may ask GitHub for the newest published release.
HEPHAESTUS_RELEASE_COMMIThephaestus.release.commitdefault: (empty)server, migrationThe source commit that the release lock names. It is empty outside a deployment from a release lock.

hephaestus.sandbox​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_SANDBOX_KUBERNETES_NAMESPACEhephaestus.sandbox.kubernetes.namespacedefault: (empty)serverThe dedicated Kubernetes namespace for this release's sandbox claims, Pods and warm pools.
SANDBOX_API_MAX_CONNECTIONShephaestus.sandbox.gateway.max-connectionsdefault: 4096serverMost connections that the sandbox gateway holds open at once. Up to 100 further connections wait in the operating system's queue, and the rest fail. A review at its most calls in flight holds 170, and a normal review about 54 (estimated).
SANDBOX_API_PORThephaestus.sandbox.gateway.portdefault: 8081serverPort of the extra server connector that serves the sandbox gateway. The gateway API answers only on this port. The value 0 binds a free port at start.
SANDBOX_MAX_CONCURRENThephaestus.sandbox.max-concurrent-containersdefault: 5serverThe most review sandboxes this server runs at once.

hephaestus.scm​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_SCM_EGRESS_PRIVATE_HOSTShephaestus.scm.egress.private-hostsdefault: (empty)serverHost names, IP addresses or CIDR ranges of a Git provider on a private network. Only private addresses qualify: loopback, link-local and the known cloud metadata ranges stay blocked. A range wider than /16 (IPv4) or /48 (IPv6), outside the private ranges, or covering this server's own address stops startup. Empty allows public hosts only.

hephaestus.security​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_SECURITY_CREDENTIAL_ENCRYPTION_KEYhephaestus.security.credential-encryption-keyserverActive key that encrypts the stored credentials of integration connections. Exactly 32 bytes, so 32 ASCII characters. Required in production.
HEPHAESTUS_SECURITY_CREDENTIAL_ENCRYPTION_KEY_VERSIONhephaestus.security.credential-encryption-key-versionserverPositive version number stored with each credential that the active credential key encrypts. Must differ from prior-credential-encryption-key-version.
HEPHAESTUS_SECURITY_CREDENTIAL_ROTATION_ENABLEDhephaestus.security.credential-rotation-enabledserverRe-encrypts stored credentials with the active credential key in batches on the server role. Requires both the active and the prior credential key.
HEPHAESTUS_SECURITY_ENCRYPTION_KEYhephaestus.security.encryption-keyserverKey that encrypts sensitive values at rest, such as login provider secrets, LLM connection keys and JWT signing keys. Exactly 32 bytes, so 32 ASCII characters. Required in production.
HEPHAESTUS_SECURITY_PRIOR_CREDENTIAL_ENCRYPTION_KEYhephaestus.security.prior-credential-encryption-keyserverPrevious credential key, still used to decrypt credentials stored under its version during a key rotation. Exactly 32 bytes. Set it together with prior-credential-encryption-key-version.
HEPHAESTUS_SECURITY_PRIOR_CREDENTIAL_ENCRYPTION_KEY_VERSIONhephaestus.security.prior-credential-encryption-key-versionserverVersion number of the previous credential key. Set it together with prior-credential-encryption-key.

hephaestus.sync​

VariableSettingApplication defaultContainersDescription
SYNC_COOLDOWN_MINUTEShephaestus.sync.cooldown-minutesprod: 60serverMinimum minutes between consecutive sync operations.
SYNC_CRONhephaestus.sync.cronprod: 0 0 * * * *serverCron expression for scheduled sync execution.
SYNC_RUN_ON_STARTUPhephaestus.sync.run-on-startupprod: trueserverWhether to trigger a sync run immediately when the application starts.
SYNC_TIMEFRAME_DAYShephaestus.sync.timeframe-daysprod: 7serverNumber of days to look back when synchronizing pull requests.

hephaestus.webhook​

VariableSettingApplication defaultContainersDescription
WEBHOOK_ROUTING_PREVIOUS_SECREThephaestus.webhook.routing.previous-secretdefault: (empty)serverPrevious routing key that the receiver still accepts during a rotation. Keep it until every hook signed with it is replaced. Requires routing.secret and must differ from it.
WEBHOOK_ROUTING_SECREThephaestus.webhook.routing.secretdefault: (empty)serverKey that signs the webhook token of each GitLab connection and derives the signing secret of each Outline subscription. At least 32 characters, and must differ from the webhook secret. GitLab and Outline webhook registration is skipped when it is unset.
WEBHOOK_SECREThephaestus.webhook.secretdefault: (empty)serverShared secret that verifies GitHub webhook signatures. The server requires at least 32 printable ASCII characters without spaces, also on an instance without GitHub. Must differ from both routing secrets.

hephaestus.workspace​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_WORKSPACE_CREATIONPOLICYhephaestus.workspace.creation-policydefault: ADMIN_ONLYserverWho creates workspaces. Under ADMIN_ONLY, instance admins create them, and a GitHub App installation waits until an instance admin adopts it. Under SELF_SERVICE, every signed-in user can create one, and each GitHub App installation creates its own.
HEPHAESTUS_WORKSPACE_SUBDOMAINS_BASE_DOMAINhephaestus.workspace.subdomains.base-domaindefault: (empty)serverDomain under which each workspace gets its subdomain, such as hephaestus.build. Lowercase ASCII without a scheme, port or path, at most 189 characters. Required when subdomains are enabled.
HEPHAESTUS_WORKSPACE_SUBDOMAINS_ENABLEDhephaestus.workspace.subdomains.enableddefault: falseserverGives each workspace its own subdomain address on the base domain. Authentication and the API stay on the apex domain. Prepare DNS, TLS and OAuth callbacks before you turn it on.

management.opentelemetry​

VariableSettingApplication defaultContainersDescription
TRACING_OTLP_ENDPOINTmanagement.opentelemetry.tracing.export.otlp.endpointdefault: http://localhost:4318/v1/tracesserverURL to the OTel collector's HTTP API.

management.server​

VariableSettingApplication defaultContainersDescription
MANAGEMENT_SERVER_ADDRESSmanagement.server.addressserverNetwork address to which the management endpoints should bind. Requires a custom management.server.port.

management.tracing​

VariableSettingApplication defaultContainersDescription
TRACING_OTLP_ENABLEDmanagement.tracing.export.otlp.enableddefault: falseserverWhether auto-configuration of tracing is enabled to export OTLP traces.
TRACING_SAMPLING_PROBABILITYmanagement.tracing.sampling.probabilitydefault: 0.0serverProbability in the range from 0.0 to 1.0 that a trace will be sampled.

server.tomcat​

VariableSettingApplication defaultContainersDescription
HEPHAESTUS_TRUSTED_PROXIESserver.tomcat.remoteip.internal-proxiesprod: (empty)serverInternal proxies that are to be trusted. Can be set as a comma separate list of CIDR or as a regular expression.

spring.application​

VariableSettingApplication defaultContainersDescription
APP_VERSIONspring.application.version
logging.structured.ecs.service.version
default: 0.0.0-development; default: ${spring.application.version}server, migrationVersion that the application reports in its logs, traces and release card. The deployment sets it from the release. Each log record names this version as its service version.

spring.datasource​

VariableSettingApplication defaultContainersDescription
DATABASE_PASSWORDspring.datasource.passwordprod: (empty)server, migrationLogin password of the database.
DATABASE_URLspring.datasource.urlprod: (empty)server, migrationJDBC URL of the database.
DATABASE_USERNAMEspring.datasource.usernameprod: (empty)server, migrationLogin username of the database.
SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZEspring.datasource.hikari.maximum-pool-sizeserver, migrationMost PostgreSQL connections that one process holds in its pool. A server can hold two connections per running review. Keep the sum over all processes below the PostgreSQL connection limit.
SPRING_DATASOURCE_HIKARI_MINIMUM_IDLEspring.datasource.hikari.minimum-idleserver, migrationThe minimum number of idle database connections that this process tries to keep in its pool.

spring.mail​

VariableSettingApplication defaultContainersDescription
SPRING_MAIL_HOSTspring.mail.hostdefault: (empty)serverSMTP server host. For instance, 'smtp.example.com'.
SPRING_MAIL_PASSWORDspring.mail.passworddefault: (empty)serverLogin password of the SMTP server.
SPRING_MAIL_PORTspring.mail.portdefault: 587serverSMTP server port.
SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTHspring.mail.properties[mail.smtp.auth]default: trueserverAdditional JavaMail Session properties.
SPRING_MAIL_PROPERTIES_MAIL_SMTP_SSL_ENABLEspring.mail.properties[mail.smtp.ssl.enable]default: falseserverAdditional JavaMail Session properties.
SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLEspring.mail.properties[mail.smtp.starttls.enable]default: trueserverAdditional JavaMail Session properties.
SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_REQUIREDspring.mail.properties[mail.smtp.starttls.required]default: trueserverAdditional JavaMail Session properties.
SPRING_MAIL_USERNAMEspring.mail.usernamedefault: (empty)serverLogin user of the SMTP server.

spring.profiles​

VariableSettingApplication defaultContainersDescription
SPRING_PROFILES_ACTIVEspring.profiles.activeserver, migrationComma-separated list of active profiles. Can be overridden by a command line switch.