Clojure graph resources
This is a curated list of mostly mature and/or actively developed Clojure resources relevant for dealing with graph-like data. It's currently being expanded as I explore this area more thoroughly. Suggestions are welcome in the form of pull requests or Github issues. I try to steer around abandonware, though.
If you're interested in DSLs and parsing, be sure to check out clojure-dsl-resources too.
Data structures / algorithms
-
aysylu/loom: Graph library for Clojure.
-
Engelberg/ubergraph: An all-purpose Clojure graph data structure that implements Loom protocols and more.
-
ont-app/igraph: IGraph defines a protocol which aims to provide a general interface to a variety of graph-based representations.
-
totakke/jungerer: Clojure network/graph library wrapping JUNG.
-
pangloss/fermor: Fast, powerful, general-purpose graph traversal and modelling tools plus a performant immutable in-memory graph database.
-
ekoontz/dag-unify: A Clojure library for combining directed acyclic graphs (DAGs) via unification.
-
aroemers/rmap: Clojure library for defining recursive maps; literally, programmatically and with pure data.
-
cjsauer/joinery: Enables traversal of in-memory graph-like data structures using Clojure(Script)'s map protocols.
Visualisation
-
chrismurrph/show-graph: Translates a particular directed graph data structure (graph with vertices and edges) into a JavaFX view that can be seen from Reveal.
-
jebberjeb/specviz: Generate Graphviz images from clojure.spec.
-
benedekfazekas/morpheus: Generate dependency graph(s) for variables in Clojure(Script) namespaces.
-
jpmonettas/clograms: Clojure[Script] source code diagrams.
-
jafingerhut/cljol: Visualise the memory usage of a Java object and all the objects that it references as a graph.
Databases
Labeled-property graph
Labeled-property graph databases use complex graph models where edges and vertices can have both labels and associated properties.
RDF + OWL
RDF triplestores are a specialised type of graph database for representing knowledge graphs; part of the W3C Semantic Web standards.
Datalog
Clojure's Datomic-like databases also model data as triplets... or in some cases technically as quintuplets AKA datoms. See clojurelog.github.io for a comparison of some of the Datalog database options listed below.
-
Datomic.com: (PROPRIETARY) A transactional database with a flexible data model, elastic scaling, and rich queries.
-
tonsky/datascript: An immutable in-memory database and Datalog query engine in Clojure and ClojureScript.
-
mpdairy/posh: Posh is a ClojureScript / React library that lets you use a single DataScript database to store your app state.
-
denistakeda/re-posh: Re-posh allows Posh and re-frame to work together by adding support for re-frame specific subscriptions, events, effects, and co-effects to Posh.
-
metasoarous/datsync: This library offers tools for building DataScript databases as materialized views (very much in the re-frame/samsa sense) of some master/central Datomic database.
-
frankiesardo/minikusari: minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike).
-
ont-app/datascript-graph: An implementation of the IGraph protocol extended to datascript.
-
mhuebert/re-db: Attempts to be a fast, reactive, client-side triple-store for handling global state in ClojureScript apps, inspired by Datomic/DataScript, working in conjunction with Reagent.
-
replikativ/datahike: Datahike is a durable Datalog database powered by an efficient Datalog query engine.
-
juji-io/datalevin: Datalevin is a simple durable Datalog database.
-
quoll/asami: A graph database, for Clojure and ClojureScript.
-
xtdb/xtdb: XTDB is a general purpose database with graph-oriented bitemporal indexes.
-
Workiva/eva: Eva is a distributed database-system implementing an entity-attribute-value data-model that is time-aware, accumulative, and atomically consistent.
-
ribelo/doxa: An in-memory datalog database implemented with Meander.
-
threatgrid/naga: Datalog based rules engine.
-
den1k/nldl: Natural Language for Clojure's Datalog flavor as present in Datomic, Datascript, Datahike etc.
Other
-
clojurewerkz/ogre: Ogre is a Clojure Gremlin Language Variant of the Gremlin graph traversal language from Apache Tinkerpop, which is an open source, vendor-agnostic, graph computing framework.
-
fern-flower-lab/sqlg-clj: Tinkerpop3 graphs in a relalional database (Sqlg wrapper).
-
stuartsierra/mapgraph: Basic in-memory graph database of maps with links.
-
den1k/subgraph: Reactive graph database for re-frame; a fork of stuartsierra/mapgraph.
-
keechma/keechma-entitydb: EntityDB is a client side database and normalization engine.
Queries
-
juxt/pull: Like Datomic pull, but can be used on any map.
-
edn-query-language/eql: EQL is a declarative way to make hierarchical (and possibly nested) selections of information about data requirements.
-
sixthnormal/pullql: A GraphQL-like query language for DataScript, optimized for execution across many entities at once.
-
walkable-server/walkable: A Clojure(script) SQL library for building APIs: Datomic® (GraphQL-ish) pull syntax, data driven configuration, dynamic filtering with relations in mind.
-
walmartlabs/lacinia: This library is a full implementation of Facebook's GraphQL specification.
-
graphqlize/graphqlize: A library for creating a GraphQL API for a Postgres or MySQL database.
-
timrichardt/hicgql: GraphQL in Clojure data structures.
-
ivarref/clj-paginate: Pagination of vectors and maps with Clojure for GraphQL
Miscellaneous
-
fulcrologic/fulcro: Fulcro is a full-stack web framework where a single underlying graph acts as the shared data model of both backend and frontend.
-
plumatic/plumbing: Plumbing and Graph: the Clojure utility belt. Graph is a simple and declarative way to specify a structured computation, which is easy to analyze, change, compose, and monitor.
-
simongray/datalinguist: Stanford CoreNLP in idiomatic Clojure. Support for dependency grammar graphs, pattern matching, and visualisation.
-
nwjsmith/generators.graph: test.check generators for graph data.
-
jackrusher/mundaneum: A clojure wrapper around WikiData.
-
Swirrl/cubiql: A proof of concept GraphQL service for querying Linked Data Cubes.
-
esuomi/muotti: A graph-based value transformer library.
Personal knowledge graphs
It is perhaps worth mentioning that several tools have been written in Clojure for making personal knowledge graphs through note-taking. The first one to appear was Roam Research (proprietary). It has since inspired Athens Research (open source, commercial) and Logseq (open source, community-driven). These tools are all based on libraries listed in the Datalog section.
Articles/video
Community
RDF has a small, but steady Clojure following. People are using Neo4j with Clojure, but not talking much about it. Datomic-like Datalog databases have the most momentum.