NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1070 most downloaded on npm
A Query Language and Runtime which can target any service.
Last release 1 months ago
28 Aug 2026
Release timing varies
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 44 of 45 stable releases
216 versions withdrawn
withdrawn after publishing
12 years old
300 releases · first in 2015
## v15.5.0 (2021-01-26) #### Bug Fix 🐞 * #2852 introspectionFromSchema: enable 'specifiedByUrl' by default (@IvanGoncharov) * #2855 introspection: Add
<details> <summary> 7 PRs were merged </summary>
<details> <summary> 7 PRs were merged </summary>
<details> <summary> 5 PRs were merged </summary>
One column per quarter.
Adithya Krishna(@adithyaakrishna)
Parser class as unstable API (@IvanGoncharov)devAsserts for checking source argument (@IvanGoncharov)<details> <summary> 4 PRs were merged </summary>
<details> <summary> 40 PRs were merged </summary>
__typename type resolution tests into appropriate file (@IvanGoncharov)<details> <summary> 13 PRs were merged </summary>
<details> <summary> 17 PRs were merged </summary>
Nothing published for this version
## v15.3.0 (2020-07-05) #### New Feature 🚀 * #2688 Added new 'FormattedExecutionResult' type (@IvanGoncharov) #### Docs 📝 3 PRs were merged * #2680 Do
<details> <summary> 3 PRs were merged </summary>
<details> <summary> 2 PRs were merged </summary>
<details> <summary> 2 PRs were merged </summary>
## v15.2.0 (2020-06-29) #### New Feature 🚀 * #2465 Change type of extensions from anonymous Record to named interfaces (@benjie) * #2600 Add NoSchemaI
execute. (@IvanGoncharov)<details> <summary> 4 PRs were merged </summary>
<details> <summary> 20 PRs were merged </summary>
npm and deno branches (@IvanGoncharov)<details> <summary> 2 PRs were merged </summary>
Melissa Winstanley(@mwinstanley)
@specifiedBy directive (@m14t)schemaDescription option of getIntrospectionQuery (@IvanGoncharov)Token and Location as ES6 classes (@IvanGoncharov)operationName optional (@IvanGoncharov)GraphQLError constructor's second argument optional (@IvanGoncharov)<details> <summary> 19 PRs were merged </summary>
typeof instead of private types (@IvanGoncharov)Maybe to jsutils folder and remove tsutils (@IvanGoncharov)
</details><details> <summary> 28 PRs were merged </summary>
eslint-plugin-node (@IvanGoncharov)dedent into new __testUtils__ folder (@IvanGoncharov)eslint-graphql-internal to eslint-internal-rules (@IvanGoncharov)// istanbul ignore next comments (@IvanGoncharov)<details> <summary> 11 PRs were merged </summary>
Alexander Knyazev(@alex-knyazev)
serialize method (@IvanGoncharov)GraphQL* types (@IvanGoncharov)introspectionTypes should be array of GraphQLNamedType (@pcarrier)<details> <summary> 7 PRs were merged </summary>
<details> <summary> 98 PRs were merged </summary>
Boolean constructor (@IvanGoncharov)subscribe calls (@IvanGoncharov)<details> <summary> 29 PRs were merged </summary>
<details> <summary> 35 PRs were merged </summary>
Alexander Knyazev(@alex-knyazev)
serialize method (@IvanGoncharov)<details> <summary> 43 PRs were merged </summary>
<details> <summary> 12 PRs were merged </summary>
<details> <summary> 9 PRs were merged </summary>
## v15.0.0-rc.1 (2020-01-06) #### Breaking Change 💥 * #2328 Removes default values for required fields in GraphQL*Config types (@IvanGoncharov) * #233
<details> <summary> 11 PRs were merged </summary>
<details> <summary> 2 PRs were merged </summary>
## v15.0.0-alpha.2 (2019-12-29) #### Breaking Change 💥 * #2223 printSchema: don't break description lines (@IvanGoncharov) * #2233 parser: convert Loc
introspectionTypes should be array of GraphQLNamedType (@pcarrier)<details> <summary> 4 PRs were merged </summary>
<details> <summary> 25 PRs were merged </summary>
subscribe calls (@IvanGoncharov)<details> <summary> 11 PRs were merged </summary>
<details> <summary> 13 PRs were merged </summary>
## v15.0.0-alpha.1 (2019-10-14) #### Breaking Change 💥 * #1827 Update built-in scalar's parseLiteral method to throw TypeError (@danielrearden) * #208
GraphQL* types (@IvanGoncharov)<details> <summary> 15 PRs were merged </summary>
Boolean constructor (@IvanGoncharov)<details> <summary> 2 PRs were merged </summary>
<details> <summary> 4 PRs were merged </summary>
Backport #2688 Added new 'FormattedExecutionResult' type (@IvanGoncharov)
## v14.6.0 (2020-01-27) #### New Feature 🚀 * #2400 validation: Add missing rule exports (@IvanGoncharov) #### Committers: 1 * Ivan Goncharov(@IvanGonc
## v14.5.8 (2019-09-25) #### Bug Fix 🐞 * #2195 tstypes: fix typings for 'isSpecifiedDirective'/'isSpecifiedScalarType' (@IvanGoncharov) #### Committer
## v14.5.7 (2019-09-20) #### Bug Fix 🐞 * #2191 Fixes variable values of non-null type with default value (@IvanGoncharov) #### Committers: 1 * Ivan Go
## v14.5.6 (2019-09-15) #### Bug Fix 🐞 * #2169 Make onError optional in SDLValidationContext (@Cito) * #2171 tstypes: Add missing 'abstractType' argum
GraphQLTypeResolver (@IvanGoncharov)## v14.5.5 (2019-09-13) #### Bug Fix 🐞 * #2151 findDangerousChanges: sort fields inside 'defaultValue' (@IvanGoncharov) * #2162 printLocation: Remove
<details> <summary> 2 PRs were merged </summary>
## v14.5.4 (2019-08-29) #### Bug Fix 🐞 * #2131 fix: added FlowFixMe on Array.prototype.flatMap (@Michael-M-Judd) * #2134 void => undefined in Path.d.t
void => undefined in Path.d.ts (@JacksonKearl)any as BREAK type. (@JacksonKearl)toObjMap' conversion for extensions` inside directive args (@IvanGoncharov)options property optional in getVariableValues (@JacksonKearl)## v14.5.3 (2019-08-24) #### Bug Fix 🐞 * #2120 Fix relative imports inside TypeScript definitions (@JacksonKearl) #### Committers: 1 * Jackson Kearl(@
## v14.5.2 (2019-08-24) #### Bug Fix 🐞 * #2109 Sync type TS definitions with Flow (@JacksonKearl) * #2113 Sync tstypes/graphql.d.ts with flow (@Jackso
## v14.5.1 (2019-08-23) #### Bug Fix 🐞 * #2105 Sync tstypes/errors with flow (@JacksonKearl) * #2106 Sync execution TS definitions with Flow. (@Jackso
## v14.5.0 (2019-08-22) #### New Feature 🚀 * #2062 Limits errors in getVariableValues() (@IvanGoncharov) * #2074 [validation] Add "onError" option to
<details> <summary> 42 PRs were merged </summary>
getPossibleTypes & isPossibleType (@IvanGoncharov)<details> <summary> 14 PRs were merged </summary>
<details> <summary> 7 PRs were merged </summary>
## v14.4.2 (2019-07-03) #### Bug Fix 🐞 * #2009 Defensively verify that Symbol.for is available (@jaynetics) #### Polish 💅 2 PRs were merged * #2006 bu
<details> <summary> 2 PRs were merged </summary>
## v14.4.1 (2019-06-29) #### Bug Fix 🐞 * #2001 Switch some of arguments from Array to $ReadOnlyArray (@IvanGoncharov) * #2002 Mark user-provided 'vari
Array to $ReadOnlyArray (@IvanGoncharov)<details> <summary> 4 PRs were merged </summary>
## v14.4.0 (2019-06-26) #### New Feature 🚀 * #1906 Use 'Object.freeze' consistently on all exported Array/Object constants (@IvanGoncharov) * #1878 Ad
<details> <summary> 2 PRs were merged </summary>
<details> <summary> 40 PRs were merged </summary>
invariant with assertEnumType (@IvanGoncharov)<details> <summary> 19 PRs were merged </summary>
<details> <summary> 8 PRs were merged </summary>
Ivan Goncharov (@IvanGoncharov)
<details> <summary> 19 PRs were merged </summary>
<details> <summary> 15 PRs were merged </summary>
Ivan Goncharov (@IvanGoncharov)
<details> <summary> 8 PRs were merged </summary>
<details> <summary> 13 PRs were merged </summary>
## 14.2.1 (2019-03-31) #### Bug Fix 🐞 * #1808 buildClientSchema: Revert breaking change introduced in #1677 (@IvanGoncharov)
Note: Updating to this release can cause new Flow errors since it adds Flow typing for print function that was missing in previous versions.
Note: Updating to this release can cause new Flow errors since it adds Flow typing for print function that was missing in previous versions.
<details> <summary> 42 PRs were merged </summary>
<details> <summary> 17 PRs were merged </summary>
Should fix issue #1668 via #1669
Fixes:
Added assertSchema and assertDirective
New:
assertSchema and assertDirective (#1580)Fixes:
inspect (#1605)No longer presents warnings when used with node v7 and v9
Fixes:
ValidationRule flow type is now exported (#1505)(Something went wrong during release, this version has been unpublished)
(Something went wrong during release, this version has been unpublished)
Removes deprecated Introspection fields onOperation, onFragment, and onField (#1385, #1429)
Thanks to all contributors for the hard work put into this release, which complies with the latest June 2018 version of the GraphQL Spec
Breaking:
VariablesDefaultValueAllowed validation rule, and ProvidedNonNullArguments became ProvidedRequiredArguments (#1274)onOperation, onFragment, and onField (#1385, #1429)GraphQL*Config are now exact types (#1391, #1443)BreakingChangeType and DangerousChangeType for detecting adding args and input fields changed name (#1492)formatError API changed for error message extensions. To upgrade without changing existing server responses, wrap graphql's formatError:import { formatError as baseFormatError, /* ... */ } from 'graphql';
{
// other options
formatError(error) {
const { extensions, ...rest } = baseFormatError(error);
return { ...extensions, ...rest };
},
}
New:
extendSchema extended with spec-compliant SDL extensions (#1373, #1392, #1441)symbol.toStringTag support (#1297)getOperationRootType(schema, operationAST) (#1345)validateSchema works with Schema extensions (#1410)validate works on SDL definitions (#1438, #1383)experimentalVariableDefinitionDirectives flag (#1437, #1454)isDefinitionNode and isTypeSystemDefinitionNode (#1459)isRequiredArgument and isRequiredInputField predicates (#1463)Fixed:
introspectionFromSchema has default options (#1408)buildSchema memory leaks and infinite recursion fixed (#1417, #1427)watch command fixed (#1449)validation (#1471)Deprecated:
These will be removed in v15
introspectionQuery, use getIntrospectionQuery (#1386)getDescription, use the schema AST node to get descriptions (#1396)isValidJSValue, use coerceValue (#1386)isValidLiteralValue, use validation (#1386)Allows Interfaces to have no implementing Objects
Breaking change reverted:
NOTE This is a pre-release. There is a high likelihood there will be more breaking changes introduced prior to the 14.0.0 release.
NOTE
This is a pre-release. There is a high likelihood there will be more breaking changes introduced prior to the 14.0.0 release.
Breaking:
VariablesDefaultValueAllowed validation rule, and ProvidedNonNullArguments became ProvidedRequiredArguments (#1274)New:
extendSchema extended with spec-compliant SDL extensions (#1373)symbol.toStringTag support (#1297)getOperationRootType(schema, operationAST) (#1345)Fixed:
Allow buildSchema() to take options
New:
Fixes:
Publish .mjs files for module code to support native esmodules
New:
.mjs files for module code to support native esmodules (#1244)extendSchema (#1222)isValidNameError utility is now exported as a non-throwing alternative to assertValidName (#1237)ExectuableDefinitionNode Flow type is now exported (#1241)Fixes:
extendSchema now preserves (and allows extending) a list of legacy field names which would otherwise be considered invalid (#1235)Updated to latest spec for SDL for multiple interface implementations
Breaking:
To continue to support the pre-spec variation, use
parse(text, {allowLegacySDLImplementsInterfaces: true})
'graphql/language/kinds' no longer directly exports enum values #1221
Not that you were relying on internal modules, were you :)
New:
getDescription helper function is now exported (#1165)parse(text, {allowLegacySDLEmptyFields: true}) (#1171)introspectionFromSchema utility function (#1187)lexicographicSortSchema utility function (#1208) (#1220){allowedLegacyNames: ['__badName']} (#1194)Fixed:
allowedLegacyNames when using extendSchema (#1226) (added since v0.13.0-rc.1)Updated to latest spec for SDL for multiple interface implementations
Breaking:
To continue to support the pre-spec variation, use
parse(text, {allowLegacySDLImplementsInterfaces: true})
'graphql/language/kinds' no longer directly exports enum values #1221
Not that you were relying on internal modules, were you :)
New:
getDescription helper function is now exported (#1165)parse(text, {allowLegacySDLEmptyFields: true}) (#1171)introspectionFromSchema utility function (#1187)lexographicSortSchema utility function (#1208){allowedLegacyNames: ['__badName']} (#1194)Fixed:
Excluded lock files from deployed npm package
Fixes:
Properly deploy a package on npm which contains es6-modules
Fixes:
Changed visit() to return any instead of mixed to reduce the scope of the breaking change of adding Flow types for this function.
Flow Type Fixes:
experimental.const_params Flow option to ensure support for projects which do not enable this option (#1157, #1160)visit() to return any instead of mixed to reduce the scope of the breaking change of adding Flow types for this function.As a result, there are a number of breaking changes to be aware of, especially for those building tools with GraphQL.js. A huge thank you to everyone…
🎁 Happy Holidays, GraphQL.js v0.12.0 is brings some of the biggest new changes of the year 🎉
This release includes new spec-compliance to existing experimental features, dramatically improves the quality of flow types, and introduces a number of new features and improved behaviors. As a result, there are a number of breaking changes to be aware of, especially for those building tools with GraphQL.js. A huge thank you to everyone who contributes to and uses GraphQL.js.
For a complete list of everything new, see the comparison to the last release.
New and Potentially Breaking:
Schema is now validated as part of a new exported function validateSchema() instead of during construction. (#1124)
This exciting change allows the creating GraphQLSchema instances which are not yet valid, for example: representing types which don't yet have fields. This is very useful for those building schema directly from the new schema definition language. The new function validateSchema(), much like the existing validate(), will return an Array of GraphQLError describing all issues with a schema. This also now includes blame sites in the original schema definition language, allowing much more helpful error messages when a schema is invalid. This might be breaking if your codebase relied on GraphQLSchema or any of the GraphQL type definition classes
Validation errors for value literals (and variable values) are greatly improved, doing so results in a change to the standard set of validation rules. (#1126, #1133, #1144, #1153)
Code which relied on repeating the standard validation rules, or filtered them down using whitelists or blacklists may need to be updated. The rules ArgumentsOfCorrectTypeRule and DefaultValuesOfCorrectTypeRule have been removed and are replaced with two new rules ValuesOfCorrectTypeRule and VariablesDefaultValueAllowedRule. While the quality of validation errors are improved by this change, this does not actually cause any existing valid documents to become invalid or vice-versa.
GraphQL can now execute synchronously if all resolvers are synchronous functions. This means execute() may no longer return a Promise if execution completed synchronously. The graphql() function will still always return a Promise, but a new graphqlSync() function guarantees synchronous completion (or throws if any resolver does not complete). This unlocks exciting new use cases for querying over static data-sets and caches. (#1115, #1120)
Update to match Schema definition language latest specification. (#1102, #1117, #1139)
The schema definition language has some slight changes from the original experimental version through the standardization process. New extend forms were added and previously valid forms which omit fields like type Foo {} are now syntax errors and can be replaced with type Foo to indicate that fields are not yet defined.
Descriptions in the schema definition language are now represented as preceding strings rather than comments. (#927)
This change follows the latest updates to the spec proposal (https://github.com/facebook/graphql/pull/90) after a long discussion between the merits of comments vs. literals as descriptions. To ease the migration to this latest change, existing comment-descriptions can still be used by providing options to the relevant functions. To read a SDL that uses comments as descriptions, buildASTSchema(document, { commentDescriptions: true }); to write an SDL using comments as descriptions, printSchema(schema, { commentDescriptions: true }).
Allow serializing scalars as null. (#1104)
Since null is a potentially valid value for a scalar to serialize to in some rare conditions, this change ensures that scalars which serialize to null no longer produce errors. This is breaking since custom scalars which relied on returning null to indicate failure should now either return undefined or throw an Error.
Flow types for the parsed GraphQL AST and GraphQL Errors are now read only. This may result in new flow errors being detected in your codebase if you manipulate ASTs and Errors. (#1116, #1121, #1122)
New & Improved:
visit(). As with any flow type improvement, this could expose real issues with your existing codebase. (#1155)instanceof for any use of GraphQL.js (#1137)GraphQLNonNull and GraphQLList are now flow typed as covariant and operate like a function instead of a class. This means that you should no longer type new GraphQLList(someType) and instead favor GraphQLList(someType). (#1136)printError() is exported which highlights any blame lines from the original sources. Useful for printing errors to consoles. (#1129, #1131)getIntrospectionQuery() is exported, and the existing introspectionQuery constant is deprecated. This helps improve the flow types and allows for some flexibility and options. (#1113)isSpecifiedScalarType, isIntrospectionType, and isSpecifiedDirective (#924).findBreakingChanges() and findDangerousChanges()
Fixed:
visit() for leaving visitors. (#1149)GraphQLArgs flow type is now exported. (#1118)isDeprecated instead of deprecationReason in printDeprecated() (#1035)buildASTSchema(), extendSchema() and buildClientSchema(). (#903)Fix an issue where flow typed resolvers would unnecessarily need to include __proto__
Fixes:
__proto__ (#1056)Upgrades iterall dependency to v01.1.3, removing an undesired arrow function in the published package that could break build and runtime processes (ht
fix flow errors by annotating null prototypes, exposed by Flow v0.55.0
*This is the first NPM release to include the MIT license*. Read more about this change: https://medium.com/@leeb/relicensing-the-graphql-specificatio
New:
Fixes:
Fix type errors exposed by Flow version v0.54 (#1023, #1026).
Fixes:
Fix type errors exposed by Flow version v0.54 (#1023, #1026).
Fix Flow errors for people who do not have experimental.const_params=true set in their .flowconfig (#1012).
experimental.const_params=true set in their .flowconfig (#1012).Remove unintended runtime dependency on Regenerator runtime (#1007).
The subscribe() function now returns a Promise of either an AsyncIterator or ExecutionResult to better distinguish between initialization errors and p
subscribe() function now returns a Promise of either an AsyncIterator or ExecutionResult to better distinguish between initialization errors and publish errors; previously it just returned an AsyncIterator (#918).String input throws an error instead of silently coercing (#925).extendSchema() (#961).ExecutionArgs type is now exported (#988).Fix incorrect column numbers in errors introduced in #949
Inline invariant transform for faster loading of schemas
Additional detection in findBreakingChanges()
New:
findBreakingChanges() (#874)printIntrospectionSchema() utility is now exported (#905)getDirectiveValues() utility is now exported (a1f63083fb1abb7cb3d57754ae41a54c8ff4b382)Fixed:
Nothing published for this version
Spec compliance: Continued progress towards Subscription support, adding Validation rules
New:
Fixed:
execute() function, returning resolved GraphQL responses instead of rejected promises for spec-described errors. (#883)isValidValue() and isValidLiteral() added to Scalar and enum types (#861).
isValidValue() and isValidLiteral() added to Scalar and enum types (#861).graphql() may now take a Source object, in addition to the existing support for string (#866).graphql() may now take an object with named parameters (#867).Int values to Int (#837).GraphQLError stack trace includes error message (#718).It is now possible to suppress warnings about non-spec compliant names by setting the GRAPHQL_NO_NAME_WARNING environment variable. This may be useful
GRAPHQL_NO_NAME_WARNING environment variable. This may be useful when working with legacy schemas.Much improved Flow types from the experimental %checks type
New:
%checks type (#695)TypeInfo instance to validate() (#834)getVisitFn for building custom composite visitors. (#807)Fixes:
false, null, and undefined (#836)Your coding agent can read these notes before it upgrades. Set up the MCP server →