title: Koa
description: Setting up Apollo Server with Koa
This is the Koa integration of Apollo Server. Apollo Server is a community-maintained open-source Apollo Server that works with all Node.js HTTP server frameworks: Express, Connect, Hapi, Koa and Restify. Read the docs. Read the CHANGELOG.
npm install apollo-server-koa
Usage
import koa from 'koa';
import koaRouter from 'koa-router';
import koaBody from 'koa-bodyparser';
import { graphqlKoa } from 'apollo-server-koa';
const app = new koa();
const router = new koaRouter();
const PORT = 3000;
app.use(koaBody());
router.post('/graphql', graphqlKoa({ schema: myGraphQLSchema }));
router.get('/graphql', graphqlKoa({ schema: myGraphQLSchema }));
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(PORT);
GraphiQL
You can also use apollo-server-koa
for hosting the GraphiQL in-browser IDE. Note the difference between graphqlKoa
and graphiqlKoa
.
import { graphiqlKoa } from 'apollo-server-koa';
router.get(
'/graphiql',
graphiqlKoa({
endpointURL: '/graphql',
}),
);
In case your GraphQL endpoint is protected via authentication, or if you need to pass other custom headers in the request that GraphiQL makes, you can use the passHeader
option – a string that will be added to the request header object.
For example:
import { graphiqlKoa } from 'apollo-server-koa';
router.get(
'/graphiql',
graphiqlKoa({
endpointURL: '/graphql',
passHeader: `'Authorization': 'Bearer lorem ipsum'`,
}),
);
Principles
Apollo Server is built with the following principles in mind:
- By the community, for the community: Apollo Server's development is driven by the needs of developers
- Simplicity: by keeping things simple, Apollo Server is easier to use, easier to contribute to, and more secure
- Performance: Apollo Server is well-tested and production-ready - no modifications needed
Anyone is welcome to contribute to Apollo Server, just read CONTRIBUTING.md, take a look at the roadmap and make your first PR!