Releases: graphql-hive/router
hive-router 0.0.62 (2026-05-27)
Fixes
Fix VariablesInAllowedPosition rejecting list-typed variables with a non-null default value
The router used to reject valid client queries that declared a list-typed variable with a non-null default value, for example:
query Q($arg: [SomeEnum!] = SOME_VALUE) {
field(arg: $arg)
}with a VariablesInAllowedPosition validation error containing a malformed type:
Variable "$arg" of type "SomeEnum!!" used in position expecting type "[SomeEnum!]".
The rule used to compute the variable's effective type incorrectly when the variable was list-typed and had a non-null default value: it dropped the list wrapper and re-wrapped the inner element type in NonNull, producing the invalid T!! shape. Per the spec, a non-null default value makes the variable usable in a non-null position; the variable's effective type should be NonNull(var_type), not NonNull(element_type). So for [SomeEnum!] with a non-null default, the effective type is now correctly [SomeEnum!]! (and the query is accepted).
hive-router-query-planner 2.8.3 (2026-05-27)
Fixes
Fix VariablesInAllowedPosition rejecting list-typed variables with a non-null default value
The router used to reject valid client queries that declared a list-typed variable with a non-null default value, for example:
query Q($arg: [SomeEnum!] = SOME_VALUE) {
field(arg: $arg)
}with a VariablesInAllowedPosition validation error containing a malformed type:
Variable "$arg" of type "SomeEnum!!" used in position expecting type "[SomeEnum!]".
The rule used to compute the variable's effective type incorrectly when the variable was list-typed and had a non-null default value: it dropped the list wrapper and re-wrapped the inner element type in NonNull, producing the invalid T!! shape. Per the spec, a non-null default value makes the variable usable in a non-null position; the variable's effective type should be NonNull(var_type), not NonNull(element_type). So for [SomeEnum!] with a non-null default, the effective type is now correctly [SomeEnum!]! (and the query is accepted).
hive-router-plan-executor 6.13.8 (2026-05-27)
Fixes
Add tracing sampling rate environment override
The tracing sampling rate can now be overridden without editing the router config file:
TELEMETRY_TRACING_SAMPLING_RATE=0.1This sets the same value as the following YAML configuration:
telemetry:
tracing:
collect:
sampling: 0.1hive-router-plan-executor 6.13.7 (2026-05-27)
Fixes
Fix VariablesInAllowedPosition rejecting list-typed variables with a non-null default value
The router used to reject valid client queries that declared a list-typed variable with a non-null default value, for example:
query Q($arg: [SomeEnum!] = SOME_VALUE) {
field(arg: $arg)
}with a VariablesInAllowedPosition validation error containing a malformed type:
Variable "$arg" of type "SomeEnum!!" used in position expecting type "[SomeEnum!]".
The rule used to compute the variable's effective type incorrectly when the variable was list-typed and had a non-null default value: it dropped the list wrapper and re-wrapped the inner element type in NonNull, producing the invalid T!! shape. Per the spec, a non-null default value makes the variable usable in a non-null position; the variable's effective type should be NonNull(var_type), not NonNull(element_type). So for [SomeEnum!] with a non-null default, the effective type is now correctly [SomeEnum!]! (and the query is accepted).
hive-router-internal 0.0.25 (2026-05-27)
Fixes
Add tracing sampling rate environment override
The tracing sampling rate can now be overridden without editing the router config file:
TELEMETRY_TRACING_SAMPLING_RATE=0.1This sets the same value as the following YAML configuration:
telemetry:
tracing:
collect:
sampling: 0.1hive-router-config 0.0.37 (2026-05-27)
Fixes
Add tracing sampling rate environment override
The tracing sampling rate can now be overridden without editing the router config file:
TELEMETRY_TRACING_SAMPLING_RATE=0.1This sets the same value as the following YAML configuration:
telemetry:
tracing:
collect:
sampling: 0.1hive-console-sdk 0.3.14 (2026-05-27)
Fixes
Fix VariablesInAllowedPosition rejecting list-typed variables with a non-null default value
The router used to reject valid client queries that declared a list-typed variable with a non-null default value, for example:
query Q($arg: [SomeEnum!] = SOME_VALUE) {
field(arg: $arg)
}with a VariablesInAllowedPosition validation error containing a malformed type:
Variable "$arg" of type "SomeEnum!!" used in position expecting type "[SomeEnum!]".
The rule used to compute the variable's effective type incorrectly when the variable was list-typed and had a non-null default value: it dropped the list wrapper and re-wrapped the inner element type in NonNull, producing the invalid T!! shape. Per the spec, a non-null default value makes the variable usable in a non-null position; the variable's effective type should be NonNull(var_type), not NonNull(element_type). So for [SomeEnum!] with a non-null default, the effective type is now correctly [SomeEnum!]! (and the query is accepted).
graphql-tools 0.5.5 (2026-05-27)
Fixes
Fix VariablesInAllowedPosition rejecting list-typed variables with a non-null default value
The router used to reject valid client queries that declared a list-typed variable with a non-null default value, for example:
query Q($arg: [SomeEnum!] = SOME_VALUE) {
field(arg: $arg)
}with a VariablesInAllowedPosition validation error containing a malformed type:
Variable "$arg" of type "SomeEnum!!" used in position expecting type "[SomeEnum!]".
The rule used to compute the variable's effective type incorrectly when the variable was list-typed and had a non-null default value: it dropped the list wrapper and re-wrapped the inner element type in NonNull, producing the invalid T!! shape. Per the spec, a non-null default value makes the variable usable in a non-null position; the variable's effective type should be NonNull(var_type), not NonNull(element_type). So for [SomeEnum!] with a non-null default, the effective type is now correctly [SomeEnum!]! (and the query is accepted).
hive-router 0.0.61 (2026-05-26)
Features
External storage support (e.g S3)
This release introduces a new top-level storages configuration and the first storage backend, s3, so the router can load external artifacts from object storage.
With this change, both the supergraph source and persisted_documents manifest can be resolved from a configured storage by reference. It also adds optional polling support so the router can reload updated content from storage without restarting.
Start by configuring the storage in your router config:
storages:
my-s3: # this is the storage id
type: s3
bucket: my-bucket
region: eu-west-1
# .. additional S3 configurations Then, you can use the storage id in your supergraph source:
supergraph:
source: storage
storage_id: my-s3
location: supergraphs/current.graphql
poll_interval: 30sOr, you can use the storage id in your persisted_documents manifest:
persisted_documents:
enabled: true
require_id: true
storage:
type: storage
storage_id: my-s3
location: persisted/manifest.json
poll_interval: 30sFixes
Remove dependency ntex from console-sdk
Other pkgs are released due to minor refactor and code relocation.
Warn about debug binary in production use
Added a warning message to the router binary to warn users about using a debug binary in production use.
This is intended to prevent cases where users accidentally use a debug binary in production, which can lead to performance issues.
hive-router-plan-executor 6.13.6 (2026-05-26)
Fixes
External storage support (e.g S3)
This release introduces a new top-level storages configuration and the first storage backend, s3, so the router can load external artifacts from object storage.
With this change, both the supergraph source and persisted_documents manifest can be resolved from a configured storage by reference. It also adds optional polling support so the router can reload updated content from storage without restarting.
Start by configuring the storage in your router config:
storages:
my-s3: # this is the storage id
type: s3
bucket: my-bucket
region: eu-west-1
# .. additional S3 configurations Then, you can use the storage id in your supergraph source:
supergraph:
source: storage
storage_id: my-s3
location: supergraphs/current.graphql
poll_interval: 30sOr, you can use the storage id in your persisted_documents manifest:
persisted_documents:
enabled: true
require_id: true
storage:
type: storage
storage_id: my-s3
location: persisted/manifest.json
poll_interval: 30sRemove dependency ntex from console-sdk
Other pkgs are released due to minor refactor and code relocation.