2.1.0 (October 21, 2026)
BREAKING CHANGES:
- agent: (Enterprise only) Agent HTTP API request bodies are now limited to 512 KiB by default, including chunked requests and requests with an unsupported method, and oversized requests return HTTP 413 before the body is read in full. Very large
/v1/configwrites that previously succeeded can now fail. Raise the limit with the newlimits.http_max_request_body_sizesetting if needed. - agent: (Enterprise only) Resource API (
/api/...) request bodies are now subject to the samelimits.http_max_request_body_sizelimit (512 KiB by default), and oversized requests return HTTP 413. - agent: (Enterprise only)
GET /v1/agent/connect/ca/leaf/:servicenow requiresservice:writeon the requested service for every request, including requests served from the agent's cached leaf certificate. Requests with no token or a token without that permission now receive HTTP 403 instead of the cached certificate. Callers must present a token withservice:writefor the service. - catalog: (Enterprise only)
Catalog.Registernow requires write permission on the node or service of an existing health check when updating it. Tokens that previously updated checks without that permission now receive a permission denied error. - cli: Migrated the
consul connect redirect-trafficcommand fromiptables/ip6tablestonftables(nft). The command now uses thesdk/nftablespackage, which applies all IPv4 and IPv6 rules atomically in a single pass via thenftablesinetaddress family, instead of separateiptablesandip6tablesinvocations. [GH-23785] - cli: Transparent proxy exclusions are now validated before rules are applied: user IDs must be numeric and outbound exclusions must be IP addresses or CIDRs.
iptablespreviously also accepted user names, UID ranges, and host names. [GH-23785] - cli:
consul connect redirect-trafficdoes not removeiptables/ip6tablesrules created by earlier Consul versions. This only matters when upgrading an existing host or VM in place. Before running the new command on an existing host or VM, remove any Consul-managediptablesrules first (see the transparent proxy upgrade guide for a reference cleanup script). Leaving both rule sets in place can cause double NAT or inconsistent traffic redirection. [GH-23785] - docker: The official Consul container images now include
nftablesinstead ofiptables. Scripts that runiptablesinside the Consul image must be updated. [GH-23785] - sdk: Replaced the
iptablespackage with a newnftablespackage for transparent proxy traffic redirection. Traffic redirection now requires thenftbinary and a Linux kernel with stateful NAT support innftablesinetfamily chains, available upstream starting with Linux kernel version 5.2 (some distributions backport this support onto an earlier nominal kernel version, for example RHEL 8+, kernel 4.18+, and its derivatives). There is no automatic fallback toiptables/ip6tables, so hosts without this kernel support will fail to set up transparent proxy redirection. [GH-23785] - feature-gates: Gate API Gateway HTTPRoute upstream-routing composition (PR #23294) behind the experimental feature
api-gateway-upstream-routing. When disabled (default), the legacy HTTPRoute-to-router shape is preserved exactly. When enabled by an operator after a full datacenter upgrade, service-router rules are composed with HTTPRoute matches, resolver subset definitions are preserved, and discovery-chain watches use the correct HTTP protocol override. Existing agentless API Gateway proxy states are rebuilt automatically when the effective gate value changes.
SECURITY:
- Upgrade go version to 1.26.10 to address security vulnerabilities. [GH-24067]
- deps: upgrade
github.com/hashicorp/go-discoverto v1.5.0, removing the dependency on the archivedgithub.com/hashicorp/vicmodule. This also upgradesgithub.com/vmware/govmomito v0.55.1 and adds ansrvprovider for cloud auto-join. [GH-24021] - security: (Enterprise only) Remove the
github.com/hashicorp/consulroot module dependency from thetest-integfault-injection tests to address CVE-2026-15972 and CVE-2026-88021. - security: Remove the
github.com/hashicorp/consulroot module dependency from the envoy integration test SDS server, theconsul-containerandtest-integtest modules, and theproto-gen-rpc-gluee2e fixture to address CVE-2026-15972. [GH-24043] - deps: Upgrade github.com/hashicorp/raft-wal to v0.5.0 (with raft v1.8.0, serf v0.11.0, memberlist v0.7.0 and go-metrics v0.7.0), removing the dependency on github.com/coreos/etcd. [GH-23985]
- deps: Upgrade golang.org/x/net to v0.60.0 to address GO-2026-6610, GO-2026-6611, GO-2026-6603, GO-2026-6617 and GO-2026-6612. [GH-23994]
- docker: Run
apk upgradewhen building the Alpine-based container images so base-image packages (such as sqlite and jq) are up to date. [GH-23964] - oauth: (Enterprise only) Avoid an unchecked size addition when merging JWKS key sets during OAuth key rotation.
- security: Upgrade github.com/klauspost/compress to v1.18.7, go.mongodb.org/mongo-driver to v1.17.10, github.com/moby/go-archive to v0.3.0 and github.com/go-openapi/swag to v0.27.1 to address CVE-2026-63209, CVE-2026-88031, CVE-2026-2303, CVE-2026-17106 and CVE-2026-85280. [GH-23964]
- ui: Add Content-Security-Policy header to Consul UI HTTP responses to mitigate XSS and data injection attacks. [GH-23971]
- ui: Pin a newer resolution of morgan to 1.12.1 to address GHSA-9f6g-j8ch-79g4 [GH-23952]
- Added debounce behavior to enforce a minimum interval between expensive federation-state anti-entropy sync operations. [GH-23196]
- Update
brace-expansionto address GHSA-rgw5-rvv9-x895 (DoS via unbounded intermediate arrays). [GH-23786] - Update
fast-urito address GHSA-7p8r-x3mc-p8w7 (Host Confusion via backslash authority introducer). [GH-23786] - Update
socket.io-parserto address CVE-2026-69185 (Zero-attachment Memory Exhaustion). [GH-23786]
FEATURES:
- acl: Add OIDC RP-Initiated IdP logout for tokens created via an
oidcauth method:consul logoutprints the identity provider's logout URL for the user to open (or opens it in the default browser with the new-open-browserflag orCONSUL_LOGOUT_OPEN_BROWSERenvironment variable), and the web UI opens it on logout, terminating the IdP session. Activates automatically when the IdP advertises anend_session_endpointin its OIDC discovery document, or when the logout endpoint is configured explicitly with the newOIDCLogoutURLauth method setting for providers that do not advertise one. [GH-23739] - agent: (Enterprise only) Add an inline
aiblock to service definitions, letting a workload declare its AI role (inference-model,mcp-server, orai-agent) and role-specific configuration in a single registration via config files and HTTP APIs. [GH-13032] - api-gateway: Add
http2andgrpcas valid API Gateway listener protocols, enabling end-to-end HTTP/2 and gRPC from client to backend. Previously onlyhttpandtcpwere accepted; the gateway would silently downgrade gRPC/HTTP2 traffic to HTTP/1.1 on the upstream hop. The new protocols render the correct downstream HTTP connection manager (HTTP/2 codec,h2,http/1.1ALPN) and align the upstream cluster to HTTP/2, closing the parity gap with Ingress Gateway. [GH-23784] - api-gateway: Auto-register DNS for services exposed via an API Gateway, resolvable at
<service>.api-gateway.consul. Populates thegateway-servicescatalog mapping for API Gateways and adds DNS SANs to the API Gateway Connect leaf certificate, bringing API Gateway to parity with Ingress Gateway. The feature is version-gated and backfills pre-existing gateways automatically once all servers are upgraded. [GH-23647] - api-gateway: Support zero-touch downstream TLS termination. When
TLS { Enabled = true }is set on anapi-gatewayconfig entry with no inline/file-system/SDS certificate, the gateway terminates downstream TLS using its Connect CA leaf certificate (with*.api-gateway.consulDNS SANs). Explicitly configured certificates continue to take precedence and are served as SNI overrides alongside the leaf default chain. [GH-23647] - api-gateway: add
PassiveHealthCheckto gateway-level default upstream limits and route service-level limit overrides, so passive health checking (Envoy outlier detection) can be configured for services routed through an API gateway. [GH-23783] - cli: (Enterprise only)
consul connect envoy -gateway=inferencelaunches the policy processor alongside Envoy and enforces a minimum Envoy version for the inference gateway. The ext_proc socket is derived per proxy instance;-ext-proc-socket-diroverrides its directory (default/var/run/consul). - connect: (Enterprise only) Added an agent-managed OAuth client lifecycle for services with
ai.roleofai-agentormcp-server, including dynamic client registration with IBM Security Verify, key rotation, JWKS publication, and SDS delivery of the OAuth client credential toai-agentEnvoy sidecars. - connect: (Enterprise only) Deliver OAuth sidecar credentials as AES-256-GCM envelopes. Content-encryption keys are persisted in KV and served via WorkloadKeyService.FetchKey so consul-obo-outbound can decrypt without becoming an SDS client.
- connect: (Enterprise only) Wire consul-obo-outbound and consul-obo-inbound ext_proc filters into connect-proxy xDS for hop-bound on-behalf-of token exchange.
- connect: (Enterprise only) Register services with
ai.roleofai-agentormcp-serverwith IBM Security Verify usingprivate_key_jwt, persist DCR/JWKS in KV, and deliver the client credential to Envoy as SDS GenericSecret JSON forai-agentworkloads. Cluster IAM is an OIDC ACL auth method withEnableServiceDCR=true(agentoauth.iamHCL is rejected). - connect: add
ecdh_curvestomeshconfig entries (MeshDirectionalTLSConfig) andtls_ecdh_curvesto agent TLS configuration (TLSProtocolConfig) to support configuring allowed ECDH/KEM curves for sidecar mTLS and agent RPC/HTTPS/gRPC, with automatic hybrid Post-QuantumX25519MLKEM768curve injection whentls_min_versionis set toTLSv1_3. [GH-23884] - feature-gates: Add Raft-backed dynamic feature gate framework (Phase 1). A new
feature_gates { bootstrap = { ... } }server configuration block seeds the first Raft policy. The leader continuously reconciles desired policy, minimum-version eligibility, and registry defaults into a committed resolved status. Every server runs an atomic cache populated only from committed FSM state; agents consume an indexed resolved snapshot and fail closed until the first generation is delivered. New operator CLI commandsconsul operator feature list,get, andsetprovide CAS-safe, ACL-protected inspection and control of feature gates. - operator: Add
GET /v1/operator/features,GET /v1/operator/feature/:name, andPUT /v1/operator/feature/:nameHTTP endpoints for reading and updating feature gate state. Reads requireoperator:read; writes requireoperator:write. All reads are blocking-query capable. [GH-23791] - inference-gateway: (Enterprise only) Route opted-in external inference models through a terminating gateway. Models marked with the terminating-gateway egress are discovered from the catalog, resolved through the mesh discovery chain, and load-balanced across healthy terminating-gateway replicas, with capability-pool priority tiers and fail-closed behavior when no valid transport is available. A capability pool containing an external model is rejected, and its capability route returns 503, when two of its models render the same endpoint address or its model weights cannot be represented exactly.
- inference-gateway: (Enterprise only) Add the
inference-gatewayservice kind and config entry. The gateway terminates inbound mesh mTLS, enforces intentions, and applies PII and routing policy through an ext_proc filter to a co-located policy processor. Model upstreams are services registered withai.role = "inference-model"that intentions allow and that are reachable through the mesh (connect-enabled or behind a terminating gateway). The gateway connects to them over mTLS and selects them by capability, failing over across providers by priority. - telemetry: (Enterprise only) Added server-side product usage metrics for ACL auth method counts (OIDC, Kubernetes, JWT) and audit logging config.
- telemetry: (Enterprise only) Added server-side product usage metrics for mesh gateway mode counts:
consul.usage.mesh_gateway_remote.countandconsul.usage.mesh_gateway_local.countreport the number of service instances configured to use each mesh gateway mode, andconsul.usage.mesh_gateway_none.countreports the number of service instances with no explicit mesh gateway mode (unset ornone). - telemetry: (Enterprise only) Added server-side product usage metrics for service intention default policy, service intention L7 and JWT counts
- telemetry: (Enterprise only) Added the server-side product usage metric
consul.usage.mesh_gateway_enabled, which reports whether any mesh gateway instance is registered in the cluster. It is independent of the mesh gateway mode counts: those count connect-proxy sidecars by their upstream routing mode, while this reports whether the gateway capability is deployed at all. - terminating-gateway: (Enterprise only) Add Vault-backed credential injection at the terminating gateway egress. A
TerminatingGatewayconfig entry now carries aCredentialInjectionblock (ext_proc processor UDS path and message timeout) and each linked service can declare aCredentialbinding (Mode: "inject"with aBindingID). At egress, an ext_proc filter calls a co-located processor that injects the bound credential (e.g. a provider API key sourced from Vault) into the upstream request, so credentials are never stored in mesh config or exposed to clients. - xds: Add an inline "virtual DNS" UDP listener (127.0.0.1:8653) that serves an in-memory FQDN-to-VIP table derived from the proxy snapshot. It advertises VIPs for explicit upstreams, intention-allowed upstreams in transparent proxy mode, and cluster peering upstreams, while skipping cross-partition VIPs, stale/unauthorized discovery chains, and empty or non-IP entries so DNS responses stay in sync with what the transparent-proxy listener will actually intercept. Add an optional "egress DNS" UDP listener (127.0.0.1:8654) that forwards queries to agent-configured DNS recursors via c-ares when recursors are present. Extend the xDS
ConfigFetcherinterface (and agent implementation) to expose DNS recursors. [GH-23698]
IMPROVEMENTS:
- chore: Update of actions/cache/restore from 4.2.0 to 6.1.0
- chore: Update of actions/download-artifact from 4.1.7 to 8.0.2 [GH-13634]
- chore: Update of actions/upload-artifact from 4.3.3 to 7.0.2 [GH-13635]
- chore: Update of hashicorp/vault-action from 3 to 4 [GH-13636]
- connect: (Enterprise Only) update compatibility tests to Nomad ENT v1.9.13+ent, v1.10.17+ent, v1.11.11+ent, v2.0.7+ent and Vault ENT 1.19.22+ent, 1.20.16+ent, 1.21.11+ent, 2.0.4+ent, 2.1.1+ent and envoy 1.39.4, 1.38.7, 1.37.9, 1.36.13
- connect: revert the maximum supported Envoy version from 1.39.4 back to 1.39.1. Envoy 1.39.4 support, listed in a prior release note, is not included in this release. [GH-24057]
- connect: deliver the sidecar proxy's leaf certificate and CA roots to Envoy over SDS instead of embedding them inline in the public listener. Leaf certificate rotation is now a hitless hot-swap that no longer changes the listener filter chain hash, so established connections (notably long-lived TCP sessions) are no longer drained and terminated on every rotation. [GH-23938]
- terminating-gateway: deliver each linked service's Connect leaf certificate and the shared CA roots to Envoy over SDS instead of embedding them inline in the gateway's downstream filter chains. Leaf rotation no longer changes the filter chain hash, so established connections through the gateway are no longer drained. [GH-23938]
- api-gateway: add
invertfield toHTTPHeaderMatchinhttp-routeconfig entries, enabling negated header match conditions (e.g. "route when header is absent" or "route when header value does NOT match"). Brings API Gateway to parity with the Ingress Gateway's existingInvertsupport inservice-router. [GH-23817] - ci: (Enterprise only) Increased the stale PR automation windows to 90 days before marking a pull request stale and 60 days before closing it. [GH-13119]
- peering: (Enterprise only) Add support for routing traffic to named ports on peered multiport services. [GH-13142]
- telemetry: (Enterprise only) Added three product usage metrics for auto-encrypt visibility.
consul.usage.client_agent_metric_includedreports whether client-agent metrics collection is enabled.consul.usage.client_auto_encrypt_enabled.countandconsul.usage.server_auto_encrypt_enabled.countreports the number of clients and servers, respectively, withauto_encrypt.tlsenabled.consul.usage.auto_encrypt_enabledcombines both counts into a single boolean — true if auto-encrypt is enabled anywhere in the cluster be it client or server. - telemetry: (Enterprise only) Added three server-side product usage metrics,
consul.usage.api_gateway.enabledreports whether any API gateway instances are currently registered in the cluster,consul.usage.mesh.service.percentagereports the percentage of service instances that are connect-proxy sidecars andconsul.usage.transparent_proxy.enabled.percentagereports the percentage of connect-proxy instances that have transparent proxy mode enabled. - ui: Migrate the Consul UI to the HashiCorp Design System (HDS). This covers the global navigation shell and breadcrumbs, the list pages (key/value, peers, auth methods, services, service instances, nodes, intentions, linked services, upstreams, and access control), and the access control, namespace, and admin partition forms. Includes numerous accessibility (A11y) fixes. [GH-23911]
- xds: (Enterprise only) External inference-model upstreams are rendered with a destination-specific mTLS transport socket (per-model SDS validation context and SNI/SAN matching), so the gateway-to-model hop for terminating-gateway-fronted models is mutually authenticated and encrypted per model.
- xds: (Enterprise only) The
builtin/ext-procEnvoy extension now supports Unix domain socket processor targets viaTarget.Path.
BUG FIXES:
- gateway: Fix a data race in the API gateway controller where the route reconciler kept adding to a
WatchSetafter handing it to a controller trigger that was already iterating it. The trigger is now registered only after all discovery chain reads are complete. [GH-24018] - ui: Render tab content inside its tab panel so assistive technology can associate it with its tab, and keep focus on a tab after activating it [GH-24013]
- ui: Show errors loading a tab's content inside the page instead of as a second nested page [GH-24013]
- acl: (Enterprise only) Fixed Envoy escape-hatch key matching in
Proxy.Configand per-upstream config so it follows the same case-folding rules as the config decoders. Keys that differ only by Unicode case folding (for exampleenvoy_local_cluſter_json), and Go field-name forms such asEnvoyListenerJSON, now requiremesh:writelike their canonical spellings. - agent: (Enterprise only) Fixed audit logging so request-body capture respects the body-size limit, uses the decoded request path when excluding KV bodies (for example
/v1/k%76/...), and skips/v1/txnbodies.POST /v1/operator/audit-hashnow returns HTTP 413 for oversized bodies. - agent: (Enterprise only) Fixed
PUT /v1/kv/so chunked request bodies are bounded bykv_max_value_size, matching the existingContent-Lengthcheck. - proxycfg: Fixed a goroutine and memory leak where a proxy's watches kept running after its state stopped unexpectedly, because replacing, deregistering or closing a stopped state did not cancel them. [GH-23990]
- proxycfg: Fixed a goroutine and memory leak where transparent proxies registered a new health watch for every imported peered service each time the imported services list changed, and never stopped watches for removed upstreams. [GH-23990]
- telemetry: Restore Raft, Serf, and Memberlist metrics in release artifacts by building with the
hashicorpmetricstag. [GH-23813] - agent/xds: Fixed an issue where cross-cluster and peered requests originating from an API Gateway were rejected with HTTP 403 Forbidden by downstream service RBAC intentions. Trailing semicolon-separated fields in the client certificate component of the
x-forwarded-client-cert(XFCC) header (such as auto-registered DNS SANs) are now properly accepted by the RBAC principal regular expression. [GH-23920] - cli: (Enterprise only)
consul intention createnow creates and replaces intentions via the exact (config-entry) intention API used by the UI, which supports non-default admin partitions (for example-partition team-a). Per-source metadata (-meta) continues to use the deprecated legacy intention API and is only supported in the default partition; combining-metawith a non-default partition now fails with a clear, actionable error. To attach metadata to intentions in an admin partition, use aservice-intentionsconfig entry with entry-levelMetaviaconsul config write. - connect: (Enterprise only) Attach outbound OBO only for identity-plane upstreams (
ai-agent/mcp-server). Explicit HTTP upstreams to inference-gateway or inference-model destinations no longer get consul-obo-outbound and fail closed with "OBO audience not configured". - connect: Fixed a bug where Consul servers ignored the configured
default_intention_policyfor three server-side surfaces — the intention check API (consul intention check,GET /v1/connect/intentions/check), the service topology view (Internal.ServiceTopology), and transparent proxy upstream discovery (Internal.IntentionUpstreams) — and fell back toacl.default_policyinstead. This only changes behavior whendefault_intention_policyandacl.default_policyare set to opposite values; when they agree (ordefault_intention_policyis unset) there is no change. Withdefault_intention_policy=denyandacl.default_policy=allow, the check API and topology previously reported connections as allowed even though they were denied; withdefault_intention_policy=allowandacl.default_policy=deny, transparent proxy sidecars under-provisioned their upstreams and could fail to reach services they were authorized to reach. Envoy RBAC enforcement was not affected and already honoreddefault_intention_policy.