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:
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.
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 |
---|---|---|---|
Generic versions of common functions |
Konrad Hinsen |
Stable |
|
Monad macros and Definitions |
Konrad Hinsen |
Stable |
|
Facilities for asynchronous programming and communication |
Rich Hickey |
Active |
|
A caching library implementing various cache strategies |
Sean Corfield |
Active |
|
Contracts programming in Clojure |
Fogus |
Inactive |
|
Functions proposed for core inclusion |
Inactive |
||
A logic programming library based on miniKanren |
David Nolen |
Stable |
|
Pattern match and predicate dispatch |
David Nolen |
Stable |
|
A manipulable, pluggable, memoization framework |
Sean Corfield |
Active |
|
RRB-Tree-based vectors |
Michał Marczyk, Andy Fingerhut |
Active |
|
Gradual typing |
Ambrose Bonnaire-Sargent |
Active |
|
Unification library |
Fogus |
Stable |
|
AVL trees |
Michał Marczyk |
Stable |
|
Native codec implementations |
Alexander Taggart |
Stable |
|
Reading and writing CSV files |
Jonas Enlund |
Stable |
|
Finger trees |
Chouser |
Stable |
|
Extensible binary Data Notation |
Stuart Halloway |
Stable |
|
Random data generators |
Stuart Halloway |
Inactive |
|
Maps and sets optimized for integer keys |
Alex Miller |
Stable |
|
JSON encoding / decoding |
Alessandra Sierra |
Stable |
|
Priority maps |
Mark Engelberg |
Stable |
|
Lazy XML parsing |
Ryan Senior, Herwig Hochleitner |
Stable |
|
Manipulating zippers |
Stable |
||
Classpath utilities |
Alessandra Sierra |
Stable |
|
Work with Java Beans |
Sean Corfield |
Active |
|
JDBC-based SQL interface |
Sean Corfield |
Stable |
|
JMX interface |
Nick Bailey |
Stable |
|
Lazy sequences for common combinatorial functions |
Mark Engelberg |
Stable |
|
Math functions and numeric tower |
Mark Engelberg |
Stable |
|
Property testing framework |
Alex Miller |
Active |
|
Test data generation and execution harness |
Stuart Halloway |
Inactive |
|
Analyzer framework for Clojure code |
Nicola Mometto |
Active |
|
JVM-specific passes for tools.analyzer |
Nicola Mometto |
Active |
|
Functions for writing Clojure build programs |
Alex Miller |
Active |
|
Command-line argument processor |
Sean Corfield |
Active |
|
Deps as data and classpath construction |
Alex Miller |
Active |
|
Deps functions for use with Clojure CLI |
Alex Miller |
Active |
|
Create dependency graphs for deps.edn projects |
Alex Miller |
Active |
|
Tools for retrieving, caching, and using git-based projects |
Alex Miller |
Active |
|
JVM bytecode generator |
Nicola Mometto |
Active |
|
Logging tools |
Alexander Taggart |
Active |
|
Tools for macro writers |
Konrad Hinsen |
Stable |
|
Tools for working with namespace declarations |
Alessandra Sierra |
Stable |
|
Network REPL |
Inactive |
||
Clojure reader |
Nicola Mometto |
Active |
|
A Clojure CLI tool for managing CLI tools |
Alex Miller |
Active |
|
Execution tracing |
Luc Prefontaine |
Stable |
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.
core.specs.alpha Specs for clojure.core
spec.alpha Describing the structure of data and functions with specs
spec-alpha2 In-development next version of spec
And finally, there are some repositories in the Clojure GitHub organization that are not libraries at all:
clojure-site - this web site, see Site Contributions
clojurescript-site - https://clojurescript.org web site
brew-install - clj
installer builds
build.ci - Jenkins project builder for contrib
build.poms - Maven super pom for contrib libs
clojure-api-doc - Clojure api doc builder
contrib-api-doc - contrib lib api doc builder
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.
Some older content on participating or contributing to contrib can be found at Contrib How-To.