Adonis Apollo integration. (WIP)

Usage no npm install needed!

<script type="module">
  import apolloAdonis from 'https://cdn.skypack.dev/apollo-adonis';


Apollo Adonis

This is an Apollo Server integration for Adonisjs 5. It's still a work in progress, so PR's a very welcome.


npm install graphql apollo graphql-tag apollo-adonis
node ace invoke apollo-adonis

You can leave out graphql-tag if you don't need it. The second command adds a file at start/apollo.ts which contains an Apollo Server instance. Then, add the following lines to your start/routes.ts file:

// start/routes.ts

import ApolloServer from "./apollo";


Your Graphql Endpoint will be at /graphql.

Route Options

You can pass a config object to ApolloServer.routes({ ... }) Available options are:

name type description
path string The path on which the graphql endpoint will be registered at.
playground boolean Will provide a GraphQL Playground at {path}/playground.
subscriptions boolean If it set to true, Apollo Server subscription handlers will be installed on a websocket server.
Route Adonis RouterContract You can pass a custom router, on which the routes will get registered.


This will set up a graphql endpoint at /someurl/graph with a playground at /someurl/graph/playground and a subscriptions endpoint at /someurl/graph.

  path: "/someurl/graph",
  subscriptions: true,
  playground: true,

Subscriptions Setup

You can setup subscriptions using the routes methods option, or you can manually call ApolloServer.installSubscriptionHandlers() in your start/routes.ts file:

// start/routes.ts

ApolloServer.routes({ subscriptions: true });
// or


This Package provides a default PubSub instance at Apollo/PubSub. You can import it using:

import PubSub from "@ioc:Apollo/PubSub";

// ...

Manual Route Registration

The routes method registers routes which are then calling the handle and renderPlayground methods. You can manually call these methods if you need more control:

// start/routes.ts
import ApolloServer from "./apollo";

Route.route("/graphql", ['GET', 'POST'] (ctx) => ApolloServer.handle(ctx));
Route.get("/graphql/playground", (ctx) => ApolloServer.renderPlayground({ endpoint: '/graphql' }));

// If you want to use subscriptions in a manual setup