Adds GraphQL support to your Sanic app.
Switch branches/tags
Clone or download
syrusakbary Merge pull request #12 from ekampf/patch-1
Fix graphql-server-core dependency
Latest commit 0725058 Jul 24, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
sanic_graphql Fix broken tests. Sep 3, 2017
tests Fixed tests to work with new libs Jul 20, 2018
.gitignore Replaced flask with sanic Feb 6, 2017
.travis.yml Updated testing configs Feb 20, 2017
LICENSE Updated license text Mar 4, 2017 Updated package info Feb 20, 2017 Updated badges Mar 6, 2017
README.rst Updated badges Mar 6, 2017
setup.cfg Updated testing configs Feb 20, 2017 Update Jul 20, 2018
tox.ini Used graphql_server package Mar 23, 2017

Build Status Coverage Status PyPI version


Adds GraphQL support to your Sanic application.

Based on flask-graphql by Syrus Akbary.


Just use the GraphQLView view from sanic_graphql

from sanic_graphql import GraphQLView

app.add_route(GraphQLView.as_view(schema=Schema, graphiql=True), '/graphql')

# Optional, for adding batch query support (used in Apollo-Client)
app.add_route(GraphQLView.as_view(schema=Schema, batch=True), '/graphql/batch')

This will add /graphql endpoint to your app.

Sharing eventloop with Sanic

In order to pass Sanic’s eventloop to GraphQL’s AsyncioExecutor, use before_start listener:

def init_graphql(app, loop):
    app.add_route(GraphQLView.as_view(schema=Schema, executor=AsyncioExecutor(loop=loop)), '/graphql')

Supported options

  • schema: The GraphQLSchema object that you want the view to execute when it gets a valid request.
  • context: A value to pass as the context to the graphql() function. By default is set to dict with request object at key request.
  • root_value: The root_value you want to provide to executor.execute.
  • pretty: Whether or not you want the response to be pretty printed JSON.
  • executor: The Executor that you want to use to execute queries. If an AsyncioExecutor instance is provided, performs queries asynchronously within executor’s loop.
  • graphiql: If True, may present GraphiQL when loaded directly from a browser (a useful tool for debugging and exploration).
  • graphiql_template: Inject a Jinja template string to customize GraphiQL.
  • jinja_env: Sets jinja environment to be used to process GraphiQL template. If Jinja’s async mode is enabled (by enable_async=True), uses Template.render_async instead of Template.render. If environment is not set, fallbacks to simple regex-based renderer.
  • batch: Set the GraphQL view as batch (for using in Apollo-Client or ReactRelayNetworkLayer)

You can also subclass GraphQLView and overwrite get_root_value(self, request) to have a dynamic root value per request.

class UserRootValue(GraphQLView):
    def get_root_value(self, request):
        return request.user


Copyright for portions of project sanic-graphql are held by Syrus Akbary as part of project flask-graphql. All other copyright for project sanic-graphql are held by Sergey Porivaev.

This project is licensed under MIT License.