Skip to main content
Langfuse exposes traces over its own SDK + an OTLP endpoint. Tracelane is OTel-native, so the pivot is:
  1. Keep your Langfuse SDK if you want, but repoint its OTLP exporter.
  2. Or swap to @tracelanedev/sdk / tracelane (Python) and delete the Langfuse SDK.
Both paths work on Tracelane Cloud and on self-host. On Cloud the OTLP endpoint is the gateway, https://gateway.tracelane.dev, authenticated with a tlane_… key carrying the ingest scope. Self-hosting, it is the ingest receiver you run. If you only want the model call captured and not the agent’s structure, you need no exporter at all — point any OpenAI-compatible client at https://gateway.tracelane.dev/v1 (see the quickstart).

Path A — keep the Langfuse SDK

Repoint Langfuse’s OTLP exporter. Tracelane accepts both OTLP/HTTP wire formats — protobuf and JSON, selected by Content-Type — and the exporter appends /v1/traces to whatever base you give it:
Langfuse-emitted spans land in your ClickHouse hot tier and the dashboard renders them. Predictive guardrails won’t fire (they need the gateway’s chat path), but observability + audit work.
Spans sent this way are stored and queryable, but not hash-chained. Only calls proxied through the gateway’s chat path enter the tamper-evident ledger — see the audit ledger. This is a property of the SDK path on Cloud and self-host alike, not a Cloud limitation.
On a self-hosted, multi-tenant ingest, Authorization is not read at all — that deployment enforces SPIFFE mTLS and authenticates the client certificate, not a bearer token (see SPIFFE ingest). The bearer above is for the Cloud gateway, and for single-tenant self-host it is ignored because there is exactly one tenant to attribute to.

Path B — full swap

Instrumentation is explicit — after init(), wrap each client with its instrument* function (instrumentOpenAI, instrumentAnthropic, instrumentLangGraph, …). Custom Langfuse observe(...) decorators become standard OpenTelemetry spans via @opentelemetry/api (trace.getTracer(...).startActiveSpan(...)).

Why move


Competitor details verified as of 2026-08-26 against public documentation and public repositories. Where a capability is marked absent, we found none documented at that date — not that the vendor lacks it. If anything here is inaccurate, please open an issue.