DEV Community

Cover image for Announcing GraphQL Yoga v3
TheGuildBot for The Guild

Posted on • Edited on • Originally published at the-guild.dev

Announcing GraphQL Yoga v3

This article was published on Tuesday, November 15, 2022 by Saihajpreet Singh @ The Guild Blog

After months of experimentation and learning from production use cases we are back again with a
ground breaking release for GraphQL Yoga.

The Yoga V3 Experience

The goal with Yoga is to empower developers, improve the developer facing API and make caching,
security and real-time easy and run anywhere. Let's highlight some of the groundbreaking new
features and improvements.

One Package, Runs Everywhere

From GraphQL Yoga v2 we figure that using the fetch API as standard is the way to go. Now GraphQL
Yoga has a single NPM package for all environments graphql-yoga instead of @graphql-yoga/common
and @graphql-yoga/node. We
created a library that lets you create cross-platform HTTP servers which
GraphQL Yoga v3 uses under the hood.

Learn more

The Makeover

GraphQL Yoga v3 comes with the brand new GraphiQL 2.0.

The development of GraphiQL 2.0 has been a long ongoing process and we are so happy to finally
replace the outdated and old-fashioned GraphiQL IDE with the new fancy and snappy version 2.

Thanks to all parties involved that made this happen.

GraphiQL

Learn more

100% Compliant

As of today, GraphQL Yoga is the only GraphQL server in the JavaScript ecosystem that fully
satisfies all mandatory and optional sections of the GraphQL over HTTP specification.

Name Mandatory ✅ Optional ⚠️ Errors ❌
graphql-yoga 72 0 0
apollo-server@4.1.1 36 37 0
mercurius@11.3.0 43 30 0
express-graphql@0.12.0 38 35 0
graphql-helix@1.13.0 39 32 2

Learn more

Yoga as a Gateway

The ease of using GraphQL Yoga anywhere and performance make it a great candidate to run as a
gateway. Yoga is compliant with Apollo Federation spec, so you can use it for
federated services as your Supergraph and/or as
your Subgraph.

Learn more

Defer and Stream Support

In
Yoga v2 we added support for @defer and @stream
but it was not simple for users to use it, they had to deal with multiple versions of GraphQL.js
which is not easy thing to do.

For GraphQL Yoga v3 we created a custom execution engine (more detailed information and insights on
that soon!) and you can simply enable powerful features like defer and stream by using a Yoga
plugin.

import { createServer } from 'node:http'
import { createYoga } from 'graphql-yoga'
import { useDeferStream } from '@graphql-yoga/plugin-defer-stream'
import { schema } from './schema.js'

const yoga = createYoga({
  schema,
  plugins: [useDeferStream()]
})

const server = createServer(yoga)

server.listen(4000, () => {
  console.info('Server is running on http://localhost:4000/graphql')
})
Enter fullscreen mode Exit fullscreen mode

Learn more

Not Only GraphQL but Also REST

There are many reasons why one would want a REST endpoint. The Sofa API plugin makes it easy to
convert any GraphQL API to REST API and in Yoga v3.

import { createServer } from 'node:http'
import { createYoga } from 'graphql-yoga'
import { useSofaWithSwaggerUI } from '@graphql-yoga/plugin-sofa'
import { schema } from './schema.js'

export const yoga = createYoga({
  schema,
  plugins: [
    useSofaWithSwaggerUI({
      basePath: '/rest',
      swaggerUIEndpoint: '/swagger',
      servers: [
        {
          url: '/', // Specify Server's URL.
          description: 'Development server'
        }
      ],
      info: {
        title: 'Example API',
        version: '1.0.0'
      }
    })
  ]
})

const server = createServer(yoga)
server.listen(4000, () => {
  console.info('Server is running on http://localhost:4000/graphql')
})
Enter fullscreen mode Exit fullscreen mode

Learn more

Response Caching

We now have a dedicated response caching plugin that can help reducing server load by caching
GraphQL Query operation execution results.

Learn more

GraphQL Subscriptions

GraphQL Yoga supports GraphQL subscriptions over Server Sent Events (SSE). Executing an operation is
a s simple as sending an HTTP request and does not require any additional complex protocol or
libraries on the frontend. For convenience, we offer an optional client package for both Apollo
Client and Urql for easily connecting to the server.

Learn more

Request Batching

GraphQL Yoga v3 supports request batching out of the box. While we do not recommend using request
batching for new projects, we know that there are many existing projects that use it, and we want to
make it easy for them to migrate to Yoga.

Learn more

File Uploads

Sometimes it is handy to directly upload and process a file on your GraphQL server. Yoga does not
stop you from doing so and even better does not require any complicated setup.

Learn more

What Is Next?

We want you to leverage all the GraphQL ecosystem by being compatible with most of the existing
schema-design, HTTP server libraries, and deployment environments. There are many more features so
don't forget to check those out
https://the-guild.dev/graphql/yoga-server/docs

We have migration guide try it out! We
can't wait answer your questions and get
your feedback on how we can make GraphQL Yoga even more better!

Don't hesitate to reach out to us on Twitter and support us by
sharing this article!

Top comments (1)

Collapse
 
elitan profile image
Johan Eliasson

Congratulations on the launch and thanks for the write-up.