Releases: graphql/graphql-js
Releases · graphql/graphql-js
v17.0.0
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 📝
11 PRs were merged
- #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 💅
2 PRs were merged
Internal 🏠
6 PRs were merged
- #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
v16.14.2 (2026-06-09)
Docs 📝
7 PRs were merged
- #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
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)
v17.0.0-beta.2
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 📝
3 PRs were merged
Polish 💅
Internal 🏠
3 PRs were merged
Committers: 2
v16.14.1
v16.14.1 (2026-06-02)
Docs 📝
9 PRs were merged
- #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.1
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 🏠
3 PRs were merged
Committers: 1
- Yaacov Rydzinski (@yaacovCR)
v17.0.0-beta.0
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 💅
19 PRs were merged
- #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 🏠
17 PRs were merged
- #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](https://github.com/yaaco...
v16.14.0
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)