NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #457 most downloaded on Packagist
A PHP port of GraphQL reference implementation
Last release today
06 Oct 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
203 releases · first in 2015
Serialize BackedEnum instances by name, not value https://github.com/webonyx/graphql-php/pull/1618
BackedEnum instances by name, not value https://github.com/webonyx/graphql-php/pull/1618Annotate return value of Helper::validateOperationParams as list https://github.com/webonyx/graphql-php/pull/1615
Helper::validateOperationParams as list https://github.com/webonyx/graphql-php/pull/1615One column per quarter.
Narrow type of execution errors from array to list https://github.com/webonyx/graphql-php/pull/1597
array to list https://github.com/webonyx/graphql-php/pull/1597Allow native PHP enums as return values for SDL-based enums https://github.com/webonyx/graphql-php/pull/1608
Serialize valid \BackedEnum values in GraphQL\Type\Definition\PhpEnumType https://github.com/webonyx/graphql-php/pull/1604
\BackedEnum values in GraphQL\Type\Definition\PhpEnumType https://github.com/webonyx/graphql-php/pull/1604Avoid infinite recursion in QueryDepth validator https://github.com/webonyx/graphql-php/pull/1581
QueryDepth validator https://github.com/webonyx/graphql-php/pull/1581Ensure unaliasedPath does not grow for each list item https://github.com/webonyx/graphql-php/pull/1579
unaliasedPath does not grow for each list item https://github.com/webonyx/graphql-php/pull/1579Avoid crash by triggering side effect via count on PHPUnit\Framework\Test https://github.com/webonyx/graphql-php/pull/1577
count on PHPUnit\Framework\Test https://github.com/webonyx/graphql-php/pull/1577Optimize and deduplicate ReferenceExecutor https://github.com/webonyx/graphql-php/pull/1572
Remove redundant code in ReferenceExecutor https://github.com/webonyx/graphql-php/pull/1570
ReferenceExecutor https://github.com/webonyx/graphql-php/pull/1570Add property unaliasedPath to ResolveInfo https://github.com/webonyx/graphql-php/pull/1548
unaliasedPath to ResolveInfo https://github.com/webonyx/graphql-php/pull/1548Fix ScopedContext for mutations https://github.com/webonyx/graphql-php/pull/1549
ScopedContext for mutations https://github.com/webonyx/graphql-php/pull/1549Count new lines when parsing multi-line comments https://github.com/webonyx/graphql-php/pull/1538
Allow scalars from BuildClientSchema to have any type https://github.com/webonyx/graphql-php/pull/1536
BuildClientSchema to have any type https://github.com/webonyx/graphql-php/pull/1536The standard server now produces distinct exception classes instead of generic RequestError https://github.com/webonyx/graphql-php/pull/1533
RequestError https://github.com/webonyx/graphql-php/pull/1533Allow enum instances in PhpEnumType::parseValue() https://github.com/webonyx/graphql-php/pull/1519
PhpEnumType::parseValue() https://github.com/webonyx/graphql-php/pull/1519Support react/promise v3 https://github.com/webonyx/graphql-php/pull/1517
react/promise v3 https://github.com/webonyx/graphql-php/pull/1517Correctly print deprecated argument with default value https://github.com/webonyx/graphql-php/pull/1491
Early return when complexity is disabled https://github.com/webonyx/graphql-php/pull/1475
SchemaConfig option types https://github.com/webonyx/graphql-php/pull/1479Control field visibility through option visible https://github.com/webonyx/graphql-php/pull/1434
visible https://github.com/webonyx/graphql-php/pull/1434Fix printing of single line descriptions with Unicode https://github.com/webonyx/graphql-php/pull/1436
Avoid instantiations when checking if types are built-in https://github.com/webonyx/graphql-php/pull/1423
Allow lazy root type callables to return null https://github.com/webonyx/graphql-php/pull/1422
null https://github.com/webonyx/graphql-php/pull/1422Allow lazy root types query, mutation, subscription https://github.com/webonyx/graphql-php/pull/1418
query, mutation, subscription https://github.com/webonyx/graphql-php/pull/1418Also set queryId from Apollo-source sha256Hash if query is provided https://github.com/webonyx/graphql-php/pull/1412
queryId from Apollo-source sha256Hash if query is provided https://github.com/webonyx/graphql-php/pull/1412Do not set raw vars on query complexity rule if no validation rules are used https://github.com/webonyx/graphql-php/pull/1413
Remove useless and broken Parser::document(), use parse()
Parser::document(), use parse()Add ScopedContext interface to control cloning of the context value
ScopedContext interface to control cloning of the context valueAllow deprecating input fields and arguments https://github.com/webonyx/graphql-php/pull/1382
Call static methods in SchemaPrinter with static:: to enable overrides
SchemaPrinter with static:: to enable overridesAllow sending both query and queryId, let persistedQueryLoader handle it https://github.com/webonyx/graphql-php/pull/1372
query and queryId, let persistedQueryLoader handle it https://github.com/webonyx/graphql-php/pull/1372Provide a custom name for the Enum generated by PhpEnumType https://github.com/webonyx/graphql-php/pull/1368
PhpEnumType https://github.com/webonyx/graphql-php/pull/1368Merge selected fields in ResolveInfo::getFieldSelection() https://github.com/webonyx/graphql-php/pull/1365
ResolveInfo::getFieldSelection() https://github.com/webonyx/graphql-php/pull/1365Ensure OperationDefinitionNode.variableDefinitions is initialized
OperationDefinitionNode.variableDefinitions is initialized### Fixed - Annotate @throws accurately
@throws accuratelyImprove handling of JSON encoding errors
Initialize directives and arguments in Node with empty NodeList
directives and arguments in Node with empty NodeListImprove validation messages for type definitions
Add additional sorting options to SchemaPrinter
SchemaPrinter### Fixed - Fix QueryPlan for union types ### Changed - Improve QueryPlan performance
QueryPlan for union typesQueryPlan performanceFix QueryPlan when querying __typename on a union type
QueryPlan when querying __typename on a union typeFix printing of single line descriptions with backslashes
Remove warning for passing isDeprecated in field definition config
Error when failing to serialize an Enum typeType and its subclassesSerializationError over client safe Error when failing to serialize leaf typesextensions keyRequestError with useful message when clients provide an invalid JSON bodyBlockString from namespace GraphQL\Utils to GraphQL\LanguageGraphQL::getStandardDirectives(), GraphQL::getStandardTypes() and GraphQL::getStandardValidationRules()FieldDefinition to QueryComplexityType directly without an intermediary callablenullServerConfig option persistentQueryLoader to persistedQueryLoaderEnumType::parseValue() and EnumType::parseLiteral()PromiseAdapter::createRejected() to require \ThrowableNamedType out of Type: $name, $description, $config, isBuiltInType(), assertValid()Node::toArray()Directive::$config['args'] use the same definition style as FieldDefinition::$config['args']FieldArgument to ArgumentQueryPlan options from ['group-implementor-fields'] to ['groupImplementorFields' => true] in ResolveInfo::lookAhead()PromiseAdapter::convertThenable() before calling ->then() on themJSON_THROW_ON_ERROR in json_encode()assert()PromiseAdapter::all() accepts iterableIntrospection::fromSchema() returns no dataASTValidationContext to interface ValidationContextUtils::suggestionList() with the reference implementation (https://github.com/webonyx/graphql-php/issues/1075)GraphQL\Utils\AST::typeFromAST() now needs a type loader callable instead of the SchemaStandardServer" instead of """ for single line descriptionsHelper::emitResponse() private, use Helper::sendResponse()StandardServergraphql-js reference implementationDocumentValidatorassert() or schema validationHasSelectionSet::$selectionSet with HasSelectionSet::getSelectionSet()TypeDefinitionNode::$name with TypeDefinitionNode::getName()TypeExtensionNode::$name with TypeExtensionNode::getName()AST::concatAST() utilityUniqueEnumValueNamesUniqueOperationTypes (https://github.com/webonyx/graphql-php/issues/995)DocumentValidator::removeRule()Node implement JsonSerializableUniqueTypeNames (https://github.com/webonyx/graphql-php/issues/998)KnownTypeNames rule (https://github.com/webonyx/graphql-php/issues/999)UniqueArgumentDefinitionNames (https://github.com/webonyx/graphql-php/issues/1136)parseValue config option to InputObjectType to parse input value to custom value objectsortTypes to have SchemaPrinter order types alphabeticallyEnumType from PHP enumTypeInfo::getParentTypeStack() and TypeInfo::getFieldDefStack()__typenameforeach over slower functions array_map() and Utils::map()QueryPlan crash when multiple $fieldNodes are presentQueryPlan with different optionsarray or stdClass to an input objectnull parent of list in ValuesOfCorrectType::getVisitorquery and queryId, ignore queryId in that caseSchemaExtender::extend()NodeList in Node::cloneDeep()Schema::getType() on a schema built from SDL returns null for unknown types (https://github.com/webonyx/graphql-php/issues/1068)QueryComplexity ruleFormattedError::addDebugEntries() twice when using default error formattingiterable in implementations of PromiseAdapter::all()OperationParams method getOriginalInput() in favor of public property $originalInputOperationParams method isReadOnly() in favor of public property $readOnlyUtils::withErrorHandling()TypeComparators::doTypesOverlap()DocumentValidator::isError()DocumentValidator::append()Utils::getVariableType() in favor of Utils::printSafe()isDeprecated in field definition configWrappingType::getWrappedType() argument $recurse in favor of WrappingType::getInnermostType()Type::assertType()ListOfType::$ofType, ListOfType::getOfType() and NonNull::getOfType()commentDescriptions from BuildSchema::buildAST(), BuildSchema::build() and Printer::doPrint()$options from ASTDefinitionBuilderFieldDefinition::create() in favor of new FieldDefinition()GraphQL\Exception\InvalidArgumentUtils::find(), Utils::every() and Utils::invariant()bool $exitWhenDone from StandardServer::send500Error() and StandardServer::handleRequest()Schema::getAstNode() in favor of Schema::$astNodeSchema option types, use Type::overrideStandardTypes()GraphQL\Utils\TypeInfo::typeFromAST(), use GraphQL\Utils\AST::typeFromAST()StandardServer::send500Error(), handle non-GraphQL errors yourselfStandardServer::getHelper(), use new Helpercategory, use custom error formatting if you still need itType::getInternalTypes()GraphQL::execute()GraphQL::executeAndReturnResult()FormattedError::create() and FormattedError::createFromPHPError()GraphQL::setPromiseAdapter()AST::getOperation()BreakingChangesFinderDocumentValidator::isValidLiteralValue()Error::formatError() and Error::toSerializableArray()GraphQL::getInternalDirectives()Schema::isPossibleType()TypeInfoValues::valueFromAST() and Values::isValidPHPValue()InputObjectField::$typeFieldDefinition::$typeGraphQL\Validator\Rules\AbstractQuerySecurity, use GraphQL\Validator\Rules\QuerySecurityRuleGraphQL\Validator\Rules\AbstractValidationRule, use GraphQL\Validator\Rules\ValidationRuleGraphQL\Utils\FindBreakingChanges, use GraphQL\Utils\BreakingChangesFinderNothing published for this version
Nothing published for this version
Nothing published for this version
Fix PHP 8.2 deprecated string interpolation syntax
Accept AST where field arguments are not given
Correct the broken 14.11.7 release - see https://github.com/webonyx/graphql-php/issues/1221
Fix PHP 8.2 deprecation of "static" in callables
Fix validation of modified sparse ASTs
Fix extend() to preserve repeatable
extend() to preserve repeatable (https://github.com/webonyx/graphql-php/issues/931)Fix repeatable directive validation for AST
Fix compatibility of more methods with native return type in PHP 8.1
Support non-JSON ServerRequestInterface
ServerRequestInterfaceFix compatibility of methods with native return type in PHP 8.1
Allow field definitions to be defined as any iterable, not just array
iterable, not just arrayMake IntType constants MAX_INT and MIN_INT public
IntType constants MAX_INT and MIN_INT publicAdd support for type config decorator in SchemaExtender
SchemaExtenderImplement GraphQL\Utils\AST::getOperationAST()
GraphQL\Utils\AST::getOperationAST()Your coding agent can read these notes before it upgrades. Set up the MCP server →