SDK parity matrix
Honest capability map across the six SDK languages. Python and
TypeScript are the deep integrations; Go, Rust, Java and .NET ship the
core tracing client and inherit everything server-side (governance,
XAI, control plane) through it. All SDKs build from packages/ in the
repo — registry publishing (PyPI/npm/crates/Maven/NuGet) is tracked for
launch.
| Capability | Python | TypeScript | Go | Rust | Java | .NET |
|---|---|---|---|---|---|---|
| HTTP span ingest client (batch + flush) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Span/context helper (WithSpan / traceable()) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
LangGraph one-call helper (run_langgraph) | ✅ | — | — | — | — | — |
| LangChain callback handler | ✅ (embedded)¹ | ✅ | — | — | — | — |
| OpenAI client wrapper | —² | ✅ wrapOpenAI | ✅ OpenAIHTTPClient³ | ✅ wrap_openai_chat⁴ | — | — |
| Anthropic client wrapper | —² | ✅ wrapAnthropic | ✅ AnthropicHTTPClient³ | ✅ wrap_anthropic⁴ | — | — |
| Pause / resume hooks | ✅ pause_checkpoint | ✅ pause | ✅ Pause | ✅ pause | — | — |
| Pause-guard library (budget/latency/constitutional/approval) | ✅ pause_guards⁵ | — | — | — | — | — |
Local runner daemon (audittrail daemon …) | ✅ | — | — | — | — | — |
Agent scaffold (scaffold()) | ✅ | — | — | — | — | — |
Gateway secrets CLI (audittrail secrets …) | ✅ | — | — | — | — | — |
¹ The Python LangChain handler is part of the in-process tracer — it
flushes to the AuditTrail database directly, so it's for agents
co-hosted with a self-hosted server. Remote Python LangChain apps use
run_langgraph or the
OTel path. Details:
LangChain integration.
² Python OpenAI/Anthropic tracing goes through the gateway proxy (base-URL swap, zero code change) rather than a client wrapper.
³ The Go wrappers are http.RoundTrippers you install on the provider
SDK's HTTP client — openai.NewClient(option.WithHTTPClient(audittrail.OpenAIHTTPClient(audit))).
The span parents automatically off the trace context on the outgoing
request, so nesting the call inside WithSpan needs no extra plumbing.
See OpenAI / Anthropic.
⁴ The Rust wrappers are generic over any Serialize request/response
pair (the SDK carries no provider-crate dependency), so they work with
async-openai's create_byot or any typed client:
client.wrap_openai_chat(&request, || async { /* call */ }).await.
⁵ The pause-guard library composes budget, latency, constitutional and human-approval guards over the pause API. Budget / latency read caller-supplied measurements (the SDK keeps no cost/token tally) and the constitutional guard takes a user predicate (there is no SDK-local governor) — honest by design. Python-only for now.
What "core client" gets you
Every language's client covers the full span contract — which means the whole server-side product works regardless of language:
- register traces, start/end spans (streaming status updates included)
- automatic batching with periodic flush + explicit
Flush/Shutdown - trace-context propagation helpers for nesting spans correctly
- constitutional rule evaluation, cost accounting, live dashboard, alerts, compliance and the XAI pipeline all happen server-side on the ingested spans — no client feature required
The language-free alternatives
Two integrations need no SDK at all, in any language:
- OpenTelemetry OTLP ingest — anything emitting GenAI-convention OTLP/JSON.
- Gateway proxy — any OpenAI-compatible client, traced server-side via a base-URL swap.
Closing the gaps
Go and Rust gained OpenAI/Anthropic wrappers + pause hooks in v3.34.0. The Python pause-guard library (budget / latency / constitutional / human-approval guards over the pause API) landed in v3.35.0 — Python-only for now. Java and .NET remain core-client-only; those wrapper/pause gaps are tracked roadmap items — the matrix updates as they ship rather than in advance.