{"id":14959428,"url":"https://github.com/simongray/clojure-graph-resources","last_synced_at":"2025-04-06T17:12:18.236Z","repository":{"id":39863691,"uuid":"307119334","full_name":"simongray/clojure-graph-resources","owner":"simongray","description":"A curated list of Clojure resources for dealing with graph-like data.","archived":false,"fork":false,"pushed_at":"2024-07-28T05:09:58.000Z","size":172,"stargazers_count":285,"open_issues_count":1,"forks_count":7,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-03-30T15:08:39.632Z","etag":null,"topics":["clojure","datalog","graph-theory","graphs","neo4j","owl","rdf","semantic-web","triples"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simongray.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-25T14:40:02.000Z","updated_at":"2025-03-26T15:31:32.000Z","dependencies_parsed_at":"2025-01-20T12:02:31.365Z","dependency_job_id":"b5c63f85-3b17-4aa6-a8e1-ef1f0c13b3bc","html_url":"https://github.com/simongray/clojure-graph-resources","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simongray%2Fclojure-graph-resources","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simongray%2Fclojure-graph-resources/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simongray%2Fclojure-graph-resources/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simongray%2Fclojure-graph-resources/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simongray","download_url":"https://codeload.github.com/simongray/clojure-graph-resources/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247517915,"owners_count":20951719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","datalog","graph-theory","graphs","neo4j","owl","rdf","semantic-web","triples"],"created_at":"2024-09-24T13:19:41.790Z","updated_at":"2025-04-06T17:12:18.211Z","avatar_url":"https://github.com/simongray.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"Clojure graph resources\n=======================\nThis 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.\n\n\u003e If you're interested in DSLs and parsing, be sure to check out [clojure-dsl-resources](https://github.com/simongray/clojure-dsl-resources) too.\n\nData structures / algorithms\n----------------------------\n* [aysylu/loom](https://github.com/aysylu/loom): Graph library for Clojure.\n* [Engelberg/ubergraph](https://github.com/Engelberg/ubergraph): An all-purpose Clojure graph data structure that implements Loom protocols and more.\n* [ont-app/igraph](https://github.com/ont-app/igraph): IGraph defines a protocol which aims to provide a general interface to a variety of graph-based representations.\n* [totakke/jungerer](https://github.com/totakke/jungerer): Clojure network/graph library wrapping JUNG.\n* [pangloss/fermor](https://github.com/pangloss/fermor): Fast, powerful, general-purpose graph traversal and modelling tools plus a performant immutable in-memory graph database.\n* [ekoontz/dag-unify](https://github.com/ekoontz/dag-unify): A Clojure library for combining directed acyclic graphs (DAGs) via unification.\n* [aroemers/rmap](https://github.com/aroemers/rmap): Clojure library for defining recursive maps; literally, programmatically and with pure data.\n* [cjsauer/joinery](https://github.com/cjsauer/joinery): Enables traversal of in-memory graph-like data structures using Clojure(Script)'s map protocols.\n\nVisualisation\n-------------\n* [chrismurrph/show-graph](https://github.com/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.\n* [jebberjeb/specviz](https://github.com/jebberjeb/specviz): Generate Graphviz images from clojure.spec.\n* [benedekfazekas/morpheus](https://github.com/benedekfazekas/morpheus): Generate dependency graph(s) for variables in Clojure(Script) namespaces.\n* [jpmonettas/clograms](https://github.com/jpmonettas/clograms): Clojure[Script] source code diagrams.\n* [jafingerhut/cljol](https://github.com/jafingerhut/cljol): Visualise the memory usage of a Java object and all the objects that it references as a graph.\n\nDatabases\n---------\n### Labeled-property graph\nLabeled-property graph databases use complex graph models where edges and vertices can have both labels and associated properties.\n\n* [gorillalabs/neo4j-clj](https://github.com/gorillalabs/neo4j-clj): Clojuresque client to Neo4j database, based upon the bolt protocol.\n* [full-spectrum/neo4clj](https://github.com/full-spectrum/neo4clj): Neo4clj is a idomatic clojure client, exclusivly using Bolt for performance.         \n\n### RDF + OWL\nRDF triplestores are a specialised type of graph database for representing knowledge graphs; part of the W3C Semantic Web standards.\n\n* [arachne-framework/aristotle](https://github.com/arachne-framework/aristotle): An RDF/OWL library for Clojure, providing a data-oriented wrapper for Apache Jena.\n  - [ont-app/igraph-jena](https://github.com/ont-app/igraph-jena): This is a port of the Jena APIs to the IGraph protocol.\n* [Swirrl/grafter](https://github.com/Swirrl/grafter): Linked Data \u0026 RDF Manufacturing Tools in Clojure.\n  - [Swirrl/matcha](https://github.com/Swirrl/matcha) In-memory, schemaless triplestore with a SPARQL-like DSL.\n  - [ont-app/igraph-grafter](https://github.com/ont-app/igraph-grafter): A port of the IGraph protocols to the Grafter protocols.\n* [stardog-union/stardog-clj](https://github.com/stardog-union/stardog-clj): Clojure language bindings for the proprietary Stardog Graph / RDF Database.\n* [fluree/db](https://github.com/fluree/db): Fluree is an immutable, temporal, ledger-backed semantic graph database that has a cloud-native architecture.\n* [fluree/json-ld](https://github.com/fluree/json-ld): A Clojure(script) JSON-LD library.\n* [yetanalytics/flint](https://github.com/yetanalytics/flint): A Clojure(Script) DSL for creating SPARQL query and update strings.\n* [Swirrl/csv2rdf](https://github.com/Swirrl/csv2rdf): Clojure library and application implementing the [W3C CSV on the Web tabular metadata specifications](https://w3c.github.io/csvw/) for converting CSV to RDF.\n* [ont-app/vocabulary](https://github.com/ont-app/vocabulary): Utilities to map between clojure namespaced keywords and RDF-style URIs.\n* [phillord/tawny-owl](https://github.com/phillord/tawny-owl): Tawny-OWL allows construction of OWL ontologies, in a evaluative, functional and fully programmatic environment.\n  - [phillord/owl-primer](https://github.com/phillord/owl-primer): The Ontology from the owl-primer written using Tawny-OWL.\n* [sam_russell/porta-owl-sqwrl](https://gitlab.com/sam_russell/porta-owl-sqwrl): (GITLAB) A Clojure domain-specific language for Web Ontology Language (OWL) and Semantic (Query) Web Rule Language (SQWRL).\n\n### Datalog\nClojure's Datomic-like databases also model data as triplets... or in some cases technically as quintuplets AKA datoms. See [clojurelog.github.io](https://clojurelog.github.io/) for a comparison of some of the Datalog database options listed below.\n\n* [Datomic.com](https://www.datomic.com/): _(PROPRIETARY)_ A transactional database with a flexible data model, elastic scaling, and rich queries.\n  - [vvvvalvalval/datofu](https://github.com/vvvvalvalval/datofu): This library provides common utilities for working with Datomic, mostly in the form of database functions.\n  - [vvvvalvalval/datomock](https://github.com/vvvvalvalval/datomock): Mocking and forking Datomic Peer connections in-memory.\n  - [vvvvalvalval/datalog-rules](https://github.com/vvvvalvalval/datalog-rules): Utilities for managing Datalog rulesets from Clojure.\n  - [avescodes/conformity](https://github.com/avescodes/conformity): A Clojure/Datomic library for idempotently transacting norms into your database.\n  - [JarrodCTaylor/schema-cartographer](https://github.com/JarrodCTaylor/schema-cartographer): Schema Cartographer provides a means to visualize, navigate, create, edit and share the relationships that exist in your Datomic schema.\n  - [Provisdom/spectomic](https://github.com/Provisdom/spectomic): Generate Datomic or Datascript schema from your Clojure(script) specs.\n  - [ivarref/gen-fn](https://github.com/ivarref/gen-fn): Generate Datomic function literals from regular Clojure namespaces (on-prem).\n  - [ivarref/rewriting-history](https://github.com/ivarref/rewriting-history): A library to rewrite Datomic history (on-prem).\n  - [ivarref/yoltq](https://github.com/ivarref/yoltq): An opinionated Datomic queue for building more reliable systems (on-prem).\n  - [ivarref/double-trouble](https://github.com/ivarref/double-trouble): Handle duplicate Datomic transactions with ease.\n  - [ivarref/datomic-schema](https://github.com/ivarref/datomic-schema): Simplified writing of Datomic schemas.\n  - [ont-app/datomic-client](https://github.com/ont-app/datomic-client): Ports the Datomic Client to the IGraph protocols.\n* [tonsky/datascript](https://github.com/tonsky/datascript): An immutable in-memory database and Datalog query engine in Clojure and ClojureScript.\n  - [mpdairy/posh](https://github.com/mpdairy/posh): Posh is a ClojureScript / React library that lets you use a single DataScript database to store your app state.\n  - [denistakeda/re-posh](https://github.com/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.\n  - [metasoarous/datsync](https://github.com/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.\n  - [frankiesardo/minikusari](https://github.com/frankiesardo/minikusari): minikusari is a minimal rule engine built on top of Datascript (and can work with Datomic or Datahike).\n  - [ont-app/datascript-graph](https://github.com/ont-app/datascript-graph): An implementation of the IGraph protocol extended to datascript.\n* [mhuebert/re-db](https://github.com/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.\n* [replikativ/datahike](https://github.com/replikativ/datahike): Datahike is a durable Datalog database powered by an efficient Datalog query engine.\n  - [replikativ/datahike-frontend](https://github.com/replikativ/datahike-frontend): A front-end to Datahike written in Fulcro.\n  - [lambdaforge/datalog-parser](https://github.com/lambdaforge/datalog-parser): This parser is used by Datahike and follows the Datalog dialect of Datomic.\n* [juji-io/datalevin](https://github.com/juji-io/datalevin): Datalevin is a simple durable Datalog database.\n* [quoll/asami](https://github.com/quoll/asami): A graph database, for Clojure and ClojureScript.\n  - [quoll/asami-loom](https://github.com/quoll/asami-loom): This library extends Asami in-memory graphs to Loom.\n* [xtdb/xtdb](https://github.com/xtdb/xtdb): XTDB is a general purpose database with graph-oriented bitemporal indexes.\n* [Workiva/eva](https://github.com/Workiva/eva): Eva is a distributed database-system implementing an entity-attribute-value data-model that is time-aware, accumulative, and atomically consistent.\n* [ribelo/doxa](https://github.com/ribelo/doxa/): An in-memory datalog database implemented with [Meander](https://github.com/noprompt/meander).\n* [threatgrid/naga](https://github.com/threatgrid/naga): Datalog based rules engine.\n* [den1k/nldl](https://github.com/den1k/nldl): Natural Language for Clojure's Datalog flavor as present in Datomic, Datascript, Datahike etc.\n\n### Other\n\n* [clojurewerkz/ogre](https://github.com/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.\n* [fern-flower-lab/sqlg-clj](https://github.com/fern-flower-lab/sqlg-clj): Tinkerpop3 graphs in a relalional database ([Sqlg](https://github.com/pietermartin/sqlg) wrapper).\n* [stuartsierra/mapgraph](https://github.com/stuartsierra/mapgraph): Basic in-memory graph database of maps with links.\n* [den1k/subgraph](https://github.com/den1k/subgraph): Reactive graph database for re-frame; a fork of stuartsierra/mapgraph.\n* [keechma/keechma-entitydb](https://github.com/keechma/keechma-entitydb): EntityDB is a client side database and normalization engine.\n\nQueries\n-------\n* [juxt/pull](https://github.com/juxt/pull): Like Datomic pull, but can be used on any map.\n* [edn-query-language/eql](https://github.com/edn-query-language/eql): EQL is a declarative way to make hierarchical (and possibly nested) selections of information about data requirements.\n  - [souenzzo/eql-style-guide](https://github.com/souenzzo/eql-style-guide): This guide covers both EQL as an abstract API and common library usage, like fulcro and pathom.\n  - [wilkerlucio/pathom](https://github.com/wilkerlucio/pathom): Pathom is a Clojure(script) engine for processing EQL requests.\n    * [wilkerlucio/pathom3](https://github.com/wilkerlucio/pathom3): Pathom3 is a redesign of Pathom.\n    * [jlesquembre/pathom-pedestal](https://github.com/jlesquembre/pathom-pedestal): A library to integrate pathom and pedestal.\n  - [graphqlize/honeyeql](https://github.com/graphqlize/honeyeql): HoneyEQL transforms EQL into efficient SQL.\n  - [lilactown/pyramid](https://github.com/lilactown/pyramid): A library for storing and querying graph data in a Clojure map.\n* [sixthnormal/pullql](https://github.com/sixthnormal/pullql): A GraphQL-like query language for DataScript, optimized for execution across many entities at once.\n* [walkable-server/walkable](https://github.com/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.\n* [walmartlabs/lacinia](https://github.com/walmartlabs/lacinia): This library is a full implementation of Facebook's GraphQL specification.\n  - [vlaaad/plusinia](https://github.com/vlaaad/plusinia): Solution to N+1 problem in Lacinia.\n* [graphqlize/graphqlize](https://github.com/graphqlize/graphqlize): A library for creating a GraphQL API for a Postgres or MySQL database.\n* [timrichardt/hicgql](https://github.com/timrichardt/hicgql): GraphQL in Clojure data structures.\n* [ivarref/clj-paginate](https://github.com/ivarref/clj-paginate): Pagination of vectors and maps with Clojure for GraphQL\n\nMiscellaneous\n------------\n* [fulcrologic/fulcro](https://github.com/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.\n* [plumatic/plumbing](https://github.com/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.\n* [simongray/datalinguist](https://github.com/simongray/datalinguist): Stanford CoreNLP in idiomatic Clojure. Support for dependency grammar graphs, pattern matching, and visualisation.\n* [nwjsmith/generators.graph](https://github.com/nwjsmith/generators.graph): test.check generators for graph data.\n* [jackrusher/mundaneum](https://github.com/jackrusher/mundaneum): A clojure wrapper around WikiData.\n* [Swirrl/cubiql](https://github.com/Swirrl/cubiql): A proof of concept GraphQL service for querying Linked Data Cubes.\n* [esuomi/muotti](https://github.com/esuomi/muotti): A graph-based value transformer library.\n\n### Personal knowledge graphs\nIt 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](https://roamresearch.com/) (proprietary). It has since inspired [Athens Research](https://github.com/athensresearch/athens) (open source, commercial) and [Logseq](https://github.com/logseq/logseq) (open source, community-driven). These tools are all based on libraries listed in the Datalog section.\n\nArticles/video\n--------------\n* [Open Source Clojure-Datalog Databases](https://clojurelog.github.io/)\n* [Domain modeling with Datalog](https://www.youtube.com/watch?v=oo-7mN9WXTw)\n* [Introduction to Asami](https://github.com/threatgrid/asami/wiki/2.-Introduction)\n\nCommunity\n---------\nRDF 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.\n\n* [Clojurians Slack](https://clojurians.slack.com/messages): Where Clojure's most active users seem to hang out.\n  - [#rdf](https://clojurians.slack.com/archives/C09GHBXRC)\n  - [#datalog](https://clojurians.slack.com/archives/CJ322KHNX)\n  - [#datomic](https://clojurians.slack.com/archives/C03RZMDSH)\n  - [#datascript](https://clojurians.slack.com/archives/C07V8N22C)\n  - [#datahike](https://clojurians.slack.com/archives/CB7GJAN0L)\n  - [#datalevin](https://clojurians.slack.com/archives/C01RD3AF336)\n  - [#xtdb](https://clojurians.slack.com/archives/CG3AM2F7V)\n  - [#neo4j](https://clojurians.slack.com/archives/C01BMKFSL14) - currently dead, but maybe you can make it come alive?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimongray%2Fclojure-graph-resources","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimongray%2Fclojure-graph-resources","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimongray%2Fclojure-graph-resources/lists"}