Skip to content

A curated list of Clojure resources for dealing with graph-like data.

License

Notifications You must be signed in to change notification settings

simongray/clojure-graph-resources

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

70 Commits
 
 
 
 

Repository files navigation

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

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.

Releases

No releases published

Packages

No packages published