Skip to content
Deploy a Neo4j backed GraphQL API based on your GraphQL schema
Branch: master
Clone or download
Latest commit 56751db Aug 29, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin initial commit May 20, 2017
img update gif May 21, 2017
src Add .graphqlconfig support Aug 29, 2017
.gitignore add gitignore May 20, 2017
.npmignore add npmignore May 20, 2017
LICENSE add license May 20, 2017
README.md Add .graphqlconfig support Aug 29, 2017
movieSchema.graphql
package.json

README.md

Neo4j GraphQL CLI

Deploy Neo4j backed GraphQL APIs based on your custom GraphQL schema.

This is a very early project, under active development. Use for prototyping and demo projects only

What does it do?

neo4j-graphql-cli allows you to deploy a Neo4j GraphQL instance on Neo4j Sandbox. This Neo4j GraphQL instance will serve a GraphQL endpoint based on a user-defined GraphQL schema.

Steps

  1. npm install -g neo4j-graphql-cli
  2. Define your GraphQL schema using GraphQL schema syntax, myschema.graphql
  3. neo4j-graphql myschema.graphql - if you do not specify a schema a default movies schema will be used.
  4. When prompted sign into Neo4j Sandbox using the URL provided. This URL will include a token to associate your neo4j-graphql-cli session with your sandbox instance.
  5. Once your Neo4j GraphQL instance is deployed, you'll be presented with the credentials for your GraphQL instance, including a Graphiql URL.

Schema First Development

IDL / Schema Syntax

Neo4j GraphQL Schema

Neo4j GraphQL supports the basic schema syntax, with the addition of directives that expose the power of a graph database when combined with GraphQL:

  • @cypher

@cypher directive

The @cypher directive exposes the power of a full graph query language, Cypher, through GraphQL.

Example movies schema

type User {
  id: Int
  name: String!
  movies: [Movie] @relation(name: "RATED", direction: "out")
}

type Movie {
  id: Int
  title: String!
  year: Int
  plot: String
  poster: String
  imdbRating: Float
  genres: [Genre] @relation(name: "IN_GENRE", direction: "out")
  actors: [Actor] @relation(name: "ACTED_IN", direction: "in")
  directors: [Director] @relation(name: "DIRECTED", direction: "in")
  similar: [Movie] @cypher(statement: "WITH {this} AS this MATCH (this)-[:IN_GENRE]->(:Genre)<-[:IN_GENRE]-(rec:Movie) WITH rec, COUNT(*) AS num ORDER BY num DESC RETURN rec LIMIT 10")
}

type Genre {
  id: Int
  name: String!
  movies: [Movie] @relation(name: "IN_GENRE", direction: "in")
}

type Director {
  id: Int
  name: String!
  movies: [Movie] @relation(name: "DIRECTED", direction: "out")
}

type Actor {
  id: Int
  name: String!
  movies: [Movie] @relation(name: "ACTED_IN", direction: "out")
}

.graphqlconfig

neo4j-graphql-cli supports .graphqlconfig and will create a .graphqlconfig file that contains the path to the schema file, endpoints and authorization header. For example:

{
  "schemaPath":"personSchema.graphql",
  "extensions":
    {
      "endpoints":
      {
        "dev":
          {
            "url": "10-0-1-70-34285.neo4jsandbox.com/graphql/",
            "headers":
            {
              "Authorization":"Basic ${env:NEO4J_GRAPHQL_TOKEN}"
            }
          }
      }
    }
}

Features

  • deploy Neo4j GraphQL Sandbox instance
  • support user defined GraphQL schema
  • support @cypher GraphQL schema directives
  • .graphqlconfig support
  • support self-hosted Neo4j instances. NOTE: see
  • Docker support
  • support schema updates
  • client app scaffolding

Feedback

This project is in active development and user validation. Have a use case you'd like to see supported? We'd love to hear your feedback, please email devrel@neo4j.com

You can’t perform that action at this time.