Skip to content

Releases: graphql-hive/router

hive-router-query-planner 2.10.10 (2026-07-20)

Choose a tag to compare

@knope-bot knope-bot released this 20 Jul 08:06
5e10217

Fixes

Improve GraphQL operation validation

  • Faster validation (2-3x): rules now share a single OperationVisitor pass over the operation document instead of each rule visiting it independently.
  • New UniqueInputFieldNames rule: input object fields are now kept as a list rather than a map, so duplicate fields are no longer silently deduplicated before validation. A query like { field(input: { value: 1, value: 2 }) } is now correctly rejected.
  • Fixed VariablesInAllowedPosition: now accounts for default values on variables, field arguments, and input object fields. Nullable variables used in a non-null argument that defines a default are no longer incorrectly rejected.

hive-router-plan-executor 6.23.0 (2026-07-20)

Choose a tag to compare

@knope-bot knope-bot released this 20 Jul 08:06
5e10217

Features

Add an on_graphql_analysis plugin hook with safe operation filtering

Plugin authors can now inspect and filter operation fields after normalization and immediately before query planning. Fields can be kept or nulled with a GraphQL error while the router consistently updates the operation and response projection plan, making the hook suitable for authorization, rate limiting, progressive overrides, and similar policies.

Fixes

Improve GraphQL operation validation

  • Faster validation (2-3x): rules now share a single OperationVisitor pass over the operation document instead of each rule visiting it independently.
  • New UniqueInputFieldNames rule: input object fields are now kept as a list rather than a map, so duplicate fields are no longer silently deduplicated before validation. A query like { field(input: { value: 1, value: 2 }) } is now correctly rejected.
  • Fixed VariablesInAllowedPosition: now accounts for default values on variables, field arguments, and input object fields. Nullable variables used in a non-null argument that defines a default are no longer incorrectly rejected.

hive-router-internal 0.0.37 (2026-07-20)

Choose a tag to compare

@knope-bot knope-bot released this 20 Jul 08:06
5e10217

Fixes

Improve GraphQL operation validation

  • Faster validation (2-3x): rules now share a single OperationVisitor pass over the operation document instead of each rule visiting it independently.
  • New UniqueInputFieldNames rule: input object fields are now kept as a list rather than a map, so duplicate fields are no longer silently deduplicated before validation. A query like { field(input: { value: 1, value: 2 }) } is now correctly rejected.
  • Fixed VariablesInAllowedPosition: now accounts for default values on variables, field arguments, and input object fields. Nullable variables used in a non-null argument that defines a default are no longer incorrectly rejected.

hive-console-sdk 0.3.18 (2026-07-20)

Choose a tag to compare

@knope-bot knope-bot released this 20 Jul 08:06
5e10217

Fixes

Improve GraphQL operation validation

  • Faster validation (2-3x): rules now share a single OperationVisitor pass over the operation document instead of each rule visiting it independently.
  • New UniqueInputFieldNames rule: input object fields are now kept as a list rather than a map, so duplicate fields are no longer silently deduplicated before validation. A query like { field(input: { value: 1, value: 2 }) } is now correctly rejected.
  • Fixed VariablesInAllowedPosition: now accounts for default values on variables, field arguments, and input object fields. Nullable variables used in a non-null argument that defines a default are no longer incorrectly rejected.

graphql-tools 0.5.7 (2026-07-20)

Choose a tag to compare

@knope-bot knope-bot released this 20 Jul 08:06
5e10217

Fixes

Improve GraphQL operation validation

  • Faster validation (2-3x): rules now share a single OperationVisitor pass over the operation document instead of each rule visiting it independently.
  • New UniqueInputFieldNames rule: input object fields are now kept as a list rather than a map, so duplicate fields are no longer silently deduplicated before validation. A query like { field(input: { value: 1, value: 2 }) } is now correctly rejected.
  • Fixed VariablesInAllowedPosition: now accounts for default values on variables, field arguments, and input object fields. Nullable variables used in a non-null argument that defines a default are no longer incorrectly rejected.

hive-router 0.0.83 (2026-07-13)

Choose a tag to compare

@knope-bot knope-bot released this 13 Jul 16:01
a4fc124

hive-router 0.0.82 (2026-07-13)

Choose a tag to compare

@knope-bot knope-bot released this 13 Jul 15:45
6963eb6

Features

Add OpenTelemetry metrics for GraphQL subscriptions

Add end-to-end observability into subscription activity between clients, the router, and subgraphs.

Live state

Metric Labels Unit Description
hive.router.subscriptions.clients.active subscription.transport {subscription} Active subscription operations from clients to the router
hive.router.subscriptions.clients.connections subscription.transport {connection} Active client transport connections carrying subscriptions
hive.router.subscriptions.subgraphs.active subgraph.name {subscription} Active subscription operations from the router to subgraphs
hive.router.subscriptions.subgraphs.connections subgraph.name, subscription.transport {connection} Active transport connections from the router to subgraphs

Operations and connections are measured separately because one connection can carry multiple operations, while subscription deduplication can fan one subgraph operation out to multiple clients.

Lifecycle

Metric Labels Unit Description
hive.router.subscriptions.clients.started_total subscription.transport {subscription} Client subscriptions started
hive.router.subscriptions.clients.ended_total subscription.transport, subscription.end_reason {subscription} Client subscriptions ended
hive.router.subscriptions.subgraphs.started_total subgraph.name {subscription} Subgraph subscriptions started
hive.router.subscriptions.subgraphs.ended_total subgraph.name {subscription} Subgraph subscriptions ended

Every recorded start has exactly one matching end. Client end reasons are completed when the source finishes normally, error when an error is delivered to the client, and client_disconnected when the client disconnects, unsubscribes, or the router otherwise drops the stream.

The counters expose subscription churn and remain meaningful across router restarts. Comparing start and end rates can reveal mass disconnects or reconnect loops even when the active subscription count appears stable.

Message delivery

Metric Labels Unit Description
hive.router.subscriptions.clients.sent_messages_total subscription.transport {message} Messages successfully sent to client subscribers
hive.router.subscriptions.clients.lagged_messages_total subscription.transport {message} Messages skipped for lagging clients on broadcast fan-out
hive.router.subscriptions.subgraphs.dropped_messages_total subscription.transport {message} Subgraph messages dropped because an internal subscription buffer was full

Lagged and dropped counters increase by the number of messages skipped without terminating the subscription. sent_messages_total / (sent_messages_total + lagged_messages_total) provides the client delivery ratio for each transport.

subscription.transport can be websocket, http_multipart, http_sse, or http_callback. Units such as {subscription}, {connection}, and {message} are UCUM annotations that identify what each instrument counts.

Fixes

Drop messages instead of completing subscriptions in the HTTP callback transport

When an HTTP callback subscription's internal buffer is full, acknowledge the callback and drop only that message instead of returning a 503 response and terminating the subscription. This aligns HTTP callback behavior with the other streaming transports and lets slow consumers recover without reconnecting.

Log lagged and dropped subscription messages at debug level

Reduce expected slow-consumer noise by changing logs for lagged client messages and messages dropped from full subscription buffers from warn to debug. These events no longer imply subscription termination and can be monitored through the subscription metrics.

Subgraph network/HTTP errors propagation

Improves how the router reacts to failed or malformed subgraph HTTP responses. Instead of silently ignoring the HTTP status and content-type, the router now emits a GraphQL error for the failing fetch. The affected field is set to null and partial results from other subgraphs are preserved.

Subgraph response Router behavior
2xx, valid content-type, valid GraphQL body passed through unchanged
2xx, valid content-type, valid JSON but no data/errors SUBREQUEST_MALFORMED_RESPONSE
2xx, valid content-type, body is not valid JSON SUBREQUEST_MALFORMED_RESPONSE
2xx, missing or non-JSON content-type (e.g. text/html) SUBREQUEST_MALFORMED_RESPONSE
Non-2xx status SUBREQUEST_HTTP_ERROR (with extensions.http.status)
Transport/connection failure (no HTTP response) SUBREQUEST_HTTP_ERROR

Fixes #1229

hive-router-plan-executor 6.22.1 (2026-07-13)

Choose a tag to compare

@knope-bot knope-bot released this 13 Jul 16:01
a4fc124

hive-router-plan-executor 6.22.0 (2026-07-13)

Choose a tag to compare

@knope-bot knope-bot released this 13 Jul 15:45
6963eb6

Features

Add OpenTelemetry metrics for GraphQL subscriptions

Add end-to-end observability into subscription activity between clients, the router, and subgraphs.

Live state

Metric Labels Unit Description
hive.router.subscriptions.clients.active subscription.transport {subscription} Active subscription operations from clients to the router
hive.router.subscriptions.clients.connections subscription.transport {connection} Active client transport connections carrying subscriptions
hive.router.subscriptions.subgraphs.active subgraph.name {subscription} Active subscription operations from the router to subgraphs
hive.router.subscriptions.subgraphs.connections subgraph.name, subscription.transport {connection} Active transport connections from the router to subgraphs

Operations and connections are measured separately because one connection can carry multiple operations, while subscription deduplication can fan one subgraph operation out to multiple clients.

Lifecycle

Metric Labels Unit Description
hive.router.subscriptions.clients.started_total subscription.transport {subscription} Client subscriptions started
hive.router.subscriptions.clients.ended_total subscription.transport, subscription.end_reason {subscription} Client subscriptions ended
hive.router.subscriptions.subgraphs.started_total subgraph.name {subscription} Subgraph subscriptions started
hive.router.subscriptions.subgraphs.ended_total subgraph.name {subscription} Subgraph subscriptions ended

Every recorded start has exactly one matching end. Client end reasons are completed when the source finishes normally, error when an error is delivered to the client, and client_disconnected when the client disconnects, unsubscribes, or the router otherwise drops the stream.

The counters expose subscription churn and remain meaningful across router restarts. Comparing start and end rates can reveal mass disconnects or reconnect loops even when the active subscription count appears stable.

Message delivery

Metric Labels Unit Description
hive.router.subscriptions.clients.sent_messages_total subscription.transport {message} Messages successfully sent to client subscribers
hive.router.subscriptions.clients.lagged_messages_total subscription.transport {message} Messages skipped for lagging clients on broadcast fan-out
hive.router.subscriptions.subgraphs.dropped_messages_total subscription.transport {message} Subgraph messages dropped because an internal subscription buffer was full

Lagged and dropped counters increase by the number of messages skipped without terminating the subscription. sent_messages_total / (sent_messages_total + lagged_messages_total) provides the client delivery ratio for each transport.

subscription.transport can be websocket, http_multipart, http_sse, or http_callback. Units such as {subscription}, {connection}, and {message} are UCUM annotations that identify what each instrument counts.

Fixes

Log lagged and dropped subscription messages at debug level

Reduce expected slow-consumer noise by changing logs for lagged client messages and messages dropped from full subscription buffers from warn to debug. These events no longer imply subscription termination and can be monitored through the subscription metrics.

Subgraph network/HTTP errors propagation

Improves how the router reacts to failed or malformed subgraph HTTP responses. Instead of silently ignoring the HTTP status and content-type, the router now emits a GraphQL error for the failing fetch. The affected field is set to null and partial results from other subgraphs are preserved.

Subgraph response Router behavior
2xx, valid content-type, valid GraphQL body passed through unchanged
2xx, valid content-type, valid JSON but no data/errors SUBREQUEST_MALFORMED_RESPONSE
2xx, valid content-type, body is not valid JSON SUBREQUEST_MALFORMED_RESPONSE
2xx, missing or non-JSON content-type (e.g. text/html) SUBREQUEST_MALFORMED_RESPONSE
Non-2xx status SUBREQUEST_HTTP_ERROR (with extensions.http.status)
Transport/connection failure (no HTTP response) SUBREQUEST_HTTP_ERROR

Fixes #1229

hive-router-internal 0.0.36 (2026-07-13)

Choose a tag to compare

@knope-bot knope-bot released this 13 Jul 16:01
a4fc124

Fixes

  • Bump version - no changes