Cypher Improvement Proposals (CIPs)

The evolution of Cypher is driven by the production and acceptance of CIPs, which are written as a response to Cypher Improvement Requests (CIRs). CIRs are feature requests, and are raised as issues to the openCypher repository. CIPs are documents that outline the syntax and semantics of the proposed new Cypher features.

The CIP Lifecycle

CIPs normally pass through a number of phases in the process of incorporating them into the language: proposed, accepted and testable.

 

Proposed

Anyone may author and submit a CIP, which takes the form of a pull request (PR) to the openCypher repository. It is then the task of the openCypher Implementers Group (oCIG) to discuss, give feedback, and eventually (potentially) accept the CIP, at which point the pull request will be merged, and the CIP will be marked as "Accepted".

Currently proposed CIPs (including a link to the pull request)
[PR] Considerations for Set Algebra in OpenCypher The proposal for set algebra in Cypher.
[PR] CIP2017-10-17 Cypher version 9 The proposal for the features included in Cypher version 9.
[PR] CIP2017-06-18 Multiple Graphs Describes extending Cypher to support the construction, transformation, and querying of multiple graphs.
[PR] CIP2017-05-18 Plus operators Defines the "+" and "++" operators.
[PR] CIP2017-04-24 UNWIND Describes the UNWIND and OPTIONAL UNWIND clauses.
[PR] CIP2017-04-20 Query combinators for set operations Describes how set operators work: all variations of UNION, INTERSECT, EXCEPT, OTHERWISE and CROSS.
[PR] CIP2017-04-13 Aggregations Describes syntax to address the current ambiguities in aggregations in Cypher.
[PR] CIP2017-03-29 Scalar Subqueries and List Subqueries Describes scalar subqueries (returning single values) and list subqueries (returning lists).
[PR] CIP2017-03-01 Subclauses Clarifies and defines subclauses.
[PR] CIP2017-02-07 Map Projection Details map projection: creating maps based on selected properties from an entity or input map.
[PR] CIP2017-02-06 Path Patterns Describes complex pattern matching: regular expressions over paths, and node and relationship tests.
[PR] CIP2017-01-18 Configurable Pattern Matching Semantics Describes the framework to allow for configurable pattern-matching semantics - relationship isomorphism, node isomorphism and homomorphism - to be defined at a query-by-query level.
[PR] CIP2016-12-16 Constraints syntax Describes the general framework, syntax and semantics for Cypher constraints.
[PR] CIP2016-12-16 Neo4j Indexes Neo4j's indexing extension to Cypher.
[PR] CIP2016-06-22 Nested, updating, and chained subqueries Incorporates nested, updating and chained subqueries into Cypher.
[PR] CIP2015-10-12 CREATE Formalizes the CREATE clause which is used in Cypher to create nodes and relationships.
[PR] CIP2015-08-06 Date and Time The addition of new date and time types for the management of temporal data.

Accepted

As soon as the pull request for an in-progress CIP is merged - after consensus to do so is reached by the oCIG - the CIP is considered to be part of openCypher. Accepted CIPs are added to the openCypher repository, and can be found here.

Accepted CIPs
CIP2016-12-19 Reserved keywords Defines a set of reserved keywords (i.e. keywords not permitted to be used as symbolic names).
CIP2016-06-14 Definitions for Comparability and Equality, and Orderability and Equivalence Redefines and formalizes four key language concepts: comparability, equality, orderability and equivalence.
CIP2016-01-26 The MANDATORY MATCH clause Describes the syntax and semantics for the MANDATORY MATCH clause.
CIP2015-11-09 Type coercions Describes how type coercions work in Cypher.
CIP2015-10-27 State visibility between clauses Formalizes the behavior of state changes within a Cypher query.
CIP2015-09-16 Public Type System and Type Annotations Specifies the Public Type System of Cypher and introduces literal syntax for writing down types as well as new syntax for type annotations.
CIP2015-06-24 Calling Procedures Introduces procedures as a new concept to Cypher.
CIP2015-05-13 Existential subqueries Introduces EXISTS, a function and a keyword for checking the existence of properties, simple patterns and full subqueries.

Testable

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.

Testable CIPs
CIP2016-07-07 Type conversion functions Renames the "toInt" function to "toInteger", and introduces "toBoolean".
CIP2016-07-07 Parameter syntax Describes the parameter syntax whereby the "{param}" syntax is replaced with "$param".
CIP2015-09-15 STARTS WITH and ENDS WITH Details the operators for string search (prefix search using STARTS WITH, suffix search using ENDS WITH and inclusion search using CONTAINS).
CIP2015-02-17 Dynamic Property Lookup Describes the syntax and semantics of looking up the key of any map or entity (either a node or a relationship) using a dynamically-computed string value, along with a function which returns the keys of any map or entity.