Libraries
- Diverse toolsets
- Array programming, linear algebra
- Optimization
- Literate programming and data visualization
- Data processing
- Geospatial processing
- Dataframe-like structures
- Statistics
- Time series analysis
- Bayesian computing, random sampling & probprog
- Machine learning
- Interop
- Parralel computing
- Distributed computing
- Stream processing
To supplement our opinionated blog posts analysing the ecosystem, here is a less-opinionated, plain list of relevant libraries written by Clojurians. Not all libraries mentioned here are affiliated with Scicloj, but we seek to be in dialogue with library authors as much as possible.
Do you know about anything relevant that is missing here? - Let us talk!
For every library, we mark whether it is actively developed (act
), and whether it is still experimental (exp
).
We tag libraries with the field they are relevant to.
array
- array programminglinalg
- linear algegranative
- interop with native-optimized librariesgpu
- gpu supportvis
- data visualization and visual artvega
- visualization using Vega/Vega-lite specificationslit
- literate programmingui
- building UIs for data explorationgeo
- geographical and geometrical data processingdf
- dataframe-like data structures and abstructionsdata
- general data processingcsv
- csv supportxform
- transducers supportmath
- diverse math functionsstat
- statisticsts
- time series analysisrand
- simulation and random samplingprob
- Bayesian computing and probabilistic programmingml
- machine learningdl
- deep learningopt
- optimizationgraph
- graph algorithms and network analysisinterop
- general libraries for interopcljs
- supports not only Clojure but also Clojurescript
Diverse toolsets
- spork (
act
):opt
,df
,vis
,rand
,graph
,ui
- a toolbox for data-science and operation research - fastmath (
act
):math
,stat
,rand
,ml
- a collection of functions for mathematical and statistical computing, macine learning, etc., wrapping several JVM libraries - Incanter:
df
,stat
,vis
,rand
,csv
- an R-like data-science platform built on top of the core.matrix abstractions - huri:
df
,stat
,vis
- a toolbox for data-science using plain sequences of maps
Array programming, linear algebra
- tech.datatype (
act
):array
,native
,stat
- abstractions and foundations for working with array-like structures and sequential structures - tvm-clj (
act
,exp
):array
,linalg
,native
,gpu
- bindings to tvm - Neanderthal (
act
):array
,linalg
,native
,gpu
- matrix and linear algebra in Clojure - jutsu.matrix:
array
,linalg
,native
,gpu
- bindigs to ND4J - core.matrix:
array
,linalg
,native
,cljs
- matrix abstractions, supporting diffent backends - denisovan:
array
,linalg
,native
,gpu
- Neanderthal backend for core.matrix
Optimization
- matlib (
act
):opt
- optimisation and control theory tools and convenience functions based on Neanderthal.
Literate programming and data visualization
- Hanami(
act
):vis
,vega
,ui
,hiccup
,cljs
- a template system for creating interactive data visualizations using Vega/Vega-lite, Reagent and Re-Com - Saite (
act
):vis
,vega
,lit
,ui
,hiccup
,cljs
- a literate programming application written using Hanami - Oz (
act
):vis
,vega
,lit
- data visuzliation using Vega/Vega-Lite and Hiccup, and a live-reload platform for literate-programming - tech.viz (
act
):vis
,vega
,cljs
- simple data visualization for Clojure/Clojurescript that using vega and darkstar for rendering - Gorilla-REPL:
lit
- a notebook application written in Clojure and Javascript - Gorilla-plot:
vis
,vega
- plotting functions using Vega for Gorilla-REPL - Pink-Gorilla (
act
,exp
, temporary name):vis
,lit
,ui
,cljs
- a port of the Gorilla REPL project using a Clojurescript (Reagent) frontend - gg4clj:
vis
,r
- a clojure DSL for creating ggplot2 plots using R - gg4clj port by the Pink Gorilla project
- Quil:
vis
- a clojure/clojuresctit wrapper for Processing - thi-ng/geom:
vis
,cljs
- 2d/3d geometry toolkit - rmarkdown-clojue:
vis
,lit
- rendering Clojure code in various format using Rmarkdown - Org-babel-clojure:
lt
- executing Clojure inside Emacs Org-mode documents - cljplot (
act
,exp
):vis
- a data visualization platform written in Clojure and inspired by R's ggplot2 and lattice libraries - Analemma (
exp
):vis
,cljs
- generating charts and SVG with a syntax similar to Incanter's and a visual theme similar to ggplot2. - Devcards:
lit
,cljs
- visual repl exprience for Clojurescript - proto-repl-charts:
vis
- an Atom plugin for displaying tables and graphs - Maria:
lit
,vis
,cljs
: a Clojurescript coding environment for beginners - Clojupyter (
act
):lit
- a Clojure kernel for Jupyter - IClojure:
lit
- a Clojure kernel for Jupyter - Notespace (
act
,exp
):lit
- notebook experience with Clojure namespaces edited at any editor - Reveal (
act
): data navigation GUI - Portal (
act
): data navigation GUI
Vega rendering
In addition to Oz, Hanami and Gorilla-plot mentioned above, here is a list of dedicated tools dedicated mainly to handling Vega/Vega-lite specifications. See this conversation for some discussion of the differences and tradeoffs across these tools.
xvsy:
vis
,vega
,cljs
- grammer of graphics over VegaVegan (
act
):vis
,vega
- a nodejs clojurescript library designed to validate and render Vega and Vega-lite files - supports docker-based setup.Vega-clj (
act
):vis
,vega
- a clojure wrapper for the (node-based) Vega-cli and Vega-lite standalone scripsOptikon:
vis
,vega
- a command line tool that wraps Vega and Vega-lite - using GraalVM polyglot programmingVegafx:
vis
,vega
- a static-site viewer using javafx that renders Vega specsdarkstar:
vis
,vega
- a minimal wrapper over Vega/Vega-lite as a single JVM-only Clojure library, using the GraalJS javascript runtime, which does not require GraalVM runtime to run.emacs-Vega-view (
act
):vis
,vega
- an emacs mode to facilitate interactive data visualization using Vega from within emacs - supports elisp, json and clojure notations
Data processing
- Specter (
act
):data
,cljs
- declarative navigation of nested data structures for selection and transformation in Clojure and Clojurescript - Meander (
act
):data
,cljs
- transforming neseted data structures by declaratively declaring the shape of source and target datastructures - Odin:
data
- processing nested data structures by extensible logic programming - xforms:
data
,cljs
,xform
- a collection of transduces and reducing functions - Semantic Csv:
csv
,cljs
- higher level csv parsing/processing
Geospatial processing
- geo (
act
):geo
- unifying several JVM libraries for geoprocessing with a Clojure API - geo-clj (
act
):geo
,cljs
- encoding/decoding of geographic datatypes - aurelius (
act
,exp
):geo
,xform
- transducible analysis of geospatial features
Dataframe-like structures
- tech.ml.dataset (
act
):df
,stat
,vis
,csv
- abstractions for dataframe-like structures in clojure, based on tech.datatype abstractions, with an implementation using the Tablesaw Java library - tablecloth (
act
):df
,csv
- a dataframe grammar wrapping tech.ml.dataset, inspired by serveral R libraries - Panthera:
df
,py
- a Clojure API wrapping Python's Pandas library - koala (
exp
):df
,csv
- Pandas-like data-processing for clojure with some I/O functionality - dataframe:
df
- Pandas-like data processing for clojure - danzig (formerly wombat) (
act
,exp
):df
,xform
- Pandas-like data processing using transducers - bamboo:
df
- a minimal data processing library for Clojure, with some of the capabilities of pandas and numpy
Statistics
- kixi.stats:
stat
,rand
,xform
- statistics and random sampling using transducers - fitdistr:
stat
- fitting distributions
Time series analysis
- tide -
ts
: STL and FastDTW algorithms
Bayesian computing, random sampling & probprog
- inferme:
prob
,rand
,vis
- extensible probabilistic programming in Clojure itself (rather than a language variation), with support for visualizations - bayadera:
prob
,gpu
- Bayesian computing using the GPU - sampling:
rand
- support srandom sampling of different kinds - distributions:
rand
,prob
- random sampling and some basic Bayesian computing for certain families of distributions - metaprob (
exp
):prob
,rand
,cljs
- an embedded languages for probabilistic programming and metaprogramming - anglican:
prob
,rand
,cljs
- a probabilistic programming language written in clojure, that supports a subset of clojure - dsim.cljc (
act
):rand
,cljs
- an event-driven engine for Clojure(script) heavily borrowing ideas from discrete-event simulation and hybrid dynamical systems - date-gen (
act
):rand
- randomized date generation supporting CSV output - drand:
rand
- a client to the Drand randomness servifdce
Machine learning
- tech.ml-base (
act
):ml
- a machine learning platform based on tech.ml.dataset, supporting not just ml algorithms, but also relevant ETL processing; wraps multiple machine learning libraries - clj-ml:
ml
- machine learning based on wrapping libraries such as the Weka Java library - clj-boost:
ml
- a wrapper for XGBoost - propaganda:
ml
- an implementation of the propagator computational model
Genetic programming
- Clojush (
act
):ml
- an implementation of the Push programming language for genetic programming - Propeller (
act
):ml
- "Yet another Push-based genetic programming system in Clojure"
Deep learning
- MXNet:
dl
- bindings to Apache MXNet - part of the MXNet project - Deep Diamond (
act
):dl
,native
,gpu
- infrastructure for tensor computation and deep learning - jutsu.ai:
dl
- a wrapper for deeplearning4j - Cortex:
dl
- a deep learning library written in Clojure - Flare:
dl
- dynamic neural networks in Clojure
Interop
- Libpython-clj (
act
):interop
- interop with Python - clj-python-trampoline (
act
):interop
- using libpython-clj from an already running python process, without needing any special python builds - Clojisr (
act
):interop
- interop with R and Renjin (R on the JVM) - graalvm-interop:
interop
- interop with FastR (GraalVM's R) - rdata - A Renjin (pure-JVM R) wrapper to allow Clojure programs to easily read R's RData file format
- other R interop libraries
- from-scala:
interop
- interop with Scala
Parralel computing
- claypoole - threadpool-based parallel versions of Clojure functions such as
pmap
,future
, andfor
- parallel - parallel-enabled functions, addditional transducers and supporting utilities
- tesser - a library for concurrent & commutative folds, including some statistical tasks and Hadoop support
- tech.parallel (
act
) - parallelization and threading primitives
Distributed computing
- overseer - a library for building and running data pipelines
- titanoboa - a fully distributed, highly scalable and fault tolerant workflow orchestration platform
Hadoop
- Parkour - Hadoop MapReduce in idiomatic Clojure
Spark
Stream processing
Kafka
- jackdaw (
act
) - a wrapper for Kafka and Kafka Streams - rp-jackdaw-clj (
act
) - various components for interacting with Kafka using Jackdaw - kafka.clj (
act
) - a wrapper for Kafka and Kafka Streams - ksml - representing kafka streams topologies as data