Declarative, code-first and strongly typed GraphQL schema construction for TypeScript & JavaScript.
This is a component of the Nexus Framework but can be used as well standalone.
npm install @nexus/schema graphql
Note you must also add graphql. Nexus Schema pins to it as a peer dependency.
- Expressive, declarative API for building schemas
- Full type-safety for free
- Powerful plugin system
- No need to re-declare interface fields per-object
- Optionally possible to reference types by name (with autocomplete)
 Rather than needing to import every single piece of the schema
- Interoperable with vanilla graphql-jstypes, and it's just aGraphQLSchema
 So it fits in just fine with existing community solutions ofapollo-server,graphql-middleware, etc.
- Inline function resolvers
 For when you need to do simple field aliasing
- Auto-generated graphql SDL schema
 Great for when seeing how any code changes affected the schema
- DRY-up schema design
 Create higher level "functions" which wrap common fields
import { queryType, stringArg, makeSchema } from "@nexus/schema";
import { GraphQLServer } from "graphql-yoga";
const Query = queryType({
  definition(t) {
    t.string("hello", {
      args: { name: stringArg({ nullable: true }) },
      resolve: (parent, { name }) => `Hello ${name || "World"}!`,
    });
  },
});
const schema = makeSchema({
  types: [Query],
  outputs: {
    schema: __dirname + "/generated/schema.graphql",
    typegen: __dirname + "/generated/typings.ts",
  },
});
const server = new GraphQLServer({
  schema,
});
server.start(() => `Server is running on http://localhost:4000`);More examples can be found in the /examples directory:
You can find the docs for Nexus Schema here.
If you've been following an SDL-first approach to build your GraphQL server and want to see what your code looks like when written with GraphQL Nexus, you can use the SDL converter.