On this page

Quick start

GraphQL Yoga v4 documentation (superseded by v5): Batteries-included GraphQL Server with focus on easy setup, performance & great developer experience

GraphQL Yoga is a batteries-included cross-platform GraphQL over HTTP spec-compliant GraphQL server powered by Envelop and GraphQL Tools that runs anywhere; focused on easy setup, performance and great developer experience.

Installation

npm i graphql-yoga graphql

Schema

You will need to provide a schema to Yoga, there are many ways to assemble a GraphQL schema, here’s just a few:

Use the createSchema function included in Yoga. It actually reuses the makeExecutableSchema from @graphql-tools/schema.

schema.js
import { createSchema } from 'graphql-yoga'

export const schema = createSchema({
  typeDefs: /* GraphQL */ `
    type Query {
      hello: String
    }
  `,
  resolvers: {
    Query: {
      hello: () => 'world'
    }
  }
})

makeExecutableSchema from @graphql-tools/schema is very simple, but powerful. Install it and create a schema.

npm i @graphql-tools/schema
schema.js
import { makeExecutableSchema } from '@graphql-tools/schema'

export const schema = makeExecutableSchema({
  typeDefs: /* GraphQL */ `
    type Query {
      hello: String
    }
  `,
  resolvers: {
    Query: {
      hello: () => 'world'
    }
  }
})

Pothos is a plugin based GraphQL schema builder for TypeScript. Install it and create a schema.

npm i @pothos/core
schema.js
import SchemaBuilder from '@pothos/core'

const builder = new SchemaBuilder({})

builder.queryType({
  fields: t => ({
    hello: t.string({
      resolve: () => 'world'
    })
  })
})

export const schema = builder.toSchema()

Declarative, Code-First GraphQL Schemas for JavaScript/TypeScript through Nexus GraphQL. Install it and create schema.

npm i nexus
schema.js
import { makeSchema, queryField } from 'nexus'

const helloField = queryField('hello', {
  type: 'String',
  resolve: () => 'world'
})

export const schema = makeSchema({ types: [helloField] })

Code-first type-safe GraphQL schema without codegen or metaprogramming using gqtx. Install it and create schema.

npm i gqtx
schema.js
import { buildGraphQLSchema, createTypesFactory } from 'gqtx'

const t = createTypesFactory()

const Query = t.queryType({
  fields: () => [
    t.field({
      name: 'hello',
      type: t.String,
      resolve: () => 'world'
    })
  ]
})

export const schema = buildGraphQLSchema({ query: Query })

graphql-js is a reference implementation of GraphQL for JavaScript. You should already have it installed, just create schema.

schema.js
import { GraphQLObjectType, GraphQLSchema, GraphQLString } from 'graphql'

export const schema = new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'Query',
    fields: {
      hello: {
        type: GraphQLString,
        resolve: () => 'world'
      }
    }
  })
})

Server

After you have created a GraphQL schema, simply pass it in to Yoga and liftoff! 🚀

import { createServer } from 'node:http'
import { createYoga } from 'graphql-yoga'
import { schema } from './schema'

// Create a Yoga instance with a GraphQL schema.
const yoga = createYoga({ schema })

// Pass it into a server to hook into request handlers.
const server = createServer(yoga)

// Start the server and you're done!
server.listen(4000, () => {
  console.info('Server is running on http://localhost:4000/graphql')
})

Visit http://localhost:4000/graphql to see Yoga in action.