hyperdxio/hyperdx
Resolve production issues, fast. An open source observability platform unifying session replays, logs, metrics, traces and errors powered by ClickHouse and OpenTelemetry.
📋 Minor Changes
- 3123db53: feat: experimental promql support
📋 Patch Changes
- b20275c9: fix(cli): exit with non-zero code when `upload-sourcemaps` fails
- The `upload-sourcemaps` command now exits with code 1 when uploads fail
- (missing source maps, pre-signed URL request failure, authentication failure,
- or any per-file upload failure after retries). Previously these failures were
- logged to stderr but the process exited cleanly with code 0, causing CI
- pipelines to treat failed uploads as successes.
- 19cd7c91: fix: only use pk and row uniqueness to look up a row
- 8810ff0f: feat: Add option for force-enabling/disabling text index support
- + 1 more
📦 Installation
- npm (recommended):
- ```bash
- npm install -g @hyperdx/cli
- ```
- Or run directly with npx:
- ```bash
- npx @hyperdx/cli tui -s <your-hyperdx-api-url>
- ```
- + 7 more
📦 Usage
- ```bash
- hdx auth login -s <your-hyperdx-api-url>
- hdx tui
- ```
📋 Minor Changes
- 3123db53: feat: experimental promql support
- cb6a74ce: fix(otel-collector): allow `CUSTOM_OTELCOL_CONFIG_FILE` to override the
- default `memory_limiter`, `batch` (and other pipeline processors)
- Pipeline `processors:` lists used to be defined in the OpAMP remote config
- sent by the API (`packages/api/src/opamp/controllers/opampController.ts`).
- That meant the remote config overwrote any pipeline `processors:` list a
- user supplied via `CUSTOM_OTELCOL_CONFIG_FILE`, making it impossible to
- substitute the default `memory_limiter` with one configured for
- + 50 more
📋 Patch Changes
- ad3f1c9e: fix(otel-collector): skip string severity inference when JSON body has a
- `level`/`severity` field
- When the log body parsed as JSON and contained a level-like field, the
- pipeline still ran its `\b(alert|crit|emerg|fatal|error|err|warn|notice|debug|dbug|trace)`
- keyword scan over the raw body string. The leading-only `\b` boundary
- matched any word starting with a severity keyword, so bodies containing
- words like `alertmanager`, `alerting`, `errors`, `warning`, etc. produced
- the wrong severity. A Grafana sidecar log with body
- + 26 more
📋 Minor Changes
- 3123db53: feat: experimental promql support
- dcab1cb6: feat: default the direct_read map column optimization on supported ClickHouse versions
- The full-text-search logs schema (`00002_otel_logs.sql`) now ships with
- `ResourceAttributeItems`, `ScopeAttributeItems`, and `LogAttributeItems`
- ALIAS columns plus their `text(tokenizer='array')` skip indexes. The
- traces schema (`00005_otel_traces.sql`) similarly gains
- `ResourceAttributeItems` and `SpanAttributeItems` ALIAS columns with
- matching items indexes. New installs and freshly migrated tables get
- + 29 more
📋 Patch Changes
- a945fa07: feat(mcp): add hyperdx_event_deltas tool
- Add `hyperdx_event_deltas` MCP tool that compares two row groups (target
- vs baseline) and ranks properties by how much their value distributions
- differ. Same algorithm as the in-app Event Deltas view.
- Extract shared event-deltas algorithm from the UI into
- `@hyperdx/common-utils/src/core/eventDeltas.ts` so it can be used by
- both the frontend and the MCP server.
- 6a5ac3e3: fix(charts): histogram bucket picks the highest-precision DateTime column when
- + 34 more
📋 Minor Changes
- 3123db53: feat: experimental promql support
📋 Patch Changes
- b20275c9: fix(cli): exit with non-zero code when `upload-sourcemaps` fails
- The `upload-sourcemaps` command now exits with code 1 when uploads fail
- (missing source maps, pre-signed URL request failure, authentication failure,
- or any per-file upload failure after retries). Previously these failures were
- logged to stderr but the process exited cleanly with code 0, causing CI
- pipelines to treat failed uploads as successes.
- 19cd7c91: fix: only use pk and row uniqueness to look up a row
- 8810ff0f: feat: Add option for force-enabling/disabling text index support
📋 Minor Changes
- 3123db53: feat: experimental promql support
- 1df7583d: feat: emit Lucene conditions from sidebar/dashboard filters to enable KV items direct_read optimization on Map columns
- Legacy `type: 'sql'` filters in URLs are automatically migrated to Lucene
- on page load. The persisted `DashboardFilter.expression` in MongoDB is unchanged.
- cb6a74ce: fix(otel-collector): allow `CUSTOM_OTELCOL_CONFIG_FILE` to override the
- default `memory_limiter`, `batch` (and other pipeline processors)
- Pipeline `processors:` lists used to be defined in the OpAMP remote config
- sent by the API (`packages/api/src/opamp/controllers/opampController.ts`).
- + 54 more
📋 Patch Changes
- 55926e5c: fix: "Add to Filters" on a JSON-typed ClickHouse column no longer produces an
- unparseable Lucene query
- Previously, clicking "Add to Filters" on a field under a JSON column wrapped
- the field path with `toString(...)` before handing it off as a Lucene filter
- key. Lucene's grammar forbids parentheses inside field names, so the resulting
- condition like `toString(JSONColumn.\`foo\`):"…"`failed to parse with`Expected … but ":" found.\`
- The handler now passes the clean dot-notation path (e.g. `JSONColumn.foo`)
- to the filter setter.
- + 109 more
📋 Minor Changes
- 3123db53: feat: experimental promql support
- cb6a74ce: fix(otel-collector): allow `CUSTOM_OTELCOL_CONFIG_FILE` to override the
- default `memory_limiter`, `batch` (and other pipeline processors)
- Pipeline `processors:` lists used to be defined in the OpAMP remote config
- sent by the API (`packages/api/src/opamp/controllers/opampController.ts`).
- That meant the remote config overwrote any pipeline `processors:` list a
- user supplied via `CUSTOM_OTELCOL_CONFIG_FILE`, making it impossible to
- substitute the default `memory_limiter` with one configured for
- + 50 more
📋 Patch Changes
- d1342121: feat(mcp): add hyperdx_describe_source tool and slim list_sources to catalog
- Add `hyperdx_describe_source` — returns full column schema, map attribute
- keys, and sampled low-cardinality values (SeverityText, StatusCode,
- ServiceName, etc.) for a single source. Uses existing rollup tables for
- performant value sampling.
- Slim `hyperdx_list_sources` to a lightweight MongoDB-only catalog (no
- ClickHouse queries). Source tools moved to a dedicated `tools/sources/`
- module.
- + 52 more
📋 Patch Changes
- 84117a7a: fix: support CAST() form in KV items column expression parsing for direct_read optimization
- 51abe987: fix: Event Patterns and other CTE-using queries now correctly detect Date-typed partition columns and wrap them in toDate(), fixing "No results found" against sources with a Date partition key (e.g. event_date / EventDate).
📋 Patch Changes
- f6a1d021: Add support for event patterns in MCP server, reduce code duplication
- 253cf5b7: Fix CLI version flag reporting hardcoded 0.1.0 instead of the actual package version
- 41043645: feat: support multiple teams and kubectx-style team switching in the CLI
- Adds three new commands for users that belong to multiple teams (HyperDX Cloud /
- EE):
- `hdx team list` — list every team the authenticated user belongs to, marking
- the active one
- `hdx team current` — print the currently active team
- + 7 more
📋 Patch Changes
- Updated dependencies [f5ae0062]
- Updated dependencies [fbe5a9a2]
- @hyperdx/api@2.27.0
📋 Minor Changes
- fbe5a9a2: feat: Add POST /api/v2/search endpoint for querying raw log and trace rows programmatically
📋 Patch Changes
- f5ae0062: refactor(mcp): split hyperdx_query into 5 display-type-specific tools
- Replace the monolithic `hyperdx_query` tool with five narrow tools:
- `hyperdx_timeseries` (line + stacked_bar)
- `hyperdx_table` (table + number + pie, with shape auto-upgrade)
- `hyperdx_search` (raw event browsing)
- `hyperdx_event_patterns` (Drain pattern mining)
- `hyperdx_sql` (raw ClickHouse SQL)
- Each tool's schema contains only its relevant parameters — no displayType
- + 2 more
📋 Patch Changes
- f6a1d021: Add support for event patterns in MCP server, reduce code duplication
- 253cf5b7: Fix CLI version flag reporting hardcoded 0.1.0 instead of the actual package version
- 41043645: feat: support multiple teams and kubectx-style team switching in the CLI
- Adds three new commands for users that belong to multiple teams (HyperDX Cloud /
- EE):
- `hdx team list` — list every team the authenticated user belongs to, marking
- the active one
- `hdx team current` — print the currently active team
- + 8 more
📦 Installation
- npm (recommended):
- ```bash
- npm install -g @hyperdx/cli
- ```
- Or run directly with npx:
- ```bash
- npx @hyperdx/cli tui -s <your-hyperdx-api-url>
- ```
- + 7 more
📦 Usage
- ```bash
- hdx auth login -s <your-hyperdx-api-url>
- hdx tui
- ```
📦 Installation
- npm (recommended):
- ```bash
- npm install -g @hyperdx/cli
- ```
- Or run directly with npx:
- ```bash
- npx @hyperdx/cli tui -s <your-hyperdx-api-url>
- ```
- + 7 more
📦 Usage
- ```bash
- hdx auth login -s <your-hyperdx-api-url>
- hdx tui
- ```
📋 Patch Changes
- 11e1301c: feat(otel-collector): tune batch processor defaults for ClickHouse and make
- them configurable
- The bundled OTel Collector config now sets `processors.batch.send_batch_size`
- to `10000` and `timeout` to `5s` (was upstream defaults of `8192` / `200ms`),
- matching the values recommended by the ClickHouse exporter and ClickStack
- docs. The upstream defaults were too aggressive for ClickHouse — they
- produced very small inserts under low load, hurting insert performance and
- inflating the number of MergeTree parts.
- + 5 more
📋 Patch Changes
- b73f6fcc: fix: Prevent duplicate tile IDs in dashboard imports
- 4c23e10a: feat: Allow displaying group-by columns on LHS of table
- e2fc25da: feat: Add custom table onClick behavior
- 7665fbe1: refactor: Unify section/group into single Group with collapsible/bordered options
📋 Minor Changes
- 3571bfaf: Add `hdx query` and `hdx connections` commands for agentic ClickHouse workflows:
- `hdx connections` — list ClickHouse connections (`id`, `name`, `host`) for the authenticated team. Supports `--json` for programmatic consumption.
- `hdx query --connection-id <id> --sql <query>` — run raw SQL against a configured ClickHouse connection via the `/clickhouse-proxy`. Default `--format` is `JSONEachRow` (NDJSON); any ClickHouse format is accepted. Exit codes: `0` on success (empty stdout = zero rows), `1` on failure. On error, a lazy connection lookup distinguishes "unknown connection ID" from "bad SQL".
- `hdx query --patterns` — post-process the result with the Drain algorithm (`@hyperdx/common-utils/dist/drain`) and emit one NDJSON pattern object per cluster, sorted by count desc: `{"pattern":"<template>","count":<n>,"sample":"<first sample>"}`. Use `--body-column <name>` to cluster a single column's string value; defaults to the whole row JSON-serialized so any SELECT shape works.
- `--help` documents the exit-code contract and includes sampling guidance (`ORDER BY rand()` + selective WHERE warning) for mining over large tables.
📋 Patch Changes
- b73f6fcc: fix: Prevent duplicate tile IDs in dashboard imports
- 4c23e10a: feat: Allow displaying group-by columns on LHS of table
- e2fc25da: feat: Add custom table onClick behavior
- 7665fbe1: refactor: Unify section/group into single Group with collapsible/bordered options
- Updated dependencies [b73f6fcc]
- Updated dependencies [4c23e10a]
- Updated dependencies [e2fc25da]
- Updated dependencies [7665fbe1]
- + 1 more
📋 Patch Changes
- b73f6fcc: fix: Prevent duplicate tile IDs in dashboard imports
- 4c23e10a: feat: Allow displaying group-by columns on LHS of table
- Updated dependencies [b73f6fcc]
- Updated dependencies [4c23e10a]
- Updated dependencies [e2fc25da]
- Updated dependencies [7665fbe1]
- @hyperdx/common-utils@0.18.1
📦 Installation
- npm (recommended):
- ```bash
- npm install -g @hyperdx/cli
- ```
- Or run directly with npx:
- ```bash
- npx @hyperdx/cli tui -s <your-hyperdx-api-url>
- ```
- + 7 more
📦 Usage
- ```bash
- hdx auth login -s <your-hyperdx-api-url>
- hdx tui
- ```
📦 Installation
- npm (recommended):
- ```bash
- npm install -g @hyperdx/cli
- ```
- Or run directly with npx:
- ```bash
- npx @hyperdx/cli tui -s <your-hyperdx-api-url>
- ```
- + 7 more
📦 Usage
- ```bash
- hdx auth login -s <your-hyperdx-api-url>
- hdx tui
- ```
📋 Patch Changes
- 24767c58: fix: Ensure correct bounds for date-based timestampValueExpr
📋 Minor Changes
- d995b78c: Add @hyperdx/cli package — terminal CLI for searching, tailing, and inspecting logs and traces from HyperDX with interactive TUI, trace waterfall, raw SQL queries, dashboard listing, and sourcemap uploads.
📋 Patch Changes
- 7d1a8e54: fix: Show sidebar favorites empty state when none are starred yet
- 800689ac: feat: Add reusable EmptyState component and adopt it across pages for consistent empty/no-data states
- 2570ff84: fix: Change K8s CPU chart format from percentage to number to support both old and new OTel collector metric names
- ad71dc2e: feat: Add keyboard shortcuts modal from the Help menu
- New Keyboard shortcuts item opens a modal documenting app shortcuts (command palette ⌘/Ctrl+K, search focus, time picker, tables, traces, dashboards, and more).
- Help menu items ordered by importance (documentation and setup before shortcuts and community).
- Shortcuts modal uses a readable width, row dividers, and or vs + labels so alternative keys are not confused with key chords.
- 1bcca2cd: feat: Add alert icons to dashboard list page
- + 7 more
📋 Patch Changes
- f8d2edde: feat: Show created/updated metadata for saved searches and dashboards
- Updated dependencies [24767c58]
- @hyperdx/common-utils@0.17.1
📋 Minor Changes
- a15122b3: feat: new team setting for number of filters to fetch
- 941d0450: feat: support sample-weighted aggregations for sampled trace data
📋 Patch Changes
- 518bda7d: feat: Add dashboard template gallery
- 4e54d850: fix: show Map sub-fields in facet panel for non-LowCardinality value types
- 53ba1e39: feat: Add favoriting for dashboards and saved searches
- b7581db8: feat: Add more chart display units
- 48a8d32b: fix: Fixed bug preventing clicking into rows with nullable date types (and other misc type) columns.
- a55b151e: fix: render clickhouse keywords properly in codemirror
- 308da30b: feat: Add $\_\_sourceTable macro
- e5c7fdf9: feat: Add saved searches listing page
📋 Minor Changes
- a15122b3: feat: new team setting for number of filters to fetch
- 20e47207: feat: Add input filter pills below search input to make filters usage more clear on seach page.
- 941d0450: feat: support sample-weighted aggregations for sampled trace data
📋 Patch Changes
- bfc93811: feat: Group Dashboards and Searches by Tag
- 859ced5c: feat: Chart Explorer now auto-executes the chart on load when a valid source is configured. Deeplinks render results without requiring a manual click.
- e6a0455a: fix: Properly enable line wrap behavior in JSON viewer by default
- 518bda7d: feat: Add dashboard template gallery
- 676e4f4b: fix: differentiate map indexing vs array indexing
- 9852e9b0: perf: Defer expensive hooks in collapsed filter groups and virtualize nested filter lists
- 5e5c6a94: fix: slider thumb and mark styling not applying theme tokens
- Move slider thumb styling from classNames to inline styles to fix CSS specificity issue where Mantine defaults override theme tokens
- + 32 more
📋 Minor Changes
- a15122b3: feat: new team setting for number of filters to fetch
- 941d0450: feat: support sample-weighted aggregations for sampled trace data
📋 Patch Changes
- 53ba1e39: feat: Add favoriting for dashboards and saved searches
- b7581db8: feat: Add more chart display units
- 59b1f46f: fix: Show alerts on a tile only when dashboard matches
- Updated dependencies [518bda7d]
- Updated dependencies [4e54d850]
- Updated dependencies [53ba1e39]
- Updated dependencies [b7581db8]
- Updated dependencies [48a8d32b]
- + 6 more
📋 Patch Changes
- 470b2c29: ci: Replace QEMU with native ARM64 runners for release builds