Introduction
This manual documents patinaDB 0.12.0.
patinaDB is a managed graph database server, deployed as a Docker container. It stores a property graph — vertices (nodes) and directed edges (relationships), each carrying typed properties — on top of an embedded, single-file ACID B-tree storage engine with native cross-tree atomic commits. You query it with a Cypher-like language over your choice of two wire protocols, and every write is recorded as an engram so you can inspect history and travel back in time.
patinaDB (patinadb-raft) is a standalone node that replicates writes with the
Raft consensus protocol, hosts multiple databases,
and speaks both a JSON REST API and the native Bolt protocol used by
Neo4j drivers and the Neo4j Browser. A single node with --bootstrap is a
drop-in lightweight server (a “cluster” of one, no consensus-latency penalty
for a single voter); add peers to get automatic failover.
What makes patinaDB distinct
- Versioned by construction. Every mutation is committed as an
engram — a git-like commit for your graph. List the history,
view a git-style diff of any single change, diff two arbitrary
points in time, tag a
meaningful state, and run read queries against the past with
USE … AS OF. No audit table to bolt on — the history is the database. - Provenance, for free. Because the history is a first-class change stream,
patinaDB’s Anamnesis system auto-projects it into a queryable PROV
graph in a companion database — who / what / when, and optional source /
confidence /
derived_fromat commit, type, attribute, or per-entity granularity, enriched straight from Neo4j transaction metadata. Where Neo4j leaves you to assemble this from APOC triggers or CDC, here it ships in the engine. See Anamnesis. - Cypher-compatible. The engine passes ~97% of the openCypher Technology Compatibility Kit (TCK). See Cypher Support for exactly what is and isn’t covered.
- Neo4j-tooling-compatible. The server’s Bolt endpoint works with the official Neo4j drivers and the Neo4j Browser, so you can point existing tools straight at patinaDB.
- Search is built in. Full-text search with BM25 ranking and
vector/embedding search (an IVF ANN index, cosine &
euclidean) ship in the engine — with the same procedure syntax as Neo4j
(
db.index.fulltext.queryNodes,db.index.vector.queryNodes). No external search service, no separate vector database. - Scales down and up. A one-node cluster (quorum of 1) behaves like a plain lightweight server with no consensus latency; add peers for automatic failover (High Availability). Snapshots and time-travel reconstruction stream in O(chunk) memory, so the graph isn’t bounded by RAM.
Who this manual is for
This is the user manual — how to install, query, operate, and integrate patinaDB. It documents every user-facing feature and, just as importantly, its limitations.
A note on scope
patinaDB deliberately implements a subset of Neo4j/Cypher. It is not a drop-in Neo4j replacement for every workload — it targets versioned/auditable graphs and small-to-medium replicated deployments. Where behaviour differs from Neo4j, this manual calls it out explicitly. Read the Limitations chapter before committing to a production workload.