Validate queries agains a GraphQL Schema

Usage no npm install needed!

<script type="module">
  import city41GraphqlValidator from 'https://cdn.skypack.dev/@city41/graphql-validator';



This is a fork of @creditkarma/graphql-validator

The changes I have made are:

  • updated the dependencies to current stuff (well, current at time of this writing)
  • load schema from graphql files using merge-graphql-schemas instead of @creditkarma/graphql-loader
  • allows adding arbitrary directives using -d. This allows validation to still succeed when using third party directives that aren't necessarily directly in your schema, such as @client for apollo-link-state

Not Intended For General Use (at least not yet)

I made this fork to meet my project's needs. I may keep tinkering on this and possibly send a PR to creditkarma if they agree with my changes.

To Install

npm install @city41/graphql-validator

To Use

graphql-validator -s **/schemaFiles/*.graphql -d additional,directives,comma,separated ./queryFiles/*.graphql

-d is optional. For example, if your queries have the @client directive in them from apollo-link-state, you can add -d client, and that will allow that directive to pass validation. Otherwise graphql's validation will declare that directive is not defined and fail validation.

Original README follows...


A CLI tool to validate queries against a GraphQL Schema. The primary use case for this tool is to validate schema changes against an existing query store.


To use the validator as a command line tool

npm install -g graphql @creditkarma/graphql-validator

To use the validator locally in a project

npm install --save graphql @creditkarma/graphql-validator


Given the following files


schema {
  query: RootQuery


type RootQuery {
  testString: String



Validate the query

Validate the query with the following code:

const loadSchema = require('@creditkarma/graphql-loader')
const validator = require('@creditkarma/graphql-validator')

loadSchema('./schema/*.graphql', (err, schema) => {
  validator.validateQueryFiles('./queries/*.graphql', schema, (errors) => {
    if (errors) {
         console.log('errors', errors);
    } else {
        console.log('All queries validated');

Validate the query using promises:

const loadSchema = require('@creditkarma/graphql-loader')
const validator = require('@creditkarma/graphql-validator')

loadSchema('./schema/*.graphql').then((schema) => {
  validator.validateQueryFiles('./queries/*.graphql', schema).then((results) => {

Validate query using CLI tool

> graphql-validator -s "./schema/**/*.graphql" "./queries/*.graphql"

The validator will first load and validate the schema, throwing errors if the schema isn't valid. Then it will check each query in the file glob by parsing the query and validating it against the schema. If errors are found, the will be displayed by file name and exit with exit code 1.

Note: you must use quotes around each file glob or the utility will not work properly.


Install dependencies with

npm install
npm run typings


npm run build

Run test in watch mode

npm run test:watch


For more information about contributing new features and bug fixes, see our Contribution Guidelines. External contributors must sign Contributor License Agreement (CLA)


This project is licensed under Apache License Version 2.0