v17.0.0-alpha.10 (2026-02-24)
Breaking Change 💥
NOTE: This release introduced new/refined implementations of incremental delivery and execution cancellation. The prior implementations were reverted and the new implementations were re-implemented from scratch, see PRs below. Importantly, the newest cancellation implementation exposes the AbortSignal to resolvers via info.getAbortSignal() rather than info.abortSignal, a BREAKING CHANGE from the previous alpha. The newest incremental delivery implementation has only new features compared to the prior alpha (primarily sensitivity to back-pressure).
- #4447 chore: drop unsupported node versions (@yaacovCR)
- #4464 use
enableDevMode()or development condition instead of NODE_ENV (@yaacovCR) - #4537 Reference implementation of defer and stream spec (@yaacovCR)
- #4536 Allow cancellation via abortSignal (@yaacovCR)
- #4535 temporarily revert cancellation (@yaacovCR)
- #4534 temporarily revert incremental delivery (@yaacovCR)
- #4560 fix incremental types (@yaacovCR)
- #3385 fix type for first argument to isTypeOf (@ryym)
New Feature 🚀
- #4448 enable conditional exports (@yaacovCR)
- #4468 predicates: replace instanceof with symbol based brand check (@yaacovCR)
- #3044 Schema Coordinates (@leebyron)
- #4546 introduce legacy incremental executor (@yaacovCR)
- #4550 add bigint support (@yaacovCR)
- #4561 let GraphQLArgs inherit all parse/validate/execute options (@yaacovCR)
- #4562 add graphql "harness" abstraction along with async parse/validate support (@yaacovCR)
- #4565 frontport #4482: Implement changes for executable descriptions (@yaacovCR)
Bug Fix 🐞
- #4441 Ensure that 'schema' keyword kept when schema has description (@benjie)
- #4462 avoid re-visiting deferred fragment spreads (@yaacovCR)
- #4358 incremental: add new deferred fragments to the wrapped graphql result (@yaacovCR)
- #4469 perf: do not use undefined for empty error array (@yaacovCR)
- #4424 buildClientSchema: build enum type value maps lazily (@yaacovCR)
- #4481 Fix incorrect
FormattedCompletedResultfields and add aFormattedPendingResult(@jerelmiller) - #4495 chore: use latest npm lockfile metadata (@yaacovCR)
- #4494 fix(mapAsyncIterable): always close source when mapped iterable is thrown (@yaacovCR)
- #4496 refactor(execution): extract withCleanup from mapAsyncIterable (@yaacovCR)
- #4497 fix(withCleanup): remove extra tick (@yaacovCR)
- #4510 fix(Queue): calling stop should not drop pushed values (@yaacovCR)
- #4520 incremental: improve perf of OverlappingFieldsCanBeMerged (@yaacovCR)
- #4526 reduce ticks stemming from withCleanup (@yaacovCR)
- #4531 refactor: move errorPropagation to ValidatedExecutionArgs (@yaacovCR)
- #4533 add abrupt return handling for sync iterables (@yaacovCR)
- #4544 fix inner stream with async iterables (@yaacovCR)
- #4547 remove unnecessary Executor property (@yaacovCR)
- #4548 fix: memoize collectSubfields and getStreamUsage across Executors (@yaacovCR)
- #4554 use single phase of resolver abortSignal cancellation (@yaacovCR)
- #4559 restore FormattedExperimentalIncrementalExecutionResults (@yaacovCR)
- #4563 polish: improve GraphQL schema element config typing (@yaacovCR)
- #4567 frontport: incorrect validation errors when variable descriptions are used (#4517) (@yaacovCR)
- #4568 fix: treat dot as punctuator for schema coordinate parsing (@yaacovCR)
- #4569 export all schema coordinate types (@yaacovCR)
- #4572 add "as const" to schema change type "enum" (@yaacovCR)
- #4583 validation: align MaxIntrospectionDepthRule with v16 backport (@yaacovCR)
- #4596 chore(eslint): simplify ignore-pattern (@yaacovCR)
Docs 📝
3 PRs were merged
Polish 💅
35 PRs were merged
- #4454 integrationTests: pin bun/deno versions (@yaacovCR)
- #4459 upgrade dependencies (@yaacovCR)
- #4472 docs: update dual-build information within README (@yaacovCR)
- #4500 polish(withCleanup): condense one line (@yaacovCR)
- #4499 refactor(mapAsyncIterable): use withCleanup to simplify (@yaacovCR)
- #4498 refactor: extract Queue from IncrementalPublisher and IncrementalGraph (@yaacovCR)
- #4501 polish(Queue): further simplify algorithm (@yaacovCR)
- #4502 polish(IncrementalPublisher): introduce ensureId helper (@yaacovCR)
- #4503 polish(IncrementalPublisher): simplify early return handling (@yaacovCR)
- #4527 refactor(execution): add separate entrypoints file (@yaacovCR)
- #4528 refactor(execute): minor refactor (@yaacovCR)
- #4529 refactor: streamline variable name (@yaacovCR)
- #4532 withConcurrentAbruptClose should await handlers (@yaacovCR)
- #4538 rename execute.ts to Executor.ts file (@yaacovCR)
- #4539 rename
entrypoints.tstoexecute.ts(@yaacovCR) - #4540 move subscription helpers from Executor to execute (@yaacovCR)
- #4541 convert ExecutionContext interface and functions to Executor (@yaacovCR)
- #4542 polish: clean up abort listener without checking hasNext (@yaacovCR)
- #4543 extract getStreamUsage (@yaacovCR)
- #4545 extract IncrementalExecutor from Executor (@yaacovCR)
- #4549 streamline scalar coercion (@yaacovCR)
- #4570 add tests for validateInputValue / validateInputLiteral (@yaacovCR)
- #4571 add additional mapSchemaConfig tests (@yaacovCR)
- #4573 valueFromAST: use nullish to simplify (@yaacovCR)
- #4580 test(validation): add empty-selection case from 16.x.x backport (@yaacovCR)
- #4581 test(validation): add OneOf variable tests from 16.x.x to next (@yaacovCR)
- #4584 remove legacy comment (@yaacovCR)
- #4585 align schema coordinates comments (@yaacovCR)
- #4587 validation: add description-handling comment (@yaacovCR)
- #4586 polish: align schema coordinate whitespace (@yaacovCR)
- #4588 polish: reorder tests to match 16.x.x (@yaacovCR)
- #4589 prune cspell file (@yaacovCR)
- #4592 upgrade deps (@yaacovCR)
- #4593 lint: add brackets to path (@yaacovCR)
- #4595 test(execution): add additional tests from original PR #4458 (@yaacovCR)
Internal 🏠
14 PRs were merged
- #4446 add integration tests for dev/prod (@yaacovCR)
- #4455 pin bun and deno versions within integration script (@yaacovCR)
- #4457 internal: use swc with ts-node (@yaacovCR)
- #4456 avoid spawn with shell: true and arguments (@yaacovCR)
- #4465 increase memory allowance for benchmarks (@yaacovCR)
- #4467 internal: revert formatting change (@yaacovCR)
- #4471 chore: update module/moduleResolution settings (@yaacovCR)
- #4566 frontport: update contributing (#4524) (@yaacovCR)
- #4574 prune prettierignore (@yaacovCR)
- #4575 remove old generated next folder from .gitignore (@yaacovCR)
- #4576 frontport: chore: always ignore scripts (#4514) (@yaacovCR)
- #4578 website: fix build (@yaacovCR)
- #4579 Include website within main CI for lintiing (@yaacovCR)
- #4591 add latest version of node to test matrix (@yaacovCR)