NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #461 most downloaded on Packagist
A PHP port of GraphQL reference implementation
Last release 1 months ago
14 Aug 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
201 releases · first in 2015
Improve performance of subtype checks
Refactoring:
Fix overly eager validation of repeatable directive usage
Add fallback for directive.isRepeatable in BuildClientSchema
One column per quarter.
directive.isRepeatable in BuildClientSchemaOpen ReferenceExecutor for extending
Fix Input Object field shortcut definition with callable
Implement support for interfaces implementing interfaces (https://github.com/webonyx/graphql-php/issues/740), huge kudos to @Kingdutch
Deprecates:
Constant BreakingChangeFinder::BREAKING_CHANGE_INTERFACE_REMOVED_FROM_OBJECT.
Use BreakingChangeFinder::BREAKING_CHANGE_IMPLEMENTED_INTERFACE_REMOVED instead.
Constant value also changed from INTERFACE_REMOVED_FROM_OBJECT to IMPLEMENTED_INTERFACE_REMOVED.
Constant BreakingChangeFinder::DANGEROUS_CHANGE_INTERFACE_ADDED_TO_OBJECT
Use DANGEROUS_CHANGE_IMPLEMENTED_INTERFACE_ADDED instead.
Constant value also changed from INTERFACE_ADDED_TO_OBJECT to IMPLEMENTED_INTERFACE_ADDED.
Refactoring:
Fix signature of Error\FormattedError::prepareFormatter() to address PHP8 deprecation
NodeList via []= (https://github.com/webonyx/graphql-php/issues/767)Error\FormattedError::prepareFormatter() to address PHP8 deprecation (https://github.com/webonyx/graphql-php/issues/742)Fixed SchemaPrinter so that it uses late static bindings when extended
SchemaPrinter so that it uses late static bindings when extendedDirectiveDefinitionNode->locations as NodeList<NamedNode> (fixes AST::fromArray conversion) (https://github.com/webonyx/graphql-php/issues/723)Parser::implementsInterfaces as NodeList<NamedTypeNode> (fixes AST::fromArray conversion)Parser::unionMemberTypes to match actual NodeList<NamedTypeNode>Allow typeLoader to return a type thunk
typeLoader to return a type thunk (https://github.com/webonyx/graphql-php/issues/687)Public access to FieldDefinition::$type property
Deprecates:
FieldDefinition::$type property (https://github.com/webonyx/graphql-php/issues/702)Fixes:
Handle nullable DirectiveNode#astNode in SchemaValidationContext
DirectiveNode#astNode in SchemaValidationContext (https://github.com/webonyx/graphql-php/issues/708)Add partial parse functions for const variants
IntValueNode (https://github.com/webonyx/graphql-php/issues/691)### Optimized - Optimize lazy types
Fix for: Argument defaults with integer/float values crashes introspection query
This release brings several breaking changes. Please refer to UPGRADE document for details.
This release brings several breaking changes. Please refer to UPGRADE document for details.
GraphQL\Deferred now extends GraphQL\Executor\Promise\Adapter\SyncPromiseBreakingChangesFinder)GraphQL\Error\Debug to GraphQL\Error\DebugFlag.GraphQL\Executor\ExecutionResult, GraphQL\Error\FormattedError and GraphQL\Server\ServerConfig do not accept boolean value anymore but int only.$positions in GraphQL\Error\Error constructor are not nullable anymore. Same can be expressed by passing an empty array.deprecationReason will now print the @deprecated directive (only a null deprecationReason won't print the @deprecated directive).Special thanks to @simPod, @spawnia and @shmax for their major contributions!
Fix double Error wrapping when parsing variables
Don't call global field resolver on introspection fields
Added retrieving query complexity once query has been completed
QueryPlan can now be used on interfaces not only objects.
Fix coroutine executor when using with promise
Force int when setting max query depth
Reverted minor possible breaking change
Fixed an issue with NodeList iteration over missing keys
Better validation of field/directive arguments
This release brings several breaking changes. Please refer to UPGRADE document for details.
This release brings several breaking changes. Please refer to UPGRADE document for details.
New features and notable changes:
category and extensions are displayed under extensions key when using default formatting (https://github.com/webonyx/graphql-php/issues/389)GraphQL::useExperimentalExecutor().<br>
<br>
Please try it and post your feedback at https://github.com/webonyx/graphql-php/issues/397
(as it may become the default one in future)
<br>
<br>extendSchema from the reference implementation under GraphQL\Utils\SchemaExtender (https://github.com/webonyx/graphql-php/issues/362)GraphQL::overrideStandardTypes(array $types) (https://github.com/webonyx/graphql-php/issues/401)Debug::RETHROW_UNSAFE_EXCEPTIONS which would only rethrow app-specific exceptions (https://github.com/webonyx/graphql-php/issues/337)Bugfix: Call to a member function getLocation() on null
Execution performance optimization for lists
Allow stringeable objects to be serialized by StringType
StandardServer: add support for the multipart/form-data content type
SchemaPrinter: Use multi-line block for trailing quote
Added one more breaking change note in UPGRADE.md
data entry from response on top-level error (https://github.com/webonyx/graphql-php/issues/281)RFC: Block String (multi-line strings via triple-quote """string""")
Improvements:
operationName (instead of operation) in inputNothing published for this version
Allow objects with \_\_toString in IDType
findBreakingChanges utility (see https://github.com/webonyx/graphql-php/issues/199)
StandardServer: Support non pre-parsed PSR-7 request body (see https://github.com/webonyx/graphql-php/issues/202)
Bugfix: provide descriptions to custom scalars (see https://github.com/webonyx/graphql-php/issues/181)
Ability to override internal types via types option of the schema (see https://github.com/webonyx/graphql-php/issues/174).
types option of the schema (see https://github.com/webonyx/graphql-php/issues/174).This release brings little changes but there are two reasons why it is released as major version:
This release brings little changes but there are two reasons why it is released as major version:
"false" accidentally sent in variables was converted to boolean true
and passed to field arguments. In the new version, such input will produce an error
(which is a spec-compliant behavior).Improvements:
BuildSchema now have reference to AST node with corresponding AST definition (in $astNode property).graphql file)StandardServer improvement: do not raise an error when variables are passed as empty string (see https://github.com/webonyx/graphql-php/issues/156)
Fixed infinite loop in the server (see https://github.com/webonyx/graphql-php/issues/153)
This release brings several breaking changes. Please refer to UPGRADE document for details.
This release brings several breaking changes. Please refer to UPGRADE document for details.
New features and notable changes:
Improvements:
Deprecations and breaking changes - see UPGRADE document.
Nothing published for this version
Minor change to assist DataLoader project in fixing https://github.com/webonyx/graphql-php/issues/150
Fixed PHP notice and invalid conversion when non-scalar value is passed as ID or String type (see https://github.com/webonyx/graphql-php/issues/121)
Fixed bug occurring when enum value is bool, null or float (see https://github.com/webonyx/graphql-php/issues/141)
value is bool, null or float (see https://github.com/webonyx/graphql-php/issues/141)Ability to disable introspection (see https://github.com/webonyx/graphql-php/issues/131)
Fixed issue with query complexity throwing on invalid queries (see https://github.com/webonyx/graphql-php/issues/125)
resolveType returns unexpected result (see https://github.com/webonyx/graphql-php/issues/119)Bugfix: throw UserError vs InvariantViolationError for errors caused by client (see https://github.com/webonyx/graphql-php/issues/123)
Bugfix: use directives when calculating query complexity (see https://github.com/webonyx/graphql-php/issues/113)
AST\Node::__toString() will convert node to array recursively to encode to json without errorsBugfix: ResolveInfo::getFieldSelection() now correctly merges fragment selections (see https://github.com/webonyx/graphql-php/issues/98)
ResolveInfo::getFieldSelection() now correctly merges fragment selections (see https://github.com/webonyx/graphql-php/issues/98)Bugfix: ResolveInfo::getFieldSelection() now respects inline fragments
ResolveInfo::getFieldSelection() now respects inline fragmentsFixed SyncPromiseAdapter::all() to not change the order of arrays (see https://github.com/webonyx/graphql-php/issues/92)
Tools to help building schema out of Schema definition language as well as printing existing schema in Schema definition language (see https://github.
Fixed Utils::assign() bug related to detecting missing required keys (see https://github.com/webonyx/graphql-php/issues/89)
Schema Definition Language: element descriptions can be set through comments (see https://github.com/webonyx/graphql-php/issues/88)
Fixed: GraphQL\Server now properly sets promise adapter before executing query
GraphQL\Server now properly sets promise adapter before executing queryDeferred resolvers (see https://github.com/webonyx/graphql-php/issues/66, see docs)
GraphQL\Server (see https://github.com/webonyx/graphql-php/issues/82)TypeResolutionStrategy (see https://github.com/webonyx/graphql-php/issues/69)This release brings several minor breaking changes. Please refer to UPGRADE document for details.
This release brings several minor breaking changes. Please refer to UPGRADE document for details.
New features:
null value (as required by latest GraphQL spec)path entry in errors produced by resolvers for better debuggingresolveType for interface/union is now allowed to return string name of typeImprovements:
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →