Babashka https://github.com/babashka/http-client: HTTP client for Clojure and babashka built on java.net.http 0.4.24 (2026-07-26) • https://github.com/babashka/http-client/issues/80: accept a function of the request URI in`:proxy`to select a proxy per request (https://github.com/jeeger) The first release in a year!
I’ve been working on cljs-reload, a hot-reloading library for cljs.main:
https://github.com/hkjels/cljs-reload
Unlike shadow-cljs, it doesn’t require its own development server. It just handles hot reloading and stays out of the way. You’ll still want other tools for inspection/debugging, and JavaScript interop is limited to what cljs.main provides.
If you like the simplicity of cljs.main but have been missing hot reload, I’d love to hear what you think!
looks great. is the JDK watcher actually good now on macOS?
I’ve used this on a couple of projects over the last couple of weeks, smaller projects; and its worked really nicely. I haven’t done any benchmarking though. Might be a good idea to switch out the file watcher with beholder. I will have to test on a larger project to see if it makes sense
It's kinda cool to keep it deps free, just wondered
Intermediate https://github.com/borkdude/cream update.
Cream is Clojure running on native-image with a byte-code interpreter called Crema. Crema now has JIT (called Ristretto).
cream now supports most CLI options that the regular Clojure CLI supports so you can use it with deps.edn and -Sdeps etc.
Cream itself can now run many Clojure projects, including ClojureScript from source and run a Node.js REPL. Which is a pretty nice milestone since it's no trivial dependency:
./cream -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.12.145"}}}' -M -m cljs.main -re node
I wouldn't necessarily use cream for this since loading ClojureScript inside a regular JVM is still faster (both startup and performance), but it's still cool that it's possible.
For your Java friends: cream can load .java files too
Try cream and report issues!
Install instructions:
https://github.com/borkdude/cream#installI don't understand. Isn't the JVM also a bytecode interpreter with JIT? How is cream different?
Cream starts faster.
$ time ~/dev/cream/cream -e '(+ 1 2 3)'
6
~/dev/cream/cream -e '(+ 1 2 3)' 0,00s user 0,00s system 75% cpu 0,010 totalIs it fair to assume clojure apps still suffer from namespace loading latency?
yes. this uses the same clojure reader + compiler as normal clojure so everything still suffers from loading times except clojure itself :)
Thanks
unless I prebake a lot of dependencies in like with babashka, then it's immediate
Yeah. I have a project that uses a bunch of Java GCP libraries. I’d like to have low latency cold start. Some of them are pretty antagonistic to Graal compilation.
I guess I could roll my own Babashka build. I hadn’t thought of that before.
you could do that.
or your own cream build. or try loading it with cream today and see how fast it actually loads
Yep. One more thing on the pile of projects for Claude to chunk through 🙂
@borkdude maybe worth mentioning the machine the benchmarks are run on? im seeing ~2x less perf on my old-ish x86 linux machine
./cream -Scp "$(clojure -Spath -Sdeps '{:deps {dev.weavejester/medley {:mvn/version "1.9.0"}}}')" -M -e '(time (require (quote [medley.core :as mc]))) (time (dotimes [i 100000] (mc/greatest 5 2 1 3 4)))'
Reflection warning, medley/core.cljc:519:25 - call to java.util.ArrayList ctor can't be resolved.
"Elapsed time: 130.269824 msecs"
"Elapsed time: 62.169239 msecs"
./cream -Scp "$(clojure -Spath -Sdeps '{:deps {camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"}}}')" -M -e '(time (require (quote [camel-snake-kebab.core :as csk]))) (time (dotimes [i 100000] (csk/->SCREAMING_SNAKE_CASE "I am constant")))'
"Elapsed time: 174.958706 msecs"
"Elapsed time: 535.695064 msecs"2x less perf compared to?
cream now supports -Sdeps btw
2x compared to the numbers in the readme
yeah ok, this is done on an m4 max
$ bb -Sdeps '{:deps {dev.weavejester/medley {:mvn/version "1.9.0"}}}' -e '(time (require (quote [medley.core :as mc]))) (time (dotimes [i 100000] (mc/greatest 5 2 1 3 4)))'
"Elapsed time: 5.50125 msecs"
"Elapsed time: 55.0895 msecs"
$ dev/cream/cream -Sdeps '{:deps {dev.weavejester/medley {:mvn/version "1.9.0"}}}' -M -e '(time (require (quote [medley.core :as mc]))) (time (dotimes [i 100000] (mc/greatest 5 2 1 3 4)))'
Reflection warning, medley/core.cljc:519:25 - call to java.util.ArrayList ctor can't be resolved.
"Elapsed time: 45.331084 msecs"
"Elapsed time: 31.053666 msecs"
$ clj -Sdeps '{:deps {dev.weavejester/medley {:mvn/version "1.9.0"}}}' -M -e '(time (require (quote [medley.core :as mc]))) (time (dotimes [i 100000] (mc/greatest 5 2 1 3 4)))'
"Elapsed time: 82.198916 msecs"
"Elapsed time: 8.153458 msecs"
bb2 imminent it seems
well, not so sure about that. bb loads code much faster. execution time slower. but bb's sweet spot is to start short running scripts fast
also cream is much heavier to compile and already > 200mb now