Back to Graphql Spec

September 2025 Changelog

changelogs/September2025.md

latest43.3 KB
Original Source

September 2025 Changelog

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.

Thank you, contributors!

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:

  1. 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.

  2. 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!

Contributors

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.

AuthorGithub
Alex Reilly@twof
Andreas Marek@andimarek
Ben Kraft@benjaminjkraft
Benedikt Franke@spawnia
Benjie@benjie
Benoit 'BoD' Lubek@BoD
dondonz@dondonz
dugenkui@dugenkui03
Glen@glen-84
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:

sh
node scripts/generate-contributor-list.mjs October2021..HEAD

Notable contributions

A 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.

Changeset

Listed in reverse-chronological order (latest commit on top).

HashChangeAuthors
f29fbcdgpt guided style guide improvements (#1190)Lee Byron [email protected]
0157a79Fix link format for input coercion rules (#1189)Yaacov Rydzinski [email protected]
f70abe2Recommend that order of unordered collections is maintained where possible (#1092)Benjie [email protected] Lee Byron [email protected]
11c6664condense the spec defs appendix (#1186)Lee Byron [email protected]
10331b0RFC: 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]
cd0b8bdPull copyright and license into repo-level LICENSE.md (#1172)Lee Byron [email protected]
1e29b8aSchema 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]
bc4ddeaFix CoerceArgumentValues() hasValue (#1056)Benjie [email protected]
b1a23deFix typo in merged "executable documents" PR (#1176)Benjie [email protected] Lee Byron [email protected]
9939469Minor editorial tweaks following the merge of #1039 (#1175)Benjie [email protected]
468d848editorial: 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]
fca6653Add descriptions to executable documents 2025 Update (#1170)Stephen Spalding [email protected] Ivan Goncharov [email protected] Glen [email protected] Lee Byron [email protected]
17e2a47Replace ExecuteSelectionSet with ExecuteCollectedFields (#1039)Benjie [email protected] Yaacov Rydzinski [email protected] Lee Byron [email protected]
e71805eFixed unclear wording in the validation section (#1096)PascalSenn [email protected] Benjie [email protected] Lee Byron [email protected]
ccf23e3Define Data Collections used in the spec (#1102)Benjie [email protected] Lee Byron [email protected]
ac483bdAdd validation rule that operation types exist (#955)Ben Kraft [email protected] Benjie Gillam [email protected] Shane Krueger [email protected]
883c759Do not exclude schema keyword if schema has description (#1167)Benjie [email protected]
df9f4f8Define "execution result" and "request error result" (#1159)Rob Richard [email protected] Benjie [email protected]
9d0710eAdd 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]
3b0d8e6Add 'Assert' consistency to algorithm format check (#1168)Benjie [email protected]
646f937make includeDeprecated non nullable (#1142)Martin Bonnin [email protected]
73d8b26Implementations may not deprecate a field that the interface hasn't deprecated (#1053)Benjie [email protected] Lee Byron [email protected]
1f690d4Clarify 'Values of Correct Type' rule relates to literals (#1118)Benjie [email protected]
a1884bb3.13 Directive validation edits (#1089)James Bellenger [email protected] Benjie [email protected]
c8554543.10 Input Objects - clarify lists are permitted as Input fields (#1068)Mike Solomon [email protected] Benjie [email protected]
586cbedAdd 'extensions' to request (#976)Benjie [email protected] Lee Byron [email protected]
4390617Consistently use 'response name' not 'response key' (#1147)Benjie [email protected] Lee Byron [email protected]
521ef5bRename field error to execution error; define response position (#1152)Benjie [email protected] Lee Byron [email protected]
4abd86eConsistently use result map when referring to objectTypes selection set result (#1148)Rob Richard [email protected]
0ab3d4bEnsure algorithm steps are always wrapped in braces (#1146)Benjie [email protected]
b7c57eaFix choice of language used in algorithm (#1134)Benjie [email protected]
b41339aEditorial: Add response stream to Response Section (#1135)Rob Richard [email protected]
a1c025fField merging validation: clarify pair members are distinct (#1136)Andreas Marek [email protected]
e9ac8c8Editorial: move "Path" to it's own section (#1129)Rob Richard [email protected] Benjie [email protected]
2073bc8Change '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]
c37a4a4Editorial changes for Event Streams (#1099)Lee Byron [email protected]
34730e8Make the reason argument in @deprecated non-nullable (#1040)Martin Bonnin [email protected]
df1aceaFix coercion table for list (#1057)Benjie [email protected]
7073e3aenhance(ResolveFieldValue): note that list items may be async (#1066)Yaacov Rydzinski [email protected]
e5bddd9Fix punctuation in grammar rule (#1084)Benjie [email protected]
a80f9ffConsistently spell 'implementers' (#1087)Benjie [email protected]
497e333Fix reference mistake in subscription execution (#994)Jan Melcher [email protected]
7485a34Reformat the parts of an execution request (#1090)Benjie [email protected]
8076f1echore: add clarifying note for composite and expand term (#1078)Jovi De Croock [email protected] Benjie [email protected]
b5ecff0Add definition of "selection set" and clarify serial execution examples (#1032)Benjie [email protected]
32d24f6Be strict about error paths format (#1073)Martin Bonnin [email protected] Benjie [email protected]
4ab71e3Add missing . (#1088)Benjie [email protected]
a5da8bbID must always serialize as String would (#1086)Benjie [email protected]
0ba7cdfEnforce consistent punctuation in algorithms (#1069)Benjie [email protected]
8682a86Fix 'response error' -> 'request error' (#1016)Benjie [email protected]
feac5a5Fix punctuation in some algorithms (#1067)Yaacov Rydzinski [email protected]
56d6107Fix heading level for Required Arguments validation rule (#1055)Renée [email protected]
3adfccaAdd explicit definition for BlockString (#1042)Benjie [email protected]
6b7c2c4Remove "subscriptions is a significant change" sentence (#983)Roman Ivantsov [email protected] Benjie [email protected] Roman Ivantsov [email protected]
a5cc6eaClarify that selection sets cannot be empty (#1025)Benjie [email protected]
afc0a35Add links to contributed custom scalar specs at scalars.graphql.org (#1009)dondonz [email protected] Benjie [email protected]
4e93488Fix ambiguity around when schema definition may be omitted (#987)Benjie [email protected] Lee Byron [email protected]
12b7ad7add explanation about argument name uniqueness. (#891)dugenkui [email protected] Benjie Gillam [email protected]
559063cChange 'server' to 'service' (#1005)Benjie [email protected]
cbb8354Fix broken license link (#1007)Lee Byron [email protected]
e736f78Add a style guide to the specification (#1003)Benjie [email protected]
193fba3field merging - field TYPES must not differ (#979)Roman Ivantsov [email protected] Roman Ivantsov [email protected] Benjie [email protected] Lee Byron [email protected]
3d03cabP30: 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]
342b838P34: implementing field type is either exact match or of covariant type (#974)Roman Ivantsov [email protected] Roman Ivantsov [email protected] Lee Byron [email protected]
ab865f9Provide explicit ref to Value Completion section (#982)Roman Ivantsov [email protected] Benjie Gillam [email protected] Roman Ivantsov [email protected]
edda836Changed 'must NOT BE' to 'must not be' (#980)Roman Ivantsov [email protected] Roman Ivantsov [email protected]
3aa021fseparate out IsSubType from IsValidImplementationFieldType (#977)Yaacov Rydzinski [email protected]
47a6bfdEditorial: Clarify intro for inline fragments (#969)Lee Byron [email protected]
3885a64Editorial: Error Terminology (#966)Lee Byron [email protected] Roman Ivantsov [email protected] Benjie Gillam [email protected]
9a96fc4Editorial: Clarity about subject being a GraphQL service or system (#965)Lee Byron [email protected] Roman Ivantsov [email protected]
57bd86dEditorial: Fix reference to object in interface introspection (#964)Lee Byron [email protected] Roman Ivantsov [email protected]
299ce69Editorial: Remove inaccurate statement about line terminator within tokens (#963)Lee Byron [email protected] Roman Ivantsov [email protected]
1b8fe7aLeaf field selections clarification (#958)Benjie Gillam [email protected] Roman Ivantsov [email protected] Lee Byron [email protected]
a91e158Light editorial around delivery agnostic subscriptions (#959)Benjie Gillam [email protected] Roman Ivantsov [email protected]
bb95060Move punctuation outside quotation marks (#962)Benedikt Franke [email protected]
4de8782Clarify query shorthand relationship with directives (#873)Benjie Gillam [email protected] Lee Byron [email protected]
94f73f4Allow 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]
6b69577use findDog query from example schema only after defining it (#927)Thomas Heyenbrock [email protected]
7dd73e7Define request, note it is transport independent (#949)Benjie Gillam [email protected]
84ec339RFC: Allow full unicode range (#849)Lee Byron [email protected] Andreas Marek [email protected]
00b88f0Fix formattingLee Byron [email protected]
a61e35dconsistent indentation and punctuation (#925)Thomas Heyenbrock [email protected]
266fccaRename VariableDefinitions to VariablesDefinition (#916)Ivan Maximov [email protected]
7908822Format the spec with prettier (#727)Benjie Gillam [email protected]
c18590cFix typo in Type System section (#905)Benoit Lubek [email protected]
60323c9fix typo (#896)Alex Reilly [email protected]
357bb72Start next working draftLee Byron [email protected]

Generated with:

sh
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

Diff

Github: diff from last spec cut