Columnar analytics and
graph traversal in one pipeline
Rayforce is a zero-dependency embeddable engine where columnar analytics and graph operations share a single operation DAG, pass through a multi-pass optimizer, and execute as fused morsel-driven bytecode. Pure C17. No malloc.
Analytics and graphs shouldn't need separate tools
- Single pipeline for analytics + graph
- One optimizer understands both
- Fused execution — no serialization overhead
- Zero dependencies — embed in any C project
- Separate tools for analytics and graphs
- Two query languages, two data models
- Serialize between tools on every step
- Heavy Python dependencies for simple ops
Type inference, constant folding, sideways information passing, factorize, predicate pushdown, filter reorder, fusion, and DCE — all in one pass over the DAG before a single element is touched.
1024-element morsel-driven bytecode. Element-wise ops fuse into single-pass pipelines. Thread-local arenas keep allocation off the critical path.
Double-indexed compressed sparse rows. Forward + reverse indices, mmap-friendly persistence, and algorithms from BFS to worst-case optimal joins.
Six pillars, one engine
Everything you need for columnar analytics, graph traversal, and an interactive query language in a single embeddable library.
Fused Execution
Morsel-driven bytecode over 1024-element chunks. Element-wise ops fused into single-pass pipelines that stay L1-resident.
Graph Engine
Double-indexed CSR storage. BFS, Dijkstra, A*, PageRank, Louvain, LFTJ — all in the same DAG.
Rayfall Language
Lisp-like query REPL with rich builtins. Lambdas compile lazily to bytecode. select/update bridge to the DAG optimizer.
Multi-Pass Optimizer
Type inference → constant folding → SIP → factorize → predicate pushdown → filter reorder → fusion → DCE.
Custom Allocator
Buddy allocator with slab cache. Thread-local arenas, lock-free allocation, COW ref counting. No malloc.
Zero Dependencies
Pure C17, single public header. Builds with make. ~16K lines of engine code. Embeds into any C/C++ project.
Build, optimize, execute
Data flows from lazy DAG construction through a multi-pass optimizer into fused morsel-driven bytecode execution.
Lazy DAG nodes → multi-pass optimizer (type inference, SIP, factorize, predicate pushdown, fusion, DCE) → fused morsel-driven executor with register-slot bytecode. Graph algorithms run in the same pipeline — no serialization between analytics and traversal.
From zero to query in seconds
Start the REPL, build tables, aggregate, and pivot — all in one session.
Start building in
30 seconds
$ make && ./rayforce
‣ (pivot t 'Symbol 'Side 'Qty sum)