# What changed in @graphql-tools/schema

> 27 changes in @graphql-tools/schema 8 to 11 from its official release notes, upgrade guides and advisories: 15 breaking, 1 deprecations, 3 new APIs and options. Each one cited. Sources checked 2026-11-13. HTML: https://unstale.sh/npm/@graphql-tools/schema/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @graphql-tools/schema 11

### Breaking changes

- GraphQL v14 and v15 are no longer supported; the peer range is now ^16.0.0 || ^17.0.0. (11.0.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1100)
- Node.js >=22.18.0 is required. (11.0.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1100)

### New APIs and options

- mergeSchemas and makeExecutableSchema now accept this callback to choose how conflicting field types are merged; it also applies to field arguments. (11.0.7) — [release notes](https://github.com/ardatan/graphql-tools/blob/482bdb656e0bf277a2d974ec6cf52f4e20248ef2/packages/schema/CHANGELOG.md#1107)

### Fixes and other changes

- Resolver-presence checks now look for subscribe on subscription fields; query and mutation fields still require resolve. (11.0.6) — [release notes](https://github.com/ardatan/graphql-tools/blob/482bdb656e0bf277a2d974ec6cf52f4e20248ef2/packages/schema/CHANGELOG.md#1106)

## @graphql-tools/schema 10

### Breaking changes

- The variableValues argument now requires a VariableValues object instead of Record<string, any>. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)
- The variableValues argument now requires a VariableValues object instead of Record<string, any>. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)
- The variableValues argument now requires a VariableValues object instead of Record<string, any>. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)
- On success, getVariableValues now returns { variableValues } containing a VariableValues object; on failure, it returns { errors }. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)
- The variableValues argument now requires a VariableValues object instead of Record<string, any>. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)

### Deprecations

- The old positional boolean arguments remain supported but are deprecated in favor of the options object. (10.1.5) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1015)

### New APIs and options

- mergeDeep now accepts an options object with respectPrototype, respectArrays, respectArrayLength, and respectSymbols settings. (10.1.5) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1015)
- getAsyncHelpers is now available on GraphQLResolveInfo; its track method is used whenever waitUntil is available. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)

### Behavior and default changes

- Custom scalar resolvers defining __serialize and __parseValue are automatically mapped to coerceOutputValue and coerceInputValue in GraphQL v17. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)

### Fixes and other changes

- Resolver map extension types now use ExtensionsObject, allowing symbol-keyed resolver extensions to type-check under GraphQL.js v17+. (10.1.5) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1015)
- Schema extension merging and extraction, and resolver merging, now preserve symbol keys, including non-enumerable own symbol keys. (10.1.5) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1015)
- getAbortSignal is now available on GraphQLResolveInfo, matching behavior already available in this executor implementation. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)
- variableValues follows the wrapped { coerced, sources } shape in GraphQL v17 and above, and remains a flat map in GraphQL v16 and below. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)
- visitResult normalizes ExecutionRequest.variables into a VariableValues-compatible { coerced, sources } shape before traversing selections. (10.1.0) — [release notes](https://github.com/ardatan/graphql-tools/blob/fa0bb8e22c21e826b3332879b50f4da65274ccfb/packages/schema/CHANGELOG.md#1010)

## @graphql-tools/schema 8

### Breaking changes

- addErrorLoggingToSchema was removed; logging and debugging can be implemented outside resolvers using a plugin-system-based library such as Envelop. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- addSchemaLevelResolver was removed; resolvers can be wrapped using Resolvers Composition. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- The allowUndefinedResolve option in makeExecutableSchema was removed because GraphQL Schema itself performs this checking. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- buildSchemaFromTypeDefinitions is no longer exported; use buildSchema from graphql-js instead. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- Directive Resolvers were removed; use the new method documented for schema directives. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- Legacy Schema Directives were removed; use the new method documented for schema directives. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- logger was removed; logging and debugging can be implemented outside resolvers using a plugin-system-based library such as Envelop. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
- The schema level resolvers feature was removed; resolvers can be wrapped using Resolvers Composition. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)

### Behavior and default changes

- The merge package is used to handle typeDefs and resolvers merging. (8.0.0) — [release notes](https://github.com/ardatan/graphql-tools/releases/tag/%40graphql-tools/schema%408.0.0)
