Ad
 
Learn More
Favicon of GraphQL Mesh Releases

GraphQL Mesh Releases

Great

The Guild • Last updated 2 days ago

Activity Score

100%
Great
Recency:100%
Cadence:100%
Completeness:100%
Health:100%

Recent Updates

Updates for August 24, 2026(10 updates)

Uniform Changelog API

Access The Guild changelog updates through our uniform API. Same JSON structure across all sources — no adapter-specific parsing needed.

API Endpoint
GET https://watchchangelog.com/api/v1/entries?source=graphql-mesh.releases
Response Sample
{
  "source": "graphql-mesh.releases",
  "vendor": "The Guild",
  "id": "tag:github.com,2008:Repository/233597517/release-1787592564418",
  "published_at": "2026-08-24T17:29:25.000Z",
  "title": "August 24, 2026",
  "url": "https://github.com/ardatan/graphql-mesh/releases/tag/release-1787592564418",
  "summary": "@graphql-mesh/cache-cfw-kv@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/cache-file@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/cache-inmemory-lru@0.11.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/cache-localforage@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/cache-inmemory-lru@0.11.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/cache-redis@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/cache-upstash-redis@0.4.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/compose-cli@1.8.2 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/fusion-composition@0.11.2 @graphql-mesh/fusion-composition@0.11.2 Patch Changes Updated dependencies []: @graphql-mesh/utils@0.107.1 @graphql-mesh/incontext-sdk-codegen@0.3.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/apollo-link@0.109.1 Patch Changes Updated dependencies []: @graphql-mesh/runtime@0.109.1 @graphql-mesh/cli@0.103.2 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/incontext-sdk-codegen@0.3.1 @graphql-mesh/config@0.111.1 @graphql-mesh/http@0.109.1 @graphql-mesh/runtime@0.109.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/config@0.111.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/cache-localforage@0.108.1 @graphql-mesh/merger-bare@0.108.1 @graphql-mesh/merger-stitching@0.108.1 @graphql-mesh/runtime@0.109.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/graphql@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/grpc@0.112.0 Minor Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: pass channelOptions through to the gRPC client Use this for message size limits, keepalive, and other channel args . Options are stored as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed schema. import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , channelOptions : { 'grpc.max_receive_message_length' : 10_000_000 , 'grpc.keepalive_time_ms' : 10_000 , 'grpc.keepalive_timeout_ms' : 5_000 , 'grpc.keepalive_permit_without_calls' : 1 } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 channelOptions : grpc.max_receive_message_length : 10000000 grpc.keepalive_time_ms : 10000 #9650 c7f0f3f Thanks @ardatan ! - gRPC: add reflectionMetadata for server-reflection requests Send routing / auth metadata only when loading the schema via gRPC reflection (no source ). Runtime RPC metadata remains metaData ; HTTP headers for a remote .graphql SDL remain schemaHeaders . import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // No `source` → schema loaded via reflection reflectionMetadata : { 'grpc-service' : 'proto.MyGrpcService' , authorization : 'Bearer {env.REFLECTION_TOKEN}' } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 reflectionMetadata : grpc-service : proto.MyGrpcService authorization : ' Bearer {env.REFLECTION_TOKEN} ' #9650 c7f0f3f Thanks @ardatan ! - gRPC: apply requestTimeout as a real per-call deadline Previously requestTimeout was not enforced as a gRPC deadline, so a hung upstream could leave the GraphQL request waiting indefinitely. It is now set on each call via CallOptions.deadline ( Date.now() + requestTimeout ). import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // Fail the call if the server does not respond within 5s requestTimeout : 5000 } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 requestTimeout : 5000 Patch Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: tear down clients via Client.prototype.close If a service defines an RPC named Close , that method was previously shadowing the gRPC client's connection close() , so Mesh could not dispose the channel cleanly. Teardown now always calls Client.prototype.close . No config change is required — services with a Close RPC continue to expose that operation in the GraphQL schema, while gateway/Mesh shutdown still closes the underlying connection. #9650 c7f0f3f Thanks @ardatan ! - gRPC: treat missing or empty source as reflection Omitting source , setting it to '' , or using { file: '' } now correctly falls back to gRPC server reflection instead of failing to load a proto/descriptor. import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' // source omitted → reflection } ) } ] } ) Legacy Mesh (empty file path also reflects): sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 # source omitted or empty → reflection Updated dependencies [ c7f0f3f , c7f0f3f , c7f0f3f , c7f0f3f , c7f0f3f , c7f0f3f ]: @omnigraph/grpc@0.3.0 @graphql-mesh/transport-grpc@0.7.0 @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/json-schema@0.112.3 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f , 1a6dc08 ]: @graphql-mesh/types@0.107.1 @omnigraph/json-schema@0.112.3 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/mongoose@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/mysql@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @omnigraph/mysql@0.12.1 @graphql-mesh/neo4j@0.110.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @omnigraph/neo4j@0.14.1 @graphql-mesh/odata@0.109.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @omnigraph/odata@0.5.1 @graphql-mesh/openapi@0.112.3 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f , 1a6dc08 ]: @graphql-mesh/types@0.107.1 @omnigraph/openapi@0.112.3 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/postgraphile@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/raml@0.112.3 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @omnigraph/raml@0.112.3 @graphql-mesh/soap@0.110.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @omnigraph/soap@0.110.1 @graphql-mesh/supergraph@0.13.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/thrift@0.109.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @omnigraph/thrift@0.12.1 @graphql-mesh/tuql@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @omnigraph/sqlite@0.11.1 @graphql-mesh/http@0.109.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/runtime@0.109.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/merger-bare@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/merger-stitching@0.108.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/merger-stitching@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/migrate-config-cli@1.10.2 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/compose-cli@1.8.2 @graphql-mesh/cli@0.103.2 @graphql-mesh/config@0.111.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/runtime@0.109.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/store@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-cache@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-encapsulate@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-extend@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-federation@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-filter-schema@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-hive@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/transform-hoist-field@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-naming-convention@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-prefix@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-prune@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/transform-rate-limit@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-rename@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-replace-field@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-resolvers-composition@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-transfer-schema@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transform-type-merging@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/types@0.107.1 Patch Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: pass channelOptions through to the gRPC client Use this for message size limits, keepalive, and other channel args . Options are stored as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed schema. import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , channelOptions : { 'grpc.max_receive_message_length' : 10_000_000 , 'grpc.keepalive_time_ms' : 10_000 , 'grpc.keepalive_timeout_ms' : 5_000 , 'grpc.keepalive_permit_without_calls' : 1 } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 channelOptions : grpc.max_receive_message_length : 10000000 grpc.keepalive_time_ms : 10000 #9650 c7f0f3f Thanks @ardatan ! - gRPC: add reflectionMetadata for server-reflection requests Send routing / auth metadata only when loading the schema via gRPC reflection (no source ). Runtime RPC metadata remains metaData ; HTTP headers for a remote .graphql SDL remain schemaHeaders . import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // No `source` → schema loaded via reflection reflectionMetadata : { 'grpc-service' : 'proto.MyGrpcService' , authorization : 'Bearer {env.REFLECTION_TOKEN}' } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 reflectionMetadata : grpc-service : proto.MyGrpcService authorization : ' Bearer {env.REFLECTION_TOKEN} ' @graphql-mesh/urql-exchange@0.109.1 Patch Changes Updated dependencies []: @graphql-mesh/runtime@0.109.1 @graphql-mesh/utils@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @omnigraph/grpc@0.3.0 Minor Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: pass channelOptions through to the gRPC client Use this for message size limits, keepalive, and other channel args . Options are stored as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed schema. import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , channelOptions : { 'grpc.max_receive_message_length' : 10_000_000 , 'grpc.keepalive_time_ms' : 10_000 , 'grpc.keepalive_timeout_ms' : 5_000 , 'grpc.keepalive_permit_without_calls' : 1 } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 channelOptions : grpc.max_receive_message_length : 10000000 grpc.keepalive_time_ms : 10000 #9650 c7f0f3f Thanks @ardatan ! - gRPC: add reflectionMetadata for server-reflection requests Send routing / auth metadata only when loading the schema via gRPC reflection (no source ). Runtime RPC metadata remains metaData ; HTTP headers for a remote .graphql SDL remain schemaHeaders . import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // No `source` → schema loaded via reflection reflectionMetadata : { 'grpc-service' : 'proto.MyGrpcService' , authorization : 'Bearer {env.REFLECTION_TOKEN}' } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 reflectionMetadata : grpc-service : proto.MyGrpcService authorization : ' Bearer {env.REFLECTION_TOKEN} ' #9650 c7f0f3f Thanks @ardatan ! - gRPC: apply requestTimeout as a real per-call deadline Previously requestTimeout was not enforced as a gRPC deadline, so a hung upstream could leave the GraphQL request waiting indefinitely. It is now set on each call via CallOptions.deadline ( Date.now() + requestTimeout ). import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // Fail the call if the server does not respond within 5s requestTimeout : 5000 } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 requestTimeout : 5000 Patch Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: treat missing or empty source as reflection Omitting source , setting it to '' , or using { file: '' } now correctly falls back to gRPC server reflection instead of failing to load a proto/descriptor. import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' // source omitted → reflection } ) } ] } ) Legacy Mesh (empty file path also reflects): sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 # source omitted or empty → reflection @omnigraph/json-schema@0.112.3 Patch Changes #9649 1a6dc08 Thanks @copilot-swe-agent ! - Fix: honor loader-level queryStringOptions as fallback in @httpOperation directives Previously, when a queryStringOptions was configured at the loader (source) level for OpenAPI or JSON Schema subgraphs, the generated @httpOperation directives did not inherit that option unless every individual operation explicitly set its own queryStringOptions . This meant that loader-level query-string serialization config (e.g. allowDots , arrayFormat ) was silently ignored at execution time. What changed In addExecutionDirectivesToComposer , each operation now falls back to the loader-level queryStringOptions when the operation itself does not define one: queryStringOptions: 'queryStringOptions' in operationConfig ? operationConfig . queryStringOptions : queryStringOptions // ← new: inherit from loader level This aligns with the documented contract where loader-level options apply globally to all operations. Usage example OpenAPI – queryStringOptions set once for all operations: // mesh.config.ts import { defineConfig } from '@graphql-mesh/compose-cli' import { loadOpenAPISubgraph } from '@omnigraph/openapi' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadOpenAPISubgraph ( 'MyApi' , { source : './openapi.yaml' , endpoint : 'https://api.example.com' , // Applied to every operation that doesn't override it queryStringOptions : { allowDots : true , // serialize nested objects as a.b.c=1 arrayFormat : 'repeat' // serialize arrays as a=1&a=2 } } ) } ] } ) JSON Schema – same option at the loader level: import { loadGraphQLSchemaFromJSONSchemas } from '@omnigraph/json-schema' ; const schema = await loadGraphQLSchemaFromJSONSchemas ( 'MyApi' , { endpoint : 'https://api.example.com' , queryStringOptions : { arrayFormat : 'brackets' , // foo[]=1&foo[]=2 } , operations : [ ... ] , } ) ; Affected packages Package Change @omnigraph/json-schema Core fix in addExecutionDirectivesToComposer @omnigraph/openapi Inherits fix via @omnigraph/json-schema Fixes #8760 Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-rest@0.12.1 @omnigraph/mysql@0.12.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-mysql@0.12.1 @omnigraph/neo4j@0.14.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/transport-neo4j@0.13.1 @omnigraph/odata@0.5.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/store@0.107.1 @graphql-mesh/utils@0.107.1 @omnigraph/openapi@0.112.3 Patch Changes #9649 1a6dc08 Thanks @copilot-swe-agent ! - Fix: honor loader-level queryStringOptions as fallback in @httpOperation directives Previously, when a queryStringOptions was configured at the loader (source) level for OpenAPI or JSON Schema subgraphs, the generated @httpOperation directives did not inherit that option unless every individual operation explicitly set its own queryStringOptions . This meant that loader-level query-string serialization config (e.g. allowDots , arrayFormat ) was silently ignored at execution time. What changed In addExecutionDirectivesToComposer , each operation now falls back to the loader-level queryStringOptions when the operation itself does not define one: queryStringOptions: 'queryStringOptions' in operationConfig ? operationConfig . queryStringOptions : queryStringOptions // ← new: inherit from loader level This aligns with the documented contract where loader-level options apply globally to all operations. Usage example OpenAPI – queryStringOptions set once for all operations: // mesh.config.ts import { defineConfig } from '@graphql-mesh/compose-cli' import { loadOpenAPISubgraph } from '@omnigraph/openapi' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadOpenAPISubgraph ( 'MyApi' , { source : './openapi.yaml' , endpoint : 'https://api.example.com' , // Applied to every operation that doesn't override it queryStringOptions : { allowDots : true , // serialize nested objects as a.b.c=1 arrayFormat : 'repeat' // serialize arrays as a=1&a=2 } } ) } ] } ) JSON Schema – same option at the loader level: import { loadGraphQLSchemaFromJSONSchemas } from '@omnigraph/json-schema' ; const schema = await loadGraphQLSchemaFromJSONSchemas ( 'MyApi' , { endpoint : 'https://api.example.com' , queryStringOptions : { arrayFormat : 'brackets' , // foo[]=1&foo[]=2 } , operations : [ ... ] , } ) ; Affected packages Package Change @omnigraph/json-schema Core fix in addExecutionDirectivesToComposer @omnigraph/openapi Inherits fix via @omnigraph/json-schema Fixes #8760 Updated dependencies [ c7f0f3f , c7f0f3f , 1a6dc08 ]: @graphql-mesh/types@0.107.1 @omnigraph/json-schema@0.112.3 @graphql-mesh/utils@0.107.1 @graphql-mesh/fusion-composition@0.11.2 @omnigraph/raml@0.112.3 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f , 1a6dc08 ]: @graphql-mesh/types@0.107.1 @omnigraph/json-schema@0.112.3 @graphql-mesh/utils@0.107.1 @omnigraph/soap@0.110.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-soap@0.13.1 @omnigraph/sqlite@0.11.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @omnigraph/thrift@0.12.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-thrift@0.12.1 @graphql-mesh/plugin-deduplicate-request@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-hive@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/plugin-http-cache@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-http-details-extensions@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-jit@0.5.1 Patch Changes Updated dependencies []: @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-live-query@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-mock@0.108.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-newrelic@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-operation-field-permissions@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/plugin-operation-headers@1.7.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-rate-limit@0.109.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-response-cache@0.107.2 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-snapshot@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/plugin-statsd@0.107.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-grpc@0.7.0 Minor Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: pass channelOptions through to the gRPC client Use this for message size limits, keepalive, and other channel args . Options are stored as entries so dotted keys like grpc.max_receive_message_length stay GraphQL-safe in the composed schema. import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , channelOptions : { 'grpc.max_receive_message_length' : 10_000_000 , 'grpc.keepalive_time_ms' : 10_000 , 'grpc.keepalive_timeout_ms' : 5_000 , 'grpc.keepalive_permit_without_calls' : 1 } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 channelOptions : grpc.max_receive_message_length : 10000000 grpc.keepalive_time_ms : 10000 #9650 c7f0f3f Thanks @ardatan ! - gRPC: add reflectionMetadata for server-reflection requests Send routing / auth metadata only when loading the schema via gRPC reflection (no source ). Runtime RPC metadata remains metaData ; HTTP headers for a remote .graphql SDL remain schemaHeaders . import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // No `source` → schema loaded via reflection reflectionMetadata : { 'grpc-service' : 'proto.MyGrpcService' , authorization : 'Bearer {env.REFLECTION_TOKEN}' } } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 reflectionMetadata : grpc-service : proto.MyGrpcService authorization : ' Bearer {env.REFLECTION_TOKEN} ' #9650 c7f0f3f Thanks @ardatan ! - gRPC: apply requestTimeout as a real per-call deadline Previously requestTimeout was not enforced as a gRPC deadline, so a hung upstream could leave the GraphQL request waiting indefinitely. It is now set on each call via CallOptions.deadline ( Date.now() + requestTimeout ). import { defineConfig } from '@graphql-mesh/compose-cli' import loadGrpcSubgraph from '@omnigraph/grpc' export const composeConfig = defineConfig ( { subgraphs : [ { sourceHandler : loadGrpcSubgraph ( 'MyGrpcApi' , { endpoint : 'localhost:50051' , // Fail the call if the server does not respond within 5s requestTimeout : 5000 } ) } ] } ) Legacy Mesh: sources : - name : MyGrpcApi handler : grpc : endpoint : localhost:50051 requestTimeout : 5000 Patch Changes #9650 c7f0f3f Thanks @ardatan ! - gRPC: tear down clients via Client.prototype.close If a service defines an RPC named Close , that method was previously shadowing the gRPC client's connection close() , so Mesh could not dispose the channel cleanly. Teardown now always calls Client.prototype.close . No config change is required — services with a Close RPC continue to expose that operation in the GraphQL schema, while gateway/Mesh shutdown still closes the underlying connection. #9650 c7f0f3f Thanks @ardatan ! - gRPC: surface ServiceError as GraphQL errors with extensions.grpc Upstream gRPC ServiceError s are no longer masked as generic internal errors. They are returned as GraphQL errors with extensions.code: DOWNSTREAM_SERVICE_ERROR and structured details under extensions.grpc : { \"errors\" : [ { \"message\" : \" 4 DEADLINE_EXCEEDED: Deadline exceeded \" , \"extensions\" : { \"code\" : \" DOWNSTREAM_SERVICE_ERROR \" , \"grpc\" : { \"code\" : 4 , \"status\" : \" DEADLINE_EXCEEDED \" , \"details\" : \" Deadline exceeded \" , \"metadata\" : {} } } } ] } Only gRPC ServiceError values are wrapped; other thrown values are left unchanged. Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-mysql@0.12.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-neo4j@0.13.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-odata@0.5.1 Patch Changes Updated dependencies []: @omnigraph/odata@0.5.1 @graphql-mesh/transport-rest@0.12.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-soap@0.13.1 Patch Changes Updated dependencies [ c7f0f3f , c7f0f3f ]: @graphql-mesh/types@0.107.1 @graphql-mesh/utils@0.107.1 @graphql-mesh/transport-sqlite@0.12.1 Patch Changes Updated dependencies []: @omnigraph/sqlite@0.11.1 @graphql-mesh/transport-thrift@0.12.1 Patch Changes Updated dependencies []: @graphql-mesh/utils@0.107.1",
  "tags": [
    "The Guild",
    "graphql-mesh.releases",
    "graphql",
    "federation",
    "api-gateway"
  ]
}

Get Your Free API Key

Sign up to access the full changelog API. All public sources are free — no credit card required.

Sign Up Free →

Tags:

graphqlfederationapi-gateway

Related Sources

Favicon

 

  
  
Favicon

 

  
  
Favicon

 

  
  

Share: