Clojure Async Flow Guide
16 comments
·August 18, 2025user3939382
I think LISP is cool and want to use it more but I have 0 appetite to learn the toolchain and debug etc for JVM. You have Racket but Clojure ecosystem is already tiny.
raspasov
That’s a common misconception. JVM toolchain is way better than the hellscape that are most other language ecosystems. Maven, for example, works and is rock solid. Only unsolved problem is if you get too libs/frameworks requesting the another dependency but different incompatible versions. But I don’t think most other ecosystems solve that painlessly either.
Debug specifically is state of the art. Look at YourKik, or any debugger included with common IDEs.
None of those tools have shiny visual 2025 aesthetic but again: they work reliably, and will work the same way a year from now.
sieabahlpark
[dead]
tombert
Leiningen and deps.edn shield you a bit from the awfulness of Java project management. They feel a lot more like something you'd see in Node.js or something, but it still gets dependencies from Maven Central.
Debugging and profiling is still somewhat Java based, and yeah that's can be irritating, but you get used to it.
Personally I do think that it's worth it; Clojure is a very pleasant language that has no business being as fast as it is, and core.async is an absolutely lovely concurrency framework if you can convert your logic into messaging, and you have Haskell-style transactional memory for stuff that can't be. So many problems become less irritating in Clojure.
725686
Is Clojure still a thing? I sure would hope so, but I haven't seen much of Clojure activity in HN recently.
aeonik
The language itself is still getting updates, a new major release was just dropped a month or two ago.
I do find that for about 5 years things seemed to be slowing down. Though I keep seeing it pop up, and new exciting projects seem to pop up from time to time.
Just today I saw an article about Dyna3, a relational programming language for AI and ML that was implemented on top of Clojure.
I miss the Strange Loop conference. I think a lot of Clojure buzz was generated there. Clojure West and a few others so a decent job, but the quality of the talks at Strange Loop were second to none. Not that it was a Clojure specific conference, but it had that focus on elegance that I don't see very often, and the organizer was a something like the Prince of Clojure, if I recall correctly.
I'm still enjoying the language, and all my projects still build and run just fine.
The major frustration I have with the platform is 3D graphics. That's a JVM issue overall though.
ethersteeds
As others have said, Clojure is still a thing. For anyone catching up with Clojure again after some time: check out Babashka! Think bash scripts, written in Clojure. It's delightful.
tombert
I still use it. They finally fixed my biggest complaint about it a year ago, which is that you couldn't use vanilla Clojure lambdas for the Java functional interface, and so you'd have to reify that interface and it was bulky and ugly. Now it works fine so long as the interfaces actually have the @FunctionalInterface attribute.
Not every project uses @FunctionalInterface, but I've been trying to add it to places [1] [2] [3], and now I'm able to use Clojure in a lot more places.
[1] https://github.com/LMAX-Exchange/disruptor/pull/492
xanth
I was asking the same question today after investigating XTDB¹ (a Clojure centric bitemporal DB) and went looking for a batteries included WebAssembly framework like Blazor²
2. https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blaz...
casion
There's more clojure users than ever before and the team is active and afaik larger than ever before.
Things just mature and hype isn't as cool when you heard it 5 years ago.
chamomeal
I’d say clojure is very alive and happy. I’m a clojure newb and have been having a super fun time getting into it. Lots of very neat tools are in active development (babashka is the best thing that’s happened to my developer life in a while!!)
The small-medium sized community is actually fantastic for learning. The big names in the community are only a slack away, and everybody is so enthusiastic.
null
I've been meaning to try this out, from my read it's a declarative way to get some structured concurrency. I work in a codebase that heavily uses core.async channels to manage concurrency and you really need to pay close attention to error handling. When you're spawning new threads you need to set up your own custom machinery to re-throw errors on a chans, close chans, and it looks like core.async.flow is a way to do all of this declaratively.
Just like `core.async` itself was a frontrunner of Virtual Threads on the JVM, I view `core.async.flow` as the Clojure version of the upcoming [0]Structured Concurrency JEP. I do wonder if it will use that under the hood once it becomes stable, the same way `core.async` is planning to move away from the `go` macro to just have it dispatch a virtual thread.
[0]https://openjdk.org/jeps/453