Skip to main content

99%+ openCypher-compliant in-memory graph database — 4 backends, 31 algorithms, pure Rust

Project description

OCG — OpenCypher Graph

High-performance in-memory graph database with 99%+ OpenCypher compliance, 4 backends, and 31 algorithms — pure Rust.

PyPI Python License OpenCypher TCK Rust

Overview

OCG executes OpenCypher queries against in-memory property graphs. It is built in pure Rust and exposed to Python via PyO3 bindings.

  • 99%+ OpenCypher TCK: 3,859 / 3,897 scenarios passing
  • 4 graph backends: PropertyGraph, NetworKitRust, RustworkxCore, Graphrs
  • 31 graph algorithms: centrality, community detection, pathfinding, spanning trees, flow, coloring, matching
  • Bulk Loader API: 57x faster batch construction vs OpenCypher CREATE statements
  • Serialization: save/load graphs to JSON with full metadata
  • Python 3.8–3.13, macOS · Linux · Windows

Installation

pip install ocg

Rust:

[dependencies]
ocg = "0.2"

Quick Start

Python

from ocg import Graph

graph = Graph()

# OpenCypher queries
graph.execute("CREATE (a:Person {name: 'Alice', age: 30})")
graph.execute("CREATE (b:Person {name: 'Bob', age: 25})")
graph.execute("MATCH (a:Person), (b:Person) WHERE a.name='Alice' AND b.name='Bob' CREATE (a)-[:KNOWS]->(b)")

result = graph.execute("MATCH (a:Person)-[:KNOWS]->(b:Person) RETURN a.name AS from, b.name AS to")
print(result)  # [{'from': 'Alice', 'to': 'Bob'}]

Bulk Loader (10–57x faster)

Bypasses the OpenCypher parser for large batch operations:

from ocg import Graph

graph = Graph()

node_ids = graph.bulk_create_nodes([
    (["Person"], {"name": "Alice", "age": 30}),
    (["Person"], {"name": "Bob",   "age": 25}),
])

graph.bulk_create_relationships([
    (node_ids[0], node_ids[1], "KNOWS", {"since": 2020}),
])

result = graph.execute("MATCH (a)-[:KNOWS]->(b) RETURN a.name, b.name")

Serialization

graph.save("my_graph.json")
loaded = Graph.load("my_graph.json")

Rust

use ocg::{PropertyGraph, execute};

let mut graph = PropertyGraph::new();
execute(&mut graph, "CREATE (a:Person {name: 'Alice'})").unwrap();
let result = execute(&mut graph, "MATCH (n:Person) RETURN n.name").unwrap();

Graph Backends

Backend Class Description
PropertyGraph Graph Native petgraph-based property graph
NetworKitRust NetworKitGraph Port of NetworKit algorithms to pure Rust
RustworkxCore RustworkxGraph IBM Qiskit rustworkx-core algorithms
Graphrs GraphrsGraph graphrs-based community detection

All four backends expose identical APIs: OpenCypher execution, bulk loader, 31 algorithms, and save/load.


Graph Algorithms (31)

All algorithms are available on all 4 backends.

Category Algorithms
Centrality degree, betweenness, closeness, pagerank
Pathfinding bfs, dijkstra, astar, bellman_ford, floyd_warshall, all_pairs
Spanning Trees minimum, maximum
DAG topological_sort, is_dag, find_cycles, dag_longest_path, dag_longest_path_weighted, transitive_closure
Flow max_flow, min_cut_capacity
Coloring node_coloring, edge_coloring, chromatic_number
Matching max_weight_matching, max_cardinality_matching
Community louvain, label_propagation, girvan_newman
Components connected_components, strongly_connected_components
from ocg import Graph

graph = Graph()
# ... populate graph ...

scores = graph.pagerank(damping=0.85, max_iter=100)
communities = graph.louvain()
path = graph.dijkstra(source_id, target_id)

Supported OpenCypher Features

Clauses

  • MATCH, OPTIONAL MATCH, variable-length paths [*1..3]
  • CREATE, MERGE, SET, DELETE, DETACH DELETE, REMOVE
  • WITH, UNWIND, RETURN, WHERE
  • ORDER BY, SKIP, LIMIT, DISTINCT
  • UNION, UNION ALL

Expressions

  • Property access, list indexing, string slicing
  • Arithmetic: +, -, *, /, %, ^
  • Comparison: =, <>, <, >, <=, >=
  • Logical: AND, OR, NOT, XOR
  • String: STARTS WITH, ENDS WITH, CONTAINS, =~
  • Null: IS NULL, IS NOT NULL
  • List: IN, comprehensions, quantifiers

Functions (60+)

  • String: substring, trim, toLower, toUpper, split, replace
  • Math: abs, ceil, floor, round, sqrt, sin, cos, log
  • List: size, head, tail, range, reverse, keys
  • Aggregation: count, sum, avg, min, max, collect
  • Temporal: date, datetime, localDatetime, duration
  • Predicates: exists, all, any, none, single

Procedures

  • db.labels(), db.relationshipTypes(), db.propertyKeys()
  • dbms.components()

TCK Compliance

3,859 / 3,897 scenarios passing — 99.0%

Validated against the openCypher Technology Compatibility Kit. 23 scenarios skipped (TCK infrastructure), 15 scenarios pending (edge cases in arithmetic and aggregation).


Development

# Build
cargo build --release

# Unit tests
cargo test --no-default-features

# OpenCypher TCK
cargo test --test tck_property_graph --no-default-features

# Python wheel (requires maturin)
maturin develop --features python

Credits

Algorithm implementations (PageRank, Betweenness Centrality, Dijkstra, etc.) are based on published academic work. See NOTICE file for complete citations.


License

Apache-2.0 — see LICENSE and NOTICE files.

OpenCypher® and Cypher® are registered trademarks of Neo4j, Inc. This project implements the open OpenCypher specification and is not affiliated with Neo4j.


Contributing

Issues and proposals may be submitted via GitHub. Contributions are evaluated on a controlled schedule — pull requests are reviewed at the maintainer's discretion and timeline.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ocg-0.2.9.tar.gz (13.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ocg-0.2.9-cp314-cp314-macosx_11_0_arm64.whl (2.2 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

File details

Details for the file ocg-0.2.9.tar.gz.

File metadata

  • Download URL: ocg-0.2.9.tar.gz
  • Upload date:
  • Size: 13.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.1

File hashes

Hashes for ocg-0.2.9.tar.gz
Algorithm Hash digest
SHA256 1c54ed678448c20be88dcd83973d4803bb2445c8da1a1176055163fa4e5a5397
MD5 f08a10e13b758c8836aaa1269af1ce44
BLAKE2b-256 eb6c5f0c2ae6c4f76fa90ffae566550434f8ae2e18e972d2eacca712268f4afb

See more details on using hashes here.

File details

Details for the file ocg-0.2.9-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ocg-0.2.9-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0126bdf79b04719a7faf02bb5d2513fa6e9448dd1b088fd708e280e62e5dab0
MD5 baeb14e2f29d2c5ed93f49ae6f127688
BLAKE2b-256 2cb35f6e003096bff6c690baa763a1b142594b854209dff240412fc57e3eef4a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page