github.com/kedacore/http-add-on
v0.15.0
#2404 most downloaded on Go modules
kedacore/http-add-on
What this package is like to depend on
Last release 13 days ago
10 Aug 2026
Ships fairly regularly
a new release about every 2 months
Most releases are documented
notes for 14 of 19 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
62 releases · first in 2020
11 releases in the last 12 months
see the full history below
Release timeline
62 releases · Nov 2020 to Aug 2026Releases
latest 60 of 62-
v0.15.1-0.20260810230530-fb57304d20e910 Aug 2026 pre-releaseNothing published for this version
-
v0.15.015 Jun 2026Release notes
Open source →Highlights
HTTP/2 and gRPC support (#1084)
The interceptor now supports HTTP/2 (h2c and h2 over TLS), enabling autoscaling of gRPC workloads. Backend transport is selected based on the Kubernetes
appProtocolfield on the Service port (#1676): cleartext backends default to HTTP/1.1 unlessappProtocol: kubernetes.io/h2cis set; TLS backends negotiate via ALPN.The
KEDA_HTTP_FORCE_HTTP2environment variable has been removed — HTTP/2 is now negotiated automatically.Cold-start placeholder responses (#874)
New
coldStart.placeholdersupport lets you return static HTTP responses while a workload scales from zero, instead of holding the request until a pod is ready.Scaler resilience (#1667)
The scaler now tolerates partial interceptor pod failures instead of restarting on a single unreachable endpoint. Last-known concurrency is cached for unreachable pods to prevent underreporting.
Graceful shutdown (#1636)
The interceptor now drains in-flight requests before exiting. It waits for active handlers to complete (bounded by
KEDA_HTTP_DRAIN_TIMEOUT), marks the readiness probe unhealthy immediately on SIGTERM, and delays listener closure byKEDA_HTTP_SHUTDOWN_DELAYto let Kubernetes propagate endpoint removal.Deprecations
KEDAHTTP_OPERATOR_EXTERNAL_SCALER_SERVICEandKEDAHTTP_OPERATOR_EXTERNAL_SCALER_PORThave been renamed toKEDA_HTTP_OPERATOR_EXTERNAL_SCALER_SERVICEandKEDA_HTTP_OPERATOR_EXTERNAL_SCALER_PORT. Old names still work but log a deprecation warning. (#1623)
What's Changed
- fix(deps): update module github.com/cert-manager/cert-manager to v1.19.5 by @renovate[bot] in #1612
- fix: disable digest pinning for kindest/node in renovate by @linkvt in #1614
- chore: group e2e-framework with Kubernetes deps in renovate by @linkvt in #1613
- chore(deps): update e2e dependencies by @renovate[bot] in #1615
- chore(deps): update dependency golangci/golangci-lint to v2.12.1 by @renovate[bot] in #1616
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1611
- chore: remove unused .dockerignore file by @linkvt in #1621
- ci: add stable e2e summary job for branch protection by @linkvt in #1618
- chore: improve OpenSSF Scorecard security posture by @linkvt in #1620
- fix(ci): add retry logic to e2e Helm dependency installs by @Fedosin in #1584
- fix: rename KEDAHTTP_OPERATOR_EXTERNAL_SCALER_* env vars to KEDA_HTTP_OPERATOR_EXTERNAL_SCALER_* by @Fedosin in #1623
- fix: use downward API for namespace env vars instead of hardcoded value by @Fedosin in #1625
- chore: add OpenSSF and community badges to README by @linkvt in #1624
- chore(deps): update github actions by @renovate[bot] in #1630
- chore(deps): update dependency golangci/golangci-lint to v2.12.2 by @renovate[bot] in #1629
- chore(deps): update ghcr.io/wolfi-dev/static:alpine docker digest to de720d5 by @renovate[bot] in #1627
- fix(deps): update k8s.io/utils digest to ff6756f by @renovate[bot] in #1628
- chore: flatten nested checklist in PR template by @linkvt in #1632
- chore: exclude gnu.org/make from lychee link checks by @linkvt in #1631
- feat: add native Go fuzz tests for untrusted-input surfaces by @Fedosin in #1599
- chore(deps): update actions/upload-artifact action to v7 by @renovate[bot] in #1642
- chore(deps): update github/codeql-action action to v4.35.5 by @renovate[bot] in #1638
- chore(deps): update e2e dependencies by @renovate[bot] in #1640
- fix(deps): update go dependencies (non-major) to v0.34.8 by @renovate[bot] in #1639
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1641
- docs: reference new e2e test suite in contributor docs by @linkvt in #1635
- chore: remove old HTTPSO examples by @linkvt in #1643
- Replace gorilla/websocket with coder/websocket by @Akram-saj in #1633
- fix(deps): update module github.com/coder/websocket to v1.8.14 by @renovate[bot] in #1650
- perf: strip managed fields from controller-runtime cache by @linkvt in #1651
- chore(deps): update module golang.org/x/net to v0.55.0 [security] by @renovate[bot] in #1652
- chore(deps): update github actions by @renovate[bot] in #1653
- chore(deps): update helm release opentelemetry-collector to v0.156.2 - autoclosed by @renovate[bot] in #1654
- ci: add workflow to block PRs with 'on hold' label by @linkvt in #1647
- feat: add coldStart.placeholder support for static responses by @linkvt in #1626
- feat(scaler): add observability (metrics + tracing) to the external scaler by @Fedosin in #1634
- chore(deps): update helm release opentelemetry-collector to v0.158.0 by @renovate[bot] in #1660
- fix: filter GetMetrics response by requested metric name by @linkvt in #1664
- feat: add s390x to release platforms by @linkvt in #1663
- chore: clean up README and remove outdated files by @linkvt in #1666
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1661
- fix(interceptor): close request body to prevent panic by @linkvt in #1669
- fix(deps): update go dependencies (non-major) to v1.44.0 by @renovate[bot] in #1673
- chore(deps): update github actions by @renovate[bot] in #1671
- chore(deps): update e2e dependencies by @renovate[bot] in #1672
- fix: drain in-flight requests on shutdown by @linkvt in #1648
- feat: add gRPC and HTTP/2 support to interceptor by @linkvt in #1658
- chore: use pinned version comments for GitHub Actions by @linkvt in #1674
- fix: tolerate partial interceptor pod failures in scaler by @Fedosin in #1670
- feat: select backend transport via service appProtocol by @linkvt in #1678
- chore: pin helm version and add timeouts to e2e helm installs by @linkvt in #1686
- fix(deps): update go dependencies (non-major) to v0.34.9 by @renovate[bot] in #1682
- chore(deps): update ghcr.io/wolfi-dev/static:alpine docker digest to 6a4616e by @renovate[bot] in #1680
- chore(deps): update pre-commit hooks to v2.5.0 by @renovate[bot] in #1683
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1684
- chore: prepare release v0.15.0 by @linkvt in #1687
New Contributors
- @Akram-saj made their first contribution in #1633
Full Changelog: v0.14.0...v0.15.0
Release notes
Open source →New
- General: Add s390x to supported release platforms (#1662)
- General: Add
coldStart.placeholdersupport for returning static HTTP responses during scale-from-zero (#874) - Interceptor: Add HTTP/2 support (h2c and h2 over TLS), enabling autoscaling of gRPC workloads (#1084)
- Interceptor: Select backend transport based on Kubernetes
appProtocolinstead of mirroring the client's protocol. Cleartext backends default to HTTP/1.1 unless the Service port setsappProtocol: kubernetes.io/h2c; TLS backends negotiate via ALPN (#1676) - Scaler: Add OpenTelemetry metrics and distributed tracing to the external scaler (#965)
Improvements
- General: Strip managed fields from controller-runtime cache to reduce memory consumption (#1651)
Fixes
- Interceptor: Fix graceful shutdown so in-flight requests are drained before the process exits. The interceptor now waits for active handlers to complete (bounded by
KEDA_HTTP_DRAIN_TIMEOUT), marks the readiness probe unhealthy immediately on SIGTERM, and delays listener closure byKEDA_HTTP_SHUTDOWN_DELAYto let Kubernetes propagate endpoint removal. (#1636) - Interceptor: Fix panic with "invalid concurrent Body.Read call" when reverse proxy fails without consuming the request body (#1668)
- Scaler: Fix incorrect HPA values when both concurrency and requestRate metrics are configured (#1659)
- Scaler: Tolerate partial interceptor pod failures instead of restarting the scaler on a single unreachable endpoint; cache last-known concurrency for unreachable pods to prevent underreporting (#1667)
Deprecations
- Interceptor: Remove
KEDA_HTTP_FORCE_HTTP2environment variable. This is not a breaking change — HTTP/2 is now negotiated automatically. (#1084) - Operator: Rename
KEDAHTTP_OPERATOR_EXTERNAL_SCALER_SERVICEandKEDAHTTP_OPERATOR_EXTERNAL_SCALER_PORTenvironment variables toKEDA_HTTP_OPERATOR_EXTERNAL_SCALER_SERVICEandKEDA_HTTP_OPERATOR_EXTERNAL_SCALER_PORT. Old names are still accepted but log a deprecation warning and will be removed in a future release. (#1623)
-
v0.14.024 Apr 2026Release notes
Open source →Breaking Changes
Interceptor timeout defaults changed (#1474)
Default timeout behavior has been redesigned.
KEDA_HTTP_REQUEST_TIMEOUTnow defaults to0(disabled),KEDA_HTTP_RESPONSE_HEADER_TIMEOUTdefaults to300s(was500ms), andKEDA_HTTP_READINESS_TIMEOUTdefaults to0(disabled, was20s). Timeout errors now return 504 instead of 502.The following environment variables have been removed:
KEDA_HTTP_TLS_HANDSHAKE_TIMEOUT,KEDA_HTTP_EXPECT_CONTINUE_TIMEOUT,KEDA_HTTP_KEEP_ALIVE,KEDA_HTTP_IDLE_CONN_TIMEOUT,KEDA_HTTP_DIAL_RETRY_TIMEOUT. These now use Go'sDefaultTransportdefaults.Interceptor metrics redesigned (#1563, #1590)
Metrics now use bounded labels:
path/hostreplaced byroute_name/route_namespace, and non-standard HTTP methods are normalized to_OTHER. Metrics have also been renamed to follow OTel semantic conventions:interceptor_requests_total→interceptor_request_count_total,interceptor_pending_requests→interceptor_request_concurrency. Dashboards must be updated.Highlights
New documentation (#1516)
The documentation has been completely rewritten and now lives at keda.sh/http-add-on. It features versioned docs, improved navigation, a quick start and guides for different personas (developers, cluster operators). The legacy in-repo docs have been removed.
InterceptorRoute CRD (#1532)
A new
InterceptorRouteCRD separates routing/interceptor configuration from scaling configuration.HTTPScaledObjectremains supported but is now deprecated — a warning is logged per resource to guide migration.See the user guide and the migration guide for details.
Per-route timeout configuration (#1562)
InterceptorRoute supports per-route timeouts via the
timeoutsspec withrequest,responseHeader, andreadinessfields. When unset, global env var defaults are used.Migration helper: orphan-scaledobject annotation (#1593)
The new
httpscaledobject.keda.sh/orphan-scaledobjectannotation lets you preserve the auto-created ScaledObject when deleting an HTTPScaledObject during migration to InterceptorRoute, avoiding scaling gaps.What's Changed
- refactor: simplify responseWriter using Unwrap pattern by @linkvt in #1555
- feat: implement InterceptorRoute CRD by @linkvt in #1532
- refactor: extract endpoint resolution into dedicated middleware by @linkvt in #1558
- chore(deps): update azure/setup-helm action to v5 by @renovate[bot] in #1561
- chore(deps): update github actions by @renovate[bot] in #1560
- refactor: move RPS calculation from interceptor to scaler by @Fedosin in #1557
- refactor: add new e2e test suite by @linkvt in #1545
- fix: reduce OTEL_METRIC_EXPORT_INTERVAL from 1ms to 5s by @linkvt in #1564
- fix(deps): update go dependencies (non-major) (patch) by @renovate[bot] in #1566
- chore(deps): update e2e dependencies by @renovate[bot] in #1565
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1568
- chore(deps): update github actions by @renovate[bot] in #1567
- refactor: extract test cert generation into a shared helper by @linkvt in #1569
- fix: resolve semgrep findings by @linkvt in #1570
- feat: redesign interceptor metrics with bounded labels by @linkvt in #1563
- chore(deps): update helm release opentelemetry-collector to v0.150.0 by @renovate[bot] in #1574
- fix(deps): update module go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp to v0.68.0 by @renovate[bot] in #1576
- chore: switch whoami test image to ghcr.io by @linkvt in #1572
- feat: implement per-route timeout configuration by @linkvt in #1562
- chore(deps): update pre-commit hook thlorenz/doctoc to v2.4.1 by @renovate[bot] in #1575
- chore(deps): bump github.com/moby/spdystream from 0.5.0 to 0.5.1 by @dependabot[bot] in #1579
- chore: automate kind version updates via Renovate by @linkvt in #1573
- refactor: set Content-Type in interceptor queue endpoint handler by @linkvt in #1580
- ci: reduce lychee link checker flakiness by @linkvt in #1582
- feat: support OTEL_TRACES_SAMPLER and OTEL_TRACES_SAMPLER_ARG settings by @Fedosin in #1577
- chore(deps): update github actions by @renovate[bot] in #1586
- fix(deps): update go dependencies (non-major) to v0.34.7 (patch) by @renovate[bot] in #1587
- refactor/feat(e2e): improve test reliability and add new InterceptorRoute e2e tests by @Fedosin in #1583
- fix: restrict metrics endpoint to /metrics path by @linkvt in #1591
- refactor: align metric names with OTel semantic conventions by @linkvt in #1590
- refactor: nest cold-start fallback service fields under service key by @linkvt in #1588
- feat: log deprecation warning for HTTPScaledObject by @linkvt in #1595
- feat: require explicit targetValue in scaling metric specs by @linkvt in #1597
- refactor: simplify queue count types and fix RPS naming by @linkvt in #1581
- feat: add orphan-scaledobject annotation for HTTPSO->IR migration by @linkvt in #1593
- chore: remove kubebuilder scaffolding artifacts by @linkvt in #1598
- chore: remove legacy in-repo docs in favor of keda.sh by @linkvt in #1594
- chore: pin ko base image to digest and track with Renovate by @linkvt in #1605
- chore: prepare release v0.14.0 by @linkvt in #1607
Full Changelog: v0.13.0...v0.14.0
Release notes
Open source →Breaking Changes
- Interceptor: Change default timeout behavior: request timeout (
KEDA_HTTP_REQUEST_TIMEOUT) defaults to0(disabled), response header timeout (KEDA_RESPONSE_HEADER_TIMEOUT→KEDA_HTTP_RESPONSE_HEADER_TIMEOUT) defaults to300s(was500ms), and readiness timeout (KEDA_CONDITION_WAIT_TIMEOUT→KEDA_HTTP_READINESS_TIMEOUT) defaults to0(disabled, was20s). Timeout errors return 504 instead of 502. (#1474) - Interceptor: Redesign interceptor metrics with bounded labels:
path/hostlabels replaced byroute_name/route_namespace; non-standard HTTP methods normalized to_OTHER; dashboards must be updated (#1559) - Interceptor: Remove
KEDA_HTTP_TLS_HANDSHAKE_TIMEOUT,KEDA_HTTP_EXPECT_CONTINUE_TIMEOUT,KEDA_HTTP_KEEP_ALIVE,KEDA_HTTP_IDLE_CONN_TIMEOUT, andKEDA_HTTP_DIAL_RETRY_TIMEOUTenvironment variables; these now use Go'sDefaultTransportdefaults. (#1474) - Interceptor: Rename interceptor metrics to follow OTel semantic conventions:
interceptor_requests_total→interceptor_request_count_total,interceptor_pending_requests→interceptor_request_concurrency,interceptor_request_duration_secondsunchanged (#1589)
New
- General: Add
InterceptorRouteCRD to separate routing/interceptor config from scaling config;HTTPScaledObjectremains supported but will be deprecated in a future release (#1501) - Interceptor: Add per-route timeout configuration via InterceptorRoute
timeoutsspec withrequest,responseHeader, andreadinessfields. When unset, global env var defaults are used. When a fallback service is configured and no readiness timeout is set, it defaults to 30s. (#1474) - Operator: Add
httpscaledobject.keda.sh/orphan-scaledobjectannotation to preserve ScaledObjects during HTTPScaledObject-to-InterceptorRoute migration (#1593)
Improvements
- Interceptor: Support
OTEL_TRACES_SAMPLERandOTEL_TRACES_SAMPLER_ARGfor trace sampling configuration (#1534) - Scaler: Move request-rate calculation from interceptor to scaler for a consistent view of request rate across all interceptor replicas (#1557)
Fixes
- Interceptor: Restrict metrics endpoint to
/metricspath only, matching the Prometheus scrape convention (#1591)
Deprecations
- Interceptor: Deprecate
KEDA_CONDITION_WAIT_TIMEOUTandKEDA_RESPONSE_HEADER_TIMEOUTenvironment variables in favor ofKEDA_HTTP_READINESS_TIMEOUTandKEDA_HTTP_RESPONSE_HEADER_TIMEOUT. Old vars take precedence when set and log deprecation warnings. (#1474) - Operator: Log deprecation warning for HTTPScaledObject resources, guiding users to migrate to InterceptorRoute (#1595)
Other
- General: Remove legacy in-repo documentation in favor of keda.sh/http-add-on (#1516)
-
v0.13.1-0.20260414104838-bf3f2d9aaf7614 Apr 2026 pre-releaseNothing published for this version
-
v0.13.023 Mar 2026Release notes
Open source →What's Changed
- chore: replace Dependabot with Renovate by @linkvt in #1476
- chore: exclude existing revive var-naming lint issues by @linkvt in #1475
- chore: remove unused CurrentNamespace from interceptor config by @Fedosin in #1484
- fix: update roundToNDigits to use Round instead of Floor by @Fedosin in #1483
- chore(deps): update actions/checkout action to v6 by @renovate[bot] in #1486
- fix(deps): update module go.opentelemetry.io/otel/sdk to v1.40.0 [security] by @renovate[bot] in #1481
- fix: replace deprecated release asset upload actions by @linkvt in #1490
- refactor: replace kelseyhightower/envconfig with caarlos0/env by @linkvt in #1491
- chore: move renovate config to .github dir by @linkvt in #1480
- refactor: migrate build system from Docker to ko by @linkvt in #1465
- refactor: modernize code with go fix by @linkvt in #1494
- refactor: remove dead code identified by deadcode analysis by @linkvt in #1493
- chore: remove archived pre-commit-golang hook by @linkvt in #1495
- perf: add atomic endpoint readiness cache for O(1) hot-path checks by @Fedosin in #1472
- chore: replace hack/tools.go with go.mod tool directive by @linkvt in #1498
- ci: use stable Go version in CI workflows by @linkvt in #1499
- ci: replace keda-tools container with setup-go in CodeQL workflow by @linkvt in #1502
- chore: enable Renovate kubernetes manager for config/ and examples/ by @linkvt in #1503
- chore(config): migrate Renovate config by @renovate[bot] in #1504
- chore(deps): pin dependencies by @renovate[bot] in #1505
- chore(deps): pin golang docker tag to 8bbd140 by @renovate[bot] in #1506
- chore(deps): update pre-commit hook thlorenz/doctoc to v2.3.0 by @renovate[bot] in #1510
- fix(deps): update k8s.io/utils digest to b8788ab by @renovate[bot] in #1508
- chore(deps): update golang docker tag to v1.26.0 by @renovate[bot] in #1509
- chore: improve Renovate dependency grouping by @linkvt in #1507
- chore: remove unused .whitesource configuration by @linkvt in #1513
- fix: reorder Renovate packageRules so specific groups override catch-all by @linkvt in #1514
- chore: extend k8s renovate group with more related pkgs by @linkvt in #1515
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1511
- fix: fix flaky and skipped tracing e2e tests by @linkvt in #1517
- chore: configure renovate post-update options for Go modules by @linkvt in #1518
- refactor: modernize golangci-lint config and fix issues by @linkvt in #1497
- perf: replace global queue lock with per-host atomics and eliminate counting goroutines by @Fedosin in #1482
- fix: resolve golangci-lint v2.11.1 gosec and nolintlint issues by @Fedosin in #1522
- chore(deps): update github actions by @renovate[bot] in #1524
- chore(deps): update golang docker tag to v1.26.1 by @renovate[bot] in #1525
- chore(deps): update docker/login-action action to v4 by @renovate[bot] in #1529
- fix(deps): update go dependencies (non-major) by @renovate[bot] in #1526
- fix: remove configurable EndpointSlice informer resync interval by @Fedosin in #1485
- fix: drop semconv version-pinned import in favor of schemaless resources by @linkvt in #1531
- refactor(scaler): use WaitGroup.Go for queue pinger goroutines by @Fedosin in #1535
- docs: replace deprecated targetPendingRequests with scalingMetric in design.md by @Paul-Weaver in #1536
- chore: track golangci-lint version with renovate by @linkvt in #1537
- chore: group regex-managed action versions with GitHub Actions updates by @linkvt in #1539
- chore: provide minimal devcontainer config by @linkvt in #1538
- chore(config): migrate Renovate config by @renovate[bot] in #1540
- chore(deps): update github actions by @renovate[bot] in #1542
- refactor: replace homebrew endpoints cache with controller-runtime cache by @Fedosin in #1533
- tracing: Remove B3 trace propagation by @AtharvaPakade in #1543
- feat: add env-based TLS version, cipher suite, and curve configuration by @Fedosin in #1530
- fix(deps): update module google.golang.org/grpc to v1.79.3 [security] by @renovate[bot] in #1546
- chore(deps): update github actions by @renovate[bot] in #1553
- fix(deps): update k8s.io/utils digest to 28399d8 by @renovate[bot] in #1554
- chore: improve issue templates and add needs-triage label by @linkvt in #1552
- chore: prepare release v0.13.0 by @Fedosin in #1556
New Contributors
- @renovate[bot] made their first contribution in #1486
- @Paul-Weaver made their first contribution in #1536
- @AtharvaPakade made their first contribution in #1543
Full Changelog: v0.12.2...v0.13.0
Release notes
Open source →Breaking Changes
- Interceptor: Remove B3 (Zipkin) trace propagation, only W3C TraceContext and W3C Baggage are now supported (#1519)
Improvements
- Docs: Update design doc to use
scalingMetric/targetValueinstead of deprecatedtargetPendingRequests(#1536) - Interceptor: Add env-based TLS configuration for min/max version, cipher suites, and curve preferences (#1530)
- Interceptor: Reduce interceptor latency and memory usage under high concurrency (#1482)
- Interceptor: Speed up endpoint readiness checks with a fast lookup cache (#1472)
Fixes
- General: Fix
roundToNDigitsusingmath.Roundinstead ofmath.Floorto correctly round small negative floating-point errors to zero (#1483) - Interceptor: Remove configurable
KEDA_HTTP_ENDPOINTS_CACHE_POLLING_INTERVAL_MSand hardcode EndpointSlice informer resync to 60m (#1485) - Scaler: Remove unused
KEDA_HTTP_SCALER_DEPLOYMENT_INFORMER_RSYNC_PERIODenv var (#1533)
Other
- Interceptor: Remove unused
CurrentNamespacefield andKEDA_HTTP_CURRENT_NAMESPACEenv var from interceptor config (#1484)
-
v0.12.219 Feb 2026Release notes
Open source →Upgrade Notes
- Interceptor health probe endpoints moved to the admin port (
9090). No action needed if using the Helm chart. If you use custom external health checks (e.g., GCPHealthCheckPolicy), update them to target port9090for/readyzand/livez.
Improvements
- Interceptor: Increase default connection pool sizes for higher throughput (#1469)
Fixes
- Interceptor: Fix health probes failing when HTTPScaledObject has no hosts configured (#1447)
- Interceptor: Rework dial retry to tolerate slow Service IP propagation and add
KEDA_HTTP_DIAL_RETRY_TIMEOUT(#1449) - Interceptor: Set endpoint informer resync default to 1s to suppress warning (#1455)
Full Changelog: v0.12.1...v0.12.2
Release notes
Open source →Improvements
- Interceptor: Increase default connection pool sizes for higher throughput (#1469)
Fixes
- Interceptor health probe endpoints moved to the admin port (
-
v0.12.2-0.20260203135502-a832da311c6d03 Feb 2026 pre-releaseNothing published for this version
-
v0.12.103 Feb 2026Release notes
Open source →What's Changed
- chore: cleanup old docs and examples by @linkvt in #1430
- fix(interceptor): preserve upstream X-Forwarded headers by @linkvt in #1434
- chore(deps): bump docker/login-action from 3.6.0 to 3.7.0 in the all-updates group by @dependabot[bot] in #1438
- Add CodeQL by @JorTurFer in #1437
- chore: prepare release v0.12.1 by @linkvt in #1441
Full Changelog: v0.12.0...v0.12.1
Release notes
Open source →Fixes
- Interceptor: Preserve
X-Forwarded-ProtoandX-Forwarded-Hostheaders from upstream proxies (#1432)
-
v0.12.028 Jan 2026Release notes
Open source →Breaking Changes
HTTPScaledObject CRD must be updated (#1419)
You must update the HTTPScaledObject CRD before upgrading the operator. The
.status.conditionsfield now uses the standard Kubernetesmetav1.Conditionformat.If you have tooling that parses HTTPScaledObject conditions, update it to expect standard fields (
lastTransitionTime,observedGeneration).This fixes duplicate
Readyconditions that caused issues with GitOps tools like ArgoCD and Flux.Highlights
Wildcard host matching (#1411)
Use wildcard patterns like
*.example.comto match any subdomain with a single HTTPScaledObject.spec: hosts: - "*.example.com" # matches foo.example.com, bar.foo.example.com, etc.
HTTP header-based routing (#1289)
Route requests to different backends based on HTTP headers. Multiple HTTPScaledObjects can now match the same host and path with different header requirements.
apiVersion: http.keda.sh/v1alpha1 kind: HTTPScaledObject spec: hosts: - api.example.com headers: - name: X-API-Version value: v2 scaleTargetRef: name: api-v2
Performance improvements (#1404)
The interceptor now uses significantly less memory under load, with reduced memory growth over time. Latency is also improved for high-throughput workloads.
Full-duplex HTTP/1.1 support (#1386)
Bidirectional streaming now works correctly - response bodies can start streaming while request bodies are still being sent.
Configurable request logging (#1375)
Request logging in the interceptor is now optional. Disable it to reduce log volume in high-traffic environments.
What's Changed
- Update ADOPTERS.md for IMVARIA inc. by @dcb-imvaria in #1366
- interceptor: make request logging optional by @wozniakjan in #1375
- feat: add environment variables for leader election timing configuration by @nader-ziada in #1365
- fix broken link to propulsion ai by @wozniakjan in #1381
- chore: fix devcontainer build by updating deprecated Go tools by @linkvt in #1384
- ci: use GitHub-hosted ARM64 runners for e2e tests by @linkvt in #1389
- chore(deps): bump the all-updates group across 1 directory with 5 updates by @dependabot[bot] in #1377
- chore(deps): bump github.com/expr-lang/expr from 1.17.6 to 1.17.7 by @dependabot[bot] in #1401
- Improve interceptor performance and allocations by @linkvt in #1404
- ci: replace stale bot with official GitHub Actions stale action by @linkvt in #1398
- fix: spaces are allowed in project basepath (#1392) by @khauser in #1393
- fix: decouple connection retry backoff from TCP dial timeout by @linkvt in #1387
- fix: consolidate HTTPScaledObject status updates to prevent conflicts by @Fedosin in #1408
- fix: prevent duplicate conditions by matching on Type instead of Reason by @linkvt in #1395
- chore(deps): update OpenTelemetry semconv version to v1.37.0 by @jochbru in #1407
- ci: update e2e test k8s and kind versions by @linkvt in #1413
- feat: add wildcard host matching for HTTPScaledObject by @linkvt in #1411
- feat: expose and secure controller-runtime metrics by @khauser in #1369
- chore: Fix codeowner and add the notification flow by @JorTurFer in #1416
- refactor: simplify TableMemory and remove dead code by @linkvt in #1412
- Support full-duplex http1.1 by @jackkleeman in #1386
- chore(deps): bump the all-updates group across 1 directory with 3 updates by @dependabot[bot] in #1414
- Bump golang to 1.25.5 + small fixes by @JorTurFer in #1418
- chore(deps): bump github.com/kedacore/keda/v2 from 2.18.0 to 2.18.3 by @dependabot[bot] in #1406
- interceptor: support for HTTP header routing by @wozniakjan in #1289
- refactor(operator)!: migrate to standard metav1.Condition by @linkvt in #1419
- e2e test: header routing by @wozniakjan in #1420
- feat: Add FOSSA to monitor licenses by @JorTurFer in #1422
- chore: update dependencies and remove version pinning by @linkvt in #1424
- chore(deps): bump actions/checkout from 6.0.1 to 6.0.2 in the all-updates group by @dependabot[bot] in #1426
- chore: prepare for release 0.12.0 by @linkvt in #1429
New Contributors
- @dcb-imvaria made their first contribution in #1366
- @nader-ziada made their first contribution in #1365
- @linkvt made their first contribution in #1384
- @khauser made their first contribution in #1393
- @Fedosin made their first contribution in #1408
- @jochbru made their first contribution in #1407
- @jackkleeman made their first contribution in #1386
Full Changelog: v0.11.1...v0.12.0
Release notes
Open source →Breaking Changes
- Operator: Migrate HTTPScaledObject status conditions to standard
metav1.Conditiontype (#1409)
New
- General: Add environment variables for leader election timing configuration (#1365)
- General: Add multi-level wildcard host matching for HTTPScaledObject routing (#281)
Improvements
- General: Make interceptor request logging optional (#1375)
- Interceptor: Add support for full-duplex HTTP1.1 (#1386)
- Interceptor: Route requests by HTTP header matching (#1177)
- Interceptor: Significant performance improvements (#1403)
Fixes
- Interceptor: Decouple connection retry backoff from TCP dial timeout for faster cold starts (#1385)
- Operator: Fix conflict errors when updating HTTPScaledObject status (#1402)
- Operator: Prevent duplicate Ready conditions in HTTPScaledObject status by matching on Type instead of Reason (#1390)
Deprecations
None
Other
- General: Fix Makefile to support spaces in project base path (#1392)
- General: Get rid of kube-rbac-proxy (#1369)
- General: Update OpenTelemetry semconv version to v1.37.0 (#1407)
- CI: Replace stale bot with official GitHub Actions stale action (#1398)
- CI: Use GitHub-hosted ARM64 runners for e2e tests (#1388)
- DevContainer: Fix devcontainer build by updating deprecated Go tools (#1347)
-
v0.11.120 Oct 2025Release notes
Open source →What's Changed
- Update Kubernetes compatibility documentation to include v1.33, v1.34, and v0.11.0 release by @Copilot in #1349
- fix: check endpoint readiness before forwarding by @wozniakjan in #1348
- chore: update k8s versions by @zroubalik in #1351
- chore(deps): bump the all-updates group across 1 directory with 5 updates by @dependabot[bot] in #1343
- ci: bump go to 1.24.7 and fix link checker by @wozniakjan in #1357
- feat: add environment variable to control X-KEDA-HTTP-Cold-Start response header by @sean-redmond in #1354
- e2e: deploy zipkin as part of testsuite setup by @wozniakjan in #1358
- chore: bump deps to k8s 0.33.4 & KEDA core 2.18.0 by @zroubalik in #1353
- release v0.11.1 prep by @wozniakjan in #1360
New Contributors
- @Copilot made their first contribution in #1349
- @sean-redmond made their first contribution in #1354
Full Changelog: v0.11.0...v0.11.1
Release notes
Open source → -
v0.11.018 Sep 2025Release notes
Open source →What's Changed
- chore(deps): bump the all-updates group with 4 updates by @dependabot[bot] in #1263
- Update ADOPTERS.md by @rd-zahari-aleksiev in #1265
- chore(deps): bump the all-updates group across 1 directory with 11 updates by @JorTurFer in #1268
- chore(deps): bump golang.org/x/net from 0.35.0 to 0.36.0 by @dependabot[bot] in #1269
- chore(deps): bump github.com/expr-lang/expr from 1.16.9 to 1.17.0 by @dependabot[bot] in #1272
- chore(deps): bump the all-updates group with 2 updates by @dependabot[bot] in #1271
- chore(deps): bump github.com/prometheus/common from 0.62.0 to 0.63.0 in the all-updates group by @dependabot[bot] in #1270
- Change path in walkthrough call to match httpscaledobject from example by @GilbertBckr in #1266
- chore(deps): bump the all-updates group with 3 updates by @dependabot[bot] in #1275
- e2e tests: use ghcr registry for otel images by @wozniakjan in #1284
- feat: Add support for tracing for http addon by @bhussain91 in #1021
- chore: reformat scaler code to match KEDA go style by @zroubalik in #1295
- chore: get the correct HTTPScaledObject reference in the scaler by @zroubalik in #1296
- e2e: fix nginx installation via helm by @zroubalik in #1300
- scaler: allow using HSO and SO with different names by @zroubalik in #1299
- Add a way to turn off the profiling for all three http add-on components by @jkremser in #1308
- feat(interceptor): Add possibility to skip tls verification for upstreams by @ilia-medvedev-codefresh in #1307
- Implement HTTPScaledObject scoped timeout by @AlexPykavy in #1285
- chore: Bump go version and deps by @JorTurFer in #1305
- feat: failover route on cold-start time out by @yyewolf in #1280
- feat(middleware-logging): implement http.Hijacker by @guilhem in #835
- chore(deps): bump the all-updates group across 1 directory with 6 updates by @dependabot[bot] in #1325
- migrate from v1.Endpoints to discoveryv1.EndpointSlices by @jkremser in #1298
- ci: fix semver release trigger by @wozniakjan in #1336
New Contributors
- @rd-zahari-aleksiev made their first contribution in #1265
- @GilbertBckr made their first contribution in #1266
- @bhussain91 made their first contribution in #1021
- @jkremser made their first contribution in #1308
- @ilia-medvedev-codefresh made their first contribution in #1307
- @AlexPykavy made their first contribution in #1285
- @yyewolf made their first contribution in #1280
- @guilhem made their first contribution in #835
Full Changelog: v0.10.0...v0.11.0
Release notes
Open source →Breaking Changes
- General: Migrate from deprecated
v1.Endpointstodiscoveryv1.EndpointSlices(#1297)
New
- General: Add configurable tracing support to the interceptor proxy (#1021)
- General: Add failover service on cold-start (#1280)
- General: Add possibility to skip TLS verification for upstreams in interceptor (#1307)
- General: Allow using HSO and SO with different names (#1293)
- General: Support profiling for KEDA components (#1308)
Improvements
- General: License compliance monitored with FOSSA (#1423)
- Interceptor: Support HTTPScaledObject scoped timeout (#813)
Other
- Documentation: Correct the service name used in the walkthrough documentation (#1244)
-
v0.10.1-0.20250711074143-bf355649c63211 Jul 2025 pre-releaseNothing published for this version
-
v0.10.1-0.20250521191236-6a6adfb7acbb21 May 2025 pre-releaseNothing published for this version
-
v0.10.021 Feb 2025Release notes
Open source →What's Changed
New
- General: Fix infrastructure crashes when deleting ScaledObject while scaling (#1245)
- General: Fix kubectl active printcolumn (#1211)
- General: Support InitialCooldownPeriod for HTTPScaledObject #1213
Other
- Documentation: Correct the service name used in the walkthrough documentation (#1244)
- chore(deps): bump golangci/golangci-lint-action from 6.1.1 to 6.2.0 in the all-updates group by @dependabot in #1237
- chore(deps): bump the all-updates group across 1 directory with 11 updates by @dependabot in #1238
- chore: add missing examples for 0.9.0 by @brunopadz in #1240
- Readme: update status message by @zroubalik in #1243
- fix(doc): use correct service name by @ldvc in #1244
- chore(deps): bump actions/setup-go from 5.2.0 to 5.3.0 in the all-updates group by @dependabot in #1242
- chore(deps): bump the all-updates group with 2 updates by @dependabot in #1241
- Update compatibility documentation for v0.9.0 by @Spenhouet in #1247
- chore(deps): bump the all-updates group with 3 updates by @dependabot in #1249
- fix kubectl active printcolumn selector by @wozniakjan in #1248
- Fix KEDA Interceptor/Scaler issues when deleting ScaledObject while scaling by @kmd922 in #1245
- chore(deps): bump golangci/golangci-lint-action from 6.3.2 to 6.5.0 in the all-updates group by @dependabot in #1253
- fix: ingnore Make link in the linkinator workflow by @zroubalik in #1255
- chore: run e2e tests against k8s 1.32 by @zroubalik in #1257
- chore: fix kind action by @zroubalik in #1259
- bump k8s deps to 1.31.6 by @zroubalik in #1256
- bump go to 1.23.6 by @zroubalik in #1258
- fix: Rename keda-http-add-on-interceptor-proxy to keda-add-ons-http-interceptor-proxy by @kahirokunn in #1037
- Add support for initialCooldownPeriod On httpScaledObjects by @shayrybak in #1212
- Prepare release v0.10.0 by @wozniakjan in #1260
New Contributors
- @brunopadz made their first contribution in #1240
- @ldvc made their first contribution in #1244
- @Spenhouet made their first contribution in #1247
- @kmd922 made their first contribution in #1245
- @shayrybak made their first contribution in #1212
Full Changelog: v0.9.0...v0.10.0
Release notes
Open source →New
- General: Fix infrastructure crashes when deleting ScaledObject while scaling (#1245)
- General: Fix kubectl active printcolumn (#1211)
- General: Support InitialCooldownPeriod for HTTPScaledObject (#1213)
Other
- Documentation: Correct the service name used in the walkthrough documentation (#1244)
-
v0.9.026 Dec 2024Release notes
Open source →We are happy to release KEDA HTTP Add-on v0.9.0 🎉
Breaking Changes
- General: Drop support for deprecated field
spec.scaleTargetRef.deployment(#1061)
New
- General: Support portName in HTTPScaledObject service scaleTargetRef (#1174)
- General: Support setting multiple TLS certs for different domains on the interceptor proxy (#1116)
- Interceptor: Add support for for AWS ELB healthcheck probe (#1198)
Fixes
- General: Align the interceptor metrics env var configuration with the OTEL spec (#1031)
- General: Include trailing 0 window buckets in RPS calculation (#1075)
Other
- General: Sign images with Cosign (#1062)
New Contributors
- @wozniakjan made their first contribution in #1040
- @d4nyll made their first contribution in #1071
- @kahirokunn made their first contribution in #1093
- @kek-Sec made their first contribution in #1137
- @boillodmanuel made their first contribution in #1199
- @step-security-bot made their first contribution in #1217
Full Changelog: v0.8.0...v0.9.0
Release notes
Open source →Breaking Changes
- General: Drop support for deprecated field
spec.scaleTargetRef.deployment(#1061)
New
- General: Support portName in HTTPScaledObject service scaleTargetRef (#1174)
- General: Support setting multiple TLS certs for different domains on the interceptor proxy (#1116)
- Interceptor: Add support for for AWS ELB healthcheck probe (#1198)
Fixes
- General: Align the interceptor metrics env var configuration with the OTEL spec (#1031)
- General: Include trailing 0 window buckets in RPS calculation (#1075)
Other
- General: Sign images with Cosign (#1062)
- General: Drop support for deprecated field
-
v0.8.1-0.20241204161201-45f645f19e6e04 Dec 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20241204091350-ab140c5198cb04 Dec 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20241203185043-ade3bb090b0c03 Dec 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20241028191411-993b7bf2429528 Oct 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20241025094304-fb3e48b94f0525 Oct 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240902204433-08c811fe205d02 Sep 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240710142641-81f7469ad1f910 Jul 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240627095212-1e426128daee27 Jun 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240527212335-9f82ff979d2027 May 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240526104552-30e7571b190226 May 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240520174730-e04c24286eaf20 May 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240514071014-0793ecec5a9f14 May 2024 pre-releaseNothing published for this version
-
v0.8.1-0.20240502143704-7d1740ab82e102 May 2024 pre-releaseNothing published for this version
-
v0.8.002 May 2024Release notes
Open source →New
- General: Add configurable TLS on the wire support to the interceptor proxy (#907)
- General: Add support for collecting metrics using a Prometheus compatible endpoint or by sending metrics to an OpenTelemetry's HTTP endpoint (#910)
- General: Propagate HTTPScaledObject labels and annotations to ScaledObject (#840)
- General: Provide support for allowing HTTP scaler to work alongside other core KEDA scalers (#489)
- General: Support aggregation windows (#882)
Fixes
- General: Ensure operator is aware about changes on underlying ScaledObject (#900)
Deprecations
You can find all deprecations in this overview and join the discussion here.
- General: Deprecated
targetPendingRequestsin favor ofspec.scalingMetric.*.targetValue(#959)
Other
-
v0.7.1-0.20240316154000-793a48d2356616 Mar 2024 pre-releaseNothing published for this version
-
v0.7.1-0.20240214102309-5e7af247835d14 Feb 2024 pre-releaseNothing published for this version
-
v0.7.1-0.20240129180647-d337c8d4e4f029 Jan 2024 pre-releaseNothing published for this version
-
v0.7.022 Jan 2024Release notes
Open source →Breaking Changes
New
- General: Support any resource which implements
/scalesubresource (#438)
Improvements
- General: Improve Scaler reliability adding probes and 3 replicas (#870)
Fixes
- General: Add new user agent probe (#862)
- General: Fix external scaler getting into bad state when retrieving queue lengths fails. (#870)
- General: Increase ScaledObject polling interval to 15 seconds (#799)
- General: Set forward request RawPath to original request RawPath (#864)
Deprecations
You can find all deprecations in this overview and join the discussion here.
New deprecation(s):
- General: Deprecated
KEDA_HTTP_DEPLOYMENT_CACHE_POLLING_INTERVAL_MSin favor ofKEDA_HTTP_ENDPOINTS_CACHE_POLLING_INTERVAL_MS(#438)
Other
- General: Bump golang version (#853)
- General: Support any resource which implements
-
v0.6.1-0.20240115082049-7908755121f115 Jan 2024 pre-releaseNothing published for this version
-
v0.6.1-0.20240104104738-15718d165a3804 Jan 2024 pre-releaseNothing published for this version
-
v0.6.005 Oct 2023Release notes
Open source →New
- General: Add manifests to deploy the Add-on (#716)
Improvements
- Scaler: Decrease memory usage by allowing increasing stream interval configuration (#745)
Fixes
- Interceptor: Add support for streaming responses (#743)
- Interceptor: Fatal error: concurrent map iteration and map write (#726)
- Interceptor: Keep original Host in the Host header (#331)
- Interceptor: Provide graceful shutdown for http servers on SIGINT and SIGTERM (#731)
- Operator: Remove ScaledObject
name&appcustom labels (#717) - Scaler: Provide graceful shutdown for grpc server on SIGINT and SIGTERM (#731)
- Scaler: Reimplement custom interceptor metrics (#718)
Deprecations
You can find all deprecations in this overview and join the discussion here.
New deprecation(s):
- General:
hostfield deprecated in favor ofhostsinHTTPScaledObject(#552)
Other
-
v0.5.1-0.20231005145916-8c18bd8f735f05 Oct 2023 pre-releaseNothing published for this version
-
v0.5.1-0.20230620055250-835f2c0f096520 Jun 2023 pre-releaseNothing published for this version
-
v0.5.016 Jun 2023Release notes
Open source →Breaking Changes
None.
New
- General: Log incoming requests using the Combined Log Format (#669)
- Routing: Add multi-host support to
HTTPScaledObject(#552) - Routing: Support path-based routing (#338)
Improvements
- General: Automatically tag Docker image with commit SHA (#567)
- Operator: Migrate project to Kubebuilder v3 (#625)
- RBAC: Introduce fine-grained permissions per component and reduce required permissions (#612)
- Routing: New routing table implementation that relies on the live state of HTTPScaledObjects on the K8s Cluster instead of a ConfigMap that is updated periodically (#605)
Fixes
- General: Changes to HTTPScaledObjects now take effect (#605)
- General: HTTPScaledObject is the owner of the underlying ScaledObject (#703)
- Controller: Use kedav1alpha1.ScaledObject default values (#607)
- Routing: Lookup host without port (#608)
Deprecations
You can find all deprecations in this overview and join the discussion here.
New deprecation(s):
- General:
hostfield deprecated in favor ofhostsinHTTPScaledObject(#552)
Previously announced deprecation(s):
- None.
Other
-
v0.4.1-0.20230321111622-daa5900aa58d21 Mar 2023 pre-releaseNothing published for this version
-
v0.4.1-0.20230131163328-9137d9622d2e31 Jan 2023 pre-releaseNothing published for this version
-
v0.4.027 Jan 2023Nothing published for this version
-
v0.3.1-0.20230106194928-8ef982f0dc7506 Jan 2023 pre-releaseNothing published for this version
-
v0.3.1-0.20221122103457-0a1fbb1ff97622 Nov 2022 pre-releaseNothing published for this version
-
v0.3.1-0.20220615091141-a1fa44cade4715 Jun 2022 pre-releaseNothing published for this version
-
v0.3.1-0.20220506224948-f28fd41f973f06 May 2022 pre-releaseNothing published for this version
-
v0.3.1-0.20220214185504-0057e6b4f93414 Feb 2022 pre-releaseNothing published for this version
-
v0.3.025 Jan 2022Nothing published for this version
-
v0.2.1-0.20211119215623-8622cf5deece19 Nov 2021 pre-releaseNothing published for this version
-
v0.2.016 Nov 2021Nothing published for this version
-
v0.1.1-0.20211025191002-30fb204671f125 Oct 2021 pre-releaseNothing published for this version
-
v0.1.1-0.20210714195307-b5a81bb39fef14 Jul 2021 pre-releaseNothing published for this version
-
v0.1.024 Jun 2021Nothing published for this version
-
v0.0.2-0.20210422184911-c44234a072a522 Apr 2021 pre-releaseNothing published for this version
-
v0.0.2-0.20210421082703-b74cbaa05c4a21 Apr 2021 pre-releaseNothing published for this version
-
v0.0.109 Feb 2021Nothing published for this version
-
v0.0.0-20210209170211-4141b75b5aec09 Feb 2021 pre-releaseNothing published for this version
-
v0.0.0-20210205211759-8c5a4c80546d05 Feb 2021 pre-releaseNothing published for this version
-
v0.0.0-20210204210213-ffd8857da0dc04 Feb 2021 pre-releaseNothing published for this version
-
v0.0.0-20210203201836-7502948b6b8303 Feb 2021 pre-releaseNothing published for this version