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 embedded in applications to manage state. 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
Crux by JUXT Bitemporal document database for graph and SQL queries, with HTTP+JSON and Java APIs. Based on an "unbundled" architecture with pluggable storage.

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!

Capabilities DataScript Datalevin Datahike Asami Crux
Durable storage N/A Y Y Y Y
Transaction-Time history N/A N/A Y Y Y
Explicit Schema-on-Write Y Y Y N/A N/A
“Datom” transaction semantics Y Y Y Y N/A
Query planner N Proposed (Issue) Proposed (Issue) Y Y
Speculative transactions Y N Y Planned (Issue) Y
Transaction functions Y Partial (Issue) Y Proposed (Issue TBD) Y
Valid-Time history N/A N N N Y
Lazy queries N N N Y Y
Ad-hoc "document" storage (i.e. maps of arbitrary types) Y Y N Planned (Issue) Y
Pull syntax Y Y Y Proposed (Issue) Y
Evict / Excise / Purge (for data privacy compliance) Y Y Y N Y
`byte-array` value type Y Y N Y Y
Full-text search (Lucene) N Proposed (Issue) N N Y
Wildcard attributes Y Y Y Y N
Advanced graph features (paths, transitive edges, multigraph) N N N Y N
Composite tuples Y Planned (Issue) Y Planned (Issue) N
ClojureScript runtime Y N Y Y N
Typed Java API N N Y N Y
Graal native image Y Y Possible Y Possible (Issue)
HTTP API N N Y N Y
Remote client API N Proposed (Issue) Y N Y
GUI console N N N N Y
CLI console N Y N Y N
SQL N N N N Y
Online index upgrades N N N N Y
Low-latency commits (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 Crux 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.