1. Diverse toolsets
  2. Array programming, linear algebra
  3. Optimization
  4. Literate programming and data visualization
    1. Vega rendering
  5. Data processing
  6. Geospatial processing
  7. Dataframe-like structures
  8. Statistics
  9. Time series analysis
  10. Bayesian computing, random sampling & probprog
  11. Machine learning
    1. Genetic programming
    2. Deep learning
  12. Interop
  13. Parralel computing
  14. Distributed computing
    1. Hadoop
    2. Spark
  15. Stream processing
    1. Kafka

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 programming
  • linalg - linear algegra
  • native - interop with native-optimized libraries
  • gpu - gpu support
  • vis - data visualization and visual art
  • vega - visualization using Vega/Vega-lite specifications
  • lit - literate programming
  • ui - building UIs for data exploration
  • geo - geographical and geometrical data processing
  • df - dataframe-like data structures and abstructions
  • data - general data processing
  • csv - csv support
  • xform - transducers support
  • math - diverse math functions
  • stat - statistics
  • ts - time series analysis
  • rand - simulation and random sampling
  • prob - Bayesian computing and probabilistic programming
  • ml - machine learning
  • dl - deep learning
  • opt - optimization
  • graph - graph algorithms and network analysis
  • interop - general libraries for interop
  • cljs - 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 Vega

  • Vegan (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 scrips

  • Optikon: vis,vega - a command line tool that wraps Vega and Vega-lite - using GraalVM polyglot programming

  • Vegafx: vis,vega - a static-site viewer using javafx that renders Vega specs

  • darkstar: 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

Parralel computing

  • claypoole - threadpool-based parallel versions of Clojure functions such as pmap, future, and for
  • 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