HoneyHive versions four customer Helm charts independently:
hive-control-plane, hive-data-plane, honeyhive-clickhouse-keeper, and chi-installation. Entries on or after July 28, 2026, name the applicable chart. Earlier entries use one shared version for the self-hosting bundle. Releases with no customer-visible changes do not appear in this changelog. A chart version does not track the bundled software version. Check the chart’s appVersion for its software version.hive-control-plane v1.9.0
- This release ships HoneyHive platform v1.9.0. The chart’s
appVersionand the default HoneyHive workload and job image tags inhive-control-plane/values.yamlare nowv1.9.0. Third-party image tags are unchanged. See the Product changelog for the platform changes. - New
common.containerSecurityContextapplies a hardened containersecurityContextto every HoneyHive service, init, and job container. Defaults:allowPrivilegeEscalation: false,runAsNonRoot: true,runAsUser: 65532,runAsGroup: 65532,readOnlyRootFilesystem: true,capabilities.drop: [ALL], andseccompProfile.type: RuntimeDefault. The HoneyHive images run as UID 65532 and write nothing to their own filesystem, so no scratch volume is needed (cp-frontend-service’s Next.js cache already has its ownemptyDir). - New per-workload overrides via
<service>.containerSecurityContext, for examplecpBackendService.containerSecurityContext,cpFrontendService.containerSecurityContext,jobs.containerSecurityContext, andjobs.statsdExporter.containerSecurityContext. Keys merge one at a time and the per-service value wins, so you can relax a single field (for examplereadOnlyRootFilesystem: false) without restating the whole map. Settingcommon.containerSecurityContext: {}with no per-service override renders no containersecurityContextat all. - Every ServiceAccount the chart creates (cp-backend, cp-controller, cp-frontend, cp-notification, cp-writer, and the shared jobs ServiceAccount) now sets
automountServiceAccountToken: false, and the statsd exporter Deployment sets the same field on its pod spec. Pods no longer receive the default Kubernetes API credential at/var/run/secrets/kubernetes.io/serviceaccount. No HoneyHive workload calls the Kubernetes API, and IAM Roles for Service Accounts is unaffected because the EKS webhook injects its own projected token volume. - Every workload now sets both
AWS_REGIONandAWS_DEFAULT_REGIONfromcommon.region(default:us-west-2), instead of only some containers settingAWS_REGION. This stops AWS SDKs, in particular Python’s botocore/boto3, which ignoresAWS_REGION, from falling back to the instance metadata service to discover a region. Ifcommon.regionis overridden to an empty string, neither variable is rendered at all (previously an emptyAWS_REGIONwas rendered on some workloads and treated by the SDKs as a real, invalid region), which leaves the SDKs’ normal region resolution intact. - The nginx sidecar security context (
common.nginxSidecar.securityContext) now also setsseccompProfile.type: RuntimeDefault. - Fixed alert notification emails omitting their dashboard, alert, and alert-settings links. cp-notification-service now receives
FRONTEND_PUBLIC_URLfromcommon.auth.frontendPublicUrl, which is already required for login (default:""). If it is unset, emails still send but their links remain omitted. - Action Required (only if you pin HoneyHive image tags): set your tag overrides to
v1.9.0before upgrading. Overlays that use the chart defaults need no changes. - Action Required (only if you have added a sidecar or a mutating webhook to these pods that relies on the automounted Kubernetes API token): mount it explicitly with a
serviceAccountTokenprojected volume.
hive-data-plane v1.9.0
- This release ships HoneyHive platform v1.9.0. The chart’s
appVersionand the default HoneyHive workload and job image tags inhive-data-plane/values.yamlare nowv1.9.0. Third-party image tags are unchanged. See the Product changelog for the platform changes. - New
common.containerSecurityContextapplies a hardened containersecurityContextto every HoneyHive service, init, and job container. Defaults:allowPrivilegeEscalation: false,runAsNonRoot: true,runAsUser: 65532,runAsGroup: 65532,readOnlyRootFilesystem: true,capabilities.drop: [ALL], andseccompProfile.type: RuntimeDefault. The HoneyHive images run as UID 65532 and write nothing to their own filesystem, with one exception handled by the chart: dp-pythonmetric-service now mounts anemptyDirat/tmpfor gunicorn’s worker heartbeat files and the Prometheus multiprocess registry. - New per-workload overrides via
<service>.containerSecurityContext, for exampledpBackendService.containerSecurityContext,dpPythonmetricService.containerSecurityContext, andjobs.containerSecurityContext(covers the S3 time-window backfill Job and the legacy federated migration Job). Theprepare-certsinit container inherits the security context of the service it runs in, so override it underdpLlmproxyService.containerSecurityContextordpPythonmetricService.containerSecurityContext. Per-service keys merge into the global map one key at a time and win on conflict, so you can relax a single field (for examplereadOnlyRootFilesystem: false) without restating the whole map. Settingcommon.containerSecurityContext: {}with no per-service override renders no containersecurityContextat all. - Every ServiceAccount the chart creates (dp-backend, dp-controller, dp-evaluation, dp-ingestion, dp-llmproxy, dp-pythonmetric, and the shared jobs ServiceAccount) now sets
automountServiceAccountToken: false. Pods no longer receive the default Kubernetes API credential at/var/run/secrets/kubernetes.io/serviceaccount. No HoneyHive workload calls the Kubernetes API, and IAM Roles for Service Accounts is unaffected because the EKS webhook injects its own projected token volume. - Every workload, including all jobs, now sets both
AWS_REGIONandAWS_DEFAULT_REGIONfromcommon.region(default:us-west-2), instead of only some containers settingAWS_REGION. This stops AWS SDKs, in particular Python’s botocore/boto3, which ignoresAWS_REGION, from falling back to the instance metadata service to discover a region. Ifcommon.regionis overridden to an empty string, neither variable is rendered at all (previously an emptyAWS_REGIONwas rendered on some workloads and treated by the SDKs as a real, invalid region), which leaves the SDKs’ normal region resolution intact. - dp-pythonmetric-service no longer receives the Postgres connection URL, the
REDIS_MASTER_HOST/REDIS_REPLICAS_HOST/REDIS_MASTER_PORT/REDIS_REPLICAS_PORT/REDIS_PASSWORDvariables, or theHH_ENCRYPTION_KEY_ID/HH_ENCRYPTION_SECRETvariables. The service reads none of them, so it no longer depends on the Secrets named bycommon.externalSecrets.postgres,common.externalSecrets.redis, andcommon.externalSecrets.encryption; its pods now start even when those Secrets are absent. Other data-plane services still consume all three, so keepcommon.externalSecrets.*,redis.*, andcommon.encryption.*configured as before. No values change is required. - The nginx sidecar security context (
common.nginxSidecar.securityContext) now also setsseccompProfile.type: RuntimeDefault. - Fixed the
prepare-certsinit container that builds the merged CA bundle for dp-llmproxy-service and dp-pythonmetric-service whencommon.tls.caCertsis set. It no longer requires a shell orcatin the service image, so it works on shell-less (distroless) images where it previously failed immediately and blocked the pod from starting. It builds the same/certs/ca-bundle.pem(the image’s system trust store followed by each*.crtfrom yourcommon.tls.caCertsConfigMap, consumed viaSSL_CERT_FILEandREQUESTS_CA_BUNDLE) and now fails with a clear error if the image’s system CA bundle is missing rather than emitting a bundle without it. The init container also declares resources (requests:10mCPU /32Mimemory; limits:50mCPU /64Mimemory). Kubernetes schedules on the larger of the init container’s request and the app containers’ combined request, so at the chart’s default service requests your pods’ scheduling footprint does not change. - Action Required (only if you pin HoneyHive image tags): set your tag overrides to
v1.9.0before upgrading. Overlays that use the chart defaults need no changes. - Action Required (only if you have added a sidecar or a mutating webhook to these pods that relies on the automounted Kubernetes API token): mount it explicitly with a
serviceAccountTokenprojected volume.
hive-control-plane v1.8.0
- This release ships HoneyHive platform v1.8.0. The chart’s
appVersionand the default HoneyHive workload and job image tags inhive-control-plane/values.yamlare nowv1.8.0. Third-party image tags are unchanged. See the Product changelog for the platform changes. - New
common.auth.scopes(unset by default) for additional space-separated OAuth scopes requested at login, rendered as theAUTH_SCOPESenv var on the frontend Deployment.openid email profileis always requested, so list only extra scopes. Leaving the key unset renders noAUTH_SCOPESvariable and preserves existing behavior. - Identity providers that scope access tokens per resource (for example Microsoft Entra ID) must also request the scope of the API exposed for this deployment; otherwise the access token is issued for the provider’s own API and fails verification. For Entra ID, set
common.auth.scopes: "api://<client-id>/access_as_user". - When
ingress.tls.enabled: true, the HTTP and gRPC ALB Ingress resources now carry thealb.ingress.kubernetes.io/ssl-policyannotation taken fromingress.tls.sslPolicy(default:ELBSecurityPolicy-TLS13-1-2-2021-06). These two listeners previously fell back to the AWS Load Balancer Controller’s default policy, so the negotiated TLS versions and ciphers may change on upgrade. - Every service and job container now sets
HH_SERVICE_NAMEto its service name, so structured logs keep their service name even whencommon.observability.otel.enabled: false. When OpenTelemetry is enabled,OTEL_SERVICE_NAMEstill takes precedence. No values change is required. - Fixed the
wait-for-cp-backendinit container of thecron-alert-transitions-long-range-on-deployJob. On job images without a shell, the init container failed immediately and the post-deploy job never ran. It now pollshttp://<cpBackendService.name>:<cpBackendService.port>/healthcheckfor up to 20 attempts with a 5s request timeout and 10s between attempts (about 290s). - Action Required (only if you pin HoneyHive image tags): set your tag overrides to
v1.8.0before upgrading. Overlays that use the chart defaults need no changes. - Action Required (only if you override
ingress.tls.sslPolicyto an empty string): set it to a non-empty AWS policy name. With TLS enabled, an empty value now fails rendering withingress.tls.sslPolicy is required when ingress.tls.enabled is true. - Action Required (only if you raise
jobs.alertTransitionsLongRange.jobTimeoutMs, default:600000): raisejobs.alertTransitionsLongRange.activeDeadlineSeconds(default:900) by at least as much. The deadline runs from the Job’s start time and covers the backend wait; exceeding it fails the Job with no retry.
hive-data-plane v1.8.0
- This release ships HoneyHive platform v1.8.0. The chart’s
appVersionand the default HoneyHive workload and job image tags inhive-data-plane/values.yamlare nowv1.8.0. Third-party image tags are unchanged. See the Product changelog for the platform changes. - When
ingress.tls.enabled: true, every ALB Ingress rendered by the chart now carries thealb.ingress.kubernetes.io/ssl-policyannotation taken fromingress.tls.sslPolicy(default:ELBSecurityPolicy-TLS13-1-2-2021-06). These listeners previously fell back to the AWS Load Balancer Controller’s default policy, so the negotiated TLS versions and ciphers may change on upgrade. - Every service and job container now sets
HH_SERVICE_NAMEto its service name, so structured logs keep their service name even whencommon.observability.otel.enabled: false. When OpenTelemetry is enabled,OTEL_SERVICE_NAMEstill takes precedence. No values change is required. - Removed the Sentry Secret and the
secrets.sentryblock (secrets.sentry.enabled,secrets.sentry.dsns.*) fromhive-data-plane/values.yaml. The Secret was disabled by default and its contents were never consumed by any data-plane workload, so no data-plane service loses configuration. If you still setsecrets.sentry.*in your own values, the keys are now ignored and can be deleted. hive-data-plane/values.yamlnow documents supported keys that previously existed only in the templates, as commented-out entries with their defaults. Rendering behavior is unchanged; these keys already worked. Newly documented:nameOverride,fullnameOverride,global.labels,global.org,global.env,global.sregion,global.deployment,common.image.pullSecret,<service>.pdb.maxUnavailable,dpEvaluationService.resources,dpLlmproxyService.assumedRole(roleArn,roleSessionName,externalId,region),config, andsecrets.postgres.useExternalSecret/host/port/database/username.- Action Required (only if you pin HoneyHive image tags): set your tag overrides to
v1.8.0before upgrading. Overlays that use the chart defaults need no changes. - Action Required (only if you override
ingress.tls.sslPolicyto an empty string): set it to a non-empty AWS policy name. With TLS enabled, an empty value now fails rendering withingress.tls.sslPolicy is required when ingress.tls.enabled is true.
chi-installation v1.8.0
- New opt-in coordination-aware readiness probe for the ClickHouse server container, configured under
server.readinessProbeinchi-installation/values.yaml. Whenserver.readinessProbe.useReplicaCheckistrue, the chart sets anexecreadiness probe that queriessystem.replicasand marks the pod unready while any replicated table in an application database is read-only or has lost its ClickHouse Keeper session. This catches degraded replicas that still answer/pingwith HTTP 200, so traffic is withheld until coordination recovers. ClickHouse’s ownsystem,information_schema, andINFORMATION_SCHEMAdatabases are excluded from the check. - New probe timing keys, applied only when
server.readinessProbe.useReplicaCheckis enabled:server.readinessProbe.initialDelaySeconds(default:30),server.readinessProbe.periodSeconds(default:10),server.readinessProbe.timeoutSeconds(default:5),server.readinessProbe.failureThreshold(default:3), andserver.readinessProbe.successThreshold(default:1). - No default behavior change:
server.readinessProbe.useReplicaCheckdefaults tofalse, in which case the chart sets noreadinessProbeon the ClickHouse container and the ClickHouse Operator continues to inject its own default/ping-based probe. Disabling the flag reverts to that operator default rather than turning readiness checking off, so a standardhelm upgraderequires no action. - Enabling the probe changes the ClickHouse container’s pod spec, so the ClickHouse pods roll on the next
helm upgrade. Schedule the upgrade accordingly. A pod that restores a backup fails the replica check until the restore completes, so it stays unready during the restore. Take this into account on clusters that perform in-place restores.
hive-control-plane v1.7.2
- This release ships HoneyHive platform v1.7.0. The chart’s
appVersionand default HoneyHive workload image tags inhive-control-plane/values.yamlare nowv1.7.0. Third-party image tags are unchanged. See the Product changelog for the platform changes. - A standard
helm upgraderolls the pods that use the chart defaults. No configuration or template migration is required. - Action Required (only if you pin HoneyHive image tags): set your tag overrides to
v1.7.0before upgrading. Overlays that use the chart defaults need no changes.
hive-data-plane v1.7.2
- This release ships HoneyHive platform v1.7.0. The chart’s
appVersionand default HoneyHive workload image tags inhive-data-plane/values.yamlare nowv1.7.0. Third-party image tags are unchanged. See the Product changelog for the platform changes. - A standard
helm upgraderolls the pods that use the chart defaults. No configuration or template migration is required. - Action Required (only if you pin HoneyHive image tags): set your tag overrides to
v1.7.0before upgrading. Overlays that use the chart defaults need no changes.
v1.6.3
- No customer-facing chart changes. The packaged
hive-control-planeandhive-data-planeservice charts (values.yaml,templates/, andChart.yaml) are unchanged, so a standardhelm upgraderequires no action.
v1.6.2
- New custom annotations on service Deployment metadata in
hive-control-planeandhive-data-plane. Setcommon.deploymentAnnotations(default:{}) to apply a map of annotations to every service Deployment’smetadata.annotations, or<service>.deploymentAnnotations(default:{}) for a single service, which merges over the common map with per-service keys winning on conflict. Useful for GitOps controllers, config-reloaders, cost-allocation, and similar Deployment-level integrations. Both default empty and render identically to before when unset, so a standardhelm upgraderequires no action. - New per-service resource overrides in
hive-control-plane/values.yamlandhive-data-plane/values.yaml. Each service can now set its ownresourcesblock (CPU/memory requests and limits) instead of sharingcommon.resources. Newly configurable:dpBackendService.resources,cpBackendService.resources,cpFrontendService.resources,cpWriterService.resources, andcpNotificationService.resources(each default:{}, falling back tocommon.resources). Set any in your values overlay to override only that service, e.g.dpBackendService.resources.limits.memory: 4Gi. No action required for a standard upgrade. - New file-based license configuration in
hive-control-plane. Set the structured license document issued by HoneyHive under the top-levellicensekey (default: empty, feature off when unset). When set, the chart renders it into a newhive-control-plane-license-configConfigMap, mounts it into the cp-backend pod at/var/hh/license.yaml, and points the backend at it via theLICENSE_PATHenv var. See the annotated example block inhive-control-plane/values.yamlfor the full structure (title,version,license_id,license_type, andlicense_policyholdingcontrolplane_admin_emailsand allowedidentity_providers). - Deprecated
common.license(the inline key injected as theLICENSEenv var) in favor oflicense. It still works, but only as a fallback whenlicenseis unset, and will be removed in a future release. Recommended (not required): move your license into the newlicenseblock and removecommon.license. Whilelicenseis set it takes precedence andcommon.licenseis ignored; iflicenseis left empty the chart falls back tocommon.license, so existing deployments keep working until you migrate.
v1.6.0
- No customer-facing chart changes. The packaged
hive-control-planeandhive-data-planeservice charts (values.yaml,templates/, andChart.yaml) are unchanged, so a standardhelm upgraderequires no action.
v1.5.0
- Documented dozens of previously-undeclared configuration knobs in
hive-control-plane/values.yaml(name overrides,global.*,common.*, cp-controller tuning, per-service PDB alternates, frontend TLS policy, and a legacy config block). These are surfaced as commented, render-neutral documentation; merged values are unchanged, so a standardhelm upgraderequires no action. - Fixed the cp-controller PodDisruptionBudget so setting
cpControllerService.pdb.minAvailableorcpControllerService.pdb.maxUnavailabletonullnow omits the field instead of rendering an invalid empty value.maxUnavailable: 0still works, and default values render identically to v1.4.1. - Removed a dead beekeeper Sentry DSN block from the control-plane secrets template (the beekeeper service was retired). Template-only change, applied automatically on
helm upgrade.
v1.4.1
- No customer-facing chart changes. The packaged
hive-control-planeandhive-data-planeservice charts are unchanged, so a standardhelm upgraderequires no action.
v1.4.0
- New optional generic ALB backend Service overrides in
hive-control-plane/values.yamlandhive-data-plane/values.yaml, letting you route individual ALB backends to a mesh gateway or customer-managed reverse proxy Service instead of the HoneyHive app Services. All disabled by default, so no action is required for a standard upgrade. - Control-plane override keys:
ingress.backendServices.http.*(HTTP backend),ingress.backendServices.grpc.*(gRPC backend), andfrontendIngress.backendService.*(frontend backend), each withenabled,name,port,protocol, andhealthcheck.*fields. - Data-plane override keys:
ingress.backendServices.ingestion.*,ingress.backendServices.backend.*, andingress.backendServices.controller.*. When any data-plane override is enabled, the chart splits the data-plane ALB rules into separate Ingress resources so each target class gets its own backend protocol and health check annotations. - Each configured Service must be in the same namespace as the rendered ALB Ingress. With the default
healthcheck.port: status-port, the gateway Service must expose a port namedstatus-port; otherwise overridehealthcheck.portto match the gateway Service. Example: setingress.backendServices.http.enabled: truewithname: cp-http-gatewayandport: 443. - New optional gzip-capable nginx sidecars for
hive-control-planeandhive-data-planeservice pods, controlled bycommon.nginxSidecar.enabled(default:false). When enabled, HTTP Service traffic targets the nginx sidecar, which proxies to the app container over localhost and gzip-compresses responses; gRPC and metrics ports are unchanged. - nginx sidecar tuning keys and defaults:
common.nginxSidecar.port(default:18080),common.nginxSidecar.image.repository(default:nginxinc/nginx-unprivileged),common.nginxSidecar.image.tag(default:1.27-alpine),common.nginxSidecar.proxyReadTimeoutandproxySendTimeout(default:300s),common.nginxSidecar.clientMaxBodySize(default:64m),common.nginxSidecar.workerProcesses(default:1),common.nginxSidecar.upstreamKeepalive(default:16),common.nginxSidecar.gzip.compLevel(default:5),common.nginxSidecar.gzip.minLength(default:1024), plusgzip.types,securityContext, andresources(requests 100m CPU / 128Mi memory, limits 500m CPU / 512Mi memory). The sidecar runs non-root with a read-only root filesystem and anemptyDirat/tmp. To enable, setcommon.nginxSidecar.enabled: truein each chart where compression is needed.
v1.3.0
- New configurable ClickHouse connection pool size for control-plane services in
hive-control-plane/values.yaml:cpBackendService.clickhouseMaxOpenConnections,cpWriterService.clickhouseMaxOpenConnections,cpControllerService.clickhouseMaxOpenConnections, andcpNotificationService.clickhouseMaxOpenConnections(all default:50). Each sets the service’sCLICKHOUSE_MAX_OPEN_CONNECTIONSenv var; previously the pool size was not configurable from Helm values. No action required for a standard upgrade; override any of these keys in your values overlay if a service needs a different pool size. - New data-plane ALB route for
/v1/tracesinhive-data-plane, which now forwards to ingestion alongside the existing ingestion routes. - Fixed method-aware data-plane ALB routing for overlapping
/v1event and session paths.POST /v1/events,POST /v1/events/batch,POST /v1/sessions,POST /v1/sessions/{session_id}/events/batch, andPUT /v1/events/{event_id}route to ingestion;GET /v1/events/{event_id}andGET /v1/sessions/{session_id}now fall through to the data-plane backend instead of being captured by broader ingestion prefix routes;PUTandOPTIONSto/v1/events/{event_id}/enrichroute to the data-plane backend from the primary ingress (the separate wildcard ingress was removed). Template-only change, applied automatically onhelm upgrade. - Action Required (data-plane ALB ingress only): before upgrading environments with
ingress.enabled: truefor the data-plane chart, verify the AWS Load Balancer Controller is v2.4.3 or newer. The new ALB ingress relies on the controller preserving manifest order forImplementationSpecificpaths; on older controllers the overlapping/v1/eventsand/v1/sessionsroutes may be prioritized incorrectly afterhelm upgrade. Upgrade the controller first if needed. Standard values overlays need no changes.
v1.2.1
- No customer-facing chart changes. The packaged
hive-control-planeandhive-data-planeservice charts are unchanged, so a standardhelm upgraderequires no action.
v1.2.0
- No customer-facing chart changes. The packaged
hive-control-planeandhive-data-planeservice charts are unchanged, so a standardhelm upgraderequires no action.
v1.1.0
- New optional
prom/statsd-exporterdeployment for cp-jobs that bridges StatsD metrics emitted by job pods to a Prometheus/metricsscrape endpoint. Disabled by default, so no action is required unless you want to enable job metrics. - New
jobs.statsdExporter.enabled(default:false) inhive-control-plane/values.yaml. Set totrueto deploy the exporter. All new resources are gated on this key. - New
jobs.statsdExporter.name(default:"cp-jobs-statsd-exporter"),jobs.statsdExporter.image.repository(default:prom/statsd-exporter), andjobs.statsdExporter.image.tag(default:"v0.28.0"). - New
jobs.statsdExporter.statsdPort(default:9125, UDP port job pods send metrics to) andjobs.statsdExporter.metricsPort(default:9102, TCP port Prometheus or the Datadog Agent scrapes). - New
jobs.statsdExporter.podAnnotations(default:{}) for Datadog Agent autodiscovery checks, andjobs.statsdExporter.resources(requests: 10m CPU / 32Mi memory; limits: 100m CPU / 64Mi memory). - To enable job metrics scraping, set
jobs.statsdExporter.enabled: true. For Prometheus Operator, also setserviceMonitor.enabled: trueto auto-create a ServiceMonitor for themetricsport (9102). For Datadog, add anad.datadoghq.com/statsd-exporter.checksopenmetrics annotation tojobs.statsdExporter.podAnnotationspointing athttp://%%host%%:9102/metrics. - Fixed a manifest rendering bug that produced invalid YAML when
jobs.statsdExporter.enabled: true. Template-only fix, applied automatically onhelm upgradewith no values changes required.
v1.0.0
Initial 1.0.0 stable release. The federatedhive-control-plane and hive-data-plane chart layout is now GA. This release adds ACM cert auto-discovery support, dedicated metrics ports for dp-pythonmetric and dp-llmproxy, and two values key changes that may require overlay updates.Upgrade steps:- If you override
dpIngestionService.ports.metrics, rename the key todpIngestionService.metricsPortin your data-plane values overlay. The old nestedports.metricskey no longer exists; if you don’t rename, the dp-ingestion metrics port silently reverts to the default (9091). - If you use Prometheus Operator and relied on the default
serviceMonitor.enabled: true, addserviceMonitor.enabled: trueto both your control-plane and data-plane values overlays. The default was changed tofalseto avoid CRD-missing errors for customers who do not run Prometheus Operator. Without it, ServiceMonitor resources are not created and Prometheus stops scraping HoneyHive pods. - (Optional) To opt into ACM cert auto-discovery on the control-plane frontend ALB, leave
frontendIngress.tls.certificateArnempty (withfrontendIngress.tls.enabled: true) and setfrontendIngress.tls.hoststo the hostname(s) the ALB must serve. - (Optional) To opt into ACM cert auto-discovery on the data-plane ALB (primary + wildcard), leave
ingress.tls.certificateArnempty (withingress.tls.enabled: true) and setingress.tls.hoststo your data-plane hostname(s).
- Action Required:
serviceMonitor.enableddefault changed fromtruetofalsein bothhive-control-plane/values.yamlandhive-data-plane/values.yaml. The default wastruein v0.104.0, which caused Helm to render ServiceMonitor resources even when the Prometheus Operator CRDs were not installed, failing the deploy. If you use Prometheus Operator and relied on the default, addserviceMonitor.enabled: trueto both your control-plane and data-plane values overlays. Without it, ServiceMonitor resources are not created and Prometheus stops scraping HoneyHive pods. - Action Required:
dpIngestionService.ports.metricsrenamed todpIngestionService.metricsPortinhive-data-plane/values.yaml. The nestedports.metricskey was the only service using that structure; all other services use a flatmetricsPortkey. The old key no longer exists; if you don’t rename, the dp-ingestion metrics port silently reverts to the default (9091). - New
dpPythonmetricService.metricsPort(default:9091) anddpLlmproxyService.metricsPort(default:9091) inhive-data-plane/values.yamlfor dedicated Prometheus metrics ports on dp-pythonmetric and dp-llmproxy. WhenserviceMonitor.enabled: true, ServiceMonitors are now also created for these two services. - New
frontendIngress.tls.hosts(default:[]) inhive-control-plane/values.yamlandingress.tls.hosts(default:[]) inhive-data-plane/values.yamlfor ACM certificate auto-discovery.frontendIngress.tls.hostscontrols the control-plane frontend ALB;ingress.tls.hostscontrols the data-plane API ALB (applied to both the primary and wildcard Ingresses). Rendered asspec.tls[*].hostsso the AWS Load Balancer Controller can match an ACM cert by SNI/SAN whencertificateArnis empty. LeavecertificateArnempty (withtls.enabled: true) and settls.hoststo your hostname(s). - Fixed ACM certificate auto-discovery on the data-plane wildcard Ingress and control-plane frontend Ingress. Previously, leaving
certificateArnblank emitted an emptyalb.ingress.kubernetes.io/certificate-arnannotation that ArgoCD rejected with a nil-annotation error. The annotation is now omitted entirely whencertificateArnis empty. The control-plane frontend Ingress now contributes aspec.tls[*].hostscert-discovery hint whenfrontendIngress.tls.hostsis set, so HTTPS listener creation no longer fails on overlays that rely on auto-discovery. Overlays that set an explicitcertificateArncontinue to render identically.
v0.104.0
- Action Required:
common.dataplane.dpPublicUrldefault changed to""indata-plane/services/values.yaml. Set this to your environment’s public data plane URL (e.g.,"https://api.my-dp.example.com"). Without it, the Admin Center Data Planes view and/settings/project/keyspage show no URL. - Action Required:
dpIngestionServiceHPA defaults changed indata-plane/services/values.yaml.targetCPUUtilizationPercentageis now60(was80), and a newtargetMemoryUtilizationPercentage(default:60) was added. To keep prior behavior, set CPU to80and memory to0. - Action Required:
ingress.maxBodySizeremoved from bothcontrol-plane/services/values.yamlanddata-plane/services/values.yaml. Remove any overrides for this key. - Action Required:
ingress.authHostremoved fromcontrol-plane/services/values.yaml. Remove any overrides for this key. - Action Required:
jobs.serviceAccount.createnow defaults totruein both planes. Set tofalseif you manage the jobs ServiceAccount externally. - Action Required (ArgoCD users): Deployments omit
spec.replicaswhen autoscaling is enabled. AddignoreDifferenceswithjsonPointers: ["/spec/replicas"]for Deployment kind in your ArgoCD Application spec. - New
<service>.affinity(default:{}) for all CP/DP services andjobs.affinityfor CronJobs/batch jobs. SupportspodAffinity,podAntiAffinity, andnodeAffinity. - New
<service>.autoscaling.enabled(default:true) for all 11 CP/DP services. Set tofalseto disable HPA and pin replicas via<service>.replicas. - New
frontendIngress.tls.redirect(default:false) incontrol-plane/services/values.yaml. Whentrue, the ALB listens on HTTP:80 and redirects to HTTPS. - New
dpIngestionService.resources(default:{}) indata-plane/services/values.yamlfor per-service resource overrides on ingestion. - New
dpPythonmetricService.gunicornWorkers(default:4) anddpPythonmetricService.pythonExecutionTimeout(default:0.1) indata-plane/services/values.yamlfor tuning custom metric concurrency and per-metric runtime. - New
cpNotificationService.ses.domain,.ses.rps(default:14),.ses.senderRoleArn,.ses.senderRoleDurationSeconds(default:3600) incontrol-plane/services/values.yamlfor SES email sender configuration. - New
serviceMonitor.enabled(default:true),serviceMonitor.namespace(default:"monitoring"),serviceMonitor.labels(default:{release: monitoring}),serviceMonitor.interval(default:"30s"),serviceMonitor.scrapeTimeout(default:"10s") in both planes for Prometheus Operator ServiceMonitor support. - New
<service>.metricsPort(default:9091), a dedicated Prometheus metrics port for all CP/DP services. ingress.hostandingress.grpcHostnow accept a string or a list of strings for multi-host ingress support.- Deployments no longer reset replica count on
helm upgradewhen autoscaling is enabled. - Fixed NATS anti-affinity selector to correctly distinguish nats-box from nats server pods.
- Custom CA certs from
common.tls.caCertsnow apply to the DP S3 backfill Job. - Added
app.kubernetes.io/versionlabel and OTelservice.versionattribute to all CP/DP services. - Distributed tracing is now correctly emitted from
dp-backend,dp-llmproxy, anddp-controller(theOTEL_ENABLED=trueenv var was previously missing on these deployments). - Ingress routing improvements:
/v1/events/*/annotateroutes to dp-backend,/v1/*ingestion paths route to ingestion-service, API and frontend traffic use separate ALBs. - Fixed PDB template to correctly handle
minAvailable: 0andmaxUnavailable: 0.
v0.103.0
- New
jobsconfiguration block incontrol-plane/services/values.yamlfor Kubernetes CronJobs that process alert transitions - New
jobsconfiguration block indata-plane/services/values.yamlfor operator-triggered S3 time-window backfill batch workloads - New per-service keys:
<service>.service.annotations(default:{}),<service>.service.labels(default:{}),<service>.service.type(default:"ClusterIP") now exposed oncpWriterService,cpControllerService,cpNotificationService,dpControllerService,dpIngestionService,dpEvaluationService,dpLlmproxyService,dpPythonmetricService— previously hardcoded - Service port protocol hints (
name: http,protocol: TCP,appProtocol: http/grpc) added to all service templates for correct L7 traffic classification by service meshes (Istio, Linkerd) appProtocoladded to ClickHouse instance Service ports (http,interserver,metrics:appProtocol: http;native:appProtocol: tcp)- ClickHouse instances
chi-installationchart version bumped from1.1.6to1.1.7 - No breaking changes — fully backward-compatible with v0.102.0 configurations
v0.102.0
- New
podAnnotations(default:{}) incontrol-plane/infrastructure/clickhouse/clickhouse_instances/values.yamlfor arbitrary annotations on ClickHouse pods (useful for Datadog autodiscovery, Prometheus scraping) - Fixed missing
DP_DATABASE_URLenv var in dp-pythonmetric-service deployment template, now reads fromcommon.externalSecrets.postgres.secretName/uriKeylike all other data-plane services - No breaking changes — fully backward-compatible with v0.101.0 configurations
v0.101.0
- Disabled ClickHouse replica check before attaching backup parts (
CLICKHOUSE_CHECK_REPLICAS_BEFORE_ATTACHset to"false"in backup container) - prevents backup restore failures in environments where replica availability cannot be confirmed - ClickHouse instances
chi-installationchart version bumped from1.1.5to1.1.6 - No breaking changes — fully backward-compatible with v0.100.0 configurations
v0.100.0
- New
ingress.albClassName(default:"alb") andfrontendIngress.albClassName(default:"alb") in control-plane and data-plane services for configurable ALB ingress class- Useful for shared CP+DP cluster scenarios where each plane needs its own ALB IngressClass (e.g.,
"cp-alb","dp-alb") - Existing deployments using the default
"alb"class require no changes
- Useful for shared CP+DP cluster scenarios where each plane needs its own ALB IngressClass (e.g.,
- New scheduling config for CP prometheus-nats-exporter in
control-plane/infrastructure/nats/values.yaml:prometheusExporter.tolerations,prometheusExporter.nodeSelector,prometheusExporter.affinity,prometheusExporter.additionalLabels common.extraLabelsnow propagated to all Service, ServiceAccount, HPA, and Ingress resources across both planes (previously only applied to Deployments)
v0.99.3
- Action Required: Add
common.controlPlane.idindata-plane/services/values.yaml- set it to matchcommon.controlPlane.idfrom your control-plane values. Without this,dp-controller-servicecannot identify its parent control plane, causing data-plane-to-control-plane communication failures - New
global.labels(default:{}) incontrol-plane/infrastructure/nats/values.yamlanddata-plane/infrastructure/nats/values.yaml- applied to all NATS-generated Kubernetes resources (StatefulSet, Service, PVC, ConfigMap, PDB, etc.) - New
nack.additionalLabels,nack.tolerations,nack.nodeSelector,nack.affinityin control-plane NATS values for JetStream Controller scheduling prometheusExporter.additionalLabelsnow propagated to Prometheus NATS Exporter Deployment, Service, and ServiceMonitor labels in both planes- Fixed
topologySpreadConstraintstypo in control-plane NATS values (topolicySpreadConstraints→topologySpreadConstraints)
v0.99.2
- ClickHouse instances
chi-installationchart version bumped from1.1.4to1.1.5incontrol-plane/infrastructure/clickhouse/clickhouse_instances/Chart.yaml
v0.99.1
- Fixed cp-notification-service healthcheck port - renamed env var from
EXPRESS_PORTtoPORTin deployment template - Control plane
hive-control-planechart version bumped from0.2.0to0.2.1
v0.99.0
- Added readiness and liveness probes (
GET /healthcheck) to all 9 service deployments across control-plane and data-plane cp-backend-serviceanddp-backend-serviceinclude a startup probe (allows up to 310s for Prisma migrations before liveness checks begin)- Eliminates intermittent 502 errors during rolling updates caused by traffic routing to pods not yet ready to serve
- No values.yaml changes required - probes use hardcoded values in deployment templates
v0.98.9
- Unified encryption configuration for cp-controller, dp-controller, and dp-llmproxy-service
- Supports at-rest encryption for identity management and provider secrets via KMS or environment variable mode
- New
common.encryption.keyIdvalue in both control-plane and data-plane services - New ExternalSecret templates for encryption in both control-plane and data-plane secret-store charts
- Replaced
dpLlmproxyService.kmsKeyIdwith unifiedHH_ENCRYPTION_KEY_IDandHH_ENCRYPTION_SECRETenv vars in dp-llmproxy-service - Fixed perpetual ArgoCD OutOfSync caused by Redis PDB
enabled: truein control-plane Redis - Action Required: Remove
dpLlmproxyService.kmsKeyIdfrom data-plane values and addcommon.encryption.keyIdin both control-plane and data-plane values
v0.98.1
- Added
common.extraLabelsfor custom governance/compliance labels on all Kubernetes resources (control-plane, data-plane, shared dependencies) - Added
common.observability.otel.exporterProtocol(default:"grpc") for OTLP exporter protocol configuration in data-plane - Added
dpLlmproxyService.kmsKeyId(default:"alias/hh-provider-secrets") for AWS KMS encryption of LLM provider secrets - Removed duplicate
common.observabilityblock in data-plane services values - Fixed Next.js cache permission errors in cp-frontend-service with
nextjs-cacheemptyDir volume - Fixed OTEL service name in cp-frontend-service (was hardcoded to
cp-controller-service) - Added custom CA certificate support (
SSL_CERT_FILE,REQUESTS_CA_BUNDLE) for dp-llmproxy-service and dp-pythonmetric-service - Added
DP_DATABASE_URLenv var and KMS config to dp-llmproxy-service - Fixed ClickHouse logging configuration (moved to
config.d/99-logger.xmlwithreplace="1") - Action Required: Set
common.extraLabelsif your organization requires specific labels on all resources
v0.90.17
- Added kube-prometheus-stack monitoring for both control-plane and data-plane (Prometheus, Grafana, Alertmanager with 30-day retention)
- Added Tempo for distributed tracing in both control-plane and data-plane
- Added Loki and Promtail for centralized log aggregation in control-plane
- Added legacy
nats-oldchart for backward compatibility - Added Datadog integration support for OTEL collectors (disabled by default, set
datadog.enabled: true) - Added
common.tls.caCertsdictionary for custom root CA certificates in data-plane - Added
common.controlPlane.apiPublicUrlfor data-plane to call control-plane API - Added resource limits for dp-llmproxy-service and dp-pythonmetric-service (500m/512Mi requests, 1000m/1Gi limits)
- Added persistent storage for ClickHouse Keeper (
storage.enabled: true,storage.size: "10Gi") - Updated ClickHouse Keeper image to
altinity/clickhouse-keeper:25.3.6.10034.altinitystable-alpine - Simplified ClickHouse Operator values from 903 lines to 29 lines
- Updated ExternalSecret API version from
v1beta1tov1(requires External Secrets Operator 0.9.0+) - Moved OTEL collector
nodeSelector/affinity/tolerationsunderopentelemetry-collectorkey - Action Required: Set
common.controlPlane.apiPublicUrlto your control-plane API endpoint - Action Required: Ensure ClickHouse Keeper persistent storage is enabled for production
- Action Required: Update External Secrets Operator to 0.9.0+ if not already
- Removed OpenUnison authentication infrastructure (all charts, operators, CRDs)
- Removed Nginx ingress infrastructure
- Added NATS infrastructure for data-plane with independent cluster deployment (3 replicas, JetStream, PDB)
- Disabled S3 DLQ and disk spool in writer service (
cpWriterService.dlq.enabled: false) - Added
frontendIngress.alb.annotationsfor custom ALB annotations - Removed PVC functionality from cp-writer-service
- Changed cp-frontend-service
NEXTJS_PORTenv var toPORT - Added auth config env vars (
AUTH_ISSUER_DOMAIN,AUTH_CLIENT_ID,AUTH_CLIENT_SECRET) to cp-frontend-service - Added NATS connection settings for data-plane services (dp-evaluation-service, dp-ingestion-service)
- Enabled Redis authentication in control-plane (
auth: true,existingSecret: redis-secrets) - Removed gRPC ingress from data-plane services
- Switched from NLB to ALB for both control-plane and data-plane ingress
- Added NATS HA streams configuration with configurable replicas
- Added
common.dataPlane.dpPublicUrlandcommon.controlPlane.frontendPublicUrlfor cross-plane communication - Added Prometheus monitoring for NATS (exporter on port 7777) and ClickHouse (built-in on port 9363)
- Added Redis authentication for data-plane (
auth: true,existingSecret: redis-secrets) - Fixed Redis PDB in data-plane (removed invalid
enabledfield) - Action Required: Remove any NLB-related values overrides and switch to ALB configuration
- Action Required: Remove any OpenUnison or Beekeeper-related overrides from values files
- Action Required: Configure auth secrets in AWS Secrets Manager with
client-secretandcp-jwt-private-key