# Awesome Clojure

- Awesome products in Clojure
  - OneKeePass: A secure password manager and mobile app in ClojureScript
  - Penpot: design and prototyping platform
  - LightTable (IDE) (archived)
  - Maria.cloud (Online IDE for beginners)
  - Riemann (Monitoring)
  - Precursor (Online prototyping tool)
  - Puppet Server
  - PuppetDB
  - Metabase
  - Metabase Datomic
  - CircleCI
  - Avi (vim rewrite)
  - Liquid (Text Editor)
  - Clojupyter
  - meins
  - Jepsen
  - Braid: a team-chat app with a novel UI that leads to better conversations
  - Accelerated Text: a natural language generation environment (backend: Clojure, frontend: JS)
  - Ziggurat: a framework built to simplify Stream processing on Kafka
  - Nightcode: An IDE for Clojure (archived)
  - Nightlight: text editor (archived)
  - Atea: a minimalistic menu bar time tracker for MacOS (legacy, requires jvm 1.6)
  - herfi - 3D multiplayer game prototype written in Clojure and ClojureScript
  - racing-game-cljs - A 3D racing game built with ClojureScript, React and ThreeJS
- Awesome SaaS (partially OSS) in Clojure
  - Logseq: knowledge management and collaboration (open frontend)
- Languages written with Clojure
  - jank
  - lux
  - mal
  - scheje
  - eden
  - ferret
- Awesome tools in Clojure
  - Awesome macros usage
  - Advanced datastructures
  - Web Framework
  - Dependency injection
  - Build Automation and Package management
  - Version Control Management
  - Date and Time
  - GUI
  - Audio
  - HTTP
  - Database
  - Connection pools
  - Structural Migrations
  - Redis
  - JSON
  - Protocol Buffers and gRPC
  - ORM and SQL generation
  - Security
  - RESTful API
  - GraphQL API
  - Emails
  - HTML Manipulation
  - Data Validation
  - Type System
  - Pattern Matching
  - Async processing
  - Monads
  - WebSocket
  - Testing
  - Webdriver automation
  - Code Analysis and Linter
  - Science and Data Analysis
  - Machine Learning
  - Computer Vision
  - Text Processing
  - Parsing
  - Editor Plugins
  - Documentation
  - Literate Programming
  - Archives and Compression
  - Miscellaneous
  - Debugging tools
  - CI
  - Project Management
  - Terminal UI
  - Graphviz
- Resources
  - Guides
  - Video tutorials
  - Websites
  - Twitter
  - Exercises

## Awesome macros usage

Answers why the lisp shines, killer features in action

- core.async - transforms AST into CSP programs

- cloroutine - suspends and continuations (coroutines)

- missionary - a reactive dataflow programming toolkit

- photon - realtime web, like Meteor, but for Clojure(Script)

- metaclj - staged compilation

- meander - transparent data transformation using datastructure pattermatching

- proteus - introduce mutable variables (don’t use, just learn how to map your mind into immutable world) ## Advanced datastructures

- specter: an elegant API for querying and transforming nested and recursive data

- meander: transparent data transformation (defined as pattern-matching)

- Persistent AVL trees: persistent sorted maps and sets with log-time rank queries

- Finger Tree: double-list, counted-double-list, counted-sorted-set

- Hitchhiker Tree: create fast, snapshottable, massively scalable databases

- Hierarchical set

- Ordered: ordered sets and maps

- Lazy Map: whose values are only calculated when accessed

- Duratom: persisted atoms

- Durable Queue: queue persisted on disk

- bifurcan: linear map/set/list (stores entries contiguously in memory), ;writtern in java, but test suite (read: usage examples) in clojure

## Web Framework

Actually don’t search rails/django here, but compose them by yourself * Compojure * Compojure-api * Luminus * Duct * Pedestal * Datsys * yada * Hoplon * Fulcro * Coast * Reitit * Tadam * Column * Biff

## Dependency injection

Managed lifecycle of stateful objects

- Component
- System
- mount
- Integrant
- clip
- piotr-yuxuan/closeable-map
- darkleaf/di

## Build Automation and Package management

Libraries for project build automation and package/dependency management.

- Leiningen
- Boot
- tools.build
  - build.simple
- clojurephant (Gradle plugin)
- shadow-cljs (Clojurescript)

## Version Control Management

Code utilities for interacting with VCS software

- clj-jgit

## Date and Time

Libraries for working with dates and times.

- clj-time
- clojure.java-time - Java 8 Date-Time API
- holi - Calendar operations that are aware of weekends and holidays
- timewords
- tick: Clojure(Script) library, intended as replacement for clj-time

## GUI

- seesaw
- trikl
- fx-clj

## Audio

- Overtone
- Alda

## HTTP

Libraries for working with HTTP.

- clj-http : Apache HttpComponents client wrapper
- http-kit : Simple, high-performance event-driven HTTP client and server
- ring : HTTP server abstraction
- kvlt : Uniform, asychronous client interface for HTTP across JVM / Node / browsers
- aleph : Async client/server based on Netty, with defaults for HTTP, TCP and UDP
- hato : An HTTP client for Clojure, wrapping JDK 11’s HttpClient

## Database

Databases and database client libraries

- Datomic
- xtdb: bitemporal database for SQL, Datalog & graph queries
- Datahike
- Datascript
- Datalevin
- next.jdbc
- clojure.java.jdbc
- clojure.jdbc
- cravendb
- Monger: for MongoDB
- Monglorious: for MongoDB
- clj-rethinkdb: for RethinkDB
- Revise: for RethinkDB
- Spandex: for ElasticSearch
- Elastisch: for ElasticSearch
- neocons: for Neo4j
- Alia: for Cassandra
- aerospike-clj: for Aerospike

## Connection pools

Database connection pools

- hikari-cp
- metabase/connection-pool

## Structural Migrations

Keeps database and others in sync

- Lobos
- Ragtime
- Joplin
- Migratus
- Drift

## Redis

- carmine
- celtuce

## JSON

- cheshire
- jsonista

## Protocol Buffers and gRPC

- pronto
- lein-protodeps

## Database Cli

## ORM and SQL generation

DSL for SQL generation. * Walkable * Korma * Specql * stch-library/sql * sqlingvo * sqlium * honeysql * Toucan

## Security

Authentication, authorization and other security related libraries.

- Buddy
- caesium (libsodium bindings)
- Friend
- secrets.clj
- bolt

## RESTful API

Libraries for developing RESTful APIs.

- Liberator
- Compojure-api
- Friboo
- yada
- router
- reitit

## GraphQL API

Libraries for developing GraphQL APIs.

- Lacinia

## Emails

- postal

## HTML Manipulation

Libraries for working with HTML.

- Enlive
- hiccup
- clostache
- selmer

## Data Validation

Libraries for validating data.

- Guardrails
- Malli
- Validateur
- Prismatic’s schema
- Bouncer
- clova
- Orchestra
- struct
- domaintypes

## Type System

Optional type system for Clojure

- core.typed

## Pattern Matching

- core.match
- defun
- cats.match
- Akar
- Meander
- Verbal-Exprejon

## Async processing

- core.async
- pulsar
- manifold
- goose

## Monads

- cats
- algo.monads
- Fluokitten

## WebSocket

- Chord
- Sente
- aleph

## Testing

- Expectations
- Midje
- test-doubles
- kaocha
- StateFlow
- Datest

## Webdriver automation

- Etaoin

## Code Analysis and Linter

- Slamhound
- eastwood
- kibit
- yagni
- lein-bikeshed
- spectrum
- cloverage
- clj-kondo
- splint

## Science and Data Analysis

Libraries, extended REPLs, and other tools for scientific and statistical data anylysis and visualization.

- Incanter
- Cascalog
- Onyx
- sparklling
- flambo
- Neanderthal
- Streaming Histograms
- Gorilla REPL
- Bayadera - Bayesian Data Analysis on the GPU
- ClojureCUDA
- Neanderthal - fast matrix and linear algebra
- ClojureCL - parallel computations with OpenCL
- Loom - graph library for Clojure

## Machine Learning

- neanderthal: fast matrix library
- clojurecuda
- clojurecl
- bayadera: bayesian data analysis on the GPU
- cortex
- Flare
- MXNet - Clojure API
- clj-bigml
- Deeplearning4j
- Enclog
- lambda-ml
- clojure-tensorflow
- dl4clj (deeplearning4j to clojure)
- Anglican
- clj-ml
- Clatern
- k9
- Statistiker
- Synaptic
- Infer
- clj-synapses
- scicloj.ml

## Computer Vision

- origami: OpenCV 4 wrapper
- clj-tesseract
- vision

## Text Processing

- clojure-opennlp
- postagga
- beagle
- lmgrep

## Parsing

- Instaparse
- kern
- duckling
- buran - RSS/Atom feed consumer and producer

## Exceptions and Error Handling

- Ex
- Perseverance
- Dire

## Rule-based Programming

- O’Doyle Rules
- Clara Rules
- Arete

## Editor Plugins

- Calva (VSCode)
- clojure-lsp (multiple editors)
- CIDER (Emacs)
- smartparens (Emacs)
- rainbow-delimiters (Emacs)
- aggressive-indent (Emacs)
- Conjure (Neovim)
- vim-cljfmt (Vim)
- vim-eastwood (Vim)
- vim-fireplace (Vim)
- vim-redl (Vim)
- vim-leiningen (Vim)
- rainbow_parentheses.vim (Vim)
- vim-iced (Vim)
- Cursive (IntelliJ)
- proto-repl (Atom)
- Parinfer (multiple editors)
- Bracket Pair Colorizer (VSCode)
- clojureVSCode (VSCode)
- Notepad++: modified config files of Lisp

## Documentation

Utilities and libraries for (non-LP) code and project documentation

- codox

## Literate Programming

- marginalia
- klipse

## Archives and Compression

- swindon (java.util.zip wrapper)

## Miscellaneous

- potemkin - reexport vars in another ns / act like a clojure map
- clj-tuple
- slingshot
- virgil
- javastar
- riddley
- kezban
- clj-grpc

## Debugging

- flow-storm-debugger
- playback
- tools.trace
- debugger
- debug-repl
- ritz
- redl
- limit-break
- spyscope
- aprint
- packed-printer
- pretty
- prone
- figwheel
- ultra
- mate-clj
- scope-capture

## CI

- lambdacd

## Project Management

- milestones

## Terminal UI

- clojure-lanterna
- triki
- zaffre
- closh
- piotr-yuxuan/malli-cli

## Graphviz

- zipper-viz
- dorothy
- viz.cljc
- fsmviz
- rhizome
- re-frame-flow - Graph based visualization tool for re-frame event chains (ClojureScript)

## Game Development

- jme-clj - A Clojure 3D Game Engine (Wrapper), Powered by jMonkeyEngine
- play-cljc - A Clojure and ClojureScript game library

## Guides

- The Clojure Style Guide
- Clojure Distilled
- clojure-cookbook
- A Brief Beginner’s Guide To Clojure
- Clojure for the Brave and True
- Clojure from the ground up
- Error message catalog
- Clojure by Example

## Video tutorials

### YouTube

- Misophistful’s channel: Understand concepts such as list comprehension, threading macros, generative testing, destructuring, core.match and introductions to Light Table, Datomic and Game development with Clojure
- Fred Overflow’s channel: Introductions to Functional programming and TDD with Clojure
- Clojure Pills screencast: Introduction to Clojure one function at a time
- Clojure Pills screencast: Fun and beginner friendly content related to the overall clojure ecosystem
- Data persistance with Postgres, Clojure and JDBC
- Clojure Tutorials by Timothy Baldridge: More advanced videos on core.async, transducers, transients, logic programming and a “Function of the day” series.

## Websites

- Clojure
- Clojure Slack
- clojuredocs
- clojure-doc
- The Clojure Toolbox
- ZEEF/Clojure

## Twitter

- oss_clj

## Exercises

- rich4clojure
- Wonderland Clojure Katas
- Clojure Koans
- exercism.io
- Codewars

clojure.md Github