@graphql-tools/schema
11.0.6 · 22 Oct 2026MIT10.5M / weekRepositoryHomepagenpmAtom feed
129 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 11.x · latest line
11.0.6
22 Oct 2026requireResolversForArgs(and the other resolver-presence checks) now look forsubscribeon the schema's subscription type.On subscriptions,
subscribeis required andresolveis optional. The validator used to look only atfield.resolve, so a subscription with arguments was reported as missing even whensubscribewas present. Query and mutation fields still requireresolve.
Patch Changes
requireResolversForArgs(and the other resolver-presence checks) now look forsubscribeon the schema's subscription type.On subscriptions,
subscribeis required andresolveis optional. The validator used to look only atfield.resolve, so a subscription with arguments was reported as missing even whensubscribewas present. Query and mutation fields still requireresolve.
11.0.1 – 11.0.55 releases that only update dependencies@graphql-tools/utils 13.1.2@graphql-tools/merge 10.0.5Show each
- 11.0.522 Oct 2026@graphql-tools/utils 13.1.2@graphql-tools/merge 10.0.5
- 11.0.420 Oct 2026@graphql-tools/utils 13.1.1@graphql-tools/merge 10.0.4
- 11.0.320 Oct 2026@graphql-tools/utils 13.1.0@graphql-tools/merge 10.0.3
- 11.0.219 Oct 2026@graphql-tools/utils 13.0.2@graphql-tools/merge 10.0.2
- 11.0.119 Oct 2026@graphql-tools/utils 13.0.1@graphql-tools/merge 10.0.1
11.0.0
19 Oct 2026- breaking
Drop GraphQL v14/v15 support and require Node.js >= 22.18.
On Node.js ≥26.1 (and ≥24.16 where backported),
fs.globfollowSymlinksis used.On older engines, symlink directories are discovered only under each pattern’s literal prefix (not the whole
cwd) and patterns are re-rooted.
Major Changes
- breaking
Drop GraphQL v14/v15 support and require Node.js >= 22.18.
graphqlpeer range is now^16.0.0 || ^17.0.0.engines.nodeis now>=22.18.0(Nodefs.glob+ Babel 8).Dev tooling and
@graphql-tools/graphql-tag-pluckmove to Babel 8 (@babel/core/ parser / traverse / types).The standalone
cross-inspectpackage is discontinued. Useinspectfrom@graphql-tools/utilsinstead (Nodeutil.inspectviaprocess.getBuiltinModule, with a smallJSON.stringify/Stringfallback).
Removed
@graphql-tools/utilsexportsRemoved Use instead getArgumentValuesimport { getArgumentValues } from 'graphql'coerceInputs/graphqlJSCompatgraphql@16+ APIs ( getArgumentValues, etc.)createDeferred/createDeferredPromiseconst { promise, resolve, reject } = Promise.withResolvers()createGraphQLErrornew GraphQLError(message, options)fromgraphqlmapMaybePromisehandleMaybePromisefrom@whatwg-node/promise-helpersisPromise/fakePromise/mapAsyncIterator/MaybePromise@whatwg-node/promise-helpersregisterAbortSignalListener/getAbortPromiseAbortSignalAPIs (throwIfAborted,addEventListener('abort', …, { once: true }),AbortSignal.any, …)withCancel/getAsyncIterableWithCancel/getAsyncIteratorWithCancelHandle cancellation on the async iterator’s return()(or your transport abort path)debugTimerStart/debugTimerEndYour own timing / console.timeif neededPromiseWithResolvers(type)Built-in PromiseWithResolvers<T>/ return type ofPromise.withResolvers()inspectand the WeakMapmemoize1…memoize2of5helpers remain on@graphql-tools/utils(inspect is no longer re-exported fromcross-inspect).File matching (
globby→fs.glob)Loaders and
@graphql-tools/load-filesnow use Node’sfs.globthrough:import { matchFiles, matchFilesSync } from '@graphql-tools/load-files';Directory symlinks are followed for recursive (
**) patterns:On Node.js ≥26.1 (and ≥24.16 where backported),
fs.globfollowSymlinksis used.On older engines, symlink directories are discovered only under each pattern’s literal prefix (not the whole
cwd) and patterns are re-rooted.Non-recursive / literal patterns skip the symlink walk entirely.
@graphql-tools/executorhot-path caches (collectSubfields, argument coercion,@streamdetection) usememoize2/memoize3from utils.collectSubFieldsin utils stays unmemoized so the executor can own a single memoize3 layer.Errors and other cleanup
Prefer
new GraphQLError(message, options)fromgraphql. Experimental schemacoordinatesupport remains onlocatedError/relocatedError/getSchemaCoordinate.Removed GraphQL versions older than 16 compatibility branches (error construction, validation rule name suffixes,
URL.canParsefallback).Promise helpers should be imported from
@whatwg-node/promise-helpers(handleMaybePromise,isPromise,fakePromise,mapAsyncIterator,MaybePromise) rather than re-exported from utils.
Patch Changes
dependencies updates:
Updated dependency
graphql@^16.0.0 || ^17.0.0↗︎ (from^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0, inpeerDependencies)
- 10.x
10.1.5
15 Oct 2026dependencies updates:
Fix: Preserve symbol-keyed GraphQL extensions when building, merging, or extracting schemas.
GraphQL.js v17 allows
string | symbolkeys on schema/type/fieldextensions(viatoObjMapWithSymbols).@graphql-toolswas dropping those symbol keys in two places:
Patch Changes
dependencies updates:
Updated dependency
@graphql-tools/merge@^9.2.7↗︎ (from^9.2.6, independencies)Updated dependency
@graphql-tools/utils@^12.0.4↗︎ (from^12.0.3, independencies)
Fix: Preserve symbol-keyed GraphQL extensions when building, merging, or extracting schemas.
GraphQL.js v17 allows
string | symbolkeys on schema/type/fieldextensions(viatoObjMapWithSymbols).@graphql-toolswas dropping those symbol keys in two places:mergeDeeponly walked enumerable string keys (for...in), so symbol extensions were lost when applyingschemaExtensions.extractExtensionsFromSchemadid not copy non-enumerable own symbol keys (enumerable symbols already survive object rest/spread; the explicit loop covers the non-enumerable case).
Example (bug)
import { makeExecutableSchema } from '@graphql-tools/schema' const META = Symbol('META') const schema = makeExecutableSchema({ typeDefs: /* GraphQL */ ` type Query { hello: String } `, schemaExtensions: { schemaExtensions: { [META]: { source: 'app' }, tagged: true, }, types: {}, }, }) // Before: only string keys survived // schema.extensions === { tagged: true } // After: symbol keys are preserved // schema.extensions[META] === { source: 'app' } // schema.extensions.tagged === trueSchema extension merge/extract and resolver merging always enable
{ enumerable: true, nonEnumerable: true }so symbol keys survive in tools' own merge/extract paths on every supported GraphQL.js major. (GraphQL.js itself may still drop symbol keys from field configs below v17 when rebuilding types.)mergeDeepAPImergeDeepnow accepts an options object. The old positional boolean arguments still work but are deprecated.import { mergeDeep } from '@graphql-tools/utils' // Deprecated (still supported) mergeDeep([a, b], false, true, false, true) // ^proto ^arrays ^len ^non-enumerable symbols only // Preferred mergeDeep([a, b], { respectPrototype: false, respectArrays: true, respectArrayLength: false, respectSymbols: { enumerable: true, // merge `obj[sym] = value` keys nonEnumerable: true, // copy defineProperty(..., { enumerable: false }) symbols }, })respectSymbolsdefaults to{ enumerable: false, nonEnumerable: false }(symbols dropped), matching the historical default. The legacy 5th positional flag still maps to{ nonEnumerable: true }only.Resolver map types (
IResolvers/ field resolverextensionsand type__extensions) now useExtensionsObject(Record<string | symbol, any>), so symbol-keyed resolver extensions type-check under GraphQL.js v17+.10.1.1 – 10.1.44 releases that only update dependencies@graphql-tools/utils 12.0.4@graphql-tools/merge 9.2.7Show each
10.1.0
12 Aug 2026Minor Changes
#8346
2273c21Thanks @ardatan! - This release adds GraphQL v17 support and aligns the existing executor implementation with the latest GraphQL v17 API changes. The following changes are included:getAsyncHelpersis now available onGraphQLResolveInfo. Itstrackmethod is used wheneverwaitUntilis available, as in Yoga's Explicit Resource ManagementgetAbortSignalis now available onGraphQLResolveInfo, matching behavior that was already available in this executor implementation, as in Yoga's Execution CancellationGraphQLResolveInfoautomatically alignsvariableValuesaccording to the GraphQL version for better compatibility. In GraphQL v17 and above,variableValuesfollows the wrapped shape ({ coerced, sources }) expected by GraphQL APIs. In GraphQL v16 and below,variableValuesremains a flat map as in previous versions.If your custom scalar resolvers define
__serializeand__parseValue, they are automatically mapped tocoerceOutputValueandcoerceInputValuein GraphQL v17.BREAKING:
@graphql-tools/executor'sgetVariableValuesnow returns{ variableValues }on success, wherevariableValuesis aVariableValuesobject ({ coerced, sources }). On failure, it returns{ errors }.BREAKING:
collectFields,shouldIncludeNode,getDeferValues, andcollectSubFieldsnow need aVariableValuesobject instead ofRecord<string, any>for thevariableValuesargument.visitResultnow internally normalizesExecutionRequest.variablesinto aVariableValues-compatible shape ({ coerced, sources }) before traversing selections.
10.0.38
17 Jul 2026Reading the note…
10.0.37
17 Jul 2026Reading the note…
10.0.36
8 Jul 2026Reading the note…
10.0.35
6 Jul 2026Reading the note…
10.0.34
28 Jun 2026Reading the note…
10.0.33
23 Apr 2026Reading the note…
10.0.32
9 Apr 2026Reading the note…
10.0.31
7 Jan 2026Reading the note…
10.0.30
28 Nov 2025Reading the note…
10.0.29
12 Nov 2025Reading the note…
10.0.28
11 Nov 2025Reading the note…
10.0.27
4 Nov 2025Reading the note…
10.0.26
30 Oct 2025Reading the note…
10.0.25
21 Jul 2025Reading the note…
10.0.24
17 Jul 2025Reading the note…
10.0.23
13 Mar 2025Reading the note…
10.0.22
13 Mar 2025Reading the note…
10.0.21
3 Mar 2025Reading the note…
10.0.20
25 Feb 2025Reading the note…
10.0.19
21 Feb 2025Reading the note…
10.0.18
10 Feb 2025Reading the note…
10.0.17
10 Feb 2025Reading the note…
10.0.16
6 Jan 2025Reading the note…
10.0.15
2 Jan 2025Reading the note…
10.0.14
24 Dec 2024Reading the note…
10.0.13
14 Dec 2024Reading the note…
10.0.12
13 Dec 2024Reading the note…
10.0.11
4 Dec 2024Reading the note…
10.0.10
27 Nov 2024Reading the note…
10.0.9
22 Nov 2024Reading the note…
10.0.8
13 Nov 2024Reading the note…
10.0.7
15 Oct 2024Reading the note…
10.0.6
16 Aug 2024Reading the note…
10.0.5
11 Aug 2024Reading the note…
10.0.4
27 May 2024Reading the note…
10.0.3
23 Feb 2024Reading the note…
10.0.2
22 Nov 2023Reading the note…