This describes the set of changes since the last edition of the GraphQL specification, October2021 (see prior changelog). It's intended to ease the review of changes since the last edition for reviewers or curious readers, but is not normative. Please read the specification document itself for full detail and context.
The last few years have seen GraphQL reach a wide breath of use, powering internal and external APIs at startups and enterprises, and integrating with various platforms and tools. Work contributed to GraphQL has fit into two priorities:
-
Maintain a stable base. With a huge ecosystem built atop GraphQL, it's our responsibility to put stability above all else. The vast majority of work has fixed inconsistencies, improved behavior in edge and corner cases, improve security, and avoid performance pitfalls.
-
Provide a productive expressive query language. GraphQL was designed with API consumers in mind, and this spec release includes significant improvements to the GraphQL query engine and language.
Significant contributions have been made since the last edition of the spec, and both of these priories remain active areas of investment with many exciting RFCs still in the works.
Over 100 commits made to the GraphQL spec since the last edition, most of which have dozens or hundreds of comments! It's a huge amount of work to champion these changes, and a great responsibility to evolve the technical foundations for this community and ecosystem.
Thank you!
- @leebyron, Editor
Anyone is welcome to join working group meetings and contribute to GraphQL. See Contributing.md for more information. Thank you to these community members for their technical contribution to this edition of the GraphQL specification.
| Author | Github |
|---|---|
| Alex Reilly | @twof |
| Andreas Marek | @andimarek |
| Ben Kraft | @benjaminjkraft |
| Benedikt Franke | @spawnia |
| Benjie | @benjie |
| Benoit 'BoD' Lubek | @BoD |
| dondonz | @dondonz |
| dugenkui | @dugenkui03 |
| Glen | @tempire |
| Ivan Goncharov | @IvanGoncharov |
| Ivan Maximov | @sungam3r |
| James Bellenger | @jbellenger |
| Jan Melcher | @Yogu |
| Jason Dent | @Jason3S |
| Jeff Auriemma | @bignimbus |
| Jovi De Croock | @JoviDeCroock |
| Kevin Smithson | @smitt04 |
| Lee Byron | @leebyron |
| Mark Larah | @magicmark |
| Martin Bonnin | @martinbonnin |
| Michael Staib | @michaelstaib |
| Mike Solomon | @msolomon |
| PascalSenn | @PascalSenn |
| Renée | @goto-bus-stop |
| Rob Richard | @robrichard |
| Roman Ivantsov | @rivantsov |
| Shane Krueger | @Shane32 |
| Stephen Spalding | @fotoetienne |
| Thomas Heyenbrock | @thomasheyenbrock |
| Yaacov Rydzinski | @yaacovCR |
Generated with:
node scripts/generate-contributor-list.mjs October2021..HEADA few notable changes in this edition:
- OneOf input objects, aka "input unions" (#825)
- Schema coordinates as a standard for GraphQL tooling and reporting (#794)
- Descriptions on documents, in motivation for AI-consumers (#1170)
- Broader support for deprecation across a GraphQL Schema (#805 #1040 #1053 #1142)
- GraphQL language has been updated to support the full Unicode range (#849)
- Countless editorial improvements! The spec is much easier to read and contribute to, with fewer ambiguities.
- Github: all Accepted RFC PRs merged since last spec cut
- Github: all Editorial PRs merged since last spec cut
- Github: all changes since last spec cut
Listed in reverse-chronological order (latest commit on top).
| Hash | Change | Authors |
|---|---|---|
| f29fbcd | gpt guided style guide improvements (#1190) | Lee Byron [email protected] |
| 0157a79 | Fix link format for input coercion rules (#1189) | Yaacov Rydzinski [email protected] |
| f70abe2 | Recommend that order of unordered collections is maintained where possible (#1092) | Benjie [email protected] Lee Byron [email protected] |
| 11c6664 | condense the spec defs appendix (#1186) | Lee Byron [email protected] |
| 10331b0 | RFC: OneOf Input Objects (#825) | Benjie [email protected] Michael Staib [email protected] Shane Krueger [email protected] Yaacov Rydzinski [email protected] Glen [email protected] Lee Byron [email protected] |
| cd0b8bd | Pull copyright and license into repo-level LICENSE.md (#1172) | Lee Byron [email protected] |
| 1e29b8a | Schema Coordinates (#794) | Mark Larah [email protected] Benjie Gillam [email protected] Lee Byron [email protected] Lee Byron [email protected] Martin Bonnin [email protected] Benoit 'BoD' Lubek [email protected] |
| bc4ddea | Fix CoerceArgumentValues() hasValue (#1056) | Benjie [email protected] |
| b1a23de | Fix typo in merged "executable documents" PR (#1176) | Benjie [email protected] Lee Byron [email protected] |
| 9939469 | Minor editorial tweaks following the merge of #1039 (#1175) | Benjie [email protected] |
| 468d848 | editorial: move normative clause above example in descriptions (#1173) | Lee Byron [email protected] |
| 7eb8983 | [RFC] Default value coercion rules (#793) | Benjie [email protected] Lee Byron [email protected] |
| fca6653 | Add descriptions to executable documents 2025 Update (#1170) | Stephen Spalding [email protected] Ivan Goncharov [email protected] Glen [email protected] Lee Byron [email protected] |
| 17e2a47 | Replace ExecuteSelectionSet with ExecuteCollectedFields (#1039) |
Benjie [email protected] Yaacov Rydzinski [email protected] Lee Byron [email protected] |
| e71805e | Fixed unclear wording in the validation section (#1096) | PascalSenn [email protected] Benjie [email protected] Lee Byron [email protected] |
| ccf23e3 | Define Data Collections used in the spec (#1102) | Benjie [email protected] Lee Byron [email protected] |
| ac483bd | Add validation rule that operation types exist (#955) | Ben Kraft [email protected] Benjie Gillam [email protected] Shane Krueger [email protected] |
| 883c759 | Do not exclude schema keyword if schema has description (#1167) | Benjie [email protected] |
| df9f4f8 | Define "execution result" and "request error result" (#1159) | Rob Richard [email protected] Benjie [email protected] |
| 9d0710e | Add Appendix C - Specified Type System Definitions (#1037) | Martin Bonnin [email protected] Benjie [email protected] Lee Byron [email protected] |
| a44d4ec | [RFC] Prevent @skip and @include on root subscription selection set (#860) | Benjie [email protected] |
| 3b0d8e6 | Add 'Assert' consistency to algorithm format check (#1168) | Benjie [email protected] |
| 646f937 | make includeDeprecated non nullable (#1142) |
Martin Bonnin [email protected] |
| 73d8b26 | Implementations may not deprecate a field that the interface hasn't deprecated (#1053) | Benjie [email protected] Lee Byron [email protected] |
| 1f690d4 | Clarify 'Values of Correct Type' rule relates to literals (#1118) | Benjie [email protected] |
| a1884bb | 3.13 Directive validation edits (#1089) | James Bellenger [email protected] Benjie [email protected] |
| c855454 | 3.10 Input Objects - clarify lists are permitted as Input fields (#1068) | Mike Solomon [email protected] Benjie [email protected] |
| 586cbed | Add 'extensions' to request (#976) | Benjie [email protected] Lee Byron [email protected] |
| 4390617 | Consistently use 'response name' not 'response key' (#1147) | Benjie [email protected] Lee Byron [email protected] |
| 521ef5b | Rename field error to execution error; define response position (#1152) | Benjie [email protected] Lee Byron [email protected] |
| 4abd86e | Consistently use result map when referring to objectTypes selection set result (#1148) | Rob Richard [email protected] |
| 0ab3d4b | Ensure algorithm steps are always wrapped in braces (#1146) | Benjie [email protected] |
| b7c57ea | Fix choice of language used in algorithm (#1134) | Benjie [email protected] |
| b41339a | Editorial: Add response stream to Response Section (#1135) | Rob Richard [email protected] |
| a1c025f | Field merging validation: clarify pair members are distinct (#1136) | Andreas Marek [email protected] |
| e9ac8c8 | Editorial: move "Path" to it's own section (#1129) | Rob Richard [email protected] Benjie [email protected] |
| 2073bc8 | Change 'original' to 'previous' to clarify multiple extensions (#1123) | Benjie [email protected] |
| 5bf400e | "data" and "errors" appear in the "response", not the "result" (#1130) | Benjie [email protected] |
| c37a4a4 | Editorial changes for Event Streams (#1099) | Lee Byron [email protected] |
| 34730e8 | Make the reason argument in @deprecated non-nullable (#1040) |
Martin Bonnin [email protected] |
| df1acea | Fix coercion table for list (#1057) | Benjie [email protected] |
| 7073e3a | enhance(ResolveFieldValue): note that list items may be async (#1066) | Yaacov Rydzinski [email protected] |
| e5bddd9 | Fix punctuation in grammar rule (#1084) | Benjie [email protected] |
| a80f9ff | Consistently spell 'implementers' (#1087) | Benjie [email protected] |
| 497e333 | Fix reference mistake in subscription execution (#994) | Jan Melcher [email protected] |
| 7485a34 | Reformat the parts of an execution request (#1090) | Benjie [email protected] |
| 8076f1e | chore: add clarifying note for composite and expand term (#1078) | Jovi De Croock [email protected] Benjie [email protected] |
| b5ecff0 | Add definition of "selection set" and clarify serial execution examples (#1032) | Benjie [email protected] |
| 32d24f6 | Be strict about error paths format (#1073) | Martin Bonnin [email protected] Benjie [email protected] |
| 4ab71e3 | Add missing . (#1088) | Benjie [email protected] |
| a5da8bb | ID must always serialize as String would (#1086) | Benjie [email protected] |
| 0ba7cdf | Enforce consistent punctuation in algorithms (#1069) | Benjie [email protected] |
| 8682a86 | Fix 'response error' -> 'request error' (#1016) | Benjie [email protected] |
| feac5a5 | Fix punctuation in some algorithms (#1067) | Yaacov Rydzinski [email protected] |
| 56d6107 | Fix heading level for Required Arguments validation rule (#1055) | Renée [email protected] |
| 3adfcca | Add explicit definition for BlockString (#1042) | Benjie [email protected] |
| 6b7c2c4 | Remove "subscriptions is a significant change" sentence (#983) | Roman Ivantsov [email protected] Benjie [email protected] Roman Ivantsov [email protected] |
| a5cc6ea | Clarify that selection sets cannot be empty (#1025) | Benjie [email protected] |
| afc0a35 | Add links to contributed custom scalar specs at scalars.graphql.org (#1009) | dondonz [email protected] Benjie [email protected] |
| 4e93488 | Fix ambiguity around when schema definition may be omitted (#987) | Benjie [email protected] Lee Byron [email protected] |
| 12b7ad7 | add explanation about argument name uniqueness. (#891) | dugenkui [email protected] Benjie Gillam [email protected] |
| 559063c | Change 'server' to 'service' (#1005) | Benjie [email protected] |
| cbb8354 | Fix broken license link (#1007) | Lee Byron [email protected] |
| e736f78 | Add a style guide to the specification (#1003) | Benjie [email protected] |
| 193fba3 | field merging - field TYPES must not differ (#979) | Roman Ivantsov [email protected] Roman Ivantsov [email protected] Benjie [email protected] Lee Byron [email protected] |
| 3d03cab | P30: Fixed the explanatory text for algorithm checking uniqueness of non-repeatable directives (#975) | Roman Ivantsov [email protected] Roman Ivantsov [email protected] Lee Byron [email protected] |
| 342b838 | P34: implementing field type is either exact match or of covariant type (#974) | Roman Ivantsov [email protected] Roman Ivantsov [email protected] Lee Byron [email protected] |
| ab865f9 | Provide explicit ref to Value Completion section (#982) | Roman Ivantsov [email protected] Benjie Gillam [email protected] Roman Ivantsov [email protected] |
| edda836 | Changed 'must NOT BE' to 'must not be' (#980) | Roman Ivantsov [email protected] Roman Ivantsov [email protected] |
| 3aa021f | separate out IsSubType from IsValidImplementationFieldType (#977) | Yaacov Rydzinski [email protected] |
| 47a6bfd | Editorial: Clarify intro for inline fragments (#969) | Lee Byron [email protected] |
| 3885a64 | Editorial: Error Terminology (#966) | Lee Byron [email protected] Roman Ivantsov [email protected] Benjie Gillam [email protected] |
| 9a96fc4 | Editorial: Clarity about subject being a GraphQL service or system (#965) | Lee Byron [email protected] Roman Ivantsov [email protected] |
| 57bd86d | Editorial: Fix reference to object in interface introspection (#964) | Lee Byron [email protected] Roman Ivantsov [email protected] |
| 299ce69 | Editorial: Remove inaccurate statement about line terminator within tokens (#963) | Lee Byron [email protected] Roman Ivantsov [email protected] |
| 1b8fe7a | Leaf field selections clarification (#958) | Benjie Gillam [email protected] Roman Ivantsov [email protected] Lee Byron [email protected] |
| a91e158 | Light editorial around delivery agnostic subscriptions (#959) | Benjie Gillam [email protected] Roman Ivantsov [email protected] |
| bb95060 | Move punctuation outside quotation marks (#962) | Benedikt Franke [email protected] |
| 4de8782 | Clarify query shorthand relationship with directives (#873) | Benjie Gillam [email protected] Lee Byron [email protected] |
| 94f73f4 | Allow deprecation of input values (field args, directive args, input fields) (#805) | Ivan Goncharov [email protected] Kevin Smithson [email protected] Lee Byron [email protected] Ivan Maximov [email protected] Stephen Spalding [email protected] |
| 6b69577 | use findDog query from example schema only after defining it (#927) |
Thomas Heyenbrock [email protected] |
| 7dd73e7 | Define request, note it is transport independent (#949) | Benjie Gillam [email protected] |
| 84ec339 | RFC: Allow full unicode range (#849) | Lee Byron [email protected] Andreas Marek [email protected] |
| 00b88f0 | Fix formatting | Lee Byron [email protected] |
| a61e35d | consistent indentation and punctuation (#925) | Thomas Heyenbrock [email protected] |
| 266fcca | Rename VariableDefinitions to VariablesDefinition (#916) | Ivan Maximov [email protected] |
| 7908822 | Format the spec with prettier (#727) | Benjie Gillam [email protected] |
| c18590c | Fix typo in Type System section (#905) | Benoit Lubek [email protected] |
| 60323c9 | fix typo (#896) | Alex Reilly [email protected] |
| 357bb72 | Start next working draft | Lee Byron [email protected] |
Generated with:
git log October2021..f29fbcd2ab5af763fce7ad62896eb62465a669b3 --format="| [%h](https://github.com/graphql/graphql-spec/commit/%H) | %s | %an <%ae> %(trailers:key=Co-authored-by,valueonly,separator=%x20)" -- spec