Skip to content

Neo4j Compatibility

CoordiNode is OpenCypher-compatible and supports common Neo4j workloads via the gRPC API. This page tracks what works today and what is planned.

Full Bolt protocol compatibility is planned for v1.2

The Neo4j wire protocol (Bolt) is not yet implemented. In this release, use the native gRPC API or any gRPC-compatible client.

Query Language (OpenCypher)

FeatureStatusNotes
MATCH / OPTIONAL MATCH✅ SupportedFull pattern matching
WHERE (comparisons, boolean, IS NULL)✅ SupportedAll standard operators
RETURN / ORDER BY / LIMIT / SKIP✅ SupportedWith expressions and aliases
CREATE / MERGE / DELETE / DETACH DELETE✅ SupportedFull write operations
SET / REMOVE✅ SupportedProperties and labels
WITH / UNWIND✅ SupportedPipeline and list expansion
Variable-length paths *1..N✅ SupportedConfigurable; default max 10 hops
Shortest path✅ SupportedBFS-based
CASE WHEN✅ SupportedSimple and searched forms
Aggregations✅ Supportedcount, sum, avg, min, max, collect, stDev, percentile
x IN [...]✅ SupportedList membership
STARTS WITH / ENDS WITH / CONTAINS✅ SupportedCase-sensitive
Pattern predicates in WHERE✅ SupportedWHERE (a)-[:R]->(b)
Map projection n { .prop }✅ Supported
UPSERT MATCH (atomic)🔷 ExtensionNot in Neo4j Cypher
AS OF TIMESTAMP🔷 ExtensionTime-travel reads
vector_distance() / vector_similarity()🔷 ExtensionNative vector search
text_match() / text_score()🔷 ExtensionNative full-text search
point() / point.distance()✅ / 🔷point() is standard; Haversine implementation
EXPLAIN (logical plan)✅ SupportedVia CypherService.Explain
EXPLAIN SUGGEST🔷 ExtensionQuery advisor
CALL procedures⚠️ PartialOnly db.advisor.suggestions() in this release
CALL {} subqueries📋 Planned
FOREACH📋 Plannedv1.0 milestone
LOAD CSV📋 Plannedv1.2 milestone

Scalar Functions

Most Neo4j scalar functions are not yet implemented. See Functions reference for the full list.

Function categoryStatus
coalesce, toString, size, now, type, labels✅ Supported
toInteger, toFloat, toLower, toUpper📋 Returns null (planned)
length, abs, ceil, floor, round, sqrt📋 Returns null (planned)
trim, substring, replace, split📋 Returns null (planned)
head, tail, last, range, reverse📋 Returns null (planned)
id, elementId, properties, keys📋 Returns null (planned)

Data Types

TypeStatusNotes
String, Integer, Float, Boolean, Null✅ SupportedStandard types
List✅ SupportedHomogeneous or mixed lists
Map✅ SupportedString-keyed maps
Point (spatial WGS84)✅ SupportedLat/lon coordinates
DateTime / Timestamp✅ SupportedMicrosecond precision, UTC
Duration📋 Planned
Vector🔷 ExtensionUp to 65536 dimensions
Blob🔷 ExtensionContent-addressed binary storage

Indexes

TypeStatusNotes
B-tree (single property)✅ SupportedStandard performance index
Composite (multi-property)📋 Planned
Unique constraint✅ SupportedEnforced at commit time
Sparse (skip nulls)✅ SupportedCREATE SPARSE INDEX
Partial (filtered)✅ SupportedCREATE INDEX ... WHERE predicate
Text index (full-text BM25)✅ Supported30+ languages, fuzzy, phrase
Vector index (HNSW)🔷 ExtensionApproximate nearest neighbor
Vector index (Flat/exact)🔷 ExtensionExact NN for small datasets
Encrypted index (SSE)🔷 ExtensionSearchable symmetric encryption
TTL index🔷 ExtensionAutomatic expiration (planned DDL)
Point index (spatial R-tree)📋 Plannedv1.0 milestone
Lookup index📋 PlannedNeo4j-specific

Protocols

ProtocolStatusNotes
gRPC (port 7080)✅ ActiveNative high-performance API
HTTP/REST (port 7081)📋 PlannedJSON transcoding of gRPC endpoints
Bolt (Neo4j wire protocol, port 7082)📋 Planned v1.2Neo4j drivers will connect without code changes
WebSocket (port 7083)📋 PlannedSubscriptions and live queries

Drivers

DriverStatusNotes
Any gRPC client✅ SupportedProto definitions at github.com/structured-world/coordinode-proto-ce
Generated Rust client✅ SupportedFrom proto
Neo4j Python driver📋 Planned v1.2Via Bolt protocol
Neo4j JavaScript driver📋 Planned v1.2Via Bolt protocol
Neo4j Java driver📋 Planned v1.2Via Bolt protocol
Neo4j Go driver📋 Planned v1.2Via Bolt protocol

CoordiNode vs Neo4j

CoordiNode has, Neo4j doesn't:

  • Native vector search — HNSW indexes on nodes AND edges. No plugin required.
  • Encrypted search (SSE) — query encrypted fields without decryption. Programmatic API in this release; Cypher DDL planned.
  • Time-travel queries (AS OF TIMESTAMP) — read historical snapshots within 7-day retention.
  • Partial indexes — index with a WHERE predicate. Only matching nodes are indexed.
  • TTL indexes — automatic node/subtree expiration. Background reaper every 60s.
  • Built-in query advisor (EXPLAIN SUGGEST) — detects missing indexes, unbounded traversals, Cartesian products, and KNN patterns without vector indexes.
  • Free 3-node HA clustering — Raft consensus. Neo4j charges per-node for equivalent clustering.
  • UPSERT MATCH — atomic upsert without TOCTOU race conditions.
  • Document properties — nested maps with dot-notation access and concurrent-safe array mutations.
  • Vectors on edges — SIMILAR edges can store embeddings.
  • SET ON VIOLATION SKIP — skip constraint-violating nodes without aborting the query.
  • MERGE NODES — native first-class entity-resolution / deduplication. MERGE NODES (a, b) INTO a TRANSFER EDGES FROM b TO a collapses two nodes in a single transaction with property merge (KEEP FIRST / KEEP LAST / COALESCE / SET) and duplicate-edge handling (KEEP BOTH / MERGE PROPERTIES / KEEP TARGET). Neo4j requires the APOC plugin (apoc.refactor.mergeNodes()), which is fragile under clustering.
  • Native triggersCREATE / DROP / SHOW / ALTER TRIGGER as first-class Cypher clauses (not a plugin). Definitions persist in the schema partition, replicate through Raft, survive backups. BEFORE / AFTER COMMIT timing, per-trigger ON ERROR PROPAGATE | RETRY n [WITH BACKOFF ms] | DEAD_LETTER, plus four-layer cycle protection: L1 cascade depth + L2 unique-trigger fanout (per-trigger overrides CASCADE_LIMIT / CASCADE_FANOUT), L3 static cycle detection at DDL (planned), L4 auto-disable circuit breaker (planned). Neo4j's equivalent is APOC's apoc.trigger.add() — a JAR that breaks under clustering, doesn't survive neo4j-admin restore, and has no cycle protection beyond per-trigger MAXDEPTH.

Neo4j has, CoordiNode doesn't (yet):

  • Bolt protocol (📋 planned v1.2)
  • APOC procedures library (partial support 📋 planned)
  • LOAD CSV (📋 planned v1.2)
  • GDS (Graph Data Science) library
  • Neo4j Browser / Bloom visualization
  • Cypher subqueries (CALL {} syntax) (📋 planned)
  • Most scalar functions (toLower, toInteger, abs, etc.) (📋 planned)
  • HTTP/JSON API (📋 planned v1.1)
  • WebSocket subscriptions (📋 planned)
  • Composite indexes
  • Cypher duration type