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.
- 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.
Labeled-property graph databases use complex graph models where edges and vertices can have both labels and associated properties.
RDF triplestores are a specialised type of graph database for representing knowledge graphs; part of the W3C Semantic Web standards.
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.
- 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.
- 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
- 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.
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.