# Jaeger changelog > An open-source distributed tracing platform born at Uber. - Vendor: CNCF - Category: Developer Tools - Official site: https://www.jaegertracing.io - Tracked by: What's New (https://whatsnew.fyi/product/jaeger) - Harvested from: GitHub (jaegertracing/jaeger) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### v2.20.0 — Release v2.20.0 - Date: 2026-07-20 - Version: v2.20.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.20.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.20.0 - **removed** — Remove support for Elasticsearch v6 - **changed** — Promote es.* rotation and index-cleaner feature gates to beta - **changed** — Merge jaegermcp extension into jaegerquery extension - **changed** — Add configurable max_trace_duration and improve time-range design for Elasticsearch - **added** — Add --backend flag to esmapping-generator for OpenSearch selection - **added** — Add native trace summaries (summaryreader) for Elasticsearch - **added** — Add synchronous bulk write primitive to the Elasticsearch client - **added** — Gate parentspanid reference-compat write behind a feature gate - **added** — Add genai span attributes and gateway↔sidecar trace propagation - **changed** — Remove expired stable feature gates - **changed** — Migrate template creation to esclient and retire legacy mapping rendering - **fixed** — Reject mutually-exclusive Elasticsearch auth methods in validate() - **changed** — Make "spm not configured" error message more explicit - **changed** — Migrate span writes onto an owned bounded bulk indexer - **fixed** — Synchronize fallback token in tokenproviderwithtime closure - **changed** — Migrate service/operation reads onto owned searcher and query ast - **added** — Add bearer-token and api-key CLI flags to Elasticsearch admin tools - **changed** — Route admin plane through the shared auth stack - **fixed** — Validate decoded trace/span id lengths to prevent panic on corrupted rows in ClickHouse - **fixed** — Apply custom_headers to all Elasticsearch clients and honor host override ###### Backend Changes ###### ⛔ Breaking Changes * Feat(es): promote es.* rotation and index-cleaner feature gates to beta ([@ysh-bot](https://github.com/ysh-bot) in [#9018](https://github.com/jaegertracing/jaeger/pull/9018)) * Feat(es): remove support for elasticsearch v6 ([@yurishkuro](https://github.com/yurishkuro) in [#8948](https://github.com/jaegertracing/jaeger/pull/8948)) * Feat(mcp): merge jaegermcp extension into jaegerquery extension ([@Nabil-Salah](https://github.com/Nabil-Salah) in [#8894](https://github.com/jaegertracing/jaeger/pull/8894)) * Feat(es): add configurable max_trace_duration and improve time-range design ([@yurishkuro](https://github.com/yurishkuro) in [#8840](https://github.com/jaegertracing/jaeger/pull/8840)) ###### ✨ New Features * Feat(es): add --backend flag to esmapping-generator for opensearch selection ([@ysh-bot](https://github.com/ysh-bot) in [#8985](https://github.com/jaegertracing/jaeger/pull/8985)) * Feat(es): native trace summaries (summaryreader) ([@Me-Priyank](https://github.com/Me-Priyank) in [#8812](https://github.com/jaegertracing/jaeger/pull/8812)) ###### 🐞 Bug fixes, Minor Improvements * Feat(es): add synchronous bulk write primitive to the elasticsearch client ([@ysh-bot](https://github.com/ysh-bot) in [#8992](https://github.com/jaegertracing/jaeger/pull/8992)) * Feat(es): gate parentspanid reference-compat write behind a feature gate ([@ysh-bot](https://github.com/ysh-bot) in [#9015](https://github.com/jaegertracing/jaeger/pull/9015)) * Fix(ci): resolve published snapshot shas for oke demo deploy ([@FlamingSaint](https://github.com/FlamingSaint) in [#8999](https://github.com/jaegertracing/jaeger/pull/8999)) * feat(jaegerai): add genai span attributes and gateway↔sidecar trace propagation ([@SoumyaRaikwar](https://github.com/SoumyaRaikwar) in [#8942](https://github.com/jaegertracing/jaeger/pull/8942)) * Chore(storage): remove expired stable feature gates ([@Anujkumar9081](https://github.com/Anujkumar9081) in [#8970](https://github.com/jaegertracing/jaeger/pull/8970)) * Chore(es): scrub lingering olivere references from code comments ([@ysh-bot](https://github.com/ysh-bot) in [#8983](https://github.com/jaegertracing/jaeger/pull/8983)) * Feat(es): migrate template creation to esclient and retire legacy mapping rendering ([@Me-Priyank](https://github.com/Me-Priyank) in [#8963](https://github.com/jaegertracing/jaeger/pull/8963)) * Fix(storage): reject mutually-exclusive es auth methods in validate() ([@Anujkumar9081](https://github.com/Anujkumar9081) in [#8946](https://github.com/jaegertracing/jaeger/pull/8946)) * Make "spm not configured" error message more explicit ([@Saithej2k](https://github.com/Saithej2k) in [#8878](https://github.com/jaegertracing/jaeger/pull/8878)) * Feat(es): migrate span writes onto an owned bounded bulk indexer ([@yurishkuro](https://github.com/yurishkuro) in [#8944](https://github.com/jaegertracing/jaeger/pull/8944)) * Fix(auth): synchronize fallback token in tokenproviderwithtime closure ([@yurishkuro](https://github.com/yurishkuro) in [#8952](https://github.com/jaegertracing/jaeger/pull/8952)) * Feat(es): migrate service/operation reads onto owned searcher and query ast ([@yurishkuro](https://github.com/yurishkuro) in [#8943](https://github.com/jaegertracing/jaeger/pull/8943)) * [es] add bearer-token and api-key cli flags to es admin tools (rfc 0006 m3.5c) ([@yurishkuro](https://github.com/yurishkuro) in [#8939](https://github.com/jaegertracing/jaeger/pull/8939)) * [es] route admin plane through the shared auth stack (rfc 0006 m3.5b) ([@yurishkuro](https://github.com/yurishkuro) in [#8937](https://github.com/jaegertracing/jaeger/pull/8937)) * Fix(clickhouse): validate decoded trace/span id lengths to prevent panic on corrupted rows ([@iammdzaidalam](https://github.com/iammdzaidalam) in [#8935](https://github.com/jaegertracing/jaeger/pull/8935)) * Fix(es): apply custom_headers to all elasticsearch clients and honor ho _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.20.0]_ ### v2.19.0 — Release v2.19.0 - Date: 2026-06-03 - Version: v2.19.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.19.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.19.0 - **added** — Implement findtracesummaries gRPC handler in apiv3 - **added** — Add GET /api/v3/trace-summaries endpoint for lightweight search results - **added** — Implement summaryreader in gRPC storage adapter - **added** — Add max_recv_msg_size_mib config for gRPC storage client - **added** — Implement ag-ui endpoint - **added** — Add table view as alternative to list view in search results - **added** — Add reset button to clear the search form - **changed** — Support query.attributes filter in GET /api/v3/traces - **changed** — Accept camelCase HTTP query params, keep snake_case as deprecated aliases in apiv3 - **changed** — Rename query.num_traces to query.search_depth, keep deprecated alias - **changed** — Migrate search to /api/v3/trace-summaries - **changed** — Replace hand-written JSON scaffolding with proto types in HTTP gateway - **changed** — Compute trace summaries natively or fall back to full-trace aggregation in querysvc - **changed** — Rename numtraces to searchdepth in Elasticsearch v2 dbmodel - **fixed** — Fix traceID casing, add snapshot test, and default searchdepth in trace-summaries endpoint - **fixed** — Use findtraceidsrequest for findtraceids RPC in storage/v2 - **fixed** — Remove misleading error wrapper in getstoragefactory - **fixed** — Fix tools API mismatch between ACP and Jaeger gateway - **added** — Add TLS configuration for ClickHouse - **added** — Add missing scope and link fields to Elasticsearch index templates ###### Backend Changes ###### ✨ New Features * Feat(apiv3): implement findtracesummaries grpc handler ([@yurishkuro](https://github.com/yurishkuro) in [#8634](https://github.com/jaegertracing/jaeger/pull/8634)) ###### 🐞 Bug fixes, Minor Improvements * Fix(apiv3): support query.attributes filter in get /api/v3/traces ([@yurishkuro](https://github.com/yurishkuro) in [#8687](https://github.com/jaegertracing/jaeger/pull/8687)) * Feat(clickhouse): add tls configuration ([@Pulkit7070](https://github.com/Pulkit7070) in [#8650](https://github.com/jaegertracing/jaeger/pull/8650)) * [clickhouse] add linter for clickhouse ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8641](https://github.com/jaegertracing/jaeger/pull/8641)) * [es] add missing scope and link fields to index templates ([@Manik2708](https://github.com/Manik2708) in [#8643](https://github.com/jaegertracing/jaeger/pull/8643)) * Fix: tools api mismatch between acp and jaeger gateway ([@Nabil-Salah](https://github.com/Nabil-Salah) in [#8608](https://github.com/jaegertracing/jaeger/pull/8608)) * Fix(apiv3): fix traceid casing, add snapshot test, and default searchdepth in trace-summaries endpoint ([@yurishkuro](https://github.com/yurishkuro) in [#8633](https://github.com/jaegertracing/jaeger/pull/8633)) * Feat: add get /api/v3/trace-summaries endpoint for lightweight search results ([@yurishkuro](https://github.com/yurishkuro) in [#8604](https://github.com/jaegertracing/jaeger/pull/8604)) * Fix(apiv3): accept camelcase http query params, keep snake_case as deprecated aliases ([@yurishkuro](https://github.com/yurishkuro) in [#8625](https://github.com/jaegertracing/jaeger/pull/8625)) * Fix(apiv3): rename query.num_traces to query.search_depth, keep deprecated alias ([@yurishkuro](https://github.com/yurishkuro) in [#8618](https://github.com/jaegertracing/jaeger/pull/8618)) * Ci(metrics): make pr metric diffs informational ([@yurishkuro](https://github.com/yurishkuro) in [#8605](https://github.com/jaegertracing/jaeger/pull/8605)) * Fix(storage/v2): use findtraceidsrequest for findtraceids rpc ([@yurishkuro](https://github.com/yurishkuro) in [#8603](https://github.com/jaegertracing/jaeger/pull/8603)) * Fix(storage): remove misleading error wrapper in getstoragefactory ([@yurishkuro](https://github.com/yurishkuro) in [#8593](https://github.com/jaegertracing/jaeger/pull/8593)) * Feat(grpc-storage): add max_recv_msg_size_mib config for grpc storage client ([@yurishkuro](https://github.com/yurishkuro) in [#8576](https://github.com/jaegertracing/jaeger/pull/8576)) ###### 🚧 Experimental Features * Refactor(apiv3): replace hand-written json scaffolding with proto types in http gateway ([@yurishkuro](https://github.com/yurishkuro) in [#8646](https://github.com/jaegertracing/jaeger/pull/8646)) * Feat(grpc): implement summaryreader in grpc storage adapter ([@yurishkuro](https://github.com/yurishkuro) in [#8642](https://github.com/jaegertracing/jaeger/pull/8642)) * Feat(querysvc): compute trace summaries natively or fall back to full-trace aggregation ([@yurishkuro](https://github.com/yurishkuro) in [#8638](https://github.com/jaegertracing/jaeger/pull/8638)) * Feat(jaeger): implement ag-ui endpoint ([@Nabil-Salah](https://github.com/Nabil-Salah) in [#8505](https://github.com/jaegertracing/jaeger/pull/8505)) ###### 👷 CI Improvements * Ci: reduce github actions token permissions ([@jkowall](https://github.com/jkowall) in [#8640](https://github.com/jaegertracing/jaeger/pull/8640)) * Fix(ci): always use submodule for npm cache key in setup-node.js action ([@yurishkuro](https://github.com/yurishkuro) in [#8654](https://github.com/jaegertracing/jaeger/pull/8654)) * Feat(ci): use latest jaeger-ui/main commit in snapshot builds ([@yurishkuro](https://github.com/yurishkuro) in [#8653](https://github.com/jaegertracing/jaeger/pull/8653)) * Fix(ci): stabilize codeql check results ([@jkowall](https://github.com/jkowall) in [#8615](https://github.com/jaeg _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.19.0]_ ### v2.18.0 — Release v2.18.0 - Date: 2026-05-13 - Version: v2.18.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.18.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.18.0 - **removed** — Remove min step API from metricstore - **added** — Auto-detect UI base path from browser URL - **added** — Forward configured headers to Elasticsearch/OpenSearch backend - **added** — Add configurable header forwarding to gRPC storage backend - **fixed** — Normalize span_kind input to lowercase in get_span_names handler - **fixed** — Fix array join alias broken by ClickHouse v26 new analyzer - **removed** — Remove non-standard health MCP tool - **changed** — Drop v1-style reftype from critical path logic in jaegermcp - **fixed** — Add missing spanhash value to v2 todbmodel conversion in Cassandra - **fixed** — Preserve gocql timeouts when unset in Cassandra config - **changed** — Continue inbound trace context from sep-414 request meta in jaeger_mcp - **fixed** — Validate start_time_max after start_time_min - **fixed** — Fix sigv4 auth failure due to missing req.getbody on Elasticsearch/OpenSearch writes - **added** — Implement AI new MCP endpoint for frontend dynamic contextual tooling - **changed** — Refactor route registration and request body size handling in jaegerai - **fixed** — Add missing scope attributes in ClickHouse query builder - **added** — Add OpenTelemetry metrics middleware for MCP tool invocations - **added** — Integrate ClickHouse metric storage into Jaeger storage extension - **added** — Implement AI Gemini agent tracing - **added** — Add TTL support for ClickHouse v2 storage ###### Backend Changes ###### ⛔ Breaking Changes * Metrics changes due to upgrading all OTEL collector packages ([@renovate-bot](https://github.com/renovate-bot) in [#8560](https://github.com/jaegertracing/jaeger/pull/8560)) * [metricstore] remove min step api from metricstore ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8425](https://github.com/jaegertracing/jaeger/pull/8425)) ###### ✨ New Features * Feat(query): auto-detect ui base path from browser url (adr-009) ([@yurishkuro](https://github.com/yurishkuro) in [#8568](https://github.com/jaegertracing/jaeger/pull/8568)) * Feat(storage): forward configured headers to elasticsearch/opensearch backend ([@ChaitanyaD48](https://github.com/ChaitanyaD48) in [#8544](https://github.com/jaegertracing/jaeger/pull/8544)) * Feat(query): add configurable header forwarding to grpc storage backend ([@yurishkuro](https://github.com/yurishkuro) in [#8539](https://github.com/jaegertracing/jaeger/pull/8539)) ###### 🐞 Bug fixes, Minor Improvements * Fix(mcp): normalize span_kind input to lowercase in get_span_names handler ([@farhann-saleem](https://github.com/farhann-saleem) in [#8466](https://github.com/jaegertracing/jaeger/pull/8466)) * Fix(clickhouse): fix array join alias broken by clickhouse v26 new analyzer ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8547](https://github.com/jaegertracing/jaeger/pull/8547)) * Chore(jaegermcp): remove non-standard health mcp tool ([@Vi-shub](https://github.com/Vi-shub) in [#8549](https://github.com/jaegertracing/jaeger/pull/8549)) * [jaegermcp] drop v1-style reftype from critical path logic ([@yurishkuro](https://github.com/yurishkuro) in [#8467](https://github.com/jaegertracing/jaeger/pull/8467)) * [cassandra] add missing `spanhash` value to v2 `todbmodel` conversion ([@Manik2708](https://github.com/Manik2708) in [#8410](https://github.com/jaegertracing/jaeger/pull/8410)) * Fix(cassandra): preserve gocql timeouts when unset in config ([@masihkhatibzadeh99](https://github.com/masihkhatibzadeh99) in [#8380](https://github.com/jaegertracing/jaeger/pull/8380)) * [jaeger_mcp] continue inbound trace context from sep-414 request _meta ([@SoumyaRaikwar](https://github.com/SoumyaRaikwar) in [#8361](https://github.com/jaegertracing/jaeger/pull/8361)) * Validate start_time_max after start_time_min ([@utafrali](https://github.com/utafrali) in [#8309](https://github.com/jaegertracing/jaeger/pull/8309)) * Fix sigv4 auth failure due to missing req.getbody on es/os writes ([@dd-tone](https://github.com/dd-tone) in [#8308](https://github.com/jaegertracing/jaeger/pull/8308)) ###### 🚧 Experimental Features * Feat(jaeger): implement ai new mcp endpoint for frontned dynamic contextual tooling ([@Nabil-Salah](https://github.com/Nabil-Salah) in [#8423](https://github.com/jaegertracing/jaeger/pull/8423)) * [jaegerai] refactor route registration and request body size handling ([@yurishkuro](https://github.com/yurishkuro) in [#8468](https://github.com/jaegertracing/jaeger/pull/8468)) * [fix][clickhouse] add missing scope attributes in clickhouse's query builder ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8439](https://github.com/jaegertracing/jaeger/pull/8439)) * [jaegermcp] add opentelemetry metrics middleware for mcp tool invocations ([@CosmicAlgo](https://github.com/CosmicAlgo) in [#8370](https://github.com/jaegertracing/jaeger/pull/8370)) * [clickhouse][spm] add e2e test for clickhouse spm ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8432](https://github.com/jaegertracing/jaeger/pull/8432)) * [clickhouse] integrate clickhouse metric storage into jaeger storage extension ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8426](https://github.com/jaegertracing/jaeger/pull/8426)) * Feat(gemini-agent): implement ai gemini agent tracing ([@Nabil-Salah](https://github.com/Nabil-Salah) in [#8398](https://github.com/jaegertracing/jaeger/pull/8398)) * [clickhouse][spm] implement `getcallrat _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.18.0]_ ### v2.17.0 — Release v2.17.0 - Date: 2026-03-30 - Version: v2.17.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.17.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.17.0 - **fixed** — Accept string-form error filters in trace search for memory storage - **fixed** — Guard addjitter against zero or sub-nanosecond durations to prevent panic - **fixed** — Clock skew adjuster to also adjust end timestamp - **added** — Implement timer duration bucket parsing in metrics init - **added** — Expose metrics storage to UI as storage capabilities - **changed** — Implement safe self-tracing via OTEL collector telemetry factory - **changed** — Optimize ClickHouse spans table for faster searching - **added** — Add system prompt instructions for LLM clients in jaegermcp - **fixed** — Enforce response limits in jaegermcp - **added** — Add Go SDK dashboard generator for monitoring - **added** — Enable tenancy enforcement in jaegermcp - **added** — Enforce config-driven limits in jaegermcp handlers - **fixed** — Fix jaegermcp server integration with Claude code - **fixed** — Fix ClickHouse trace ID timestamps table schema and query to deduplicate trace IDs - **changed** — Optimize ClickHouse get traces query by adding start and end time filter ###### Backend Changes ###### 🐞 Bug fixes, Minor Improvements * Implement timer duration bucket parsing in metrics init ([@junaiddshaukat](https://github.com/junaiddshaukat) in [#7951](https://github.com/jaegertracing/jaeger/pull/7951)) * Fix(memory): accept string-form error filters in trace search ([@YoungHypo](https://github.com/YoungHypo) in [#8217](https://github.com/jaegertracing/jaeger/pull/8217)) * Feat(monitor): restore grafana to spm docker-compose example (adr-007 step 1) ([@abhay1999](https://github.com/abhay1999) in [#8215](https://github.com/jaegertracing/jaeger/pull/8215)) * Safe self-tracing via otel collector telemetry factory ([@yurishkuro](https://github.com/yurishkuro) in [#8208](https://github.com/jaegertracing/jaeger/pull/8208)) * Fix: guard addjitter against zero/sub-nanosecond durations to prevent panic (fixes #8149) ([@shivamtiwari3](https://github.com/shivamtiwari3) in [#8178](https://github.com/jaegertracing/jaeger/pull/8178)) * Fix: clock skew adjuster to also adjust endtimestamp ([@Audio431](https://github.com/Audio431) in [#8170](https://github.com/jaegertracing/jaeger/pull/8170)) * Update mcp server readme ([@yurishkuro](https://github.com/yurishkuro) in [#8163](https://github.com/jaegertracing/jaeger/pull/8163)) * Feat(query): expose metricsstorage to ui as storage capabilities ([@hharshhsaini](https://github.com/hharshhsaini) in [#8154](https://github.com/jaegertracing/jaeger/pull/8154)) ###### 🚧 Experimental Features * [clickhouse] optimize spans table for faster searching ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8258](https://github.com/jaegertracing/jaeger/pull/8258)) * [jaegermcp] add system prompt instructions for llm clients (adr phase 4) ([@lopster568](https://github.com/lopster568) in [#8253](https://github.com/jaegertracing/jaeger/pull/8253)) * Fix(jaegermcp): enforce response limits ([@abhay1999](https://github.com/abhay1999) in [#8242](https://github.com/jaegertracing/jaeger/pull/8242)) * Feat(monitor): go sdk dashboard generator — adr-007 step 2a ([@abhay1999](https://github.com/abhay1999) in [#8216](https://github.com/jaegertracing/jaeger/pull/8216)) * [clickhouse][benchmarking] add initial results from benchmarking ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8181](https://github.com/jaegertracing/jaeger/pull/8181)) * [jaegermcp] enable tenancy enforcement ([@whiplashvin](https://github.com/whiplashvin) in [#8203](https://github.com/jaegertracing/jaeger/pull/8203)) * [jaegermcp] enforce config-driven limits in mcp handlers ([@rite7sh](https://github.com/rite7sh) in [#8194](https://github.com/jaegertracing/jaeger/pull/8194)) * [jaegermcp] fix mcp server integration with claude code ([@yurishkuro](https://github.com/yurishkuro) in [#8191](https://github.com/jaegertracing/jaeger/pull/8191)) * [clickhouse] fix trace id timestamps table schema / query to deduplicate trace_ids ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8180](https://github.com/jaegertracing/jaeger/pull/8180)) * [clickhouse] optimize get traces query by adding start and end time filter ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8152](https://github.com/jaegertracing/jaeger/pull/8152)) ###### 👷 CI Improvements * Fix: create reusable setup-go action to fix go module cache in ci workflows ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8257](https://github.com/jaegertracing/jaeger/pull/8257)) * Use gotestsum for all test execution ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8256](https://github.com/jaegertracing/jaeger/pull/8256)) * Fix(ci): correct metrics snapshot comparison noise ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8246](https://github.com/jaegertracing/jaeger/pull/8246)) * Ci(monitor): add dashboard sync check for go sdk generator (adr-007 step 3) ([@abhay1999](https://github.com/abhay1999) in [#8240](https://github.com/jaegertracing/jaeger/pull/8240)) * Fix(ci): add retry logic fo _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.17.0]_ ### v2.16.0 — Release v2.16.0 - Date: 2026-03-07 - Version: v2.16.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.16.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.16.0 - **removed** — Remove legacy response format of remote sampling endpoint - **added** — Add schemagen for internal extensions - **changed** — Replace traces.topic with traces.topics in kafka receiver config - **added** — Add support for elasticsearch health-check timeout at startup - **fixed** — Support max trace size issue in the query service - **added** — Add empty span name sanitizer - **fixed** — Include link attributes when searching by tags in memory backend - **changed** — Restructure clickhouse findtraceids query to improve performance - **changed** — Refactor cassandra fromdbmodel and todbmodel to accept and return dbmodel.span - **changed** — Migrate http servers from gorilla mux to stdlib http.ServeMux ###### Backend Changes ###### ⛔ Breaking Changes * Enforce Go version consistency across the codebase; require Go 1.25.7 ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8052](https://github.com/jaegertracing/jaeger/pull/8052)) * Remove legacy response format of remote sampling endpoint ([@yurishkuro](https://github.com/yurishkuro) in [#8014](https://github.com/jaegertracing/jaeger/pull/8014)) ###### ✨ New Features * Feat: add schemagen for internal extensions (#6186) ([@SoumyaRaikwar](https://github.com/SoumyaRaikwar) in [#7947](https://github.com/jaegertracing/jaeger/pull/7947)) ###### 🐞 Bug fixes, Minor Improvements * [kafka receiver config] replace traces.topic: with traces.topics: ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8144](https://github.com/jaegertracing/jaeger/pull/8144)) * Disable bulk processor in es authenticator test to prevent goroutine leaks ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8124](https://github.com/jaegertracing/jaeger/pull/8124)) * Add support for es health-check timeout at startup ([@ntdkhiem](https://github.com/ntdkhiem) in [#8096](https://github.com/jaegertracing/jaeger/pull/8096)) * Support max trace size issue in the query service ([@yurishkuro](https://github.com/yurishkuro) in [#8098](https://github.com/jaegertracing/jaeger/pull/8098)) * Add empty span name sanitizer ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8086](https://github.com/jaegertracing/jaeger/pull/8086)) * [memory] include link attributes when searching by tags ([@Manik2708](https://github.com/Manik2708) in [#8077](https://github.com/jaegertracing/jaeger/pull/8077)) * Fix(ci): update upload-artifact to v6 in metrics comparison workflow ([@jkowall](https://github.com/jkowall) in [#8000](https://github.com/jaegertracing/jaeger/pull/8000)) ###### 🚧 Experimental Features * [clickhouse][perf] restructure clickhouse findtraceids query to improve performance ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#8125](https://github.com/jaegertracing/jaeger/pull/8125)) * [cassandra][v2] refactor `fromdbmodel` and `todbmodel` to accept and return `dbmodel.span` ([@Manik2708](https://github.com/Manik2708) in [#7844](https://github.com/jaegertracing/jaeger/pull/7844)) ###### 👷 CI Improvements * Remove otel_scope_version label from metrics comparison ([@yurishkuro](https://github.com/yurishkuro) in [#8145](https://github.com/jaegertracing/jaeger/pull/8145)) * Ci: always update summary report comment if present ([@yurishkuro](https://github.com/yurishkuro) in [#8135](https://github.com/jaegertracing/jaeger/pull/8135)) * Ci: extract ci summary publish script to `.github/scripts/` with unit tests ([@yurishkuro](https://github.com/yurishkuro) in [#8134](https://github.com/jaegertracing/jaeger/pull/8134)) * Ci: split ci summary report into compute + publish workflows ([@yurishkuro](https://github.com/yurishkuro) in [#8132](https://github.com/jaegertracing/jaeger/pull/8132)) * Ci: use gh pr list to get pr number ([@yurishkuro](https://github.com/yurishkuro) in [#8123](https://github.com/jaegertracing/jaeger/pull/8123)) * Ci: log trigger event for debugging ([@yurishkuro](https://github.com/yurishkuro) in [#8122](https://github.com/jaegertracing/jaeger/pull/8122)) * Ci: fix summary report to be able to retrieve pr number ([@yurishkuro](https://github.com/yurishkuro) in [#8121](https://github.com/jaegertracing/jaeger/pull/8121)) * Ci: migrate coverage gating from codecov to github actions ([@yurishkuro](https://github.com/yurishkuro) in [#8111](https://github.com/jaegertracing/jaeger/pull/8111)) * Ci: migrate coverage gating from codecov to github actions ([@yurishkuro](https://github.com/yurishkuro) in [#8101](https://github.com/jaegertracing/jaeger/pull/8101)) * Fix: correct bot detection in ci parallel mode ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#8097](https://github.com/jaegertracing/jaeger/pull/8097)) * [chore] _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.16.0]_ ### v2.15.1 — Release v2.15.1 - Date: 2026-02-09 - Version: v2.15.1 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.15.1 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.15.1 - **fixed** — Default spankind in api/v3/operations - **removed** — Remove deprecated protofromtraces wrapper in v1adapter ###### Backend Changes ###### 🐞 Bug fixes, Minor Improvements * Default spankind in api/v3/operations ([@yurishkuro](https://github.com/yurishkuro) in [#7997](https://github.com/jaegertracing/jaeger/pull/7997)) ###### ⚙️ Refactoring * Remove deprecated protofromtraces wrapper in v1adapter ([@SamyakBorkar](https://github.com/SamyakBorkar) in [#7996](https://github.com/jaegertracing/jaeger/pull/7996)) ### v2.15.0 — Release v2.15.0 - Date: 2026-02-06 - Version: v2.15.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.15.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.15.0 - **removed** — Restrict trace/metric storage configs to allow exactly one backend type - **added** — Add Grafana dashboard for metrics exporter - **fixed** — Return empty array instead of nil from api/v3/services - **fixed** — Return empty array instead of nil from queryservice.getservices - **fixed** — Always return empty services list when none exist - **fixed** — Ensure badger maintenance is stopped before exiting close() - **changed** — Use lazy initialization for storage factory - **added** — Add materialized view for event attribute metadata in ClickHouse - **changed** — Rework ClickHouse attributes to look up type for string attributes - **added** — Add get_span_names tool for discovering span names in MCP - **changed** — Use OpenTelemetry span_name terminology in jaegermcp extension - **added** — Implement get_critical_path tool in MCP - **added** — Add get_services tool for service discovery in MCP - **added** — Add CORS setting and fix null array errors in MCP - **added** — Add get_trace_topology tool in MCP - **added** — Add get_span_details and get_trace_errors tools in MCP - **added** — Add search_traces tool in MCP - **added** — Add storage integration in MCP - **added** — Add MCP server scaffolding with SDK integration and streamable HTTP transport ###### Backend Changes ###### ⛔ Breaking Changes * Restrict trace/metric storage configs to allow exactly one backend type ([@yurishkuro](https://github.com/yurishkuro) in [#7875](https://github.com/jaegertracing/jaeger/pull/7875)) ###### ✨ New Features * Issue #7811: added grafana dashboard for metrics exporter ([@Anmol202005](https://github.com/Anmol202005) in [#7903](https://github.com/jaegertracing/jaeger/pull/7903)) ###### 🐞 Bug fixes, Minor Improvements * [fix] return empty array instead of nil from api/v3/services ([@dee077](https://github.com/dee077) in [#7926](https://github.com/jaegertracing/jaeger/pull/7926)) * [fix] return empty array instead of nil from queryservice.getservices ([@sujalshah-bit](https://github.com/sujalshah-bit) in [#7925](https://github.com/jaegertracing/jaeger/pull/7925)) * [fix] always return empty services list when none exist ([@Sudhanshu-NITR](https://github.com/Sudhanshu-NITR) in [#7929](https://github.com/jaegertracing/jaeger/pull/7929)) * [fix] ensure badger maintenance is stopped before existing close() ([@Yashika0724](https://github.com/Yashika0724) in [#7940](https://github.com/jaegertracing/jaeger/pull/7940)) * Use lazy initialization for storage factory ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7887](https://github.com/jaegertracing/jaeger/pull/7887)) ###### 🚧 Experimental Features * [clickhouse] add materialized view for event attribute metadata ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7923](https://github.com/jaegertracing/jaeger/pull/7923)) * [clickhouse] rework clickhouse attributes to look up type for string attributes ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7815](https://github.com/jaegertracing/jaeger/pull/7815)) * [mcp] add get_span_names tool for discovering span names ([@sajal004004](https://github.com/sajal004004) in [#7909](https://github.com/jaegertracing/jaeger/pull/7909)) * Use opentelemetry span_name terminology in jaegermcp extension ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7916](https://github.com/jaegertracing/jaeger/pull/7916)) * [mcp] implement get_critical_path tool (phase 3 steps 8-9) ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7857](https://github.com/jaegertracing/jaeger/pull/7857)) * [clickhouse][chore] update unit tests snapshots to handle multiple queries ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7865](https://github.com/jaegertracing/jaeger/pull/7865)) * [mcp] get_services tool for service discovery ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7864](https://github.com/jaegertracing/jaeger/pull/7864)) * [mcp] add cors setting and fix null array errors ([@yurishkuro](https://github.com/yurishkuro) in [#7863](https://github.com/jaegertracing/jaeger/pull/7863)) * [mcp] get_trace_topology tool (phase 3 step 7) ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7862](https://github.com/jaegertracing/jaeger/pull/7862)) * [mcp] phase 2 steps 5-6: get_span_details and get_trace_errors tools ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7859](https://github.com/jaegertracing/jaeger/pull/7859)) * [mcp] phase 2 step 4: search_traces ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7858](https://github.com/jaegertracing/jaeger/pull/7858)) * [clickhouse][chore] update test driver to handle multiple queries ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7839](https://github.com/jaegertracing/jaeger/pull/7839)) * [mcp] phase 2 step 3: storage integration ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7849](https://github.com/jaegertracing/jaeger/pull/7849)) * Mcp server/phase 1.2: sdk integration with streamable http transport ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7846](https://github.com/jaegertracing/jaeger/pull/7846)) * Mcp server scaffolding ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7842](https://github.com/jaegertracing/j _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.15.0]_ ### v2.14.1 — Release v2.14.1 - Date: 2026-01-02 - Version: v2.14.1 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.14.1 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.14.1 - **fixed** — Dark theme fixes - **fixed** — Fix span detail panel in dark theme ###### 📊 UI Changes ###### 🐞 Bug fixes, Minor Improvements * Dark theme fixes ([@yurishkuro](https://github.com/yurishkuro) in [#3285](https://github.com/jaegertracing/jaeger-ui/pull/3285)) * Fix span detail panel in dark theme ([@yurishkuro](https://github.com/yurishkuro) in [#3283](https://github.com/jaegertracing/jaeger-ui/pull/3283)) ### v2.14.0 — Release v2.14.0 - Date: 2026-01-02 - Version: v2.14.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.14.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v2.14.0 - **removed** — Remove legacy v1 components query, collector, and ingester from published releases - **removed** — Remove storage/v1/grpc - **removed** — Remove v1 collector, query, and all-in-one - **removed** — Remove v1 ingester and all kafka related code - **changed** — Migrate remote-storage to yaml configuration with shared storageconfig package - **added** — UI now officially supports dark theme with theme selector enabled by default - **changed** — Memory storage now supports otlp first-class fields in search - **added** — Add indexspanalias and indexservicealias for explicit aliases - **fixed** — Update replication strategy configuration in schema template - **changed** — Fix otel collector v0.141.0 api breaking changes for toserver/toclientconn and kafka receiver/exporter - **changed** — Migrate docker-compose files to jaeger-v2 unified binary - **fixed** — Optimize ClickHouse service and operation retrieval queries - **added** — Implement findtraces for ClickHouse storage - **added** — Create materialized view in ClickHouse to store attribute metadata - **changed** — Update ClickHouse findtraceids to filter by complex attributes - **changed** — Update ClickHouse findtraceids to filter by other primitive attributes - **added** — Copy jaeger to otlp translator from otel contrib for Cassandra v2 - **changed** — Update ClickHouse findtraceids to filter by string attributes - **changed** — Update ClickHouse findtraceids to filter by timestamp - **changed** — Update ClickHouse findtraceids to populate start and end timestamps TL;DR: Two significant changes in this release: 1. ☠️ Starting from this release the legacy v1 components `query`, `collector`, and `ingester` are no longer published. All the remaining v1 utilities are now published as v2.x.x versions. 2. 🌓 The UI now officially supports dark theme and the theme selector is enabled by default. ###### Backend Changes ###### ⛔ Breaking Changes * Remove storage/v1/grpc ([@yurishkuro](https://github.com/yurishkuro) in [#7806](https://github.com/jaegertracing/jaeger/pull/7806)) * Migrate remote-storage to yaml configuration with shared storageconfig package ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7704](https://github.com/jaegertracing/jaeger/pull/7704)) * Remove v1 collector, query, and all-in-one ([@yurishkuro](https://github.com/yurishkuro) in [#7702](https://github.com/jaegertracing/jaeger/pull/7702)) * Remove v1/ingester and all kafka related code ([@yurishkuro](https://github.com/yurishkuro) in [#7701](https://github.com/jaegertracing/jaeger/pull/7701)) * Eliminate v1 binary references and sunset deprecated components ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7695](https://github.com/jaegertracing/jaeger/pull/7695)) * Fix otel collector v0.141.0 api breaking changes for toserver/toclientconn and kafka receiver/exporter ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7694](https://github.com/jaegertracing/jaeger/pull/7694)) ###### 🐞 Bug fixes, Minor Improvements * Migrate docker-compose files to jaeger-v2 unified binary ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#7747](https://github.com/jaegertracing/jaeger/pull/7747)) * Memory: support otlp first-class fields in search ([@SoumyaRaikwar](https://github.com/SoumyaRaikwar) in [#7728](https://github.com/jaegertracing/jaeger/pull/7728)) * Added indexspanalias and indexservicealias for explicit aliases ([@SomilJain0112](https://github.com/SomilJain0112) in [#7550](https://github.com/jaegertracing/jaeger/pull/7550)) * Fix: update replication strategy configuration in schema template ([@danish9039](https://github.com/danish9039) in [#7726](https://github.com/jaegertracing/jaeger/pull/7726)) ###### 🚧 Experimental Features * [fix][clickhouse] optimize service and operation retrieval queries ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7808](https://github.com/jaegertracing/jaeger/pull/7808)) * [clickhouse] implement findtraces for clickhouse storage ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7795](https://github.com/jaegertracing/jaeger/pull/7795)) * [clickhouse] create materialized view to store attribute metadata ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7798](https://github.com/jaegertracing/jaeger/pull/7798)) * [clickhouse] update findtraceids to filter by complex attributes ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7792](https://github.com/jaegertracing/jaeger/pull/7792)) * [clickhouse] update `findtraceids` to filter by other primitive attributes ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7789](https://github.com/jaegertracing/jaeger/pull/7789)) * [cassandra][v2] copy jaeger<->otlp translator from otel contrib ([@Manik2708](https://github.com/Manik2708) in [#7765](https://github.com/jaegertracing/jaeger/pull/7765)) * [clickhouse] update `findtraceids` to filter by string attributes ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7788](https://github.com/jaegertracing/jaeger/pull/7788)) * [clickhouse] update `findtraceids` to filter by timestamp ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7787](https://github.com/jaegertracing/jaeger/pull/7787)) * [clickhouse] update findtraceids to populate start and end timestamps ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7770](https://github.com/jaegertracing/jaeger/pull/7770)) * [clickhouse] update `findtraceids` to filter by duration ([@mahadzaryab1](https://github.com/mahadzaryab1) in [#7767](https:// _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v2.14.0]_ ### v1.76.0 — Release v1.76.0 / v2.13.0 - Date: 2025-12-03 - Version: v1.76.0 - Original notes: https://github.com/jaegertracing/jaeger/releases/tag/v1.76.0 - Permalink: https://whatsnew.fyi/product/jaeger/releases/v1.76.0 - **fixed** — Register basicauth extension in component factory - **added** — Add support for custom ui configuration in development mode - **removed** — Remove duplicate antd dependencies - **fixed** — Fix css class typo in sidepanel details div - **changed** — Reduce search form field margins for better viewport fit - **changed** — Migrate deepdependencies/header and qualitymetrics/header from nameselector to searchableselect - **changed** — Reorder checkbox before color by dropdown in tracestatisticsheader - **added** — Add fuzzy search to searchableselect - **fixed** — Fix highlighting of the current tab in the main nav bar - **added** — Add dark theme selector - **changed** — Sync themes with antd - **fixed** — Fix ddg minimap border - **changed** — Convert last remaining js files to typescript excluding tests ###### Backend Changes ###### 🐞 Bug fixes, Minor Improvements * Fix: register basicauth extension in component factory ([@xenonnn4w](https://github.com/xenonnn4w) in [#7668](https://github.com/jaegertracing/jaeger/pull/7668)) ###### 👷 CI Improvements * Make error message better ([@yurishkuro](https://github.com/yurishkuro) in [#7675](https://github.com/jaegertracing/jaeger/pull/7675)) * Clean go cache after installing gotip as suggested. ([@Kavish-12345](https://github.com/Kavish-12345) in [#7666](https://github.com/jaegertracing/jaeger/pull/7666)) * Fix: build test tools with stable go, not gotip ([@Kavish-12345](https://github.com/Kavish-12345) in [#7665](https://github.com/jaegertracing/jaeger/pull/7665)) ###### 📊 UI Changes ###### 🐞 Bug fixes, Minor Improvements * Add support for custom ui configuration in development mode ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3194](https://github.com/jaegertracing/jaeger-ui/pull/3194)) * Remove duplicate antd dependencies ([@yurishkuro](https://github.com/yurishkuro) in [#3193](https://github.com/jaegertracing/jaeger-ui/pull/3193)) * Fix css class typo in sidepanel details div ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3190](https://github.com/jaegertracing/jaeger-ui/pull/3190)) * Reduce search form field margins for better viewport fit ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3189](https://github.com/jaegertracing/jaeger-ui/pull/3189)) * Migrate deepdependencies/header and qualitymetrics/header from nameselector to searchableselect ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3185](https://github.com/jaegertracing/jaeger-ui/pull/3185)) * Reorder checkbox before color by dropdown in tracestatisticsheader ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3184](https://github.com/jaegertracing/jaeger-ui/pull/3184)) * Feat: add fuzzy search to searchableselect ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3182](https://github.com/jaegertracing/jaeger-ui/pull/3182)) * Fix highlighting of the current tab in the main nav bar ([@SimonADW](https://github.com/SimonADW) in [#3183](https://github.com/jaegertracing/jaeger-ui/pull/3183)) ###### 🚧 Experimental Features * Sync themes with antd ([@yurishkuro](https://github.com/yurishkuro) in [#3196](https://github.com/jaegertracing/jaeger-ui/pull/3196)) * Add dark theme selector ([@yurishkuro](https://github.com/yurishkuro) in [#3192](https://github.com/jaegertracing/jaeger-ui/pull/3192)) ###### 👷 CI Improvements * Add copyright year linter to npm lint command ([@Copilot](https://github.com/apps/copilot-swe-agent) in [#3197](https://github.com/jaegertracing/jaeger-ui/pull/3197)) * Rename theme variables to match industry practice ([@yurishkuro](https://github.com/yurishkuro) in [#3174](https://github.com/jaegertracing/jaeger-ui/pull/3174)) * Tweak codecov config ([@yurishkuro](https://github.com/yurishkuro) in [#3169](https://github.com/jaegertracing/jaeger-ui/pull/3169)) ###### ⚙️ Refactoring * Apply theme vars to common/emphasizednode ([@yurishkuro](https://github.com/yurishkuro) in [#3191](https://github.com/jaegertracing/jaeger-ui/pull/3191)) * Fix ddg minimap border ([@yurishkuro](https://github.com/yurishkuro) in [#3188](https://github.com/jaegertracing/jaeger-ui/pull/3188)) * Use token vars in common/utils.css ([@yurishkuro](https://github.com/yurishkuro) in [#3187](https://github.com/jaegertracing/jaeger-ui/pull/3187)) * Apply theme vars to some shared components ([@yurishkuro](https://github.com/yurishkuro) in [#3181](https://github.com/jaegertracing/jaeger-ui/pull/3181)) * Apply theme vars to search page ([@yurishkuro](https://github.com/yurishkuro) in [#3180](https://github.com/jaegertracing/jaeger-ui/pull/3180)) * Use theme vars in errormessage & loadingindicator ([@yurishkuro](https://github.com/yurishkuro) in [#3177](https://github.com/jaegertracing/jaeger-ui/pull/3177)) * Use theme _[Truncated at 4000 characters — full notes: https://github.com/jaegertracing/jaeger/releases/tag/v1.76.0]_