What changed in Jaeger from 1 to 2
9 releases numbered after v1.76.0 up to and including v2.20.0, stable releases only. v1.76.0 and v2.20.0 are the newest stable releases of 1 and 2 we track; this page follows them as new ones ship.
- 6 mention breaking changes
- 6 remove or deprecate something
128 changes across 9 releases
Added 48
- Add --backend flag to esmapping-generator for OpenSearch selection
- Add native trace summaries (summaryreader) for Elasticsearch
- Add synchronous bulk write primitive to the Elasticsearch client
- Gate parentspanid reference-compat write behind a feature gate
- Add genai span attributes and gateway↔sidecar trace propagation
- Add bearer-token and api-key CLI flags to Elasticsearch admin tools
- Implement findtracesummaries gRPC handler in apiv3
- Add GET /api/v3/trace-summaries endpoint for lightweight search results
- Implement summaryreader in gRPC storage adapter
- Add max_recv_msg_size_mib config for gRPC storage client
- Implement ag-ui endpoint
- Add table view as alternative to list view in search results
- Add reset button to clear the search form
- Add TLS configuration for ClickHouse
- Add missing scope and link fields to Elasticsearch index templates
- Auto-detect UI base path from browser URL
- Forward configured headers to Elasticsearch/OpenSearch backend
- Add configurable header forwarding to gRPC storage backend
- Implement AI new MCP endpoint for frontend dynamic contextual tooling
- Add OpenTelemetry metrics middleware for MCP tool invocations
- Integrate ClickHouse metric storage into Jaeger storage extension
- Implement AI Gemini agent tracing
- Add TTL support for ClickHouse v2 storage
- Implement timer duration bucket parsing in metrics init
- Expose metrics storage to UI as storage capabilities
- Add system prompt instructions for LLM clients in jaegermcp
- Add Go SDK dashboard generator for monitoring
- Enable tenancy enforcement in jaegermcp
- Enforce config-driven limits in jaegermcp handlers
- Add schemagen for internal extensions
- Add support for elasticsearch health-check timeout at startup
- Add empty span name sanitizer
- Add Grafana dashboard for metrics exporter
- Add materialized view for event attribute metadata in ClickHouse
- Add get_span_names tool for discovering span names in MCP
- Implement get_critical_path tool in MCP
- Add get_services tool for service discovery in MCP
- Add CORS setting and fix null array errors in MCP
- Add get_trace_topology tool in MCP
- Add get_span_details and get_trace_errors tools in MCP
- Add search_traces tool in MCP
- Add storage integration in MCP
- Add MCP server scaffolding with SDK integration and streamable HTTP transport
- UI now officially supports dark theme with theme selector enabled by default
- Add indexspanalias and indexservicealias for explicit aliases
- Implement findtraces for ClickHouse storage
- Create materialized view in ClickHouse to store attribute metadata
- Copy jaeger to otlp translator from otel contrib for Cassandra v2
Changed 38
- Promote es.* rotation and index-cleaner feature gates to beta
- Merge jaegermcp extension into jaegerquery extension
- Add configurable max_trace_duration and improve time-range design for Elasticsearch
- Remove expired stable feature gates
- Migrate template creation to esclient and retire legacy mapping rendering
- Make "spm not configured" error message more explicit
- Migrate span writes onto an owned bounded bulk indexer
- Migrate service/operation reads onto owned searcher and query ast
- Route admin plane through the shared auth stack
- Support query.attributes filter in GET /api/v3/traces
- Accept camelCase HTTP query params, keep snake_case as deprecated aliases in apiv3
- Rename query.num_traces to query.search_depth, keep deprecated alias
- Migrate search to /api/v3/trace-summaries
- Replace hand-written JSON scaffolding with proto types in HTTP gateway
- Compute trace summaries natively or fall back to full-trace aggregation in querysvc
- Rename numtraces to searchdepth in Elasticsearch v2 dbmodel
- Drop v1-style reftype from critical path logic in jaegermcp
- Continue inbound trace context from sep-414 request meta in jaeger_mcp
- Refactor route registration and request body size handling in jaegerai
- Implement safe self-tracing via OTEL collector telemetry factory
- Optimize ClickHouse spans table for faster searching
- Optimize ClickHouse get traces query by adding start and end time filter
- Replace traces.topic with traces.topics in kafka receiver config
- Restructure clickhouse findtraceids query to improve performance
- Refactor cassandra fromdbmodel and todbmodel to accept and return dbmodel.span
- Migrate http servers from gorilla mux to stdlib http.ServeMux
- Use lazy initialization for storage factory
- Rework ClickHouse attributes to look up type for string attributes
- Use OpenTelemetry span_name terminology in jaegermcp extension
- Migrate remote-storage to yaml configuration with shared storageconfig package
- Memory storage now supports otlp first-class fields in search
- Fix otel collector v0.141.0 api breaking changes for toserver/toclientconn and kafka receiver/exporter
- Migrate docker-compose files to jaeger-v2 unified binary
- Update ClickHouse findtraceids to filter by complex attributes
- Update ClickHouse findtraceids to filter by other primitive attributes
- Update ClickHouse findtraceids to filter by string attributes
- Update ClickHouse findtraceids to filter by timestamp
- Update ClickHouse findtraceids to populate start and end timestamps
Fixed 32
- Reject mutually-exclusive Elasticsearch auth methods in validate()
- Synchronize fallback token in tokenproviderwithtime closure
- Validate decoded trace/span id lengths to prevent panic on corrupted rows in ClickHouse
- Apply custom_headers to all Elasticsearch clients and honor host override
- Fix traceID casing, add snapshot test, and default searchdepth in trace-summaries endpoint
- Use findtraceidsrequest for findtraceids RPC in storage/v2
- Remove misleading error wrapper in getstoragefactory
- Fix tools API mismatch between ACP and Jaeger gateway
- Normalize span_kind input to lowercase in get_span_names handler
- Fix array join alias broken by ClickHouse v26 new analyzer
- Add missing spanhash value to v2 todbmodel conversion in Cassandra
- Preserve gocql timeouts when unset in Cassandra config
- Validate start_time_max after start_time_min
- Fix sigv4 auth failure due to missing req.getbody on Elasticsearch/OpenSearch writes
- Add missing scope attributes in ClickHouse query builder
- Accept string-form error filters in trace search for memory storage
- Guard addjitter against zero or sub-nanosecond durations to prevent panic
- Clock skew adjuster to also adjust end timestamp
- Enforce response limits in jaegermcp
- Fix jaegermcp server integration with Claude code
- Fix ClickHouse trace ID timestamps table schema and query to deduplicate trace IDs
- Support max trace size issue in the query service
- Include link attributes when searching by tags in memory backend
- Default spankind in api/v3/operations
- Return empty array instead of nil from api/v3/services
- Return empty array instead of nil from queryservice.getservices
- Always return empty services list when none exist
- Ensure badger maintenance is stopped before exiting close()
- Dark theme fixes
- Fix span detail panel in dark theme
- Update replication strategy configuration in schema template
- Optimize ClickHouse service and operation retrieval queries
Removed 10
- Remove support for Elasticsearch v6
- Remove min step API from metricstore
- Remove non-standard health MCP tool
- Remove legacy response format of remote sampling endpoint
- Remove deprecated protofromtraces wrapper in v1adapter
- Restrict trace/metric storage configs to allow exactly one backend type
- Remove legacy v1 components query, collector, and ingester from published releases
- Remove storage/v1/grpc
- Remove v1 collector, query, and all-in-one
- Remove v1 ingester and all kafka related code
Original release notes, newest first
The list above is our reading of these notes; the originals from CNCF are here, one fold per release.
v2.20.0Release v2.20.0
Backend Changes
⛔ Breaking Changes
- Feat(es): promote es.* rotation and index-cleaner feature gates to beta (@ysh-bot in #9018)
- Feat(es): remove support for elasticsearch v6 (@yurishkuro in #8948)
- Feat(mcp): merge jaegermcp extension into jaegerquery extension (@Nabil-Salah in #8894)
- Feat(es): add configurable max_trace_duration and improve time-range design (@yurishkuro in #8840)
✨ New Features
- Feat(es): add --backend flag to esmapping-generator for opensearch selection (@ysh-bot in #8985)
- Feat(es): native trace summaries (summaryreader) (@Me-Priyank in #8812)
🐞 Bug fixes, Minor Improvements
- Feat(es): add synchronous bulk write primitive to the elasticsearch client (@ysh-bot in #8992)
- Feat(es): gate parentspanid reference-compat write behind a feature gate (@ysh-bot in #9015)
- Fix(ci): resolve published snapshot shas for oke demo deploy (@FlamingSaint in #8999)
- feat(jaegerai): add genai span attributes and gateway↔sidecar trace propagation (@SoumyaRaikwar in #8942)
- Chore(storage): remove expired stable feature gates (@Anujkumar9081 in #8970)
- Chore(es): scrub lingering olivere references from code comments (@ysh-bot in #8983)
- Feat(es): migrate template creation to esclient and retire legacy mapping rendering (@Me-Priyank in #8963)
- Fix(storage): reject mutually-exclusive es auth methods in validate() (@Anujkumar9081 in #8946)
- Make "spm not configured" error message more explicit (@Saithej2k in #8878)
- Feat(es): migrate span writes onto an owned bounded bulk indexer (@yurishkuro in #8944)
- Fix(auth): synchronize fallback token in tokenproviderwithtime closure (@yurishkuro in #8952)
- Feat(es): migrate service/operation reads onto owned searcher and query ast (@yurishkuro in #8943)
- [es] add bearer-token and api-key cli flags to es admin tools (rfc 0006 m3.5c) (@yurishkuro in #8939)
- [es] route admin plane through the shared auth stack (rfc 0006 m3.5b) (@yurishkuro in #8937)
- Fix(clickhouse): validate decoded trace/span id lengths to prevent panic on corrupted rows (@iammdzaidalam in #8935)
- Fix(es): apply custom_headers to all elasticsearch clients and honor host override (@iammdzaidalam in #8917)
- Fix(storage): populate req.getbody before sigv4 signing, not after (@truffle-dev in #8768)
- Fix(mcp): report total_count and truncated on get_services and get_span_names (@CedricConday in #8902)
- Fix(sampling): forfeit leader lock on graceful shutdown (@HESleagacy in #8825)
- Feat(tracestoremetrics): forward summaryreader when underlying reader supports it (@yurishkuro in #8895)
- Feat(hotrod): add standard otel db semconv attributes to hotrod spans (@yurishkuro in #8893)
- Fix(es): populate parentspanid field on write path (@yurishkuro in #8859)
- Fix(mcp): don't error on empty critical path (@Me-Priyank in #8806)
- Fix(jaegermcp): wait for server goroutine to exit on shutdown (@g-k-s-03 in #8852)
- Fix(mcp): validate span_id format before querying backend (@truffle-dev in #8845)
- Test(v1adapter): fix mock expectation validation in dependency reader tests (@kavyarathod05 in #8756)
- Fix(es): improve es/os integration test ci coverage and reduce noise (@yurishkuro in #8836)
- Fix(es): emit opensearch ism rollover_alias and consolidate backendversion (@yurishkuro in #8830)
- Feat(query): accept base64-encoded trace ids in http api endpoints (@yurishkuro in #8828)
- Refactor(es): introduce index rotation config schema with legacy flag deprecation (@yurishkuro in #8823)
🚧 Experimental Features
- Feat(ai-gateway): serve per-session ui tools over the session-scoped mcp endpoint (@Nabil-Salah in #8973)
- Feat(ai-gateway): add session-scoped mcp endpoint and session-stream registry (@Nabil-Salah in #8910)
- Feat(jaegermcp): add
read_skilltool for agent skill discovery (@SoumyaRaikwar in #8849) - Feat(es): add datastreamrotation strategy and data-stream-aware span write path (@Me-Priyank in #8833)
👷 CI Improvements
- Fix(build): build embedded ui with pnpm after jaeger-ui migration (@ysh-bot in #9044)
- Fix windows test cleanup failure: close output/error log file handles (@shayannab in #8884)
- [chore] close idle connections for http clients in integration tests (@Manik2708 in #8815)
- [chore]: add binary.stop() and binarypath for mid-test process control (@iammdzaidalam in #8822)
- Feat(es): add e2e integration tests for all rotation strategies (@yurishkuro in #8838)
⚙️ Refactoring
- Refactor(ai-gateway): apply rfc 0008 terminology — turn registry, route id, endpoint naming (@Nabil-Salah in #9017)
- Refactor(es): introduce batch writespans api in v2 elasticsearch trace writer (@ysh-bot in #8990)
- Feat(es): delete the olivere elasticsearch client stack (@ysh-bot in #8982)
- Test(es): retire the detailederror olivere-error enricher (@ysh-bot in #8981)
- Test(es): migrate the elasticsearch rotation e2e tests to the owned client (@ysh-bot in #8976)
- Refactor(es): make esclient.client a pointer handle (@ysh-bot in #8979)
- Test(es): migrate the direct elasticsearch integration tests to the owned client (@ysh-bot in #8975)
- Feat(es): close idle connections on the owned elasticsearch client (@ysh-bot in #8974)
- Feat(es): migrate the es metricstore onto the owned searcher and query ast (@ysh-bot in #8967)
- Feat(es): migrate the es span reader onto the owned searcher and query ast (@ysh-bot in #8958)
- Feat(es): migrate dependency store reads and writes onto owned esclient (@ysh-bot in #8957)
- Feat(es): migrate sampling store reads and writes onto owned esclient (@yurishkuro in #8954)
- Test(es): snapshot sampling store write requests via an injectable clock (@yurishkuro in #8955)
- Unify elasticsearch backend version detection at client construction (rfc 0006 m4) (@iammdzaidalam in #8938)
- Relocate the shared es roundtripper stack into the esclient package (@yurishkuro in #8936)
- Route the elasticsearch admin client through a shared elastic-transport-go pool (@yurishkuro in #8932)
- Rename the elasticsearch control-plane client package to esclient (@yurishkuro in #8930)
- Add es/os request-snapshot suite baseline and converge mapping fixtures (@yurishkuro in #8922)
- Refactor(es): thread context.context through the es rest client (@Me-Priyank in #8873)
- Refactor(es): rename index name constants, eliminate *indexbasename (@yurishkuro in #8870)
- Refactor(es): move index name constants to config package, drop prefix param from resolved*rotation (@yurishkuro in #8868)
- Refactor(es): extract client construction into clientbuilder package (@yurishkuro in #8842)
- Feat: export reusable jaegercli.newcommand for custom ocb distributions (@iammdzaidalam in #8835)
- Refactor(es): rename rotation implementation files to rotation_{name}.go (@yurishkuro in #8839)
- Chore(storage): remove fswatcher from elasticsearch factory (@iammdzaidalam in #8750)
- Refactor(es): migrate depstore and metricstore to use rotation interface (@yurishkuro in #8826)
📖 Documentation
- Rfc 0004: elasticsearch/opensearch data streams for span storage (@yurishkuro in #8804)
📊 UI Changes
✨ New Features
- Feat(genai-tab): add content-sensitive rendering toggle (plain/markdown/json) for message content (@swetalin-10 in #4213)
- Feat(assistant): add markdown rendering and panel resize (@SoumyaRaikwar in #4181)
- Feat(search): add ascending sort support for start time column (@akshatsinghai6682-sketch in #4033)
- Feat: treat trace ids as opaque strings, support base64 encoding (@yurishkuro in #4118)
- Feat(flamegraph): implement native & improved flamegraph trace view (@yurishkuro in #4098)
- Feat(tracing): export ui-emitted otlp traces to jaeger (@yurishkuro in #4051)
🐞 Bug fixes, Minor Improvements
- Fix(genai): fix span icon hover tooltip and refine type icons and labels (@swetalin-10 in #4239)
- Feat(timeline): emphasize span-type icons and soften tree chrome (@ysh-bot in #4238)
- Chore(genai-tab): prefix the token usage row with "tokens:" (@swetalin-10 in #4222)
- Fix(trace): show span pill labels as tooltips (@udita-0707 in #4220)
- Feat(trace): expand span pills to hardcoded attribute set (@udita-0707 in #4214)
- Fix(genai-tab): simplify and fix rendering of genai span icons (@swetalin-10 in #4221)
- Feat(search): show and track trace search latency (@ysh-bot in #4216)
- Refactor(otel): introduce iattributes collection replacing raw attribute arrays (@ysh-bot in #4211)
- Feat(trace): add http status summary chips (@udita-0707 in #4149)
- Feat(spanbarrow): add genai span type icons for llm, tool, agent, and retrieval spans (@swetalin-10 in #3857)
- Fix(stats): make heatmap theme-aware (@jkowall in #4200)
- Fix(listview): remove array-length pre-allocation that created holes (@dolliecoder in #4194)
- Feat(genai-tab): add genai span detail content (@swetalin-10 in #4191)
- Feat(utils): add genai span classification and isgenaitrace detection (@swetalin-10 in #3856)
- Feat(monitor): sync monitor filters to url on change (@udita-0707 in #4182)
- Fix(timeline): restore critical path hover animation in dark mode (@yurishkuro in #4180)
- Feat(search): add absolute/relative toggle for table start time (@yurishkuro in #4175)
- Feat(search): improve table view column sorting (@sksingh2005 in #3994)
- Fix(filter-spans): stringify object/array attribute values for span search (@bhuvan-somisetty in #4171)
- Fix: increase critical path bar contrast in dark mode (@bhavyamsharmaa in #4163)
- Fix(assistant): render tool-call parts in chat thread (@SoumyaRaikwar in #4164)
- Feat(monitor): support service/spankind/timeframe url params (@udita-0707 in #4119)
- Feat(trace): add decorative span type icons in tree view (@swetalin-10 in #3832)
- Fix(tracegraph): theme-aware edge and legend colors in dark mode (@bhavyamsharmaa in #4074)
- Fix(tracepage): handle root span navigation at index 0 (@dolliecoder in #4145)
- Fix: fix sidepanel resize when timeline is hidden (@sksingh2005 in #4046)
- Fix(bug): clear trace id input field on navigation/reload (#4135) (@shubhtrek in #4136)
- Refactor: standardize keyvaluepair typing across the ddg model (@shubhtrek in #4064)
- Default to table view for search results (@yurishkuro in #4133)
- Feat(flamegraph): resizable 50/50 table/chart split with scroll affordance (@yurishkuro in #4121)
- Fix: copyicon button jumps/enlarges on hover (animation/layout glitch) (@akshatsinghai6682-sketch in #4022)
- Fix(plexus): use currentcolor for ddg edge weight labels in dark mode (@shubhtrek in #4079)
- Fix(search): keep back-to-search across find and trace id clicks (@udita-0707 in #4080)
- Fix(monitor): replace hardcoded light-mode colors with design tokens in operations table (@udita-0707 in #4054)
- Fix(assistant): wrap fetch passed to httpagent (@yurishkuro in #4044)
🚧 Experimental Features
- Feat(genai): add genai tab shell to span detail panel (@swetalin-10 in #4122)
- Feat(tracepage): add genaitimelineviewer view type with auto-activation (@swetalin-10 in #3872)
👷 CI Improvements
- Chore(pnpm): migrate from npm to pnpm (@thisis-manan in #4137)
- Chore(ci): route build/lint/test/coverage steps through makefile entrypoints(part of migration to pnpm) (@aprv10 in #4139)
⚙️ Refactoring
- Refactor(search): remove dead trace redux slice and its search actions/api (@swetalin-10 in #3999)
- Refactor(timeline): extract critical path logic into helper module (@sonalyadav1 in #4060)
- Refactor(stats): extract computespanselftime to shared utility (@yurishkuro in #4113)
- Refactor(ddg): use functional component for graph (@sksingh2005 in #4100)
- Refactor:migrate virtualizedtraceview to functional component (@sksingh2005 in #4081)
- Refactor(tracegraph): migrate to functional component (@sksingh2005 in #4058)
v2.19.0Release v2.19.0
Backend Changes
✨ New Features
- Feat(apiv3): implement findtracesummaries grpc handler (@yurishkuro in #8634)
🐞 Bug fixes, Minor Improvements
- Fix(apiv3): support query.attributes filter in get /api/v3/traces (@yurishkuro in #8687)
- Feat(clickhouse): add tls configuration (@Pulkit7070 in #8650)
- [clickhouse] add linter for clickhouse (@mahadzaryab1 in #8641)
- [es] add missing scope and link fields to index templates (@Manik2708 in #8643)
- Fix: tools api mismatch between acp and jaeger gateway (@Nabil-Salah in #8608)
- Fix(apiv3): fix traceid casing, add snapshot test, and default searchdepth in trace-summaries endpoint (@yurishkuro in #8633)
- Feat: add get /api/v3/trace-summaries endpoint for lightweight search results (@yurishkuro in #8604)
- Fix(apiv3): accept camelcase http query params, keep snake_case as deprecated aliases (@yurishkuro in #8625)
- Fix(apiv3): rename query.num_traces to query.search_depth, keep deprecated alias (@yurishkuro in #8618)
- Ci(metrics): make pr metric diffs informational (@yurishkuro in #8605)
- Fix(storage/v2): use findtraceidsrequest for findtraceids rpc (@yurishkuro in #8603)
- Fix(storage): remove misleading error wrapper in getstoragefactory (@yurishkuro in #8593)
- Feat(grpc-storage): add max_recv_msg_size_mib config for grpc storage client (@yurishkuro in #8576)
🚧 Experimental Features
- Refactor(apiv3): replace hand-written json scaffolding with proto types in http gateway (@yurishkuro in #8646)
- Feat(grpc): implement summaryreader in grpc storage adapter (@yurishkuro in #8642)
- Feat(querysvc): compute trace summaries natively or fall back to full-trace aggregation (@yurishkuro in #8638)
- Feat(jaeger): implement ag-ui endpoint (@Nabil-Salah in #8505)
👷 CI Improvements
- Ci: reduce github actions token permissions (@jkowall in #8640)
- Fix(ci): always use submodule for npm cache key in setup-node.js action (@yurishkuro in #8654)
- Feat(ci): use latest jaeger-ui/main commit in snapshot builds (@yurishkuro in #8653)
- Fix(ci): stabilize codeql check results (@jkowall in #8615)
- Fix(lint): enforce per-file license headers (@jkowall in #8537)
⚙️ Refactoring
- [chore] enable revive deep-exit linter rule (@abhay1999 in #8274)
- [es] rename
numtracestosearchdepthin es v2 dbmodel (@aezyus in #8611)
📖 Documentation
- Docs(security): document fuzzing scorecard exception (@jkowall in #8637)
- Docs(adr): add adr-010 trace summary api for lightweight search results (@yurishkuro in #8602)
- Docs(security): document openssf hard evidence (@jkowall in #8585)
- Docs(security): add current security review evidence (@jkowall in #8584)
📊 UI Changes
⛔ Breaking Changes
- Feat: migrate search to /api/v3/trace-summaries (adr-010 phase 2b) (@yurishkuro in #3943)
✨ New Features
- Feat(search): add table view as alternative to list view in search results (@yurishkuro in #3980)
🐞 Bug fixes, Minor Improvements
- Feat(search): add reset button to clear the search form (@yurishkuro in #4009)
- Fix(search): support legacy lookback-only search urls (@yurishkuro in #4008)
- Fix(search): suppress trace summary columns unsupported by storage (@ghosthouse7 in #4007)
- Fix(search): keep trace comparison selection across searches (@parshipcy in #3968)
- Refactor(deps-graph): fold dev dataset sources into usedependenciesquery (@yurishkuro in #3993)
- Fix(deps-graph): tidy toolbar layout and clear stale visual issues (@yurishkuro in #3992)
- Feat(searchtracepage): resizable and collapsible search side panel (@swetalin-10 in #3984)
- Docs(tracking): add console analytics example and improve custom analytics docs (@yurishkuro in #3988)
- Feat(search): make default lookback configurable; reconstruct lookback from url timestamps (@yurishkuro in #3973)
- Refactor(ui): share time range options between search and monitor (@yurishkuro in #3978)
- Feat(search): add v3 trace-summaries api client and sort model (adr-010 phase 2b, part 1) (@yurishkuro in #3947)
- Refactor(dev): extract routes and timeframe utils, lazy-load secondary pages (@yurishkuro in #3946)
- Chore: bump tsconfig target from es2016 to es2020 (@yurishkuro in #3945)
- Fix(ui): delay empty-root error check to avoid flash with react 18 (@yurishkuro in #3942)
- Fix(ui): correct typos in accordionlinks class name and css punctuation key (@Pulkit7070 in #3905)
🚧 Experimental Features
- Feat(config): add ai.enabled flag (default false) for ai-assisted ui (@yurishkuro in #4003)
⚙️ Refactoring
- Refactor(ddg): convert node content to hooks (@sksingh2005 in #3948)
- Feat(state): migrate dependencies page to react query (adr-004 2d) (@parshipcy in #3991)
- Refactor(trace): convert timelineviewinglayer to hooks (@sksingh2005 in #3868)
- Refactor(search): complete phase 2c discovery query keys (@parshipcy in #3966)
- Feat(search): use /api/v3/trace-summaries for search results (@yurishkuro in #3964)
- Fix(search): replace singleton cache with keyed cache + eviction for trace search (@yurishkuro in #3961)
- Chore(api): regenerate v3 openapi client from latest idl (@yurishkuro in #3953)
- Refactor(trace): phase 2(a) - migrate single/multi trace load to react query (@parshipcy in #3835)
- Refactor(search): introduce tracesummary type for search results (@yurishkuro in #3941)
v2.18.0Release v2.18.0
Backend Changes
⛔ Breaking Changes
- Metrics changes due to upgrading all OTEL collector packages (@renovate-bot in #8560)
- [metricstore] remove min step api from metricstore (@mahadzaryab1 in #8425)
✨ New Features
- Feat(query): auto-detect ui base path from browser url (adr-009) (@yurishkuro in #8568)
- Feat(storage): forward configured headers to elasticsearch/opensearch backend (@ChaitanyaD48 in #8544)
- Feat(query): add configurable header forwarding to grpc storage backend (@yurishkuro in #8539)
🐞 Bug fixes, Minor Improvements
- Fix(mcp): normalize span_kind input to lowercase in get_span_names handler (@farhann-saleem in #8466)
- Fix(clickhouse): fix array join alias broken by clickhouse v26 new analyzer (@Copilot in #8547)
- Chore(jaegermcp): remove non-standard health mcp tool (@Vi-shub in #8549)
- [jaegermcp] drop v1-style reftype from critical path logic (@yurishkuro in #8467)
- [cassandra] add missing
spanhashvalue to v2todbmodelconversion (@Manik2708 in #8410) - Fix(cassandra): preserve gocql timeouts when unset in config (@masihkhatibzadeh99 in #8380)
- [jaeger_mcp] continue inbound trace context from sep-414 request _meta (@SoumyaRaikwar in #8361)
- Validate start_time_max after start_time_min (@utafrali in #8309)
- Fix sigv4 auth failure due to missing req.getbody on es/os writes (@dd-tone in #8308)
🚧 Experimental Features
- Feat(jaeger): implement ai new mcp endpoint for frontned dynamic contextual tooling (@Nabil-Salah in #8423)
- [jaegerai] refactor route registration and request body size handling (@yurishkuro in #8468)
- [fix][clickhouse] add missing scope attributes in clickhouse's query builder (@mahadzaryab1 in #8439)
- [jaegermcp] add opentelemetry metrics middleware for mcp tool invocations (@CosmicAlgo in #8370)
- [clickhouse][spm] add e2e test for clickhouse spm (@mahadzaryab1 in #8432)
- [clickhouse] integrate clickhouse metric storage into jaeger storage extension (@mahadzaryab1 in #8426)
- Feat(gemini-agent): implement ai gemini agent tracing (@Nabil-Salah in #8398)
- [clickhouse][spm] implement
getcallratesfor clickhouse storage (@mahadzaryab1 in #8417) - [clickhouse][spm] implement
geterrorratesfor clickhouse storage (@mahadzaryab1 in #8414) - [clickhouse][spm] implement
getlatenciesfor clickhouse storage (@mahadzaryab1 in #8411) - [jaegermcp] add get_service_dependencies tool (@lopster568 in #8403)
- [clickhouse] enable direct integration tests for clickhouse storage (@mahadzaryab1 in #8389)
- Feature: add ttl support for clickhouse v2 storage (@singhvibhanshu in #7906)
- [jaegermcp] improve mcp tool descriptions (@lopster568 in #8314)
- [clickhouse] implement dependency writer for clickhouse storage (@mahadzaryab1 in #8360)
👷 CI Improvements
- Ci: skip metrics comparison and coverage regression gate on main branch (@Copilot in #8469)
- Chore(ci): fix stale empty go module cache (@Copilot in #8461)
- Perf(lint): rewrite check-line-endings in python for ~37x speedup (@yurishkuro in #8399)
- Ci: integrate check-line-endings.sh into make fmt and make lint (@yurishkuro in #8393)
- Ci: exclude dev-only modules from fossa workspace scan (@jkowall in #8390)
- Fix(ci): post coverage gate and metrics comparison check runs against pr head sha (@Copilot in #8387)
⚙️ Refactoring
- [cassandra] remove v1 api dependencies (@Manik2708 in #8428)
- [storage][cassandra] implement v2
tracewriter(@Manik2708 in #7699) - [cassandra] change signature of corespanreader to return an iterator (@Manik2708 in #8296)
- [depstore][v2] update depstore writer interface to accept context (@mahadzaryab1 in #8365)
📖 Documentation
- Docs(security): document code review and 2fa policies (@jkowall in #8524)
- Docs(jaegermcp): fix documentation inconsistencies in adr-002 and readme (@Vi-shub in #8509)
- Document openssf gold badge evidence refresh (@jkowall in #8497)
- Docs(mcp): align search_traces adr with search_depth schema (@farhann-saleem in #8472)
- [clickhouse][adr] add adr for clickhouse storage (@mahadzaryab1 in #8434)
📊 UI Changes
⛔ Breaking Changes
- Chore: drop legacy browser support (@ghosthouse7 in #3712)
✨ New Features
- Feat(ui): auto-detect url prefix from window.location at page load (@yurishkuro in #3874)
🐞 Bug fixes, Minor Improvements
- Fix monitor page chart widths on initial load (@gulshank0 in #3555)
- Fix: use compact duration format consistently across ui (@yurishkuro in #3846)
- Fix(search): restore time picker options broken by #3781 (@yurishkuro in #3845)
- Fix(search): use compact duration format in search results (@Copilot in #3844)
- Fix: add keyboard accessibility to span name and child expander in trace timeline (@swetalin-10 in #3807)
- Restore trace timeline column resizing in embedded mode (
uiembed=v0) (@Copilot in #3823) - Fix: include backend error in otlp conversion error message (@yurishkuro in #3827)
- Fix: stop click propagation in clicktocopy to prevent header collapse (@Copilot in #3818)
- Fix(trace): restore "back to search" link broken by react router v6 migration (@yurishkuro in #3785)
- Feat(trace): add service filter to prune spans by service in timeline (@yurishkuro in #3765)
- Fix: prevent timeline tick labels from overlapping when column is narrow (@aabhinavvvvvvv in #3768)
- Fix(ui): sort services alphabetically (@bender316 in #3734)
- 🔒 fix command injection in prepare-release.py (@jkowall in #3717)
- Perf: optimize tracestatistics grouping (@jkowall in #3718)
- Add environment checks to prepare-release target (@jkowall in #3512)
- Fix: prevent infinite loop on tracediff with empty trace ids (@parshipcy in #3714)
- Adjust search results for smaller screens (@lpmi-13 in #3697)
👷 CI Improvements
- Delete .github/workflows/s390x-build.yaml (@yurishkuro in #3851)
- Fix(lint): resolve eslint-plugin-jest(require-to-throw-message) warnings (@JeevaRamanathan in #3759)
- Fix(lint): disable jest/no-conditional-expect (@vibhor-5 in #3756)
- Fix(lint): disable eslint(no-shadow) warnings (@vibhor-5 in #3757)
- Chore: add knip; remove 4 unused devdependencies (@yurishkuro in #3742)
⚙️ Refactoring
- Refactor(spanview): extract relativebar component from tracespanview (@yurishkuro in #3855)
- Refactor(stats): migrate tracestatisticsheader to functional component (@WasThatRudy in #3842)
- Part of phase 1 (1f): remove config redux slice; use getconfig via useconfig (@parshipcy in #3781)
- Part of phase 1 (1e): migrate embed flags off redux (@parshipcy in #3761)
- Part of phase 1 (1d): move ddg view modifiers from redux to zustand (@parshipcy in #3750)
- Fix(lint): replace new array(n) with array.from, promote no-new-array to error (@mateenali66 in #3754)
- Fix(lint): clear unused vars/imports, promote no-unused-vars to error in ts (@mateenali66 in #3753)
- Fix(lint): fix jest expects to have matcher calls, promote valid-expect to error (@Pasta-coder in #3752)
- Fix(lint): drop useless array spread, promote no-useless-spread to error (@mateenali66 in #3749)
- Chore(lint): move oxlint config into vite.config.ts (@yurishkuro in #3748)
- Fix(lint): pass children as arg, promote no-children-prop to error (@yurishkuro in #3747)
- Chore: fix all knip unused-export warnings; enable failure mode (@yurishkuro in #3745)
- Chore: unexport 32 types not imported outside their own file (@yurishkuro in #3744)
- Chore: fix knip dead-code warnings (@yurishkuro in #3743)
- Part of phase1 (sub-2-1c): migrate collapse/expand and detail state to zustand (@parshipcy in #3721)
- Convert measurablenode to functional component (@thc1006 in #3407)
- Migrate tracespanview to functional component (@whiplashvin in #3470)
- Part of phase 1 (sub-1c): move trace timeline layout prefs to zustand (@parshipcy in #3719)
- Part of phase 1 (1b): archive notifier migrated from redux to zustand (@parshipcy in #3715)
- Part of phase 1: refactor: migrate trace diff state from redux to zustand (@parshipcy in #3702)
- Refactor: convert spangraph to functional component (@tmchow in #3705)
- Test(jaeger-ui): migrate tests from jest to vitest (@yurishkuro in #3695)
- Test: add mockdefault helper for default-export mocks (@yurishkuro in #3694)
- Test: replace arrow ctor mocks with regular functions (@yurishkuro in #3693)
- Chore(jaeger-ui): replace require() in test bodies with static imports (@yurishkuro in #3692)
- Chore(jaeger-ui): rename jsx test files from .js to .jsx (@yurishkuro in #3691)
- [adr/007] migrate packages/plexus tests from jest to vitest (@yurishkuro in #3690)
- [adr/007] consolidate jaeger-ui tsconfigs (step e) (@yurishkuro in #3689)
v2.17.0Release v2.17.0
Backend Changes
🐞 Bug fixes, Minor Improvements
- Implement timer duration bucket parsing in metrics init (@junaiddshaukat in #7951)
- Fix(memory): accept string-form error filters in trace search (@YoungHypo in #8217)
- Feat(monitor): restore grafana to spm docker-compose example (adr-007 step 1) (@abhay1999 in #8215)
- Safe self-tracing via otel collector telemetry factory (@yurishkuro in #8208)
- Fix: guard addjitter against zero/sub-nanosecond durations to prevent panic (fixes #8149) (@shivamtiwari3 in #8178)
- Fix: clock skew adjuster to also adjust endtimestamp (@Audio431 in #8170)
- Update mcp server readme (@yurishkuro in #8163)
- Feat(query): expose metricsstorage to ui as storage capabilities (@hharshhsaini in #8154)
🚧 Experimental Features
- [clickhouse] optimize spans table for faster searching (@mahadzaryab1 in #8258)
- [jaegermcp] add system prompt instructions for llm clients (adr phase 4) (@lopster568 in #8253)
- Fix(jaegermcp): enforce response limits (@abhay1999 in #8242)
- Feat(monitor): go sdk dashboard generator — adr-007 step 2a (@abhay1999 in #8216)
- [clickhouse][benchmarking] add initial results from benchmarking (@mahadzaryab1 in #8181)
- [jaegermcp] enable tenancy enforcement (@whiplashvin in #8203)
- [jaegermcp] enforce config-driven limits in mcp handlers (@rite7sh in #8194)
- [jaegermcp] fix mcp server integration with claude code (@yurishkuro in #8191)
- [clickhouse] fix trace id timestamps table schema / query to deduplicate trace_ids (@mahadzaryab1 in #8180)
- [clickhouse] optimize get traces query by adding start and end time filter (@mahadzaryab1 in #8152)
👷 CI Improvements
- Fix: create reusable setup-go action to fix go module cache in ci workflows (@Copilot in #8257)
- Use gotestsum for all test execution (@Copilot in #8256)
- Fix(ci): correct metrics snapshot comparison noise (@Copilot in #8246)
- Ci(monitor): add dashboard sync check for go sdk generator (adr-007 step 3) (@abhay1999 in #8240)
- Fix(ci): add retry logic for pulling registry:2 in prepare-docker-buildx (@Copilot in #8236)
- [ci] improve e2e workflow documentation and test mode naming (@yurishkuro in #8195)
- Fix oke demo prometheus upgrade (@danish9039 in #8183)
- [test] add scope name and version integration test (@Manik2708 in #8138)
- Fix ci parallel mode detection for org members without team access (@yurishkuro in #8182)
- Revert metrics workflow changes from pr8106 (@yurishkuro in #8175)
- Ci: fix pr resolution in ci summary report publish workflow (@yurishkuro in #8159)
- Do not run dependency-review on push to main (@yurishkuro in #8158)
- Include metric change details in pr comment (@yurishkuro in #8153)
- Fix(ci): prevent stale coverage baseline from persisting across main-branch runs (@Copilot in #8157)
- Fix: use $(suffix) in version-check binary path for debug builds (@Copilot in #8148)
⚙️ Refactoring
- Move param type conversion util out of tracestore api into v1adapter (@Copilot in #8255)
- Feat(monitor): complete adr-007 step 2b dashboard upgrade (@YoungHypo in #8241)
📖 Documentation
- Adr-007: grafana dashboard modernization and spm example validation (@yurishkuro in #8214)
- Add badger adr (@yurishkuro in #8166)
📊 UI Changes
✨ New Features
- Allow viewing span details in a side panel instead of inline view (@yurishkuro in #3578)
- [feature]: add trace logs view to aggregate all span events (@SoumyaRaikwar in #3563)
🐞 Bug fixes, Minor Improvements
- 🔒 [security fix] replace innerHTML with textContent to mitigate XSS risk (@jkowall in #3651)
- Add plexus demo route to main ui (dev only,
/plexus-demo) (@Copilot in #3656) - Fix plexus demo (@yurishkuro in #3654)
- Clean-up display of incomplete icon, text, and tooltip (@yurishkuro in #3619)
- Revert "refactor(plexus): migrate digraph to functional component" (@yurishkuro in #3600)
- Revert "chore: fetch backend config dynamically in dev mode (#3541)" (@yurishkuro in #3599)
- Fix: dark mode is not working correctly on the quality metrics page (@gulshank0 in #3583)
- Fix: normalize uppercase trace ids to lowercase in url (@samar-703 in #3485)
- Fix: tracediff slot b search populates slot a instead (@samar-703 in #3473)
- Fix detail-row hierarchy: missing vertical bars for parent spans and white background regression (@Copilot in #3572)
- Fix: system architecture (dag) dark mode visibility (@Parship12 in #3568)
🚧 Experimental Features
- [adr-0006] phase 5: combined modes, analytics, final polish (@yurishkuro in #3577)
- [adr-0006] phase 4: side panel polish (@yurishkuro in #3576)
- [adr-0006] phase 3: side panel container and span selection (@yurishkuro in #3569)
- [adr-0006] phase 2: tree-only mode (hide timeline) (@yurishkuro in #3562)
👷 CI Improvements
- Do not fail bundle size workflow on main branch (@yurishkuro in #3653)
- Use .prettierignore instead of explicit opt-in (@yurishkuro in #3647)
- Pin npm version (@yurishkuro in #3596)
⚙️ Refactoring
- Feat: add zustand and query foundation for state migration (@Parship12 in #3662)
- Fix: replace remaining tooltip arrow prop (@YoungHypo in #3663)
- Remove
storenpm dependency and suppress lightningcss warning (@yurishkuro in #3659) - Remove deprecated
worker-loaderin favor of webpack 5 / vite built-in worker support (@yurishkuro in #3646) - Final part: migrate to react-router-dom v7 & drop compat layer & history (@Parship12 in #3645)
- Part of phase 4 & 5: migrate the v5 matchpath call signature to v6/v7 matchpath signature (@Parship12 in #3617)
- Part of phase 4 & 5: migrate link to react-router-dom-v5-compat (@Parship12 in #3618)
- Part of phase 4: remove redux-first-history and decouple router state from redux (@Parship12 in #3616)
- Cleanup for phase 4: remove history.replace() and historyupdatemiddleware (@Parship12 in #3615)
- Final part of phase 3.2 (task 1): refactor(tracepage): convert class component to functional (@Parship12 in #3613)
- Phase 3 leftovers: remove state.router.location usages (cleanup) (@Parship12 in #3614)
- Part of phase 3.2 (task 1): factor out keyboard shortcut setup into a separate function in the tracepage (@Parship12 in #3609)
- Fix(tracepage): fix stale filterspans cache key and remove dead code (@thc1006 in #3592)
- Part of phase 3.2 (task 2): remove dead searchurl prop (@Parship12 in #3603)
- Phase 3.2 (task 2): refactor(dependencygraph): convert class component to functional (@Parship12 in #3591)
- Refactor(plexus): migrate digraph to functional component (@hharshhsaini in #3534)
- Chore: fetch backend config dynamically in dev mode (#3541) (@hharshhsaini in #3561)
- Refactor(plexus): migrate node to functional component (#3392) (@hharshhsaini in #3531)
- Refactor(plexus): migrate svgedges to functional component (#3397) (@hharshhsaini in #3518)
- Chore: replace
getconfigvaluewith directgetconfig()property access (@Copilot in #3589) - Fix(monitor): use storagecapabilities config as authoritative signal for spm availability (@yurishkuro in #3587)
- Refactor: control monitor tab visibility via storage capabilities of the backend (@hharshhsaini in #3554)
- Phase 3.2 (task 3): remove historyupdatemiddleware from redux & move navigate(url) into searchform (@Parship12 in #3582)
- Phase 3.1: replace state.router.location with uselocation() (@Parship12 in #3574)
- Refactor(plexus): migrate measurablenodes to functional component (@hharshhsaini in #3533)
- Phase 1: migrate route definitions to react router v6 syntax (@Parship12 in #3565)
- Refactor(plexus): migrate svgdefentry to functional component (#3395) (@hharshhsaini in #3528)
v2.16.0Release v2.16.0
Backend Changes
⛔ Breaking Changes
- Enforce Go version consistency across the codebase; require Go 1.25.7 (@Copilot in #8052)
- Remove legacy response format of remote sampling endpoint (@yurishkuro in #8014)
✨ New Features
- Feat: add schemagen for internal extensions (#6186) (@SoumyaRaikwar in #7947)
🐞 Bug fixes, Minor Improvements
- [kafka receiver config] replace traces.topic: with traces.topics: (@Copilot in #8144)
- Disable bulk processor in es authenticator test to prevent goroutine leaks (@Copilot in #8124)
- Add support for es health-check timeout at startup (@ntdkhiem in #8096)
- Support max trace size issue in the query service (@yurishkuro in #8098)
- Add empty span name sanitizer (@Copilot in #8086)
- [memory] include link attributes when searching by tags (@Manik2708 in #8077)
- Fix(ci): update upload-artifact to v6 in metrics comparison workflow (@jkowall in #8000)
🚧 Experimental Features
- [clickhouse][perf] restructure clickhouse findtraceids query to improve performance (@mahadzaryab1 in #8125)
- [cassandra][v2] refactor
fromdbmodelandtodbmodelto accept and returndbmodel.span(@Manik2708 in #7844)
👷 CI Improvements
- Remove otel_scope_version label from metrics comparison (@yurishkuro in #8145)
- Ci: always update summary report comment if present (@yurishkuro in #8135)
- Ci: extract ci summary publish script to
.github/scripts/with unit tests (@yurishkuro in #8134) - Ci: split ci summary report into compute + publish workflows (@yurishkuro in #8132)
- Ci: use gh pr list to get pr number (@yurishkuro in #8123)
- Ci: log trigger event for debugging (@yurishkuro in #8122)
- Ci: fix summary report to be able to retrieve pr number (@yurishkuro in #8121)
- Ci: migrate coverage gating from codecov to github actions (@yurishkuro in #8111)
- Ci: migrate coverage gating from codecov to github actions (@yurishkuro in #8101)
- Fix: correct bot detection in ci parallel mode (@Copilot in #8097)
- [chore] fix bot names (@yurishkuro in #8094)
- Refactor(ci): implement forked dag orchestrator for conditional parallelism (@Copilot in #8093)
- [test] upgrade integration tests fixtures to otlp traces (@Manik2708 in #8079)
- [test] upgrade
default.jsonfixture to otlp traces (@Manik2708 in #8076) - [test] upgrade
span_tags_trace.jsonfrom v1 model toptrace.traces(@Manik2708 in #8044) - Reorganize ci into 3-tier sequential pipeline with fail-fast behavior (@Copilot in #8060)
- [test] refactor integration tests to directly write/read
ptrace.traces(@Manik2708 in #7812) - Use ifneq instead of ifndef for skip_debug_binaries check (@Copilot in #8039)
- Fix release process issues: command copy buttons, documentation tagging, and release.md rotation (@jkowall in #7990)
⚙️ Refactoring
- Apply
go fix ./...(@yurishkuro in #8074) - Migrate http servers from gorilla mux to stdlib http.ServeMux (@Copilot in #8013)
- Remove legacy sampling strategy marshaling code (@yurishkuro in #8017)
📖 Documentation
- Fix typos and outdated path in elasticsearch readme files (@cluster2600 in #8068)
- [chore] add automated scanner policy and vulncheck target (@xenonnn4w in #8043)
📊 UI Changes
🐞 Bug fixes, Minor Improvements
- Rename main package to @jaegertracing/jaeger-ui (@yurishkuro in #3560)
- Fix: white hover line overflow on critical path segments (@Parship12 in #3550)
- Fix v3 api client ignoring base path prefix (@Copilot in #3549)
- Fix spm metrics not fetched on initial load due to null check (@Copilot in #3538)
🚧 Experimental Features
- [adr-0006] phase 1: layout mode state and toggle controls (@yurishkuro in #3558)
- Adr 006: span details in side panel (@yurishkuro in #3556)
⚙️ Refactoring
- Refactor(plexus): convert nodeslayer from class to functional component (@thc1006 in #3413)
- Refactor(plexus): convert svglayer from class to functional component (@thc1006 in #3410)
- Refactor(plexus): convert svglayersgroup from class to functional component (@thc1006 in #3412)
- Refactor(plexus): migrate svgedge to functional component (#3396) (@hharshhsaini in #3527)
v2.15.1Release v2.15.1
Backend Changes
🐞 Bug fixes, Minor Improvements
- Default spankind in api/v3/operations (@yurishkuro in #7997)
⚙️ Refactoring
- Remove deprecated protofromtraces wrapper in v1adapter (@SamyakBorkar in #7996)
v2.15.0Release v2.15.0
Backend Changes
⛔ Breaking Changes
- Restrict trace/metric storage configs to allow exactly one backend type (@yurishkuro in #7875)
✨ New Features
- Issue #7811: added grafana dashboard for metrics exporter (@Anmol202005 in #7903)
🐞 Bug fixes, Minor Improvements
- [fix] return empty array instead of nil from api/v3/services (@dee077 in #7926)
- [fix] return empty array instead of nil from queryservice.getservices (@sujalshah-bit in #7925)
- [fix] always return empty services list when none exist (@Sudhanshu-NITR in #7929)
- [fix] ensure badger maintenance is stopped before existing close() (@Yashika0724 in #7940)
- Use lazy initialization for storage factory (@Copilot in #7887)
🚧 Experimental Features
- [clickhouse] add materialized view for event attribute metadata (@mahadzaryab1 in #7923)
- [clickhouse] rework clickhouse attributes to look up type for string attributes (@mahadzaryab1 in #7815)
- [mcp] add get_span_names tool for discovering span names (@sajal004004 in #7909)
- Use opentelemetry span_name terminology in jaegermcp extension (@Copilot in #7916)
- [mcp] implement get_critical_path tool (phase 3 steps 8-9) (@Copilot in #7857)
- [clickhouse][chore] update unit tests snapshots to handle multiple queries (@mahadzaryab1 in #7865)
- [mcp] get_services tool for service discovery (@Copilot in #7864)
- [mcp] add cors setting and fix null array errors (@yurishkuro in #7863)
- [mcp] get_trace_topology tool (phase 3 step 7) (@Copilot in #7862)
- [mcp] phase 2 steps 5-6: get_span_details and get_trace_errors tools (@Copilot in #7859)
- [mcp] phase 2 step 4: search_traces (@Copilot in #7858)
- [clickhouse][chore] update test driver to handle multiple queries (@mahadzaryab1 in #7839)
- [mcp] phase 2 step 3: storage integration (@Copilot in #7849)
- Mcp server/phase 1.2: sdk integration with streamable http transport (@Copilot in #7846)
- Mcp server scaffolding (@Copilot in #7842)
- [clickhouse] move to snapshot testing in unit tests for clickhouse queries (@mahadzaryab1 in #7831)
👷 CI Improvements
- Fix metrics comparison workflow to reduce pr comment noise (@Copilot in #7957)
- Make spm integration test faster by flushing metrics more frequently (@Don-Assamongkol1 in #7861)
- Enable unhandled-error linter (@iypetrov in #7895)
- Fix(ci): fix codeql workflow to properly analyze go code (@jkowall in #7885)
- Implement pr quota workflow (@yurishkuro in #7882)
- Validate span names in spm integration test (@Don-Assamongkol1 in #7830)
- [chore/ci] add excluded metrics count (@neoandmatrix in #7756)
⚙️ Refactoring
- Enable confusing-naming linter rule (@SamyakBorkar in #7949)
- Replace panic calls with proper error handling (@aaryan359 in #7956)
- Fix time-naming linter violation in search_traces.go (@jkowall in #7913)
- [badger][v2] refactor factory signatures to use telemetry settings (@iypetrov in #7902)
- [cassandra] add omitempty notation for
keyvalueand marshaller/unmarshaller fortraceid(@Manik2708 in #7867) - Converge status reporting to collector framework (@yurishkuro in #7890)
- [chore] move query service to higher location (@yurishkuro in #7854)
- [chore] remove v1 queryservice package (@Copilot in #7845)
Documentation
- [chore]: add ai usage policy for contributions (@Sapthagiri777 in #7932)
- Docs: add quick start section with docker command (@njg7194 in #7945)
- Add claude.md as symlink to agents.md (@yurishkuro in #7934)
- Add security documentation for openssf silver badge (@jkowall in #7896)
- Adr-003 lazy storage factory initialization (@yurishkuro in #7886)
- Introduce pr limits for new contributors (@yurishkuro in #7880)
- Streamline agents.md by removing redundant content (@yurishkuro in #7879)
- Update contributing guidelines for copyright headers (@yurishkuro in #7877)
- Update documentation defaults from v1 to v2 (@Copilot in #7640)
- Add mcp server adr (@yurishkuro in e91d028)
📊 UI Changes
✨ New Features
- New span colors from ibm palette (@yurishkuro in #3306)
- Better tree hierarchy for trace view (@yurishkuro in #3302)
🐞 Bug fixes, Minor Improvements
- Fix text overlapping in tracediff header (@greedy-wudpeckr in #3401)
- Fix linter error (@yurishkuro in #3510)
- Enable react-hooks/exhaustive-deps linter rule (@taanvi2205 in #3471)
- Fix: traceidsearchinput invisible text in light mode (@yosri-brh in #3464)
- [fix] fix the dark mode for tracediff nodes (@gulshank0 in #3474)
- Bug : increase increment/decrement buttons visibility in ddg in dark mode (@gulshank0 in #3450)
- Fix typeerror in operations metrics reducer when no trace data exists (@Copilot in #3460)
- Suppress console errors for 501 metrics api responses (@Copilot in #3461)
- Fix dark mode in tracegraph (@rakshityadav1868 in #3334)
- [bugfix] update flame graph in dark theme #3321 (@gulshank0 in #3324)
- Add spacing to make the trace metadata more readable (@Parship12 in #3331)
- Implement dark mode for tracediff (compare page) (@Parship12 in #3314)
- Theme cleanup (@yurishkuro in #3320)
- Fix trace span table in dark mode (@yurishkuro in #3310)
- [tree] fix box size when number is large (@yurishkuro in #3303)
- Add jaeger logo to navbar (@yurishkuro in #3291)
🚧 Experimental Features
- [otel migration] add runtime schema validation to v3 api client (@yurishkuro in #3448)
- [otel migration] phase 3.1: add jaegerclient v3 and use for services / operations (@yurishkuro in #3329)
- [otel] add more details to phase-3 (@yurishkuro in #3323)
- Otel migration - complete phase 2 validation (@yurishkuro in #3319)
- Clean up of opentracing/opentelemetry nomenclature (@yurishkuro in #3316)
- Finalize dual use of opentracing/opentelemetry nomenclature (@yurishkuro in #3311)
- Migrate virtualizedtraceview and dependent components to iotelspan (@Copilot in #3289)
- Enhance otel domain model with more derived data (@yurishkuro in #3292)
- Implement phase 2 for spandetail component (@Copilot in #3275)
👷 CI Improvements
- Add pr quota workflow (@yurishkuro in #3441)
- Calculate main and plexus test coverage separately (@yurishkuro in #3349)
⚙️ Refactoring
- Refactor: update detailspanel to functional component (@Harshdev098 in #3358)
- Update @types/redux-actions to v2.6.5 (@Parship12 in #3498)
- Refactor(plexus): convert svgedgeslayer from class to functional component (@thc1006 in #3409)
- Refactor accordionlinks to functional component (@aaryan359 in #3406)
- Convert measurablenodeslayer to functional component (@Parship12 in #3429)
- Refactoring: converted referencebutton from class based to functional component (@gulshank0 in #3350)
- Remove reducers/services.ts (@yurishkuro in #3455)
- [chore] remove history from resultitem (@insane-22 in #3361)
- Replace @sentry/browser with generic internal error capture implementation (@Copilot in #3226)
- Refactor: convert diffnode to functional component (@hxrshxz in #3343)
- Refactor: convert hopsselector selector to functional component (@hxrshxz in #3340)
- Refactor: convert app/index.tsx file's class based to functional component (@gulshank0 in #3342)
- Convert the htmllayersgroup from class to functional component (@Parship12 in #3351)
- Convert the htmllayer from class to functional component (@Parship12 in #3345)
- Remove history from resultitemtitle (@Parship12 in #3312)
- Convert searchform to functional component (@yurishkuro in #3326)
- Convert remaining files in searchtrace page to typescript (@yurishkuro in #3325)
- Convert tracepage to otel model (@yurishkuro in #3309)
- [chore] migrate few more components to otel model (@yurishkuro in #3308)
- Migrate tracepageheader to otel model (@yurishkuro in #3307)
- Migrate trace-dag files to otel types per adr 0002 (@Copilot in #3299)
- Convert otel model to use strongly typed time/duration fields (@yurishkuro in #3304)
- Upgrade searchresults components to accept ioteltrace (@Copilot in #3300)
- Upgrade critical path calculations to otel model (@yurishkuro in #3301)
- Fix for bug introduced in previous refactoring (@yurishkuro in #3298)
- Fully upgrade tracetimelineviewer to otel model (@yurishkuro in #3297)
- Move critical path types to their own domain model file (@yurishkuro in #3296)
- Rename domain type link to hyperlink and upgrade link-getter to otel (@yurishkuro in #3295)
- Rename otel traceid/spanid to traceid/spanid to match legacy domain model (@yurishkuro in #3294)
- Rename pure typescript files to have .ts extension, not .tsx (@yurishkuro in #3290)
v2.14.1Release v2.14.1
📊 UI Changes
🐞 Bug fixes, Minor Improvements
- Dark theme fixes (@yurishkuro in #3285)
- Fix span detail panel in dark theme (@yurishkuro in #3283)
v2.14.0Release v2.14.0
TL;DR: Two significant changes in this release:
- ☠️ Starting from this release the legacy v1 components
query,collector, andingesterare no longer published. All the remaining v1 utilities are now published as v2.x.x versions. - 🌓 The UI now officially supports dark theme and the theme selector is enabled by default.
Backend Changes
⛔ Breaking Changes
- Remove storage/v1/grpc (@yurishkuro in #7806)
- Migrate remote-storage to yaml configuration with shared storageconfig package (@Copilot in #7704)
- Remove v1 collector, query, and all-in-one (@yurishkuro in #7702)
- Remove v1/ingester and all kafka related code (@yurishkuro in #7701)
- Eliminate v1 binary references and sunset deprecated components (@Copilot in #7695)
- Fix otel collector v0.141.0 api breaking changes for toserver/toclientconn and kafka receiver/exporter (@Copilot in #7694)
🐞 Bug fixes, Minor Improvements
- Migrate docker-compose files to jaeger-v2 unified binary (@Copilot in #7747)
- Memory: support otlp first-class fields in search (@SoumyaRaikwar in #7728)
- Added indexspanalias and indexservicealias for explicit aliases (@SomilJain0112 in #7550)
- Fix: update replication strategy configuration in schema template (@danish9039 in #7726)
🚧 Experimental Features
- [fix][clickhouse] optimize service and operation retrieval queries (@mahadzaryab1 in #7808)
- [clickhouse] implement findtraces for clickhouse storage (@mahadzaryab1 in #7795)
- [clickhouse] create materialized view to store attribute metadata (@mahadzaryab1 in #7798)
- [clickhouse] update findtraceids to filter by complex attributes (@mahadzaryab1 in #7792)
- [clickhouse] update
findtraceidsto filter by other primitive attributes (@mahadzaryab1 in #7789) - [cassandra][v2] copy jaeger<->otlp translator from otel contrib (@Manik2708 in #7765)
- [clickhouse] update
findtraceidsto filter by string attributes (@mahadzaryab1 in #7788) - [clickhouse] update
findtraceidsto filter by timestamp (@mahadzaryab1 in #7787) - [clickhouse] update findtraceids to populate start and end timestamps (@mahadzaryab1 in #7770)
- [clickhouse] update
findtraceidsto filter by duration (@mahadzaryab1 in #7767) - [clickhouse] implement findtraceids for clickhouse storage for primitive parameters (@mahadzaryab1 in #7648)
- [clickhouse] add
trace_id_timestampstable with materialized view (@mahadzaryab1 in #7723) - [fix][clickhouse] remove
namecolumn from ordering key for operations table (@mahadzaryab1 in #7714)
👷 CI Improvements
- Fix ci for debug build of all-in-one (@yurishkuro in #7794)
- Use pre-built base image with debugger (@yurishkuro in #7793)
- Ci: exclude http 5xx metrics from comparisons (@neoandmatrix in #7671)
- Remove crossdock (@yurishkuro in #7750)
- Fine-tune when go-tip workflow runs (@yurishkuro in #7749)
- Fix: remove tool installation from go tip workflow (@chinmay3012 in #7716)
- Add "unused" linter (@yurishkuro in #7697)
⚙️ Refactoring
- Move query (@yurishkuro in #7803)
- Use otel optional for optional config fields (@Parship12 in #7766)
- [cassandra][v2] refactor factory signatures to use telemetry settings (@Manik2708 in #7764)
- [storage][cassandra][v2] implement
getservicesandgetoperations(@Manik2708 in #7754) - Remove unused factory and inheritable interfaces from v1 storage (@Copilot in #7755)
- Remove dependency on jaeger-client-go (@yurishkuro in #7745)
- Remove direct dependency on hdrhistogram-go (@jaegertracingbot in #7742)
- Cleanup and simplify jtracer package (@yurishkuro in #7739)
- [cassandra] refactor
tagfilterto acceptdbmodel.span(@Manik2708 in #7707) - [clickhouse] add indexes for spans table in clickhouse storage (@mahadzaryab1 in #7715)
- Remove deprecated namespace concept from cassandra storage options (@Copilot in #7719)
- Remove viperize from storage backend tests (@Copilot in #7712)
- Remove unused shared/grpc_client (@yurishkuro in #7713)
- Delete v1/memory storage implementaiton (@yurishkuro in #7711)
- Delete more dead code (@yurishkuro in #7710)
- Remove v1 storage factories (@yurishkuro in #7708)
- Upgrade grpc integration test to use v2 memory storage (@yurishkuro in #7709)
- Remove unused factory pattern code from sampling strategy packages (@Copilot in #7705)
- Remove some dead code (@yurishkuro in #7706)
📊 UI Changes
✨ New Features
- Enable theme selector by default (@yurishkuro in #3257)
🐞 Bug fixes, Minor Improvements
- Add visual indicator for synthetic otel attributes (@DCchoudhury15 in #3259)
- Fix: dark mode styling for trace view with design tokens (@jkowall in #3246)
- Fix in-trace search (@yurishkuro in #3255)
- Feat: add incomplete trace detection and adjustable search time offset (@xenonnn4w in #3248)
- Fix: constant visible white borders in the trace spans (@unknown in #3125)
- Force light mode by default if config is disabled (@yurishkuro in #3204)
- Use outlined tags for contrast (@bobrik in #3202)
🚧 Experimental Features
- Fix parentspanid calculation to validate traceid and handle follows_from references (@Copilot in #3268)
- Add lazy otel facade to domain model (@yurishkuro in #3263)
- Add useopentelemetryterms feature flag (@yurishkuro in #3262)
- Introduce otel data model (@yurishkuro in #3261)
- Apply styles to make minimap work in dark theme (@yurishkuro in #3256)
- Move theme vars back to root (@yurishkuro in #3247)
- Define theme vars in terms of antd vars (@yurishkuro in #3245)
- Fix dark mode by using css variables (@jkowall in #3242)
⚙️ Refactoring
- Simplify transformtracedata (@yurishkuro in #3274)
- Fix unsafe type coercion and add readonly collection fields (@Copilot in #3273)
- Persist spanmap and rootspans in trace object; use childspans array for tree structure (@Copilot in #3266)
- Prevent trace mutation during critical path computation (@Copilot in #3271)
- Convert tracestatistics to oteltrace (@yurishkuro in #3264)
- Convert 3 more jsx files to typescript (@yurishkuro in #3241)
- Fix: qualitymetrics auto-refresh issue (@unknown in #3222)
- Migrate qualitymetrics/index to use navigate instead of history (@unknown in #3214)
- Migrate uifindinput from history to navigate (@unknown in #3217)
- Convert servicegraph class component to functional component (@Copilot in #3212)
- Convert qualitymetrics/index to functional component (@unknown in #3210)
- Make update-ui-find backward compatible (@unknown in #3209)
- Remove usehistory - unused code (@unknown in #3207)