It’s been like 7 years since I’ve written any Clojure, but I used to like it a lot. I felt that the ecosystem wasn’t mature enough and the community was quite small in size. Is that the case now? What’s the health of Clojure these days? Especially for backend web services.
Seven years ago you would have been using Clojure 1.8 or earlier I expect?
A LOT has happened with the language and the tooling since then!
Clojure 1.9 gave us Spec "for describing, validating, and testing the structure of data and functions." and a whole bunch of new core functions (mostly new predicates).
Clojure 1.10 overhauled error reporting and gave us tap> (for debugging) and datafy/nav for lazy "navigation" through object graphs, which kicked off a series of new visual tools for exploring data structures: REBL (now Morse), Reveal, Portal, etc.
There's new Clojure CLI tooling now (tools.deps and the deps.edn file) and a library supporting programmatic builds (tools.build and the build.clj file). The 2023 State of Clojure survey shows the new CLI tooling surpassed Leiningen in popularity!
VS Code now has an amazingly capable Clojure extension called Calva, and you can script VS Code and Calva directly in ClojureScript via the Joyride extension.
The latter is made possible by sci -- Small Clojure Interpreter -- from @borkdude. He also created Babashka which provides a near-zero startup time solution for writing shell scripts in Clojure/Script, and clj-kondo which is a powerful, high-performance linter, which in turn powers clojure-lsp bringing static analysis for Clojure to several editors.
Datomic has grown up a lot in the last seven years and is now completely free to use (but not open source). We also have an open source bitemporal database in XTDB from the JUXT folks.
Clojure 1.12 is currently in alpha, and provides built-in support for adding new dependencies to your running REPL (without restarts).
Excellent outline. Other amazing, actively developed libraries include datascript, datalevin (both cousins of datomic), tech.ml.dataset (data frames), cljfx (declarative gui). Will be interesting to follow Electric Clojure and HumbleUI. Cider on emacs continues to flourish. So much is going on, thanks to many brilliant minds and funding from Clojurists Together, Cognitect/Nubank and other bodies! And the language is still as coherent, succinct and elegant as it ever was.
Of course, still small relative to other language communities (esp. JS and Python), but for web backends it's wonderful. http-kit is a solid server with a nice simple design and passable performance and features. next-jdbc is similar for relational database connections. In general, the JVM is very powerful and getting better all time, OpenJDK is an amazing project that answered many looming questions about Oracle's licensing plans.
I'd say in the last 7 years in particular there's been a push toward more professional use of Clojure, with things like https://www.whyclojure.com/ popping up, and the prominent use at NuBank driving interest from consumer finance and finance-adjacent corporates.
My personal interest is in Clojure's use in data science, which is related to web backends in that it can be used to tell a more complete full-stack story that can include analytics, prediction, etc... We're finding in our work that a functional approach to data science saves a lot of headaches, and Clojure's inherent orientation toward data eases a lot of pain we've encountered doing data science in non-functional ways in the past.
Could probably try to pinpoint where Clojure is on the Gartner hype cycle today, as I certainly see less activity and frothy hobbyist fervor here and in other places; but that's a bit of a futile exercise. If you peel one layer off, you'll probably find that some of us just grew up and now are just happily and productively making money and things and helping people, with the immense leverage we always knew Clojure had.
Repping team Hyperfiddle here, we are super proud of:
https://github.com/hyperfiddle/electric – a fully reactive Clojure dialect for web development that uses a compiler to infer the frontend/backend boundary. (BTW, Electric v3: Differential Electric is nearly here – Differential Dataflow for UI)
https://github.com/leonoel/missionary – Supervised dataflow programming for Clojure/Script. For full-stack web developers who struggle to build correct and glitch-free applications, Missionary is a reactive programming toolkit based on process supervision, that lets you build massively concurrent, fine-grained reactive systems on both frontend and backend. Unlike promises and go-routines that make it easy to write a broken program, Missionary’s combinators provide the right set of constraints to let you build a fully composable program that is also correct and bug-free.
A LOT has happened with the language and the tooling since then!
Clojure 1.9 gave us Spec "for describing, validating, and testing the structure of data and functions." and a whole bunch of new core functions (mostly new predicates).
Clojure 1.10 overhauled error reporting and gave us tap> (for debugging) and datafy/nav for lazy "navigation" through object graphs, which kicked off a series of new visual tools for exploring data structures: REBL (now Morse), Reveal, Portal, etc.
There's new Clojure CLI tooling now (tools.deps and the deps.edn file) and a library supporting programmatic builds (tools.build and the build.clj file). The 2023 State of Clojure survey shows the new CLI tooling surpassed Leiningen in popularity!
VS Code now has an amazingly capable Clojure extension called Calva, and you can script VS Code and Calva directly in ClojureScript via the Joyride extension.
The latter is made possible by sci -- Small Clojure Interpreter -- from @borkdude. He also created Babashka which provides a near-zero startup time solution for writing shell scripts in Clojure/Script, and clj-kondo which is a powerful, high-performance linter, which in turn powers clojure-lsp bringing static analysis for Clojure to several editors.
Datomic has grown up a lot in the last seven years and is now completely free to use (but not open source). We also have an open source bitemporal database in XTDB from the JUXT folks.
Clojure 1.12 is currently in alpha, and provides built-in support for adding new dependencies to your running REPL (without restarts).
It's a great time to be a Clojurian!