github hyperdxio/hyperdx @hyperdx/app@2.36.0

Minor Changes

  • fb28446: Alert forms for saved searches and dashboard tiles can now send to several webhooks. Add or remove notification channels inline (up to 10); webhooks already chosen by the alert are greyed out in the other pickers, since duplicates are rejected.
  • b1d8dc1: Formulas now work on log and trace sources, not just metrics. Time series, table and number charts on event sources can define derived series via letter-ref arithmetic expressions (e.g. A / B * 100), with the same editor controls (Add Formula, series letter badges, Show input series) previously offered only on metric sources. Event formulas compile inline into the chart's single-scan SELECT — no per-series query fan-out — with the same missing-data semantics as the existing events ratio toggle.
  • e153f46: Add metric formula editing to the chart editor. Metric-source charts (time series, table, number) gain an "Add Formula" row: a letter-ref arithmetic expression over the chart's series (A = series 1, B = series 2, ...) such as A / (A + B) * 100, with inline structured validation (malformed expressions, unknown series references), per-formula alias and number format, and a "Show input series" toggle to render only the formula column(s) or the formula alongside its operand series. Series rows now carry their reference letter as a badge. Formulas and the "As Ratio" toggle are mutually exclusive, and formulas persist on dashboard tiles and standalone charts.

Patch Changes

  • 59b96e9: Upgrade the session replay player from rrweb@2.0.0-alpha.8 to stable rrweb@2.1.1, aligning the replayer with the rrweb version used by current @hyperdx/browser recorders and picking up several years of upstream replayer fixes (style-sheet handling, virtual DOM, adopted stylesheets). Replay fidelity was verified for sessions recorded with both rrweb@1.1.3 (older browser SDKs) and rrweb@2.1.1 (current SDKs).

  • f31a145: Make the CopySnippet heading optional (omit label to hide it) and add
    IconAiNotebook, a Tabler-compatible custom icon for AI notebooks.

  • 68d2ed2: feat: Support dependent variable value queries

  • 2eedfb2: feat: Substitute dashboard variables in chart builder tiles

  • 1ce61c0: feat: Expand dashboard variables and macros nested in macro arguments

  • 43f6856: Allow editing and deleting alerts directly from the alert details page. An
    "Edit alert" action opens a modal for changing the alert's threshold,
    evaluation interval, schedule, group-by (saved-search alerts), notification
    webhook, and note, and a Delete action (with confirmation) removes the alert
    and returns to the alerts list. Alert API responses now include the
    notification channel's webhook id and the alert's name/message template so
    edits round-trip these fields.

  • 905d194: Adopt React 19 context and ref APIs across the app and enforce them via ESLint.
    Render <Context> directly instead of <Context.Provider>, use the use hook
    instead of useContext, and pass ref as a regular prop instead of wrapping
    components in forwardRef. The corresponding @eslint-react/no-context-provider,
    no-use-context, and no-forward-ref rules are promoted to error and the
    app's --max-warnings ceiling is lowered. Behavior is unchanged.

  • b0b1380: Align alert firing/recovery chart markers with the evaluated data: markers are now drawn at the start of the newest evaluated bucket (matching the evaluation history table and the plotted data point) instead of at the evaluation time, which sat one bucket to the right.

  • 8be6810: Fix dashboard filter selection state breaking on complex expressions. The
    filter parser (shared with the search page) now tracks parenthesis depth in
    addition to quote depth, so selections stored for expression-based filters such
    as if(SeverityText = 'error' OR SeverityText = 'fatal', 'Errors', 'Non-errors')
    or if(SeverityText IN ('error', 'fatal'), 'Errors', 'Non-errors') are parsed
    correctly instead of being dropped or split on operators/keywords nested inside
    the expression.

  • 9c7742f: Fix multi-series metric charts mixing float and integer aggregations (e.g. histogram quantile + histogram count) failing with "No value columns found in result column metadata". The composed UNION ALL query now normalizes every series value to Float64, so the merged column type is deterministic instead of erroring with NO_COMMON_TYPE or producing a Variant(Float64, Int64) column depending on the ClickHouse server's use_variant_as_common_type setting. As a defensive layer, all-numeric Variant(...) result columns (e.g. from raw-SQL charts) are now also classified as numeric.

  • 75909ac: Fix Surrounding Context filters for non-OTEL schemas by using the source's serviceNameExpression for the "Service" filter instead of hardcoded ResourceAttributes lookup. Also adds quick event attribute filters that let users toggle attributes from the current event to narrow surrounding context results.

  • 7294944: fix: route per-query SQL debug logging through an injectable logger (#2416)

    BaseClickhouseClient dumped raw SQL to the console on every ClickHouse query,
    unconditionally and outside the pino logger, flooding API logs with query spam.

    Query logging now goes through an optional per-client customLogger on
    ClickhouseClientOptions, logged at debug, and is silent when no logger is
    passed. The API injects a pino-backed logger, so query logging follows the
    existing HYPERDX_LOG_LEVEL setting instead of writing to console.debug. The
    browser client defaults to a console logger that pretty-prints the SQL as a
    single multi-line block, so query SQL stays visible and readable in devtools in
    all builds instead of wrapping into one long line.

    The API's log level now defaults to info (was debug), so SQL logging is
    silent in production unless HYPERDX_LOG_LEVEL=debug is set. Dev and CI env
    files already pin their levels explicitly and are unaffected. The default also
    now applies when HYPERDX_LOG_LEVEL is set but empty — which is what Compose
    passes when the variable is unset in the environment, and which previously made
    pino throw at startup.

  • 47fe0cd: Use the categorical chart palette and shared tooltip on histogram charts (including Request Latency on the Services dashboard) instead of a hardcoded neon green fill and a one-off tooltip.

  • 9f640a6: Add a Rotate action for the personal API access key in Team Settings → API & Agents. Previously the personal access key — the bearer token for the external API v2 and the MCP server — was generated once at account creation and could never be changed, so a leaked key could only be remediated by deleting the user. Rotating immediately revokes the previous key, so MCP / AI agent configs, external API v2 clients, Terraform / IaC providers, and CI scripts using the old key must be updated with the new one. Browser sessions are unaffected.

  • c4dcab9: Introduce a shared ChartCard component that gives standalone charts the same
    card treatment as custom dashboard tiles (bordered surface + full-bleed header
    divider). The card header stays pinned while the card body scrolls (e.g. cards
    wrapping a long list like "Top 20 Most Time Consuming Queries"): in card mode
    the header is a fixed row and scrollable list content gets its own internal
    scroll region, so the header no longer scrolls away once you pass the first
    card-height of content. Migrate the Service
    Dashboards (HTTP, Database, Errors, endpoint and DB-query side panels) and the
    ClickHouse page from the old ChartBox wrapper to ChartCard so chart surfaces
    look consistent across the app.

  • adba65a: fix: Sort JSON viewer keys alphabetically so wide Map columns are scannable

  • Updated dependencies [8723d7a]

  • Updated dependencies [be26530]

  • Updated dependencies [a4b2ad0]

  • Updated dependencies [c349a5d]

  • Updated dependencies [d205a77]

  • Updated dependencies [68d2ed2]

  • Updated dependencies [2eedfb2]

  • Updated dependencies [1ce61c0]

  • Updated dependencies [90da409]

  • Updated dependencies [43f6856]

  • Updated dependencies [b1d8dc1]

  • Updated dependencies [40ec085]

  • Updated dependencies [b0b1380]

  • Updated dependencies [a94d6da]

  • Updated dependencies [8be6810]

  • Updated dependencies [c592207]

  • Updated dependencies [9c7742f]

  • Updated dependencies [dc29d57]

  • Updated dependencies [e153f46]

  • Updated dependencies [7294944]

  • Updated dependencies [e60a7d3]

  • Updated dependencies [3ecf73c]

  • Updated dependencies [3ecf73c]

  • Updated dependencies [e153f46]

  • Updated dependencies [9f640a6]

  • Updated dependencies [ea12707]

  • Updated dependencies [08e5b62]

    • @hyperdx/api@2.36.0
    • @hyperdx/common-utils@0.27.0

Don't miss a new hyperdx release

NewReleases is sending notifications on new releases.