ffs + ffsd
Storage, WAL, execution, graph/vector indexes, and server ownership.
Pre-v0 Rust database engine
ffs is a native engine for graph, vector, columnar, and typed data, with server, control, studio, and flow surfaces growing in one monorepo.
Graph traversal, vector search, columnar scans, feature pipelines, model output, and provenance often start in separate products. That can be the right answer later, but it adds glue and duplicate indexes before the workload earns that complexity.
ffs starts with one durable engine and builds the product surface around it. The same database core can run embedded for direct calls or behind ffsd when the database needs to be operated as a service.
The product is split into clear surfaces inside one repo: engine, server, control plane, studio, and flow. We split repos later only when deployment, security, release cadence, or team ownership demands it.
Storage, WAL, execution, graph/vector indexes, and server ownership.
Projects, branches, deployments, endpoints, backups, restores.
Query editor, catalog explorer, lineage, dashboards, history.
Pipelines, sync, vector retrieval, features, models, agents.
The useful Databricks lesson is separation: transactional storage, native execution, catalog/provenance, and serving. ffs maps those pillars onto one durable Rust core.
FFS Store: pages, chunks, catalog root, WAL, recovery, indexes.
FFS Native: batch operators, planner, SIMD distance, graph expansion.
FFS Catalog: schema now; indexes, models, lineage, governance next.
FFS Serve: ffsd now; client protocol and operational endpoints next.
FFS Studio: query, catalog, lineage, dashboards, history.
FFS Flow: pipelines, vector, features, models, and agent loops.
The eval harness compares engine paths and integrated workloads. The point is not a final scorecard; it is a way to keep storage, execution, server, and product decisions measurable.
| Comparator | Path | Result |
|---|---|---|
| FFS integrated | filter, traverse, write-back, reopen | tested |
| sled | KV lookup | 1.8x faster |
| instant-distance | HNSW query | 2.6x faster |
| petgraph | 1-hop traversal | 9x faster |
| pgvector | HNSW query | 3.01x faster |
use ffs::cypher::{compile_query, parse};
use ffs::exec::collect_column;
use ffs::planner::{compile, CompileCtx};
use ffs::storage::RelTable;
let mut knows = RelTable::new(0, "KNOWS", 4, 4);
knows.add_edge(0, 0, 1, 1);
knows.add_edge(0, 0, 2, 2);
let q = parse("MATCH (a:Person)-[:KNOWS]->(b:Person) RETURN b")?;
let plan = compile_query(&q, |_| vec![0, 1, 2, 3]);
let ctx = CompileCtx::empty().with_rel_table("KNOWS", &knows);
let mut op = compile(plan, &ctx)?;
let neighbours = collect_column(&mut *op, 0);
ffs is early. The core engine, ffsd server scaffold, control plane surface, studio surface, flow surface, evals, and docs are all in the monorepo now.