What is openCypher?

The openCypher project aims to deliver a full and open specification of the industry’s most widely adopted graph database query language: Cypher.

Focus on Your Domain

Graphs naturally describe your domain, and Cypher lets you focus on that domain instead of getting lost in the mechanics of data access. Both expressive and efficient, Cypher is intuitive and immediately familiar, without the steep learning curve of learning a new language.

Human Readable

Cypher is a human-readable query language that makes complex things possible. A combination of English prose and intuitive iconography, Cypher is accessible to developers and operations professionals alike.

Complete Open Source Access

The openCypher project means you can use Cypher as your query language for graph processing capabilities within any product or application. Everyone from Oracle and Apache Spark to Tableau and Structr can (and do) use Cypher’s capabilities – now you can too.

    MATCH (cypher:QueryLanguage)-[:QUERIES]->(graphs)
    MATCH (cypher)<-[:USES]-(u:User) WHERE u.name IN [‘Oracle’, ‘Apache Spark’, ‘Tableau’, ‘Structr’]
    MATCH (openCypher)-[:MAKES_AVAILABLE]->(cypher)
    RETURN cypher.attributes

The openCypher project aims to improve growth and adoption of graph processing and analysis by providing an open graph query language to any data store, tooling or application provider as a mechanism to query graph data.

  • Provides a query language with full support
  • Makes graph processing and analysis easier to adopt
  • Grants vendor independence to all users
  • Eases graph integration with other data platforms

Check out the openCypher GitHub repository to track our progress, leave feature requests, and become a participant in our open source community.

openCypher on GitHub


openCypher Grammar and Technology Compatibility Kit

October 2016 - The openCypher project has produced two significant new features in 2016: an Extended BNF grammar which formally defines the permitted syntax of Cypher, and a TCK (Technology Compatibility Kit).

An XML grammar definition is used to generate an EBNF and an Antlr4 grammar for use by projects who wish to parse Cypher, and "Railroad Diagrams" which document the syntax.

openCypher is a declarative language which is not tied to any general-purpose programming language or domain-specific language. In line with this approach, the TCK is a Cucumber-based set of tests that can be used for any Cypher implementation in any of the many languages supported by Cucumber.

Several contributors and users have been using openCypher; read more about them in Community projects.

The next stage in the project is to create a Reference Implementation (RI), which should make it easier to create systems that use Cypher as the programming interface for graph applications when they interact with a graph database or query engine.

The Reference Implementation will include a parser that generates an Abstract Syntax Tree (AST) and logical query plan. Implementors of JVM query engines will be able to take the RI as a starting point, implementing the underlying concrete query planner and runtime engine/data storage.

The members of the Cypher Language Group are also beginning to start work on a semantic specification for Cypher. An English-language semantic specification will enable Cypher implementations completely independent from the openCypher codebase, including implementations using non-JVM languages.

At the same time we've been approaching the growing number of product and service vendors who are offering property graph databases or data storage services, to explore the best way to come together around an open standards process for a declarative property graph query language that occupies the same ecological niche as SQL does for relational query processors.

Frequently Asked Questions

Cypher is a graph query language that allows for expressive and efficient querying of graph data. Cypher is intuitive, powerful and easy to learn.

It lets you write graph queries by describing patterns in your data. Because graphs already describe your domain, Cypher lets you focus on your domain instead of getting lost in the mechanics of data access.

Designed to be a human readable query language, Cypher is suitable for developers and operations professionals alike. The guiding principle behind Cypher is to make simple things easy and complex things possible. Cypher combines English prose and intuitive iconography, making queries more self-explanatory.

Cypher is declarative, which means it lets users express what data to retrieve, letting the engine underneath take care of seamlessly retrieving it. In contrast, imperative or scripting languages, including early-generation graph languages, require query writes to have a deep technical understanding of physical implementation details. Cypher eliminates this burden.

The expressive querying of Cypher is inspired by a number of different approaches and established practices. Most of the keywords, such as WHERE and ORDER BY , are inspired by SQL, while pattern matching borrows from SPARQL. In addition, some of the collection semantics have been borrowed from languages such as Haskell and Python.

The openCypher project makes it possible for any developer or technology provider to use Cypher and incorporate graph processing capabilities within that product or application.

Easy-to-learn and yet extremely powerful, Cypher is the industry’s most successful and widely adopted graph query language. With the advent of openCypher, the language promises to be just as instrumental in the growth of graph processing and analysis as SQL was instrumental in accelerating the adoption of RDBMS.

With tens of thousands of users already trained in Cypher and numerous tooling providers already offering support for the language, openCypher provides a seamless way for industry participants to provide graph capabilities in their data platforms – ranging from database suppliers, tooling vendors and the broader graph ecosystem.

For data and tooling providers:
  • Improve time to market with tools, tests and specifications that enable rapid access to graph processing capabilities
  • Collaborate on the evolution of Cypher to increase the size of the graph ecosystem
For application developers:
  • Reuse graph query knowledge and skills across a multitude of products that support
  • Cypher as the graph query language
For enterprises:
  • Interoperability and vendor independence by interfacing with products using a common query language
  • Higher availability of skilled developers trained in a graph query language used across multiple products

The project aims to deliver four types of artifacts:

  • Cypher Reference Documentation
    Comprehensive user documentation describing use of the Cypher query language with examples and tutorials.
  • Technology certification kit (TCK)
    The TCK consists of a number of tests that a software supplier would run in order to self-certify support for a given version of Cypher.
  • Reference implementation
    Distributed under the Apache 2.0 license, the reference implementation is a fully functional implementation of key parts of the stack needed to support Cypher inside a data platform or tool. The first planned deliverable is a parser that will take a Cypher statement and parse it into an AST (abstract syntax tree) representation. The reference implementation complements the documentation and tests by providing working implementations of Cypher – which are permissively licensed – and can be used as examples or as a foundation for one’s own implementation.
  • Cypher language specification
    Licensed under the Creative Commons license, the Cypher language specification is a technical expression of the language syntax to enable parsers to auto-generate the query syntax. A full semantic specification is also planned as a part the openCypher project.


"Oracle is a strong supporter of standard, open APIs and languages. As with SQL, we believe open language standards accelerate platform and paradigm adoption. With the release of Oracle Big Data Spatial and Graph and our longstanding support for the Spatial and Graph option for Oracle Database, we are excited to deliver new, scalable solutions to the graph community. openCypher offers the graph community an opportunity to address the need for standards-based interfaces to simplify graph data access."
- Jim Steiner, Vice President, Spatial and Graph Technologies, Oracle


"Graph processing is becoming an indispensable part of the modern big data stack. Neo4j’s Cypher query language has greatly accelerated graph database adoption. We look forward to bringing Cypher’s graph pattern matching capabilities into the Spark stack, making graph querying more accessible to the masses."
- Ion Stoica, CEO, DataBricks

Neo Technology

"Companies such as Google, Facebook and LinkedIn have leveraged graph processing to transform their respective industries. openCypher promises to bring the same transformative power of graphs to enterprises of any size."
- Emil Eifrem, CEO of Neo Technology, Creator of Neo4j and Cypher

Community Projects

Graph Database Support

The plugin may be used with, for example, IntelliJ IDEA, where it provides completion and highlighting of Cypher strings.



Ruruki is a pure Python lightweight in-memory graph database designed to be used for proof of concept projects or if you just need a temporary graph structure.

Ruruki bases its parser implementation on the EBNF grammar provided by openCypher.



libcypher-parser is a parser library and validation (lint) tool for Cypher. The parser is written in C, and is intended for building tools and libraries in various languages.

libcypher-parser bases its implementation on CIP documents and the grammar specification.



The aim of the ingraph project is to evaluate openCypher graph queries incrementally. Our long-term goal is to provide a horizontally scalable graph query engine, which is able to perform complex graph queries on graphs with 100M+ elements.

ingraph uses the Antlr4 grammar for parsing, and the TCK as a reference for the formalization & implementation.



slizaa is a customizable software architecture workbench that allows you to explore and visualize the structure and the dependencies of java-based software systems. slizaa uses Neo4j/jQAssistant and provides a frontend with a bunch of specific tools and viewers to provide an easy-to-use in-depth insight of your software's architecture.

Part of slizaa is a Xtext-based editor for Cypher queries that will be included in one of the next releases of slizaa. The Xtext-based implementation is based of the Antlr4 grammar provided by the openCypher project and is already available (see links below).


Agens Graph

Agens Graph is a multi-model (Relational + Graph) database. It is based on PostgreSQL RDBMS. With Agens Graph, one can retrieve a result from both relational and graph by a single query at the same time. Agens Graph supports ACID transactions and implements the graph data model.

The railroad diagrams and CIPs have been used as reference.



ocparse is based on the EBNF grammar.


Cypher Improvement Proposals (CIPs)

The evolution of Cypher is driven by the production and acceptance of CIPs. CIPs are documents that outline the syntax and semantics of proposed new Cypher features.

The CIP Lifecycle

CIPs normally pass through a number of phases in the process of incorporating them into the language.


Accepted CIPs are added to the openCypher repository, and can be found here. It is open to anyone to author and submit a CIP, which takes the form of a pull request to the openCypher repository. It is then the task of the Cypher Language Group to discuss, give feedback, and eventually (potentially) accept the CIP, at which point the pull request will be merged.


A CIP enters this phase when it has received a sufficient set of TCK scenarios that outline the use of its suggested features. A list of CIPs in this state can be found here.

openCypher Resources

The table below provides links to consumable artifacts produced as part of the openCypher project.

Resource name Latest stable version Snapshot version
Technology Compliance Kit (TCK) tck-M03 tck-snapshot
Grammar specification grammar-M03 grammar-snapshot
Antlr grammar antlr-grammar-M03 antlr-grammar-snapshot
Antlr grammar (legacy*) antlr-grammar-legacy-M03 antlr-grammar-legacy-snapshot
EBNF grammar ebnf-grammar-M03 ebnf-grammar-snapshot
EBNF grammar (legacy*) ebnf-grammar-legacy-M03 ebnf-grammar-legacy-snapshot
Railroad diagrams railroad-M03 railroad-snapshot
Railroad diagrams (legacy*) railroad-legacy-M03 railroad-legacy-snapshot

The process of standardising the Cypher language has led to two versions of the grammar being maintained: standardised and legacy.

The standardised version only includes the Cypher language constructs that have been adopted for standardisation, as detailed in the Standardisation Scope document.

* The legacy version of the grammar (and artifacts generated from it) additionally includes Cypher language constructs that are supported by vendors, but have not been selected for standardisation. Read more about this here.

Stay Connected