diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 0000000..d13899c
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,42 @@
+# Clojure CircleCI 2.0 configuration file
+#
+# Check https://circleci.com/docs/2.0/language-clojure/ for more details
+#
+version: 2
+jobs:
+  build:
+    docker:
+      # specify the version you desire here
+      - image: circleci/clojure:lein-2.7.1
+
+      # Specify service dependencies here if necessary
+      # CircleCI maintains a library of pre-built images
+      # documented at https://circleci.com/docs/2.0/circleci-images/
+      # - image: circleci/postgres:9.4
+
+    working_directory: ~/repo
+
+    environment:
+      LEIN_ROOT: "true"
+      # Customize the JVM maximum heap limit
+      JVM_OPTS: -Xmx3200m
+
+    steps:
+      - checkout
+
+      # Download and cache dependencies
+      - restore_cache:
+          keys:
+            - v1-dependencies-{{ checksum "project.clj" }}
+            # fallback to using the latest cache if no exact match is found
+            - v1-dependencies-
+
+      - run: lein deps
+
+      - save_cache:
+          paths:
+            - ~/.m2
+          key: v1-dependencies-{{ checksum "project.clj" }}
+
+      # run tests!
+      - run: lein test
diff --git a/README.md b/README.md
index 0a62f82..f5547cf 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,8 @@ Arbitrary numbers of dimensions are supported, up to limits imposed by the JVM s
 
 [![Clojars Project](https://img.shields.io/clojars/v/sparse-array.svg)](https://clojars.org/sparse-array)
 
+[![CircleCI](https://circleci.com/gh/simon-brooke/sparse-array.svg?style=svg)](https://circleci.com/gh/simon-brooke/sparse-array)
+
 ## Conventions:
 
 ### Sparse arrays
@@ -210,7 +212,7 @@ e.g.
 
 ### extract-from-dense
 
-Note that the above example returns the default axis sequence {i0, i1, i2...};
+Note that the above example returns the default axis sequence `{i0, i1, i2...}`;
 extracting from a sparse array will always retain the axes of the array
 extracted from. Dense arrays, obviously, do not have explicit axes.
 
diff --git a/project.clj b/project.clj
index 4ffcbee..d36a1dd 100644
--- a/project.clj
+++ b/project.clj
@@ -1,4 +1,4 @@
-(defproject sparse-array "0.2.0"
+(defproject sparse-array "0.2.1"
   :description "A Clojure library designed to manipulate sparse *arrays* - multi-dimensional spaces accessed by indices, but containing arbitrary values rather than just numbers. For sparse spaces which contain numbers only, you're better to use a *sparse matrix* library, for example [clojure.core.matrix](https://mikera.github.io/core.matrix/)."
   :url "http://example.com/FIXME"
   :license {:name "Eclipse Public License"