[ANN] Chestnut 0.15.0

After almost a year I’m pleased to announce the next major version of Chestnut.


The biggest change in this version is the use of Stuart Sierra’s Component library, both on the frontend and on the backend, in combination with reloaded.repl and System.

This makes this release a bit less minimalist than previous versions, but it’s in line with Chestnut’s goal to provide a solid default structure to build upon. It also allowed us to simplify some of the code around starting/stopping/reloading of the application, and should all in all provide a better REPL experience. It also makes it easier for Chestnut to support more features in the future in a way that is modular and maintainable.

New features and changes

Command line flags now start with a + (e.g. +http-kit) instead of --. This is more in line with what other templates are doing, and it works better with the way Leiningen deals with command line flags. The old flags are still supported as well.

Three new UI frameworks are supported: +re-frame, +rum, and +om-next.

A code_of_conduct.md is no longer included by default, instead it needs to be requested explicitly with +code-of-conduct. While we strongly encourage people to adopt a CoC, this is something that should be a deliberate choice, because it has implications on how a project is managed.

(run) has been renamed to (go), to be more in line with reloaded.repl, and browser-repl has been renamed to (cljs-repl) to follow the Figwheel API. The old versions are still available as aliases, they will be removed in Chestnut 1.0.

All dependencies have been upgraded to their latest versions, including

  • clojurescript 1.9.562
  • compojure 1.6.0
  • doo 0.1.7
  • environ 1.1.0
  • figwheel 0.5.10
  • http-kit 2.2.0
  • lein-cljsbuild 1.1.5
  • lein-environ 1.1.0
  • om 1.0.0-alpha48
  • org.clojure/tools.nrepl 0.2.13
  • reagent 0.6.0
  • ring 1.6.1
  • ring-defaults 0.3.0
  • transit-clj 0.8.300

Popularity poll

By default a lein new chestnut will “phone home”, reporting the Chestnut version and command line flags being used. It is possible to opt-out with the +no-poll flag.

No other information is stored, any logging for these requests is disabled. In particular there is no logging of the name given to the application, or of IP addresses or other identifiable information.

The reason for collecting this information is to help us decide which features to focus on, and to get a sense of how many people are opting in to the snapshot releases for early feedback.


Many thanks to the 41 people who have contributed to Chestnut since its inception in 2014. For this release I’d like to thank Jeff Wong in particular for pushing the Component integration forward.

As the Clojure landscape keeps evolving, so must Chestnut evolve with it. Contributions big and small are highly appreciated, whether it’s code, documentation, or testing. If you are interested in working on a feature then get in touch, I would be more than happy to provide mentoring and help you along the way. This applies to beginners and experienced developers equally.