Indexed by TopGit from live GitHub metadata: graphql-python/graphql-core has 529 stars, written primarily in Python. A Python 3 port of the GraphQL.js reference implementation of GraphQL.
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
GraphQL-core 3 is a Python 3.7+ port of GraphQL.js,
the JavaScript reference implementation for GraphQL,
a query language for APIs created by Facebook.
An extensive test suite with over 3000 unit tests and 100% coverage replicates the
complete test suite of GraphQL.js, ensuring that this port is reliable and compatible
with GraphQL.js.
The current stable version 3.2.11 of GraphQL-core is up-to-date with GraphQL.js
version 16.14.1 and supports Python versions 3.7 to 3.14.
You can also try out the latest release candidate 3.3.0rc0 of GraphQL-core,
which is up-to-date with GraphQL.js version 17.0.0rc0.
This new minor version of GraphQL-core also supports Python versions 3.10 to 3.14.
Note that for various reasons, GraphQL-core does not use SemVer like GraphQL.js.
Changes in the major version of GraphQL.js are reflected in the minor version of
GraphQL-core instead. This means there can be breaking changes in the API
when the minor version changes, and only patch releases are fully backward compatible.
Therefore, we recommend using something like ~= 3.2.0 as the version specifier
when including GraphQL-core as a dependency.
Documentation
More detailed documentation for GraphQL-core 3 can be found at
graphql-core-3.readthedocs.io.
The documentation for GraphQL.js can be found at graphql.org/graphql-js/.
The documentation for GraphQL itself can be found at graphql.org.
There will be also blog articles with more usage
examples.
Getting started
A general overview of GraphQL is available in the
README for the
Specification for GraphQL. This overview
includes a simple set of GraphQL examples that are also available as tests
in this repository. A good way to get started with this repository is to walk through
that README and the corresponding tests in parallel.
Installation
GraphQL-core 3 can be installed from PyPI using the built-in pip command:
python -m pip install graphql-core
Or, if you prefer uv:
uv pip install graphql-core
Usage
GraphQL-core provides two important capabilities: building a type schema and
serving queries against that type schema.
First, build a GraphQL type schema which maps to your codebase:
This defines a simple schema, with one type and one field, that resolves to a fixed
value. The resolve function can return a value, a co-routine object or a list of
these. It takes two positional arguments; the first one provides the root or the
resolved parent field, the second one provides a GraphQLResolveInfo object which
contains information about the execution state of the query, including a context
attribute holding per-request state such as authentication information or database
session. Any GraphQL arguments are passed to the resolve functions as individual
keyword arguments.
Note that the signature of the resolver functions is a bit different in GraphQL.js,
where the context is passed separately and arguments are passed as a single object.
Also note that GraphQL fields must be passed as a GraphQLField object explicitly.
Similarly, GraphQL arguments must be passed as GraphQLArgument objects.
A more complex example is included in the top-level tests directory.
Then, serve the result of a query against that type schema.
Because we queried a non-existing field, we will get the following result:
ExecutionResult(data=None, errors=[GraphQLError(
"Cannot query field 'BoyHowdy' on type 'RootQueryType'.",
locations=[SourceLocation(line=1, column=3)])])
The graphql_sync function assumes that all resolvers return values synchronously.
By using coroutines as resolvers, you can also create results in an asynchronous
fashion with the graphql function.
GraphQL-core aims to reproduce the code of the reference implementation GraphQL.js
in Python as closely as possible while staying up-to-date with the latest development
of GraphQL.js.
GraphQL-core 3 (formerly known as GraphQL-core-next) was created as a modern
alternative to GraphQL-core 2,
a prior work by Syrus Akbary based on an older version of GraphQL.js that still
supported legacy Python versions. While some parts of GraphQL-core 3 were inspired by
GraphQL-core 2 or directly taken over with slight modifications, most of the code has
been re-implemented from scratch. This re-implementation closely replicates the latest
code in GraphQL.js and adds type hints for Python.
Design goals for the GraphQL-core 3 library were:
to be a simple, cruft-free, state-of-the-art GraphQL implementation for current
Python versions
to be very close to the GraphQL.js reference implementation, while still providing
a Pythonic API and code style
to make extensive use of Python type hints, similar to how GraphQL.js used Flow
(and is now using TypeScript)
to use black to achieve a consistent code style
while saving time and mental energy for more important matters
(we are now using ruff instead)
to replicate the complete Mocha-based test suite of GraphQL.js
using pytest
with pytest-describe
Some restrictions (mostly in line with the design goals):
requires Python 3.6 or newer (Python 3.7 and newer in latest version)
does not support some already deprecated methods and options of GraphQL.js
supports asynchronous operations only via async.io
(does not support the additional executors in GraphQL-core)
Note that meanwhile we are using the amazing ruff tool
to both format and check the code of GraphQL-core 3,
in addition to using mypy as type checker.
Integration with other libraries and roadmap
Graphene is a more high-level framework for building
GraphQL APIs in Python, and there is already a whole ecosystem of libraries, server
integrations and tools built on top of Graphene. Most of this Graphene ecosystem has
also been created by Syrus Akbary, who meanwhile has handed over the maintenance
and future development to members of the GraphQL-Python community.
Graphene 3 is now using Graphql-core 3 as core library for much of the heavy lifting.
Ariadne is a Python library for implementing
GraphQL servers using schema-first approach created by Mirumee Software.
Ariadne is also using GraphQL-core 3 as its GraphQL implementation.
Strawberry, created by Patrick
Arminio, is a new GraphQL library for Python 3, inspired by dataclasses,
that is also using GraphQL-core 3 as underpinning.
Typed GraphQL, thin layer over GraphQL-core that uses native Python types for creating GraphQL schemas.
Changelog
Changes are tracked as
GitHub releases.
Credits and history
The GraphQL-core 3 library
has been created and is maintained by Christoph Zwerschke
uses ideas and code from GraphQL-core 2, a prior work by Syrus Akbary
is a Python port of GraphQL.js which has been developed by Lee Byron and others
at Facebook, Inc. and is now maintained
by the GraphQL foundation
Please watch the recording of Lee Byron's short keynote on the
history of GraphQL
at the open source leadership summit 2019 to better understand
how and why GraphQL was created at Facebook and then became open sourced
and ported to many different programming languages.
License
GraphQL-core 3 is
MIT-licensed,
just like GraphQL.js.
How does graphql-python/graphql-core compare to other API projects?
graphql-python/graphql-core is tracked by TopGit in the API category, with 529 GitHub stars and written in Python. Browse the API topic page on TopGit to compare it against similar projects by stars and activity.
Is graphql-python/graphql-core open source?
Yes — graphql-python/graphql-core ships under the MIT license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/graphql-python/graphql-core.
What else is in the API space?
graphql-python/graphql-core is tracked by TopGit under the API category, alongside 9 GitHub-tagged topics. Trending and Topics pages list peer repositories of comparable stars and language.
What is graphql-python/graphql-core?
graphql-python/graphql-core (graphql-python/graphql-core) is a Python project on GitHub. From the project's own README: A Python 3 port of the GraphQL.js reference implementation of GraphQL.
Where do I read more about graphql-python/graphql-core?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/graphql-python/graphql-core is the definitive source.
Why is graphql-python/graphql-core categorized under API?
TopGit places graphql-python/graphql-core in the API category based on its GitHub topics and description (tagged: "api", "asyncio", "graphene"). Categories are assigned from real repository metadata, not editorial guesswork.
Read full README in the tab above.
Want a second opinion on graphql-core?
Ask an AI that can read this page — one click and you get its take on graphql-core.