Open Source Clojure-Datalog Databases

This page exists as an easy reference to compare and contrast the available open source Clojure-Datalog databases. Only databases under active development are listed.

Project Summaries

DataScript by Nikita Prokopov An immutable in-memory Clojure(Script) database - "What if creating a database would be as cheap as creating a Hashmap?"
Datalevin by Juji Datalevin extends DataScript with durable storage and has been designed to be both in embedded and client/server mode. Data durability is handled by LMDB, which is optimized for concurrent read-intensive workloads. Datalevin does not store transaction history.
Datahike by lamdaforge Datahike extends DataScript with durable storage via Hitchhiker Tree (a persistent off-heap data structure). Datahike provides similar functionality to Datomic On-Prem and can be used as a drop-in replacement for a subset of use-cases. Datahike is part of the replikativ toolbox for building distributed data management solutions.
Asami by Cisco Secure Malware Analytics Schema-less triple store designed for Clojure(Script) graph analytics. Sibling project of the Naga Datalog rules engine
XTDB by JUXT Bitemporal document database for graph and SQL queries, with HTTP+JSON and Java APIs. Based on an "unbundled" architecture with pluggable storage. Formerly known as "Crux".

Analysis

The following matrix may contain mistakes and be missing various important dimensions. If you believe other projects should be added or if any of the data is incorrect, please submit a PR. Thanks!

Storage:

Durable storage N/A Y Y Y Y
Transaction-Time history N/A N/A Y Y Y
Valid-Time history N/A N/A N N Y
`byte-array` value type Y Y N Y Y

Transactions:

Explicit Schema-on-Write Y Y Y N/A N/A
“Datom” transaction semantics Y Y Y Y N/A
Speculative transactions Y N Y Planned (Issue) Y
Transaction functions Y Y Y Proposed (Issue TBD) Y
Arbitrary map ("document") storage Y Y N Planned (Issue) Y
Evict / Excise / Purge (for data privacy compliance) Y Y Y N Y
Composite tuples Y Planned (Issue) Y Planned (Issue) N

Query:

Query planner N Proposed (Issue) Proposed (Issue) Y Y
Datalog rules Y Y Y Proposed (Issue) Y
Lazy queries N N N Y Y
Pull syntax Y Y Y Proposed (Issue) Y
Wildcard attributes Y Y Y Y N
Full-text search N Y N N Y
SQL N N N N Y
Advanced graph features (paths, transitive edges, multigraph) N N N Y N

Developer Experience:

Clojure (JVM) runtime Y Y Y Y N
ClojureScript runtime Y N Y Y N
Graal native image Y Y Possible Y N (Issue)
Typed Java API N N Y N Y
HTTP API N N Y N Y
Remote client API N Y Y N Y
GUI console N N N N Y
CLI console N Y N Y N

Administration:

Online index upgrades N N N N Y
Asynchronous indexing N N N N Y
Single-writer atomic transactions Y Y Y Y Y
Horizontal scaling (clustering) N/A Proposed (Issue) Y Proposed (Issue TBD) Y
Commercial support N Planned Y N Y






Legend: "N/A" ("not applicable") means the capability is explicitly a non-goal of the project
Suggestions? Questions?

This matrix was originally created by the XTDB team but seeks to avoid bias.

Thank you to all the contributors to these exciting projects and to everyone who has provided feedback and input to this matrix.