npm / @graphql-tools/schema
@graphql-tools/schema
What changed in @graphql-tools/schema 8 to 11, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-13.
15 breaking1 deprecations3 new APIs and options2 behavior and defaults6 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@graphql-tools/schema 114 changes
Breaking changes 2
GraphQL v14 and v15 are no longer supported; the peer range is now ^16.0.0 || ^17.0.0.
Node.js >=22.18.0 is required.
New APIs and options 1
mergeSchemas and makeExecutableSchema now accept this callback to choose how conflicting field types are merged; it also applies to field arguments.
Fixes and other changes 1
Resolver-presence checks now look for subscribe on subscription fields; query and mutation fields still require resolve.
@graphql-tools/schema 1014 changes
Breaking changes 5
The variableValues argument now requires a VariableValues object instead of Record<string, any>.
The variableValues argument now requires a VariableValues object instead of Record<string, any>.
The variableValues argument now requires a VariableValues object instead of Record<string, any>.
On success, getVariableValues now returns { variableValues } containing a VariableValues object; on failure, it returns { errors }.
The variableValues argument now requires a VariableValues object instead of Record<string, any>.
Deprecations 1
The old positional boolean arguments remain supported but are deprecated in favor of the options object.
New APIs and options 2
mergeDeep now accepts an options object with respectPrototype, respectArrays, respectArrayLength, and respectSymbols settings.
getAsyncHelpers is now available on GraphQLResolveInfo; its track method is used whenever waitUntil is available.
Behavior and default changes 1
Custom scalar resolvers defining __serialize and __parseValue are automatically mapped to coerceOutputValue and coerceInputValue in GraphQL v17.
Fixes and other changes 5
Resolver map extension types now use ExtensionsObject, allowing symbol-keyed resolver extensions to type-check under GraphQL.js v17+.
Schema extension merging and extraction, and resolver merging, now preserve symbol keys, including non-enumerable own symbol keys.
getAbortSignal is now available on GraphQLResolveInfo, matching behavior already available in this executor implementation.
variableValues follows the wrapped { coerced, sources } shape in GraphQL v17 and above, and remains a flat map in GraphQL v16 and below.
visitResult normalizes ExecutionRequest.variables into a VariableValues-compatible { coerced, sources } shape before traversing selections.
@graphql-tools/schema 89 changes
Breaking changes 8
addErrorLoggingToSchema was removed; logging and debugging can be implemented outside resolvers using a plugin-system-based library such as Envelop.
addSchemaLevelResolver was removed; resolvers can be wrapped using Resolvers Composition.
The allowUndefinedResolve option in makeExecutableSchema was removed because GraphQL Schema itself performs this checking.
buildSchemaFromTypeDefinitions is no longer exported; use buildSchema from graphql-js instead.
Directive Resolvers were removed; use the new method documented for schema directives.
Legacy Schema Directives were removed; use the new method documented for schema directives.
logger was removed; logging and debugging can be implemented outside resolvers using a plugin-system-based library such as Envelop.
The schema level resolvers feature was removed; resolvers can be wrapped using Resolvers Composition.
Behavior and default changes 1
The merge package is used to handle typeDefs and resolvers merging.