| title | Table of Contents |
|---|---|
| layout | article |
The content is a categorized and manifold collection of documentation guides for the Clojure programming language and its ecosystem.
We recognize that different Clojure users have different level of expertise and separates content into several groups:
- Tutorials
- Core language guides
- The Ecosystem (tools, libraries, community, books) guides
- Cookbooks
If you're new to Clojure, this is a good place to start.
A swift introduction to the Clojure language, covering most of the basics.
A brief introduction to Emacs, Clojure mode, SLIME and Clojure development workflow with Emacs.
A brief introduction to Counterclockwise, a Clojure plugin for Eclipse.
A brief introduction to Clojure development in Vim with fireplace.vim.
A brief tutorial/walkthrough of building a small web app using Ring, Compojure, Hiccup, and SQLite.
This guide covers:
- How to parse XML in Clojure with zippers (
clojure.data.zip)
How to create a simple DSL with Clojure.
Includes introductions to:
- Multimethods
- Hierarchies
- Metaprogramming and the "Code as data" philosophy
Functions are at the heart of Clojure.
This guide covers:
- How to define functions
- How to invoke functions
- Multi-arity functions
- Variadic functions
- Higher order functions
- Other topics related to functions
clojure.core Overview (incomplete)
clojure.core is the core Clojure library.
This guide covers:
- Key functions of
clojure.core - Key macros of
clojure.core - Key vars of
clojure.core
The Clojure language implementation is symbiotic with its host platform (the JVM), providing direct interoperability.
This guide covers:
- How to instantiate Java classes
- How to invoke Java methods
- How to extend Java classes with proxy
- How to implement Java interfaces with reify
- How to generate Java classes with gen-class
- Other topics related to interop
Namespaces organize Clojure functions.
This guide covers:
- An overview of Clojure namespaces
- How to define a namespace
- How to use functions in other namespaces
require,referanduse- How to Look up and invoke a function by name
- Common compilation exceptions and their causes
- How code compilation works in Clojure
This guide covers:
- What are polymorphic functions
- Type-based polymoprhism with protocols
- Ad-hoc polymorphism with multimethods
- How to create your own data types that behave like core Clojure data types
This guide covers:
- Collections in Clojure
- Sequences in Clojure
- Core collection types
- Key operations on collections and sequences
- Other topics related to collections and sequences
This guide covers:
- An overview of concurrency hazards
- Clojure's approach to state and identity
- Immutable data structures
- Reference types (atoms, vars, agents, refs)
- Using Clojure functions with
java.util.concurrentabstractions - The Reducers framework (Clojure 1.5+)
- Other topics related to concurrency and runtime parallelism
This guide covers:
- Clojure macros
- Clojure compilation process
- Other topics related to metaprogramming
Laziness and Lazy Sequences (incomplete)
This guide covers:
- What are lazy sequences
- How to create functions that produce lazy sequences
- How to force evaluation
- Pitfalls with lazy sequences
This guide includes definitons of various Clojure-related terminology.
This guide covers:
- What is Leiningen and what it can do for you
- How to create a project with Leiningen
- How to manage project dependencies
- Accessing the REPL
- How to run tests for your project
- How to run the app
- How to compile your code and dependencies into a single JAR for deployment ("überjar")
- How to share (publish) a library
This guide covers:
- Planet Clojure, mailing lists, IRC channel
- Clojure conferences
- Local Clojure user groups
- Other Clojure community resources
A curated and highly opinionated categorized directory of available Clojure libraries and tools.
Editors & IDEs (incomplete)
This guide covers:
- An overview of development tools
- A brief intro to Emacs, nREPL, SLIME/Swank
- A brief intro to Vim with fireplace.vim
- A brief intro to Counterclockwise (Eclipse plugin)
- A brief intro to La Clojure (IntelliJ IDEA plugin)
- What is Clojure core.typed
- core.typed documentation, tutorials, and guides.
This guide covers:
- An overview of Clojure's JDBC wrapper
- Setting up a data source
- Manipulating data with SQL
- Manipulating tables with DDL
- Mapping between SQL entities and Clojure identifiers
- How to use connection pooling
- How to use the basic SQL DSL in java.jdbc.sql
- Where to go beyond java.jdbc
This guide covers:
- Books on Clojure
- Books on ClojureScript
This guide covers:
- An overview of Apache Maven
- Maven Clojure plugin
This guide covers:
- Basic setup for library development
- How to publish a library to Clojars
This guide covers:
- What are Leiningen profiles
- How to use them
This guide covers:
- How Clojure libraries are distributed
- How to publish Clojure libraries to clojars.org
- How to publish Clojure libraries to Maven Central
- How to publish Clojure libraries to your own Maven repository
This guide covers:
- What Leiningen plugins can do
- How to install Leiningen plugins
- How to develop plugins
- How to distribute plugins
- Tools for generating documentation from docstrings and other project metadata.
This guide covers:
- An overview of why Clojure is an excellent choice for data processing
- Popular tools and libraries in the area
This guide covers:
- Popular tools and libraries in the area
This guide covers:
- Clojure User Groups (CLJUGs) around the world
Strings (TBD)
This cookbook covers:
- How to work with strings
- How to work with regular expressions
- How to work with characters
Includes coverage of facilities for doing math with Clojure.
Data Structures (TBD)
This cookbook covers:
- Vectors
- Maps
- Lists
- Sets
- Generic operations on sequences
This cookbook covers:
- Reading and writing text and binary files
- Listing directory contents
- Creating files and directories
- Moving files and directories
- Removing files and directories
- Accessing file metadata
- Other operations on files and directories
Date and Time (TBD)
This guide covers:
- Working with JDK dates
- Working with Joda Time and
clj-time - Instant literals (Clojure 1.4+)
Middleware (incomplete)
This guide covers:
- What middleware is and how it works
- Creating middleware for a client function
- Combining middleware to create a new client
All the content is distributed under the CC BY 3.0 license and are copyright their respective primary author(s).
Please take a moment to tell us what you think about this guide on Twitter or the Clojure mailing list.
Let us know what was unclear or what has not been covered. Maybe you do not like the guide style or grammar or discover spelling mistakes. Reader feedback is key to making the documentation better.