Releases: graphql-hive/router
Release list
hive-router-query-planner 2.10.10 (2026-07-20)
Fixes
Improve GraphQL operation validation
- Faster validation (2-3x): rules now share a single
OperationVisitorpass over the operation document instead of each rule visiting it independently. - New
UniqueInputFieldNamesrule: 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)
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
OperationVisitorpass over the operation document instead of each rule visiting it independently. - New
UniqueInputFieldNamesrule: 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)
Fixes
Improve GraphQL operation validation
- Faster validation (2-3x): rules now share a single
OperationVisitorpass over the operation document instead of each rule visiting it independently. - New
UniqueInputFieldNamesrule: 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)
Fixes
Improve GraphQL operation validation
- Faster validation (2-3x): rules now share a single
OperationVisitorpass over the operation document instead of each rule visiting it independently. - New
UniqueInputFieldNamesrule: 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)
Fixes
Improve GraphQL operation validation
- Faster validation (2-3x): rules now share a single
OperationVisitorpass over the operation document instead of each rule visiting it independently. - New
UniqueInputFieldNamesrule: 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)
This is a bump, no changes
hive-router 0.0.82 (2026-07-13)
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)
This is a bump, no changes
Please advise the hive-router-plan-executor 6.22.0 changelog release.
hive-router-plan-executor 6.22.0 (2026-07-13)
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)
Fixes
- Bump version - no changes