Arrow + DataFusion, but for graphs.
oakor is an embeddable, Arrow-native graph + vector query engine for Rust, with an openCypher frontend, built on Apache DataFusion.
Two deliverables, one workspace:
- A columnar in-memory graph format (
spec/format-v0.md). CSR adjacency is byte-identical to an ArrowList<Int64>array; oakor standardizes the missing semantics — theoakor.adjacencyextension type, a graph manifest, dense node-id conventions, and immutable snapshots. Plain Arrow consumers degrade gracefully; graph-aware consumers get zero-copy CSR. - An extensible graph query engine. openCypher parses to DataFusion
logical plans; graph-native operators (
Expand, bounded variable-length paths) run as customExecutionPlans over CSR. Vectors are first-class: embeddings live asFixedSizeList<f32>columns and similarity is an expression the planner rewrites into index scans — not a procedure call.
Pre-MVP. The format spec (v0) is drafted; engine crates are scaffolding.
| Crate | Role |
|---|---|
oakor |
Facade — start here |
oakor-format |
In-memory graph format: snapshots, CSR kernels, manifest |
oakor-cypher |
openCypher parser, AST, planning to logical plans |
oakor-engine |
DataFusion table providers, traversal operators, planner rules |
- Arrow-native, zero-copy. The graph format is vanilla Arrow plus extension metadata. Anything that produces Arrow can feed oakor.
- Build on DataFusion, not a clone. Optimizer, execution runtime, memory management, and SQL come from DataFusion; oakor adds what graphs need (traversal operators, graph-aware planning).
- Typestate + builder APIs. Invalid graphs and invalid queries should fail to compile, not fail at runtime.
- Conformance over claims. Cypher support is measured against the openCypher TCK; performance claims come with reproducible benchmarks.
Apache-2.0.