Humboldt is the MicroProfile Telemetry 2.1 implementation of the Vidocq ecosystem. It rewrites its own OpenTelemetry SDK (traces, metrics, logs) directly on top of the public OTel API surface, and integrates with Chappe for HTTP transport, Vauban for CDI, and Cassini for JAX-RS instrumentation; configuration comes from the standard OTEL_* environment variables and otel. system properties. Goal: 100 % official TCK conformance, with no opentelemetry-sdk / opentelemetry-exporter- dependency, no Netty, no gRPC stack.
Origin of the name
Alexander von Humboldt (1769–1859), Prussian polymath, naturalist, geographer, explorer. The man who made the founding gesture of modern observability: observe simultaneously, measure rigorously, correlate across layers. On Chimborazo in 1802, he jointly recorded barometric pressure, temperature, terrestrial magnetism, humidity, fauna and flora — then drew the first isothermal maps revealing the planet’s hidden invariants. He invented the Naturgemälde, the first scientific data visualization, and synthesized all his knowledge in Kosmos.
Reference: Humboldt on Wikipedia.
| Humboldt the explorer | Humboldt the runtime |
|---|---|
Simultaneous observation (pressure, temperature, magnetism) |
Three pillars: traces, metrics, logs (one SDK) |
Isothermal maps |
Aggregated views per dimension (correlated results) |
Voyages covering every layer (sea, plain, summit) |
Cross-cutting instrumentation (web → DB → external) |
Kosmos — global synthesis of natural knowledge |
Unified OpenTelemetry document (W3C TraceContext + OTLP) |
Network of magnetic stations |
Network of processors / exporters / propagators |
OpenTelemetry is the Naturgemälde of distributed systems. Humboldt embeds it natively in Java SE.
At a glance
Implemented spec |
MicroProfile Telemetry 2.1 (OpenTelemetry API 1.39+, semconv 1.27+) |
Repo |
|
Java |
25 (LTS) |
Java modules |
15 modules — main ones: |
Runtime dependencies |
None external. The public OpenTelemetry API surface ( |
jlink-ready |
✅ |
MP Telemetry 2.1 TCK |
✅ 85/85 PASS — full official suite (tracing + metrics + logs), re-verified stable 2026-06-01 (see |
Three identity traits
-
Self-contained jars, zero external runtime dependency instead of about 25 third-party jars in SmallRye Telemetry — no
opentelemetry-sdk, noopentelemetry-exporter-otlp, nogrpc-java, no Netty, no Guava, no protobuf. -
ScopedValue<Context>(JEP 506) instead of plainThreadLocal— zero carrier-thread pinning on virtual threads, planned for M8 (humboldt-contextMVP uses JDK 21+-compliantThreadLocal, migration ADR tracked). -
No runtime bytecode machinery — no agent, no ASM/Byte Buddy; CDI wiring is generated at compile time by Vauban’s annotation processor. The one deliberate exception:
humboldt-cdicreates twojava.lang.reflect.Proxyinstances so the injected current-Spanand current-Baggagebeans always track the activeContext.
Position in the ecosystem
Humboldt shares its transport with the rest of the Vidocq ecosystem (Chappe HTTP/1.1 + H2). No Netty, grpc-java, OkHttp, Guava or any third-party HTTP stack. The future OTLP gRPC exporter will ship through a native chappe-grpc module (cf. PLAN.md §3.5).
Differentiation vs SmallRye Telemetry
| SmallRye | Humboldt | |
|---|---|---|
Runtime dependencies |
~25 jars (otel-sdk, exporter-otlp, grpc-java, netty, guava, protobuf, perfmark, …) |
zero external — self-contained |
Runtime reflection |
yes (Weld + OTel reflection) |
almost none — CDI wiring generated at compile time (Vauban processor); the only dynamic proxies are the two injected current- |
Virtual-thread pinning |
risk ( |
no — |
AOT-ready (GraalVM, Leyden) |
partial |
yes by design |
OTLP transport v1 |
gRPC or HTTP |
HTTP/JSON only (protobuf not shipped; gRPC through future native |
Chapters
-
Getting started — add Humboldt to a Vidocq project in a few minutes.
-
Concepts — OpenTelemetry model (Span, Metric, LogRecord, Context, Resource, Scope) and what MP Telemetry 2.1 adds.
-
Usage —
@WithSpan, Tracer/Meter/Logger injection, OTLP exporter, sampling, baggage. -
Internals — SDK pipeline, BatchSpanProcessor on virtual threads, JEP 506, bootstrap sequence.
-
TCK — MicroProfile Telemetry 2.1 status (85/85 PASS), commands, in-reactor runner behind the
tckprofile. -
Reference — full Java module table,
OTEL_*/otel.*keys, semantic conventions. -
Migration — from SmallRye Telemetry / Quarkus OpenTelemetry.
Next: Getting started.