# GraphQL Yoga > Batteries-included, cross-platform GraphQL server with a focus on easy setup, performance and developer experience. Runs anywhere the Fetch API does. ## Documentation - [Quick start](https://the-guild.dev/graphql/yoga-server/docs.md): Batteries-included GraphQL Server with focus on easy setup, performance & great developer experience - [GraphQL Schema](https://the-guild.dev/graphql/yoga-server/docs/features/schema.md): GraphQL Yoga makes no assumptions about the schema building library you want to use. - [GraphiQL](https://the-guild.dev/graphql/yoga-server/docs/features/graphiql.md): GraphiQL is an in-browser IDE for writing, validating, and testing GraphQL queries. - [GraphQL Context](https://the-guild.dev/graphql/yoga-server/docs/features/context.md): How to use GraphQL Context in GraphQL Yoga - [Error Masking](https://the-guild.dev/graphql/yoga-server/docs/features/error-masking.md): Yoga automatically masks unexpected errors and prevents leaking sensitive information to clients. - [Execution Cancellation](https://the-guild.dev/graphql/yoga-server/docs/features/execution-cancellation.md): Yoga has experimental support for canceling the GraphQL execution. - [Introspection](https://the-guild.dev/graphql/yoga-server/docs/features/introspection.md): Learn how to disable GraphQL Yoga schema introspection and the "did you mean x" suggestion feature. - [Subscriptions](https://the-guild.dev/graphql/yoga-server/docs/features/subscriptions.md): A GraphQL subscription initiates an event stream, where each event in the stream is pushed from the server to the client that issued the subscription. - [File Uploads](https://the-guild.dev/graphql/yoga-server/docs/features/file-uploads.md): GraphQL Yoga supports the GraphQL Multipart Request Specification, allowing you to upload files and consume the binary data inside GraphQL Resolvers via HTTP. - [Defer and Stream](https://the-guild.dev/graphql/yoga-server/docs/features/defer-stream.md): Use @defer and @stream with GraphQL Yoga. Stream and defer are directives that allow you to improve latency for clients by sending the most important data as soon as it's ready. - [Batching](https://the-guild.dev/graphql/yoga-server/docs/features/request-batching.md): Batching is the process of taking a group of requests, combining them into one, and making a single request with the same data that all of the other queries would have made. - [CORS](https://the-guild.dev/graphql/yoga-server/docs/features/cors.md): Configure CORS in GraphQL Yoga. CORS stands for Cross Origin Resource Sharing. In a nutshell, as a security measure, browsers aren't allowed to access resources outside their own domain. - [CSRF Prevention](https://the-guild.dev/graphql/yoga-server/docs/features/csrf-prevention.md): Prevent CSRF in GraphQL Yoga. If you have CORS enabled, almost all requests coming from the browser will have a preflight request - however, some requests are deemed "simple" and don't make a preflight. - [Parsing and Validation Caching](https://the-guild.dev/graphql/yoga-server/docs/features/parsing-and-validation-caching.md): By default, Yoga will maintain a parsing and validation cache. If requests contain documents that have been executed before, they will not be parsed and validated again. - [Response Caching](https://the-guild.dev/graphql/yoga-server/docs/features/response-caching.md): Response caching is a technique for reducing server load by caching GraphQL query operation results. - [Persisted Operations](https://the-guild.dev/graphql/yoga-server/docs/features/persisted-operations.md): Persisted operations is a mechanism for preventing the execution of arbitrary GraphQL operation documents. - [Automatic Persisted Queries](https://the-guild.dev/graphql/yoga-server/docs/features/automatic-persisted-queries.md): Use Automatic Persisted Queries with GraphQL Yoga. APQ is a protocol for reducing the overhead of sending the same GraphQL documents to the server over and over again. - [Logging and Debugging](https://the-guild.dev/graphql/yoga-server/docs/features/logging-and-debugging.md): Yoga uses 4 log levels `debug`, `info`, `warn` and `error`. By default, Yoga will only log `info`, `warn` and `error` messages. - [Health Check](https://the-guild.dev/graphql/yoga-server/docs/features/health-check.md): Yoga is aware of the usefulness of a health check and gives the user maximum possibilities to use the built-in check and create a "readiness" check through a simple plugin. - [REST API](https://the-guild.dev/graphql/yoga-server/docs/features/sofa-api.md): Sofa takes your GraphQL Schema, looks for available queries, mutations and subscriptions and turns all of that into REST API. - [Cookies](https://the-guild.dev/graphql/yoga-server/docs/features/cookies.md) - [Apollo Federation](https://the-guild.dev/graphql/yoga-server/docs/features/apollo-federation.md): Learn how to use GraphQL Yoga with Apollo Federation to build a gateway server and a federated service. - [Testing](https://the-guild.dev/graphql/yoga-server/docs/features/testing.md): GraphQL Yoga makes it easy to test your GraphQL API. It has built-in support for HTTP injection. You can use any testing framework of your choice. - [JWT](https://the-guild.dev/graphql/yoga-server/docs/features/jwt.md): Learn how to add support for JWT authentication. - [Landing Page](https://the-guild.dev/graphql/yoga-server/docs/features/landing-page.md): Learn more about landing page customization in GraphQL Yoga - [Request Customization](https://the-guild.dev/graphql/yoga-server/docs/features/request-customization.md): You can customize the request handling in GraphQL Yoga - [Explicit Resource Management](https://the-guild.dev/graphql/yoga-server/docs/features/explicit-resource-management.md) - [Custom Plugins](https://the-guild.dev/graphql/yoga-server/docs/features/envelop-plugins.md): GraphQL Server with focus on easy setup, performance & great developer experience - [Preparing for Production](https://the-guild.dev/graphql/yoga-server/docs/prepare-for-production.md): Placeholder Placeholder Placeholder Placeholder Placeholder Placeholder - [AWS Lambda](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-aws-lambda.md): AWS Lambda is a serverless computing platform that makes it easy to build applications that run on the AWS cloud. GraphQL Yoga is platform agnostic so they can fit together easily. - [Cloudflare Workers](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-cloudflare-workers.md): GraphQL Yoga provides you a cross-platform GraphQL Server. So you can easily integrate it into any platform besides Node.js. - [Google Cloud Platform](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-gcp.md): Google Cloud Platform (GCP) is a suite of cloud computing services powered by Google. It is easy to use GraphQL Yoga with GCP. - [Azure Functions](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-azure-functions.md) - [Deno](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-deno.md): Run GraphQL Yoga on Deno. Yoga is a cross-platform GraphQL server, so it integrates into any runtime besides Node.js. - [Express](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-express.md): Integrate GraphQL Yoga with Express, the most popular web framework for Node.js, a minimalist framework with a robust set of features to handle HTTP on Node.js applications. - [Fastify](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-fastify.md): Integrate GraphQL Yoga with Fastify, one of the popular HTTP server frameworks for Node.js, a very simple yet powerful framework that is easy to learn and use. - [Koa](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-koa.md): Integrate GraphQL Yoga with Koa, a new web framework designed by the team behind Express, which aims to be a smaller, more expressive, and more robust foundation for web applications and APIs. - [NestJS](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-nestjs.md): Nest (Nest JS) is a progressive Node.js framework for building efficient, reliable and scalable server-side applications. - [Next.js](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-nextjs.md): Next.js is a web framework that allows you to build websites very quickly and GraphQL Yoga can be integrated with Next.js easily as an API Route. - [SvelteKit](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-sveltekit.md): SvelteKit is the fastest way to build svelte apps. It is very simple, and let you build frontend & backend in a single place. - [Hapi](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-hapi.md): Hapi allows you to build powerful, scalable applications, with minimal overhead and full out-of-the-box functionality - your code, your way. - [Bun](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-bun.md): Run GraphQL Yoga on Bun. Yoga is a cross-platform GraphQL server, so it integrates into any runtime besides Node.js. - [µWebSockets.js](https://the-guild.dev/graphql/yoga-server/docs/integrations/integration-with-uwebsockets.md): Integrate GraphQL Yoga with µWebSockets.js, an HTTP/WebSocket server for Node.js. - [Other Environments](https://the-guild.dev/graphql/yoga-server/docs/integrations/z-other-environments.md): If you have a different environment that you want to integrate with, you can implement your middleware/handler like the example below. - [Apollo Server](https://the-guild.dev/graphql/yoga-server/docs/migration/migration-from-apollo-server.md): Migrating from Apollo Server to GraphQL Yoga. Learn how to migrate from Apollo Server to GraphQL Yoga. - [Express GraphQL](https://the-guild.dev/graphql/yoga-server/docs/migration/migration-from-express-graphql.md): Migrate from Express GraphQL to GraphQL Yoga. GraphQL Yoga is a fully-featured GraphQL Server with focus on easy setup, performance & great developer experience. - [Yoga v1](https://the-guild.dev/graphql/yoga-server/docs/migration/migration-from-yoga-v1.md): Migrate from Yoga V1 to Yoga V2. Learn about the new features and how to upgrade. - [Yoga v2](https://the-guild.dev/graphql/yoga-server/docs/migration/migration-from-yoga-v2.md): Now GraphQL Yoga has a single NPM package for all environments `graphql-yoga` instead of `@graphql-yoga/common` and `@graphql-yoga/node`. - [Yoga v3](https://the-guild.dev/graphql/yoga-server/docs/migration/migration-from-yoga-v3.md) - [Comparison](https://the-guild.dev/graphql/yoga-server/docs/comparison.md): This comparison highlights the main differences when using Yoga instead of Apollo Server. ## Tutorial - [Introduction](https://the-guild.dev/graphql/yoga-server/tutorial/basic.md): Learn how to build a GraphQL HTTP server entirely from scratch using Node.js, TypeScript, GraphQL Yoga, Prisma and SQLite. - [Project Setup](https://the-guild.dev/graphql/yoga-server/tutorial/basic/01-project-setup.md): Learn how to create a basic NodeJS project with TypeScript. - [Getting Started](https://the-guild.dev/graphql/yoga-server/tutorial/basic/02-getting-started.md): Learn how to create a GraphQL schema and how to query it directly, without a GraphQL server. - [GraphQL Server](https://the-guild.dev/graphql/yoga-server/tutorial/basic/03-graphql-server.md): Now that you have a GraphQL schema, and you understand the concept of GraphQL schema and a GraphQL query, it's time to create a real GraphQL server. - [Query Definition](https://the-guild.dev/graphql/yoga-server/tutorial/basic/04-a-simple-query.md): Implement the first GraphQL object types and fields that provide the functionality of a Hacker News - [A Simple Mutation](https://the-guild.dev/graphql/yoga-server/tutorial/basic/05-a-simple-mutation.md): Learn how to add a Mutation field to your GraphQL API - [Adding a Database](https://the-guild.dev/graphql/yoga-server/tutorial/basic/06-adding-a-database.md): Learn how to build a GraphQL server from scratch using Node.js, TypeScript, and Prisma - [Connecting Server and Database](https://the-guild.dev/graphql/yoga-server/tutorial/basic/07-connecting-server-and-database.md): Connect your GraphQL server to your database using Prisma, which provides the interface to your database. - [Graph Relations](https://the-guild.dev/graphql/yoga-server/tutorial/basic/08-graph-relations.md): Introduce a new object type `Comment` (and the corresponding Prisma model) in your code and also write a `Link.comments` field for retrieving all the comments that belong to a `Link`. - [Error Handling](https://the-guild.dev/graphql/yoga-server/tutorial/basic/09-error-handling.md): Learn the origin of this error and learn how to properly handle it. - [Filtering and Pagination](https://the-guild.dev/graphql/yoga-server/tutorial/basic/10-filtering-and-pagination.md): Learn how to implement a GraphQL API with Node.js and TypeScript using Prisma Client. - [Setting up GraphQL Code Generator](https://the-guild.dev/graphql/yoga-server/tutorial/basic/11-setting-up-graphql-code-generator.md): Set up GraphQL Code Generator and Server Preset in your project to enforce type-safety and runtime safety. - [Summary](https://the-guild.dev/graphql/yoga-server/tutorial/basic/12-summary.md): Learn how to build a HackerNews clone GraphQL server from scratch using GraphQL Yoga!