The JavaScript reference implementation for GraphQL.
Branches
Release activity
| Jun | Jul | Aug | Sep | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Sunday | No releases on May 31, 2026 | No releases on Jun 7, 2026 | No releases on Jun 14, 2026 | No releases on Jun 21, 2026 | No releases on Jun 28, 2026 | No releases on Jul 5, 2026 | No releases on Jul 12, 2026 | No releases on Jul 19, 2026 | No releases on Jul 26, 2026 | No releases on Aug 2, 2026 | No releases on Aug 9, 2026 | No releases on Aug 16, 2026 | No releases on Aug 23, 2026 | No releases on Aug 30, 2026 | No releases on Sep 6, 2026 | No releases on Sep 13, 2026 |
| Monday | 2 releases on Jun 1, 2026 | No releases on Jun 8, 2026 | 1 release on Jun 15, 2026 | No releases on Jun 22, 2026 | No releases on Jun 29, 2026 | No releases on Jul 6, 2026 | No releases on Jul 13, 2026 | No releases on Jul 20, 2026 | No releases on Jul 27, 2026 | No releases on Aug 3, 2026 | No releases on Aug 10, 2026 | No releases on Aug 17, 2026 | No releases on Aug 24, 2026 | No releases on Aug 31, 2026 | No releases on Sep 7, 2026 | No releases on Sep 14, 2026 |
| Tuesday | 1 release on Jun 2, 2026 | 1 release on Jun 9, 2026 | 1 release on Jun 16, 2026 | No releases on Jun 23, 2026 | No releases on Jun 30, 2026 | No releases on Jul 7, 2026 | No releases on Jul 14, 2026 | No releases on Jul 21, 2026 | No releases on Jul 28, 2026 | No releases on Aug 4, 2026 | No releases on Aug 11, 2026 | No releases on Aug 18, 2026 | No releases on Aug 25, 2026 | No releases on Sep 1, 2026 | No releases on Sep 8, 2026 | |
| Wednesday | No releases on Jun 3, 2026 | No releases on Jun 10, 2026 | No releases on Jun 17, 2026 | No releases on Jun 24, 2026 | No releases on Jul 1, 2026 | No releases on Jul 8, 2026 | No releases on Jul 15, 2026 | No releases on Jul 22, 2026 | No releases on Jul 29, 2026 | No releases on Aug 5, 2026 | No releases on Aug 12, 2026 | No releases on Aug 19, 2026 | No releases on Aug 26, 2026 | No releases on Sep 2, 2026 | No releases on Sep 9, 2026 | |
| Thursday | No releases on Jun 4, 2026 | No releases on Jun 11, 2026 | No releases on Jun 18, 2026 | No releases on Jun 25, 2026 | No releases on Jul 2, 2026 | No releases on Jul 9, 2026 | No releases on Jul 16, 2026 | No releases on Jul 23, 2026 | No releases on Jul 30, 2026 | No releases on Aug 6, 2026 | No releases on Aug 13, 2026 | No releases on Aug 20, 2026 | No releases on Aug 27, 2026 | No releases on Sep 3, 2026 | No releases on Sep 10, 2026 | |
| Friday | No releases on Jun 5, 2026 | No releases on Jun 12, 2026 | No releases on Jun 19, 2026 | No releases on Jun 26, 2026 | 1 release on Jul 3, 2026 | No releases on Jul 10, 2026 | No releases on Jul 17, 2026 | No releases on Jul 24, 2026 | No releases on Jul 31, 2026 | No releases on Aug 7, 2026 | No releases on Aug 14, 2026 | No releases on Aug 21, 2026 | 1 release on Aug 28, 2026 | No releases on Sep 4, 2026 | No releases on Sep 11, 2026 | |
| Saturday | No releases on Jun 6, 2026 | No releases on Jun 13, 2026 | No releases on Jun 20, 2026 | No releases on Jun 27, 2026 | No releases on Jul 4, 2026 | No releases on Jul 11, 2026 | No releases on Jul 18, 2026 | No releases on Jul 25, 2026 | No releases on Aug 1, 2026 | No releases on Aug 8, 2026 | No releases on Aug 15, 2026 | No releases on Aug 22, 2026 | No releases on Aug 29, 2026 | No releases on Sep 5, 2026 | No releases on Sep 12, 2026 |
11 releases since May 6, 2026, busiest day 2
Changelog
Fixed 2
- Detect default-value changes on input object fields
- Fix context for schema argument mapper in mapSchemaConfig
From GraphQL.js
Fixed 1
- emit asyncStart after promise settlement to match native tracePromise in diagnostics
From GraphQL.js
Added 1
- Graduate directives on directives
Fixed 4
- Raise request error on invalid fragment variables
- Apply directives when SDL contains type definitions and extensions with directives
- Fix OneOf inhabitability
- Fix KnownDirectivesRule locations for input field arguments in extensions
From GraphQL.js
v17.0.0 (2026-06-15)
New Feature 🚀
Bug Fix 🐞
- #4799 fix: raise request error on invalid fragment variables (@yaacovCR)
- #4800 fix: apply directives when SDL contains type definitions and extensions with directives (@yaacovCR)
- #4564 OneOf Inhabitability (@jbellenger)
- #4814 fix(KnownDirectivesRule): locations for input field arguments in extensions (@yaacovCR)
- #4726 feat(validation): reject directive definition cycles (@yaacovCR)
- #4815 Revert "feat(validation): reject directive definition cycles (#4726)" (@yaacovCR)
Docs 📝
- #4790 docs: minor diagnostics doc comment improvements (@yaacovCR)
- #4791 fix: docs: polish diagnostics comments further (@yaacovCR)
- #4793 docs: further improve general execution and tracing docs (@yaacovCR)
- #4802 docs: correct extension field comments - v17 (@yaacovCR)
- #4805 docs: publish fixed extensions comments (@yaacovCR)
- #4807 docs: add prettier for jsdoc examples (@yaacovCR)
- #4435 Subscriptions docs suggestions (@Urigo)
- #4811 docs: fix a few indentations inside string literals (@yaacovCR)
- #4813 internal: docs update (@yaacovCR)
- #4820 docs: document
@experimental_disableErrorPropagation(@yaacovCR) - #4817 docs: post 17.rc-0 update (@yaacovCR)
Polish 💅
- #4809 internal: use prettier for non-generated website files (@yaacovCR)
- #4812 polish: fix stream test cases (@yaacovCR)
Internal 🏠
- #4795 chore: move website publishing from 16.x.x to 17.x.x (@yaacovCR)
- #4796 internal: fix broken npm/deno deployments (@yaacovCR)
- #4797 ci: update GitHub Actions versions (@yaacovCR)
- #4806 internal: update frontmatter (@yaacovCR)
- #4808 intenral: fix ci badge (@yaacovCR)
- #4810 internal: add prettier:examples to lint-staged (@yaacovCR)
Committers: 3
- James Bellenger(@jbellenger)
- Uri Goldshtein(@Urigo)
- Yaacov Rydzinski (@yaacovCR)
v16.14.2 (2026-06-09)
Docs 📝
- #4782 docs: update API (@yaacovCR)
- #4783 docs: website review (@yaacovCR)
- #4788 docs: add Node.js tracing channels guide (@logaretm)
- #4789 docs: overhaul index and update/add additional migration guides (@yaacovCR)
- #4792 docs: remove extra asterisks from single line jsdoc comments (@yaacovCR)
- #4794 docs: refresh website with broader execution/tracing update (@yaacovCR)
- #4801 docs: correct extension field comments - v16 (@yaacovCR)
Polish 💅
Committers: 2
v17.0.0-rc.0
Pre-releaseAdded 1
- Implement tracing channels
Fixed 3
- DeferStreamDirectiveOnRootField forbids fragments on abstract types
- DeferStreamDirectiveOnValidOperations fragment tracking
- Do not copy over stack from error cause
From GraphQL.js
v17.0.0-rc.0 (2026-06-02)
New Feature 🚀
Bug Fix 🐞
- #4761 fix: DeferStreamDirectiveOnRootField forbids fragments on abstract types (@robrichard)
- #4762 fix: DeferStreamDirectiveOnValidOperations fragment tracking (@robrichard)
- #4784 fix: do not copy over stack from error cause (@Malien)
Docs 📝
Committers: 4
- Abdelrahman Awad(@logaretm)
- Rob Richard(@robrichard)
- Yaacov Rydzinski (@yaacovCR)
- Yaroslav Petryk(@Malien)
v16.14.1 (2026-06-02)
Docs 📝
- #4737 docs: refresh upgrade guide and v17 topics (@yaacovCR)
- #4741 docs: add v16 API docs lint coverage (@yaacovCR)
- #4748 docs: update banner (@yaacovCR)
- #4750 docs: use api docs generated from inline jsdoc comments (@yaacovCR)
- #4754 docs: update website caniuse-lite data (@yaacovCR)
- #4755 docs: hide internal type member __validationErrors (@yaacovCR)
- #4757 docs: fix inline examples, deprecation descriptions, type category (@yaacovCR)
- #4759 docs: fix static export redirect config (@yaacovCR)
- #4767 docs: fix Post_body example variable (@fallintoplace)
Polish 💅
Internal 🏠
Committers: 2
- Minh Vu(@fallintoplace)
- Yaacov Rydzinski (@yaacovCR)
v17.0.0-beta.2
Pre-releaseAdded 6
- Adopt Error.cause in favor of originalError
- Export VariableValues
- Export ValidationOptions
- Export SchemaChange
- Export defer and stream validation rules
- Export legacy incremental execution functions and helpers
Changed 2
- Discriminate between GraphQLNonNull and GraphQLList
- Extract ExecutionArgs types to separate file
Fixed 3
- Development declaration stubs
- FragmentVariableValueSource.value can be non-constant
- Remove unnecessary native promise coercion
Removed 1
- Strip private discriminator from package types
From GraphQL.js
v17.0.0-beta.2 (2026-06-02)
Breaking Change 💥
- #4751 build: strip private discriminator from package types (@yaacovCR)
- #4752 fix: discriminate between GraphQLNonNull and GraphQLList (@yaacovCR)
- #4770 refactor: extract ExecutionArgs types to separate file (@yaacovCR)
New Feature 🚀
Bug Fix 🐞
- #4739 chore(tests): add test for directive extensions without flag enabled (#4738) (@yaacovCR)
- #4743 api: export VariableValues (@yaacovCR)
- #4744 api: export ValidationOptions (@yaacovCR)
- #4745 api: export SchemaChange (@yaacovCR)
- #4746 api: export defer and stream validation rules (@yaacovCR)
- #4747 api: export legacy incremental execution functions and helpers (@yaacovCR)
- #4753 fix(build): development declaration stubs (@yaacovCR)
- #4773 fix: FragmentVariableValueSource.value can be non-constant (@yaacovCR)
- #4775 fix: remove unnecessary native promise coercion (@yaacovCR)
Docs 📝
- #4742 docs: add v17 API docs lint coverage (@yaacovCR)
- #4756 docs: hide private internals
schema.__validationErrorsandinputValue._memoizedCoercedDefaultValue(@yaacovCR) - #4758 docs: fix inline examples, deprecation descriptions, type category (@yaacovCR)
Polish 💅
Internal 🏠
- #4771 internal: drop node 20 integration tests (@yaacovCR)
- #4772 internal: add deno 2.8.x to CI (@yaacovCR)
- #4777 fix: preserve generated version documentation (@yaacovCR)
Committers: 2
v17.0.0-beta.1
Pre-releaseAdded 1
- Support Node v26
Changed 2
- Replace perEventExecutor with mapSourceToResponseEvent in subscribe
- Extract buildResolveInfo helper in execution
Fixed 2
- Forward-port directives on directive definitions
- Forward-port configuration of the ofType introspection depth
Removed 1
- Drop Node 20 support
From GraphQL.js
v17.0.0-beta.1 (2026-05-10)
Breaking Change 💥
- #4729 subscribe: replace perEventExecutor with mapSourceToResponseEvent (@yaacovCR)
- #4730 chore(engines): drop Node 20 support (@yaacovCR)
- #4731 refactor(execution): extract buildResolveInfo helper (@yaacovCR)
New Feature 🚀
Bug Fix 🐞
- #4725 chore: forward-port directives on directive definitions (#4521) (@yaacovCR)
- #4727 chore: forward-port configuration of the
ofTypeintrospection depth (#4317) (@yaacovCR)
Polish 💅
Internal 🏠
- #4460 internal: use node experimental-strip-types instead of ts-node (@yaacovCR)
- #4732 internal: use node test instead of mocha + c8 (@yaacovCR)
- #4734 internal: add comment re: rewriteRelativeImportExtensions (@yaacovCR)
Committers: 1
- Yaacov Rydzinski (@yaacovCR)
v17.0.0-beta.0
Pre-releaseAdded 4
- Expose asyncWorkFinished execution hook
- Expose partial result on abort errors
- Export validateExecutionArgs helper
- Add ValidatedSubscriptionArgs and validateSubscriptionArgs
Changed 2
- Demote createSourceEventStream to helper taking ValidatedExecutionArgs
- Rename executeQueryOrMutationOrSubscriptionEvent to executeRootSelectionSet
Fixed 13
- Treat undefined as absent with respect to variables
- Ignore undefined-valued unknown fields in input objects
- Replace stopped promise with onStop handlers
- Close stream iterator only on abnormal stop
- Await async incremental cleanup
- Do not close unnecessarily in withConcurrentAbruptClose
- Handle rejection when cancelling already-aborted promise
- Handle list promise rejections in execute
- Handle defaultTypeResolver promise rejections
- Finish executors before publishing responses
- Prevent bubbling sync errors from becoming async
- Let aborted async paths reach finish
- Convert all promise-like results to promises in execution
Removed 1
- Use Object.create(null) over {} to avoid prototype issues
From GraphQL.js
v17.0.0-beta.0 (2026-05-07)
Breaking Change 💥
- #4634 Use Object.create(null) over {} to avoid prototype issues (@benjie)
- #4700 Demote createSourceEventStream to helper taking ValidatedExecutionArgs (@yaacovCR)
- #4703 rename executeQueryOrMutationOrSubscriptionEvent to executeRootSelectionSet (@yaacovCR)
- #4708 fix(variables): treat undefined as absent with respect to variables (@yaacovCR)
- #4710 fix: ignore undefined-valued unknown fields in input objects (@yaacovCR)
New Feature 🚀
- #4658 feat(execution): expose asyncWorkFinished execution hook (@yaacovCR)
- #4674 feat(execution): expose partial result on abort errors (@yaacovCR)
- #4701 export validateExecutionArgs helper (@yaacovCR)
- #4702 feat: add ValidatedSubscriptionArgs and validateSubscriptionArgs (@yaacovCR)
Bug Fix 🐞
- #4637 refactor(queue): replace stopped promise with onStop handlers (@yaacovCR)
- #4641 refactor(incremental): close stream iterator only on abnormal stop (@yaacovCR)
- #4642 fix(incremental): await async incremental cleanup (@yaacovCR)
- #4644 fix(withConcurrentAbruptClose): do not close unnecessarily (@yaacovCR)
- #4645 fix(cancellablePromise): handle rejection when cancelling already-aborted promise (@yaacovCR)
- #4643 fix(execute): handle list promise rejections (@yaacovCR)
- #4646 fix(execute): handle defaultTypeResolver promise rejections (@yaacovCR)
- #4648 refactor(executor): separate finish/abort orchestration (@yaacovCR)
- #4655 fix(execution): finish executors before publishing responses (@yaacovCR)
- #4661 fix: bubbling sync errors need not become async (@yaacovCR)
- #4663 fix(executor): let aborted async paths reach finish (@yaacovCR)
- #4657 refactor(execution): track pending work (@yaacovCR)
- #4664 fix(perf): hoist error creation (@yaacovCR)
- #4665 execution: reduce parent executor retention in incremental callbacks (@yaacovCR)
- #4671 fix(valueFromAST): forward port #4652 (@yaacovCR)
- #4672 fix(execution): convert all promise-like results to promises (@yaacovCR)
- #4518 Fix TypeInfo.getInputType() for custom scalar list literals. (@yuchenshi)
- #4692 fix incremental label null validation (@jbellenger)
- #4711 fix(coerceInputLiteral): null variable input object fields should override defaults (@yaacovCR)
- #4712 fix: name fragment variables as such in execution errors (@yaacovCR)
- #4714 fix: enhance runtime invalid default value error messages (@yaacovCR)
- #4715 unify OneOf non-null and count error messages (@yaacovCR)
- #4716 fix(OneOf): fail coercion when two fields are provided "pre-coercion-only" (@yaacovCR)
- #4717 fix(valueFromAST): reject unknown input object fields (@yaacovCR)
- #4718 fix(OneOf): count only known fields for one-of validation (@yaacovCR)
- #4719 fix(OneOf): fail coercion for OneOf is the single field is invalidly provided by a default (@yaacovCR)
Polish 💅
- #4635 polish: remove a few superfluous awaits (@yaacovCR)
- #4636 allow forwarding of cancellation reasons within computations/queues (@yaacovCR)
- #4638 test(queue): cover async onStop cleanup (@yaacovCR)
- #4639 refactor(computation): rename cancel to abort (@yaacovCR)
- #4640 refactor(workqueue): propagate async computation abort cleanup (@yaacovCR)
- #4647 refactor(executor): rename finished state to aborted (@yaacovCR)
- #4649 refactor(cancellablePromise): extract withCancellation (@yaacovCR)
- #4650 refactor(executor): replace internal abort signal with lightweight version (@yaacovCR)
- #4656 refactor(execution): introduce shared execution context (@yaacovCR)
- #4653 fix: avoid prototype-colliding names in execution values (@abishekgiri)
- #4673 refactor(execution): separate response construction from finish checks (@yaacovCR)
- #4675 polish(execution): remove obsolete abort async checks (@yaacovCR)
- #4686 refactor(benchmark): extract shared mean stats helper (@yaacovCR)
- #4687 polish(benchmark): handle theoretical stats errors (@yaacovCR)
- #4693 polish: add expectToThrow test helper (@yaacovCR)
- #4694 polish: add expectPromise.toReject helper (@yaacovCR)
- #4695 polish: clean up stream tests (@yaacovCR)
- #4696 polish: introduce spy test helper (@yaacovCR)
- #4704 refactor: add executionMode/serially argument to executeRootSelectionSet (@yaacovCR)
Internal 🏠
- #4676 chore(deps): upgrade to ts v6 (@yaacovCR)
- #4677 internal: refactor benchmark runner structure (@yaacovCR)
- #4678 internal: run benchmarks through worker files (@yaacovCR)
- #4679 internal: read benchmark names through dedicated worker (@yaacovCR)
- #4680 internal: separate benchmark timing and memory sampling (@yaacovCR)
- #4681 fix(benchmark): use node flags only for memory sampling (@yaacovCR)
- #4682 internal: use mitata for benchmark timing (@yaacovCR)
- #4683 refactor(benchmark): integrate run + sampling files (@yaacovCR)
- #4684 benchmark: perform timing tests in rounds to reduce variance (@yaacovCR)
- #4685 benchmark: stop timing after stable pairwise comparisons (@yaacovCR)
- #4688 benchmark: cache revision archives (@yaacovCR)
- #4689 benchmark: report paired benchmark comparisons (@yaacovCR)
- #4690 benchmark: add async object field benchmark (@yaacovCR)
- #4697 internal: add runtime option to benchmark (@yaacovCR)
- #4713 benchmark: add benchmark for schema validation (@yaacovCR)
- #4722 internal: npm release:prepare should set publishTag (@yaacovCR)
- #4723 fix(changelog): ignore open associated PRs (@yaacovCR)
Committers: 5
- Abishek Kumar Giri(@abishekgiri)
- Benjie(@benjie)
- James Bellenger(@jbellenger)
- Yaacov Rydzinski (@yaacovCR)
- Yuchen Shi(@yuchenshi)
Added 2
- Allow configuration of the ofType introspection depth
- Add experimental support for directives on directive definitions
Fixed 1
- Fix valueFromAST variable own-property checks
From GraphQL.js
v16.14.0 (2026-05-03)
New Feature 🚀
- #4317 Allow configuration of the
ofTypeintrospection depth (@Nols1000) - #4521 Add experimental support for directives on directive definitions (@BoD)
Bug Fix 🐞
- #4652 Fix valueFromAST variable own-property checks (@abishekgiri)
Docs 📝
Committers: 4
- Abishek Kumar Giri(@abishekgiri)
- Benjie(@benjie)
- Benoit 'BoD' Lubek(@BoD)
- Nils-Börge Margotti(@Nols1000)
More in Frameworks & Libraries
View allReact
The library for web and native user interfaces.
Meta
Vue
The progressive JavaScript framework for building user interfaces.
Vue.js
Vue 2
The Vue 2 line, in long-term maintenance since its end of life in December 2023.
Vue.js
bootstrap
The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web.
twbs
react-native
react-native release notes.
Meta
D3
Bring data to life with SVG, Canvas and HTML.
Observable
Discussion
If you publish GraphQL.js, you can claim this product by proving you administer its repository.