GraphQL Yoga v2 documentation (superseded by v5): GraphQL Yoga provides you a cross-platform GraphQL Server. So you can easily integrate it into any platform besides Node.js.
GraphQL Yoga provides you a cross-platform GraphQL Server. So you can easily integrate it into any
platform besides Node.js.
Cloudflare Workers provides a serverless execution
environment that allows you to create entirely new applications or augment existing ones without
configuring or maintaining infrastructure.
You will want to use the package @graphql-yoga/common which has an agnostic HTTP handler using
Fetch API’s
Request and
Response objects when building
GraphQL powered Cloudflare Workers.
Installation
npm i @graphql-yoga/common graphql
yarn add @graphql-yoga/common graphql
pnpm add @graphql-yoga/common graphql
bun add @graphql-yoga/common graphql
Example with Regular fetch Event Listener
listener.mjs
import { createServer } from '@graphql-yoga/common'const server = createServer()server.start()
Example with Modules Approach
modules.mjs
import { createServer } from '@graphql-yoga/common'export default createServer()
Access to environmental values (KV Namespaces etc.)
You can access your KV namespaces etc. through the context.
import { createServer } from '@graphql-yoga/common'interface Env { MY_NAMESPACE: KVNamespace}export default createServer<Env>({ typeDefs: /* GraphQL */ ` type Query { todo(id: ID!): String todos: [String] } type Mutation { createTodo(id: ID!, text: String!): String deleteTodo(id: ID!): String } `, resolvers: { Query: { todo: (_, { id }, { MY_NAMESPACE }) => MY_NAMESPACE.get(id), todos: (_, _2, { MY_NAMESPACE }) => MY_NAMESPACE.list() }, Mutation: { // MY_NAMESPACE is available as a GraphQL context createTodo(_, { id, text }, context) { return context.MY_NAMESPACE.put(id, text) }, deleteTodo(_, { id }, context) { return context.MY_NAMESPACE.delete(id) } } }})
If you need ExecutionContext as well inside your resolvers, you can set the context on your
GraphQL server similar to what you see here:
To enable Server-Sent Events based subscriptions with Cloudflare Workers, you should add a
compatibility flag in your wrangler configuration file like below: