Client Library Features
Jaeger clients have been retired. Please refer to this notice.
The table below provides a feature matrix for the existing client libraries. Cells marked with ? indicate that it’s not known if the given client supports the given feature and additional research & documentation update is required.
The table is auto-generated from data/clients.yaml 
| Data format and transport for reporting spans to Jaeger backend | ||||||
|---|---|---|---|---|---|---|
| Feature | Go | Java | Node.js | Python | C++ | C# | 
| Report jaeger.thrift, Compact  protocol, over UDP | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | 
| Report jaeger.thrift, Binary  protocol, over UDP | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | 
| Report jaeger.thrift, Binary  protocol, over TCP (HTTP) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| Report Zipkin Thrift, Binary protocol, over TCP (HTTP) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | 
| Inter-process propagation wire format (headers) | ||||||
| Feature | Go | Java | Node.js | Python | C++ | C# | 
| Uber’s original headers | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Zipkin’s B3 headers | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | 
| W3C Trace Context headers | coming | ✅ | coming | coming | coming | coming | 
| Support inbound jaeger-debug-idheader | when there is no trace | when there is no trace | ❔ | ✅ | ❔ | when there is no trace | 
| Accept baggage from jaeger-baggageheaders | when there is no trace | ❌ | ❔ | ✅ | ❔ | ❌ | 
| Support for 128bit Trace ID | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Metrics | ||||||
| Feature | Go | Java | Node.js | Python | C++ | C# | 
| Support standard tracer metrics (number of spans started, finished, reported, etc.) | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | 
| Support standard RPC metrics | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 
| Metrics in Prometheus format | ✅ | ✅ | ❌ | ✅ | ❔ | ❔ | 
| Tracer configuration | ||||||
| Feature | Go | Java | Node.js | Python | C++ | C# | 
| Support declarative tracer configuration | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | 
| Allow configuring tracer tags, aka process tags | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | 
| Allow remote configuration of samplers | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Remotely configurable per-endpoint sampler | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| Remotely configurable baggage restrictions | ✅ | coming | coming | coming | ❌ | coming | 
| Tracer configuration via environment variables | ||||||
| Feature | Go | Java | Node.js | Python | C++ | C# | 
| JAEGER_SERVICE_NAMEdefines service name that will be associated with the emitted spans. | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_TAGSdefines a comma-separated list of static tags, aka “tracer tags”, e.g.hostname=foobar,my.app.version=1.2.3. These tags are added as theProcesstags to each span. | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| JAEGER_DISABLED(not recommended) when set to true, instructs the Configuration to return a no-op tracer. Neither trace/span IDs nor baggage will be propagated with a no-op tracer. Instead of disabling the tracer completely, useconstsampler with0param, which will minimize the overhead but keep the propagation going. | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | 
| JAEGER_AGENT_HOSTdefines hostname for reporting spans over UDP/Thrift. To avoid packet loss, the agent is expected to run on the same machine as the application. This var is useful when there are multiple networking namespaces on the host. | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| JAEGER_AGENT_PORTdefines port for reporting spans over UDP/Thrift. | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 
| JAEGER_ENDPOINTdefines the URL for reporting spans via HTTP/Thrift. This setting allows for a deployment mode where spans are submitted directly to the collector. | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_AUTH_TOKENdefines an optional auth token when reporting over HTTP. | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | 
| JAEGER_USERcan be used for basic authentication when reporting over HTTP. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | 
| JAEGER_PASSWORDcan be used for basic authentication when using reporting over HTTP. | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | 
| JAEGER_REPORTER_LOG_SPANSinstructs the Reporter to log finished span IDs. The reporter may need to be given a Logger for this option to take effect. | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_REPORTER_MAX_QUEUE_SIZEdefines the max size of the in-memory buffer used to keep spans before they are sent out. | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | 
| JAEGER_REPORTER_FLUSH_INTERVALdefines how frequently the report flushes span batches. Reporter can also flush the batch if the batch size reaches the maximum UDP packet size (~64Kb). | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_SAMPLER_TYPEdefines the type of sampler to use, e.g.probabilistic, orconst(see Sampling). | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_SAMPLER_PARAMprovides configuration value to the sampler, e.g.probability=0.001(see Sampling). | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_SAMPLER_MANAGER_HOST_PORTdefines the address of HTTP server that services client configuration, such as sampling strategies, baggage restrictions, throttling config, etc. The variable name is a legacy misnomer from the time when the server only provided the sampling strategies. At the moment onlyjaeger-agentimplements this REST API. | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | 
| JAEGER_SAMPLER_REFRESH_INTERVALdefines how often the sampler polls the config server for updates to the sampling strategies. | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | 
| JAEGER_SAMPLER_MAX_OPERATIONSinstructs the adaptive sampler to limit how many distinct operation names the sampler will track, to avoid unbound memory usage. | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 
| JAEGER_PROPAGATIONdefines the propagation format used by the tracer. Supported values arejaeger(defined here),b3(defined here ) andw3c(defined here ) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | 
| JAEGER_TRACEID_128BITif true, instructs the tracer to generate 128bit trace IDs instead of the default 64bit. In the future 128bit will become the default. | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | 
| JAEGER_RPC_METRICSwhen true, enables additional generation of RPC metrics from the tracing instrumentation. This is an experimental feature in the Go client. See also https://github.com/opentracing-contrib/java-metrics . | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | 
