A Directory of Clojure Libraries
This is a categorized and annotated directory of available Clojure libraries and tools. This directory is not comprehensive and is necessarily highly opinionated.
This directory is manually curated by the Clojure community. Please endeavor to keep it up-to-date, consisting of high quality libraries with adequate documentation. There are many more libraries in the Clojure ecosystem, but some lack documentation and/or are useful primarily to experienced developers and such projects are not included in this document.
For more comprehensive overview of the Clojure library ecosystem, please see ClojureSphere.
Support Libraries
General
Applications & Environment
tools.cli: a command line argument parser for Clojure
environ: Manage environment settings from a number of different sources
carica (at clojars): Flexible config file usage & management library.
Date and Time
- clj-time: A date and time library for Clojure
Testing
clojure.test: the standard unit testing library that ships with Clojure
Midje: a more featureful test framework
cloverage: a test-coverage tool (lein plug-in)
expectations (at clojars): a minimalist's testing framework
test.generative: generative testing, a la QuickCheck
conjure (at clojars): mocking and stubbing for unit tests.
Namespaces and Code-as-Data
Serialization
JSON
cheshire (at clojars): very efficient Clojure JSON and SMILE (binary JSON) encoding/decoding.
data.json: JSON parser/generator to/from Clojure data structures.
Protocol Buffers
- clojure-protobuf (at clojars): a Clojure interface to Google's protocol buffers
Kryo
Clojure Reader
- Nippy (at clojars): a more efficient implementation of the Clojure reader
XML
- data.xml: a library for reading and writing XML
Binary Formats
- gloss (at clojars): turns complicated byte formats into Clojure data structures
File formats
clj-pdf: a library for easily generating PDFs from Clojure
Pantomime (at clojars): a tiny Clojure library that deals with Internet media types (MIME types) and content type detection
data.csv: a CSV parser
Templating
HTTP
Client/Server
- HTTP Kit (at clojars): High-performance event-driven HTTP client/server for Clojure.
Client
clj-http (at clojars): An idiomatic Clojure http client wrapping the apache client.
clj-http-lite (at clojars): A lightweight version of clj-http having almost same API, but without any Apache dependencies.
Logging
Timbre: Simple, flexible, all-Clojure logging. No XML!
tools.logging: standard general-purpose logging.
clj-log: s-expression logger.
Web Development
Web Services
Ring (at clojars): foundational web application library
Compojure (at clojars): concise routing library for Ring
Pedestal (at clojars): an open source tool set for building web applications in Clojure
Luminus: lein template for creating batteries-included web applications using Ring, Compojure, lib-noir, and other libraries.
Liberator (at clojars): a Clojure library for building RESTful applications
friend (at clojars): Authentication and authorization library for Web apps
HTML Generation
hiccup: Generates HTML from Clojure data structures.
Stencil: Implements the Mustache templating language.
markdown-clj: Clojure based Markdown parsers for both Clojure and ClojureScript.
HTML Parsers
Crouton: A Clojure wrapper for the JSoup HTML and XML parser that handles real world inputs
Crawlista (at clojars): a support library for applications that crawl the Web
TagSoup: a tool for parsing html as it's found in the wild: poor, nasty, and brutish.
Data Validation
Validateur (at clojars): functional validations library inspired by Ruby's ActiveModel
Metis: another validations library inspired by Ruby's ActiveModel
Clj-Schema (at clojars): Schemas for Clojure Data: validation and test data generators
URIs, URLs
Urly (at clojars): unifies
java.net.URL
,java.net.URI
and string URIs, provides parsing and manipulation helpersExploding Fish (at clojars): a URI library for Clojure
route-one (at clojars): a tiny Clojure library that generates HTTP resource routes (as in Ruby on Rails, Jersey, and so on)
Internationalization (i18n), Localization (l10n)
- Tower (at clojars): a simple, idiomatic internationalization and localization story for Clojure
RSS
- clj-rss: RSS feed generation library
Data Stores
Relational Databases, JDBC
java.jdbc: Basic wrapper for JDBC. Works with all JDBC databases (MySQL, PostgreSQL, Oracle, SQL Server, etc).
CouchDB
- Clutch (at clojars): Apache CouchDB client.
MongoDB
Monger (at clojars): Monger is an idiomatic Clojure MongoDB driver for a more civilized age with solid documentation
congomongo (at clojars): Basic wrapper for the MongoDB Java driver
Riak
- Welle (at clojars): An expressive Clojure client for Riak with solid documentation
Redis
- Carmine (at clojars): a great Clojure client for Redis
Graph Databases (Neo4J, Titan, etc)
Neocons (at clojars): Neocons is a feature rich idiomatic Clojure client for the Neo4J REST API with solid documentation
Titanium (at clojars): a Clojure graph library built on top of Titan
Archimedes (at clojars): a Clojure wrapper for Tinkerpop Blueprints
Ogre (at clojars): a Clojure library for querying Tinkerpop graphs
ElasticSearch
Elastisch (at clojars): Elastisch is a minimalistic Clojure client for ElasticSearch with solid documentation.
Memcached, Couchbase, Kestrel
- Spyglass (at clojars): Spyglass is a very fast Clojure client for Memcached and Couchbase with solid documentation
Apache Cassandra
Cassaforte (at clojars): A young Clojure client for Apache Cassandra
clj-hector (at clojars): A simple Clojure client for Cassandra that wraps Hector
Alia (at clojars): Cassandra CQL3 client for Clojure, datastax/java-driver wrapper
ccm-clj (at clojars: Clojure interface to the Cassandra Cluster Manager, ccm
Amazon DynamoDB
Tokyo Cabinet
- tokyocabinet (at clojars): native Tokyo Cabinet interface for Clojure
Misc
masai (at clojars): a very simple interface to a number of key-value stores
jiraph (at clojars): a reasonably licensed embedded graph database with swappable backends
Networking
Lamina (at clojars): event-driven workflows in Clojure
Aleph (at clojars): asynchronous communication in Clojure
Application Servers
- Immutant (at clojars): a feature rich and integrated application platform for Clojure from Red Hat
Messaging
RabbitMQ
- Langohr (at clojars): a feature complete RabbitMQ client that embraces AMQP 0.9.1 model and learns from others
ZeroMQ
- Jilch (at clojars): Clojure ZeroMQ Library using JeroMQ, no native dependencies
Beanstalk
- beanstalk (at clojars): a Beanstalkd client
Amazon SQS
- Bandalore: a Clojure client library for Amazon's Simple Queue Service
HornetQ
- hornetq-clj (at clojars): a tiny HornetQ client
Data Processing, Computation
Twitter Storm (at clojars): distributed realtime computation system
Cascalog (at clojars): data processing on Hadoop without the hassle
Natural Language Processing
Parsers, Parser Combinators, Language Construction
Automation, Provisioning, DevOps Tools
pallet (at clojars): a platform for agile and programmatic automation of infrastructure
jclouds: unified APIs for dozens of cloud (IaaS) providers
Amazonica: comprehensive Clojure client for the entire AWS API
clj-ssh (at clojars): an SSH client
ssh-transport: executes commands over SSH
Monitoring, metrics
metrics-clojure (at clojars): Clojure library on top of Yammer's Metrics
clj-statsd (at clojars): simple client library to interface with statsd
pulse: Real-time Heroku operations dashboard
riemann (at clojars): A network event stream processing system, in Clojure.
I/O
Files, NIO, NIO2
File I/O is covered by the JDK and commonly used via clojure.java.io
functions.
- fs (at clojars): utilities for working with the file system
- nio: Clojure library for working with for Java NIO classes
Standard Streams, Subprocesses
Standard streams I/O is covered by the JDK and commonly used via clojure.java.io
functions.
clojure.java.shell (part of Clojure distribution): Conveniently launch a sub-process providing its stdin and collecting its stdout.
conch: for shelling out to external programs. An alternative to clojure.java.shell.
Property Files
- propertea (at clojars): painlessly work with property files
REPL and Terminal
REPLy (at clojars): a Swiss army knife of interactive editing, and better REPL for Clojure
clojure-lanterna (at clojars): for creating TUIs (terminal-based user-interfaces), like ncurses.
Concurrency and Parallelism
- java.util.concurrent: a comprehensive, very mature set of concurrency primitives built into the JDK
- Okku (at clojars): Akka API for Clojure
Mathematics
math.numeric-tower: various utility math functions
math.combinatorics: common combinatorial functions
core.matrix: matrix operations
Postal (at clojars): generate and send email with Clojure
Mailer (at clojars): generate and send email using Postal and Moustache templates
Data Structures and Algorithms
Strings
- clojure.string
Sets
- clojure.set
Caching
- core.cache: the Clojure API for various cache implementations
UUIDs
- tardis (at clojars): manages Type 1 UUIDs (time based)
Monads
algo.monads: macros for defining monads, and definition of the most common monads
protocol-monads: A protocol based monad implementation for clojure
Memoization
Other
vclock (at clojars): a vector clocks implementation
chash (at clojars): a consistent hashing library
Scheduling
- Quartzite (at clojars): a powerful scheduling library
Graphics and GUI
Quil: For making drawings, animations, and artwork (some examples). Wraps the "Processing" graphics environment.
seesaw (at clojars): A Swing wrapper/DSL.
clisk: Clisk is a DSL-based library for procedural image generation that can be used from Clojure and Java.
Security and Sandboxing
- Clojail (at clojars): a [code execution] sandboxing library
Documentation
Literate Programming
Marginalia (at clojars): literate programming implementation for Clojure. See the Marginalia site for an example.
Generating API Reference
Codox (at clojars): from the author of Compojure. See compojure api docs for an example.
Autodoc (at clojars): used to generate the official Clojure API reference.
Tooling
Leiningen: the Clojure build tool
tools.nrepl: nREPL interface
java.jmx: nice JMX interface
test.benchmark: a benchmarking library
tools.trace: a tracing library
criterium (at clojars): a benchmarking library that tries to address common benchmarking pitfalls
print-foo (at clojars): A library of print debugging macros.
gui-diff (at clojars): Tools for side-by-side diffing of Clojure data structures and clojure.test failures