Skip to content

Repository files navigation



nest badge GitHub Workflow Status Codecov

gql

Universal and spec-compliant GraphQL HTTP middleware for Deno and Bun. Based on graphql-http.

Features

  • ✨ Works with Deno.serve, Bun.serve and oak
  • ⚡ GraphQL Playground integration (via graphiql: true)
  • 🔄 Async context initialization support for auth, DB queries, and more

Version compatibility

The schema you pass to GraphQLHTTP must come from the same major version of graphql that gql itself uses — graphql rejects schemas built by a different copy of itself, both at type-check time and at runtime.

graphql gql
v17 v5
v16 v4

Get started

The simplest setup with Deno.serve:

import { GraphQLHTTP } from 'jsr:@deno-libs/gql@5.0.1'
import { makeExecutableSchema } from 'npm:@graphql-tools/schema@10.0.38'
import { gql } from 'jsr:@deno-libs/graphql-tag@0.2.0'

const typeDefs = gql`
  type Query {
    hello: String
  }
`

const resolvers = {
  Query: {
    hello: () => `Hello World!`,
  },
}

const schema = makeExecutableSchema({ resolvers, typeDefs })

Deno.serve({
  port: 3000,
  onListen({ hostname, port }) {
    console.log(`☁  Started on http://${hostname}:${port}`)
  },
}, async (req) => {
  const { pathname } = new URL(req.url)
  return pathname === '/graphql'
    ? await GraphQLHTTP<Request>({
      schema,
      graphiql: true,
    })(req)
    : new Response('Not Found', { status: 404 })
})

Then run:

$ curl -X POST localhost:3000/graphql -d '{ "query": "{ hello }" }' -H "Content-Type: application/json"
{
  "data": {
    "hello": "Hello World!"
  }
}

Or in the GraphQL Playground:

image

About

☁ Universal GraphQL HTTP middleware for Deno and Bun

Topics

Resources

Stars

204 stars

Watchers

3 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages