unstale

pypi / graphql-core

graphql-core

What changed in graphql-core 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-21.

14 breaking8 new APIs and options2 behavior and defaults7 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.1 on npm

graphql-core 331 changes

Breaking changes 14

  • AST collection fields are tuples instead of lists.

    3.3.0release notes

  • AST nodes are frozen dataclasses, and all AST collection fields are tuples instead of lists.

    3.3.0release notes

  • create_source_event_stream() now takes a built Executor instead of the request arguments.

    3.3.0release notes

  • Functions and options deprecated in GraphQL.js 16 have been removed.

    3.3.0release notes

  • ExecutionContext has been renamed to Executor.

    3.3.0release notes

  • The execution_context_class parameter has been renamed to executor_class.

    3.3.0release notes

  • The parser option has been removed because directives on directive definitions and extensions are now part of the language.

    3.3.0release notes

  • A Python int that cannot be represented exactly as a float now raises a GraphQLError when coerced to Float.

    3.3.0release notes

  • Input coercion follows the specification more strictly, and default values are validated against their types.

    3.3.0release notes

  • GraphQL-core 3.3.0 supports Python 3.10 to 3.15; Python 3.7 to 3.9 are no longer supported.

    3.3.0release notes

  • Schema validation rejects input objects that cannot be given a finite value and reports circular input object references.

    3.3.0release notes

  • subscribe() stays synchronous when possible, like execute(), and raises a GraphQLError for non-subscription operations.

    3.3.0release notes

  • The parser's token limit now counts every consumed token, including skipped comments, so comment-padded documents can no longer bypass the limit.

    3.2.12release notes

  • The token_count of a parsed document now includes comments.

    3.2.12release notes

New APIs and options 8

  • Aborting an operation raises this error with the partial result.

    3.3.0release notes

  • Operations can be aborted with an AbortSignal.

    3.3.0release notes

  • Directives on directive definitions and directive extensions are now part of the language.

    3.3.0release notes

  • Executors support hooks.

    3.3.0release notes

  • Adds incremental delivery with @defer and @stream, following the current spec proposal.

    3.3.0release notes

  • Adds experimental fragment arguments through a parser option.

    3.3.0release notes

  • This new function reports safe changes in addition to breaking and dangerous changes.

    3.3.0release notes

  • Use this new method to get the enclosing scalar inside list literals in custom scalar positions.

    3.3.0release notes

Behavior and default changes 2

  • Returns None inside list literals in custom scalar positions; use get_parent_input_type() for the enclosing scalar.

    3.3.0release notes

  • Validation enforces a per-document field-comparison budget and aborts with a GraphQLError when exhausted. The default is 250,000 comparisons and can be adjusted by assigning to this constant.

    3.2.12release notes

Fixes and other changes 7

  • An explicit Undefined variable value is treated as omitted, so the variable's default applies.

    3.3.0release notes

  • Returns None inside list literals in custom scalar positions; use get_parent_input_type() for the enclosing scalar.

    3.3.0release notes

  • The error message now correctly says "abstract type" instead of "composite type".

    3.2.13release notes

  • On Python 3.14, graphql_sync() and execute_sync() now report that execution failed to complete synchronously when called outside a running event loop.

    3.2.13release notes

  • Truncated string escape sequences now produce a GraphQLSyntaxError instead of an unhandled IndexError from parse() or graphql_sync().

    3.2.13release notes

  • Type hints now use uppercase values for the kind of types returned by introspection.

    3.2.13release notes

  • Python 3.15 is now supported.

    3.2.13release notes