Skip to main content

Temporal Proxy reference

View Markdown

Use this page to look up the current Temporal Proxy command interface, top-level configuration groups, supported gRPC services, and proxy-defined Prometheus metrics. For configuration examples and operating guidance, start with Configure Temporal Proxy and Operate and troubleshoot Temporal Proxy.

Check release status and source

Temporal Proxy is a prerelease project and does not yet provide a production-readiness or version-compatibility promise. Configuration and behavior can change between releases. Pin the proxy version, test it with the exact SDK, CLI, self-hosted Temporal Web UI, and upstream versions in your environment, and review changes before upgrading.

The following sources define the current behavior:

  • Releases provide versioned release artifacts and notes.
  • internal/config defines and validates the YAML configuration.
  • cmd/proxy defines command-line flags and environment-variable aliases.
  • The Helm chart defines Kubernetes-specific values that render the proxy configuration and resources.

Because links to main show unreleased source, use the repository tag matching your pinned version when verifying a deployed binary.

Choose a distribution artifact

ArtifactLocationVersioning guidance
Go binarygithub.com/temporalio/temporal-proxy/cmd/proxyInstall a release tag with go install ...@vX.Y.Z.
Container imagetemporalio/temporal-proxyPin a version tag instead of relying on latest.
Helm chartTemporal Helm chart repositoryPin the chart version and review the proxy image tag selected by that chart release.

Run proxy --version to print the proxy version, build time, and Git commit SHA.

Use command flags

The executable has one subcommand, serve:

proxy serve --config config.yaml
FlagAliasEnvironment variableDefaultPurpose
--config <path>-cPROXY_CONFIGNonePath to the required YAML configuration file.
--level <level>NoneLOG_LEVELinfoLog level: debug, info, warn, or error.

Metrics are configured in the YAML file, not with command-line flags.

Use top-level configuration keys

The proxy reads one YAML file and expands $VAR and ${VAR} references from the process environment before parsing it. An unset environment variable expands to an empty string, which can produce a validation error or an empty optional value. Mount secrets through the environment or a secrets provider instead of committing credentials to the file.

KeyRequired or defaultPurpose
hostPortRequired when running the binary; the Helm chart can supply it from the Service portGateway host:port used by SDK Clients, Workers, CLI, and Web UI.
tlsOptional; plaintext when absentTLS or mTLS material for inbound gateway connections.
allowedServicesDefaults to WorkflowService and OperatorServiceProto full names of gRPC services the gateway can forward.
authOptional; all requests admitted when absentSelects exactly one inbound authenticator: staticToken, jwks, or external.
encryptionOptional; new Payload encryption disabled by defaultConfigures the DEK cache and default or per-Namespace KMS key policies.
extensionServersOptionalAddresses external authorization or KMS gRPC services.
metricsDefaults to hostPort: :9090 and namespace: tmprl_proxySets the HTTP metrics listener and the Prometheus metric-name prefix.
routingNo implicit upstream selectionSelects the default and system upstreams and ordered Namespace or metadata rules.
upstreamsAt least one entry is requiredNames upstream Temporal Services and configures addresses, TLS, credentials, and Namespace translation.

Each upstream and extension-server name must be unique, and each list must use unique hostPort values. Static upstreams connect before the gateway starts. An upstream hostPort and TLS serverName can use request-time templates; extension-server addresses cannot.

For nested fields, validation rules, and defaults, consult the configuration source for the release you run and the task-specific pages under Configure Temporal Proxy.

Check forwarding scope and compatibility

The proxy can forward the following gRPC services:

ServiceDefaultUsed by
temporal.api.workflowservice.v1.WorkflowServiceYesSDK Clients, Workers, the Temporal CLI, and self-hosted Temporal Web UI.
temporal.api.operatorservice.v1.OperatorServiceYestemporal operator commands and self-hosted Web UI Search Attribute and Nexus Endpoint views.
grpc.reflection.v1.ServerReflectionNoService discovery for tools such as grpcurl; also admits its v1alpha compatibility alias.

The allowedServices configuration can narrow this list but cannot add a service not compiled into the proxy. A call to a service outside the allowlist returns UNIMPLEMENTED before upstream work begins.

The gateway accepts Temporal gRPC traffic from SDK Clients, Workers, the Temporal CLI, and self-hosted Temporal Web UI. It can route to local development, self-hosted, or Temporal Cloud upstream Services. This transport scope is not a compatibility matrix. While the project is prerelease, verify each Client and upstream version combination with representative Workflow, polling, Visibility, operator, and long-poll calls before deployment.

Inspect Prometheus metrics

The proxy serves Prometheus metrics at /metrics on metrics.hostPort. Metric names use <namespace>_<subsystem>_<name>, where metrics.namespace defaults to tmprl_proxy. For example, router_decisions_total is exposed as tmprl_proxy_router_decisions_total by default.

The endpoint also includes collectors registered by the Go runtime and process. The following table lists metrics defined by Temporal Proxy:

SubsystemMetricLabelsReports
serverrequests_totalmethod, codeCompleted gateway RPCs by full gRPC method and status code.
serverrequest_duration_secondsmethodEnd-to-end RPC duration, with buckets extending through long polls.
routerdecisions_totalupstream, outcomeSelected upstream and whether a rule, default, or system route chose it.
routerforwarding_errors_totalupstream, reasonRouter-originated connection and stream-setup failures.
encryptionvault_ops_totaloperation, result, namespaceComplete Payload encrypt and decrypt operations.
encryptionvault_ops_duration_secsoperation, namespaceEnd-to-end envelope-operation duration, including KMS and cache work.
encryptiondek_ops_totaloperation, resultAES-256-GCM Payload operations and their own result.
encryptiondek_ops_duration_secsoperationTime spent in the AES-256-GCM step.
encryptionkek_ops_totalprovider, operation, resultKMS DEK wrap and unwrap operations.
encryptionkek_ops_duration_secsprovider, operationTime spent wrapping and unwrapping DEKs.
encryptiondek_rotations_totalreasonDEK rotations by initial, scheduled, or on_demand reason.
encryptiondek_cache_hits_totalNoneReads served from the decrypted-DEK cache.
encryptiondek_cache_misses_totalNoneReads that required a KMS unwrap.
encryptiondek_cache_sizeNoneCurrent number of decrypted-DEK cache entries.

Encryption metrics are registered when a key policy creates a vault, including a decrypt-only configuration with encryption.enabled: false. They move only when the corresponding key or Payload path is exercised.

Label values include:

  • Router outcome: match, default, system, or unroutable.
  • Router forwarding reason: no_connection or stream_setup.
  • Encryption operation: encrypt or decrypt for vault and DEK metrics, and wrap or unwrap for KEK metrics.
  • Operation result: success or error.
  • DEK rotation reason: initial, scheduled, or on_demand.

The method and namespace labels are not bounded by a fixed configuration list. Do not expose the gateway directly to untrusted callers that can send arbitrary method names, and account for Namespace cardinality when storing metrics.