Clojure

Contrib Libraries

Clojure is an umbrella level project that hosts many additional libraries called Clojure contrib, which all exist under the Clojure organization on GitHub.

These libraries use the same contribution model (Contributor Agreement, license, and copyright) as Clojure itself, and a shared infrastructure maintained by the Clojure core team:

  • Source control - Git libraries on GitHub

  • Issues - JIRA

  • Development model - patches in JIRA, no PRs

  • Continuous integration - GitHub actions in each project

  • Doc generation and hosting - Autodoc and GitHub pages

  • Builds - Maven with deployment to Maven Central under the groupId org.clojure

Every project has one or more owners (often community members) who determine the direction of their library, triage patches, etc. Project owners have full commit rights and authenticated access to their project on the build box for releases.

Contrib libraries are open source libraries, like any other open source Clojure library. They vary widely in development activity and quality and may or may not be the best alternative for their functionality in the overall ecosystem. You should evaluate them before use as you would any open source library you intend to use as a dependency.

If you find that active development for a library has ceased and you would like to take over as owner, please contact clojure@cognitect.com. Good stewards for a library typically tend to be those actively using the library and knowledgable about the goals and alternatives of the functionality.

Contrib Libraries

Status legend:

  • Active - under active regular development

  • Stable - working but development is irregular

  • Inactive - no longer in development, will not be worked on again

Lib Description Owner Status

algo.generic

Generic versions of common functions

Konrad Hinsen

Stable

algo.monads

Monad macros and Definitions

Konrad Hinsen

Stable

core.async

Facilities for asynchronous programming and communication

Rich Hickey

Active

core.cache

A caching library implementing various cache strategies

Sean Corfield

Active

core.contracts

Contracts programming in Clojure

Fogus

Inactive

core.incubator

Functions proposed for core inclusion

Inactive

core.logic

A logic programming library based on miniKanren

David Nolen

Stable

core.match

Pattern match and predicate dispatch

David Nolen

Stable

core.memoize

A manipulable, pluggable, memoization framework

Sean Corfield

Active

core.rrb-vector

RRB-Tree-based vectors

Michał Marczyk, Andy Fingerhut

Active

core.typed

Gradual typing

Ambrose Bonnaire-Sargent

Active

core.unify

Unification library

Fogus

Stable

data.avl

AVL trees

Michał Marczyk

Stable

data.codec

Native codec implementations

Alexander Taggart

Stable

data.csv

Reading and writing CSV files

Jonas Enlund

Stable

data.finger-tree

Finger trees

Chouser

Stable

data.fressian

Extensible binary Data Notation

Stuart Halloway

Stable

data.generators

Random data generators

Stuart Halloway

Inactive

data.int-map

Maps and sets optimized for integer keys

Alex Miller

Stable

data.json

JSON encoding / decoding

Alessandra Sierra

Stable

data.priority-map

Priority maps

Mark Engelberg

Stable

data.xml

Lazy XML parsing

Ryan Senior, Herwig Hochleitner

Stable

data.zip

Manipulating zippers

Stable

java.classpath

Classpath utilities

Alessandra Sierra

Stable

java.data

Work with Java Beans

Sean Corfield

Active

java.jdbc

JDBC-based SQL interface

Sean Corfield

Stable

java.jmx

JMX interface

Nick Bailey

Stable

math.combinatorics

Lazy sequences for common combinatorial functions

Mark Engelberg

Stable

math.numeric-tower

Math functions and numeric tower

Mark Engelberg

Stable

test.check

Property testing framework

Alex Miller

Active

test.generative

Test data generation and execution harness

Stuart Halloway

Inactive

tools.analyzer

Analyzer framework for Clojure code

Nicola Mometto

Active

tools.analyzer.jvm

JVM-specific passes for tools.analyzer

Nicola Mometto

Active

tools.build

Functions for writing Clojure build programs

Alex Miller

Active

tools.cli

Command-line argument processor

Sean Corfield

Active

tools.deps

Deps as data and classpath construction

Alex Miller

Active

tools.deps.cli

Deps functions for use with Clojure CLI

Alex Miller

Active

tools.deps.graph

Create dependency graphs for deps.edn projects

Alex Miller

Active

tools.gitlibs

Tools for retrieving, caching, and using git-based projects

Alex Miller

Active

tools.emitter.jvm

JVM bytecode generator

Nicola Mometto

Active

tools.logging

Logging tools

Alexander Taggart

Active

tools.macro

Tools for macro writers

Konrad Hinsen

Stable

tools.namespace

Tools for working with namespace declarations

Alessandra Sierra

Stable

tools.nrepl

Network REPL

Inactive

tools.reader

Clojure reader

Nicola Mometto

Active

tools.tools

A Clojure CLI tool for managing CLI tools

Alex Miller

Active

tools.trace

Execution tracing

Luc Prefontaine

Stable

Core Libraries

Additionally, the following libraries are dependencies of Clojure itself managed directly by the core team. These libraries use the same shared infrastructure as the Contrib libraries, so are largely the same in that regard. Development in these libraries is often linked to development in the core language itself.

And finally, there are some repositories in the Clojure GitHub organization that are not libraries at all:

History

Prior to Clojure 1.3, Clojure had a single "batteries included" library called clojure-contrib that consisted of many independent helper namespaces contributed by the community. In the Clojure 1.3 timeframe, this library was split into the independent libraries that exist today with independent owners. Some of the namespaces were seen as experimental and not promoted into any public library. Alessandra Sierra recounts this in more detail in his post.

At the time there was an idea that some of the contrib libraries could eventually be promoted into Clojure’s core library itself. With time, there has been a desire to keep Clojure’s core library small and to allow these independent libraries to stay independent and evolve at their own pace.

Also see Contrib History for some legacy history of the contrib split.

Contrib How-To

Some older content on participating or contributing to contrib can be found at Contrib How-To.