https://github.com/ring-clojure/ring has been released that fixes some reported reflection warnings.
Much appreciated sir!
I released https://github.com/jramosg/color-tools. A complete toolkit for working with colors in Clojure and Clojurescript
nice. I tested it with bb too:
Thank for testing it with bb too π Any feedback is welcome π
Very awesome. I usually use #garden for this, but a separate lib makes total sense. I donβt see Garden in your list of inspirations, so maybe you have yet another source to get inspiration from? π
(Note that Garden is being maintained by #lambdaisland these days.)
they have a maintained fork, so probably the defacto version. there's not a mention of it in the original repo though
(and that fork was made bb-compatible too, how nice :))
I didnβt look to Garden, I didnβt know that it has color manipulation functions. Iβll take a look in case I see something I can include. Thank you @pez !!
btw @jonurnieta - since this is the first version, what does > β’ Backward Compatible: All existing string/vector-based APIs continue to work mean in the readme?
also the README mentions some things that are "still supported". Still supported compared to?
I had some previous versions that they were used only by me. I added that when I added the Color record that previously didnβt exist. So youβre right, I will change it. Thanks @borkdude !
around 760 lines of pretty straight forward readable code incl. comments, nice π
Thank you @azimpel ! Feel free to give any suggestion π
π Clojure MCP https://github.com/bhauman/clojure-mcp/blob/main/CHANGELOG.md#019-alpha---2025-9-16 Released!
Major update with powerful new configuration capabilities:
β¨ Key Highlights:
β’ Custom Agents via Config - Define your own sub-agents in config.edn with custom models and prompts
β’ Custom Prompts & Resources - Create your own prompts and resources directly in the config file
β’ Home Directory Config - User-level defaults in ~/.clojure-mcp/config.edn
β’ Malli Config Validation - Catch configuration errors early with schema validation
β’ Component Filtering - Fine-grained control with :enable-* and :disable-* for tools, prompts, and resources
β’ REPL Helpers Improvements - Enhanced utilities for REPL interaction
π― Config Superpowers: You can now define agents, prompts, and resources directly in your config.edn - no code changes needed! Perfect for project-specific AI workflows.
π New Documentation: β’ https://github.com/bhauman/clojure-mcp/blob/main/doc/configuring-agents.md β’ https://github.com/bhauman/clojure-mcp/blob/main/doc/tools-configuration.md β’ https://github.com/bhauman/clojure-mcp/blob/main/doc/configuring-resources.md β’ https://github.com/bhauman/clojure-mcp/blob/main/doc/configuring-prompts.md β’ https://github.com/bhauman/clojure-mcp/blob/main/doc/component-filtering.md
π Links: β’ https://github.com/bhauman/clojure-mcp/releases/tag/v0.1.9-alpha β’ https://github.com/bhauman/clojure-mcp/blob/main/CHANGELOG.md#019-alpha---2025-9-16 β’ https://github.com/bhauman/clojure-mcp
Update your deps.edn:
com.bhauman/clojure-mcp {:git/tag "v0.1.9-alpha"
:git/sha "e3e0e9b"}Really a Clojure-adjacent announcement, but https://jdk.java.net/25/release-notes is now available (at least from https://www.oracle.com/java/technologies/downloads/, soon from other providers like Temurin). There are a lot of performance and other improvements, including some that significantly benefit Clojure (like reworking the super class cache). If you're using an older version of Java you should definitely consider updating to the latest version.
Java has been on fire in the last few years to be honest.
I'm curious to try this:
java -XX:AOTCacheOutput=app.aot -cp app.jar
The ergonomics have really improved from when I tried app CDs a while back.
Does anyone know if this caches more things than what app CDs used to cache?
yes, they are now caching profiling info (branch prediction etc)
they're also doing a much better job of caching the post-linked references
if you're willing to properly warm it up, it can be a big win. but the time and effort of course to do that have to be really worth the startup time payback at prod time
still pretty awkward in dev envs
A reminder that if you don't want to install JDK from Oracle and too impatient to want to wait for Temurin, Zulu binaries are already available from Azul: https://www.azul.com/downloads/?package=jdk#zulu. They are a reliable OpenJDK binaries provider.
@alexmiller Is there any guidance related to the SequencedCollection issue? We had faced this issue when we wanted to switch to Java 21, but then had to downgrade to 17. Ref: https://aphyr.com/posts/369-classnotfoundexception-java-util-sequencedcollection
You should AOT compile targeting the minimum Java version you intend to run on.
That is just generally true - when Clojure code is compiled, Java method and class resolution is done in terms of the JDK available. If you compile with one version and run with a lesser version, you may find classes or methods donβt exist
There is a specific issue with deftype/defrecord default methods that makes this particularly pointy (we have been working on that) but the general case is still true regardless
Thanks @alexmiller!
I am assuming it will be OK to compile with 21 and run with 25.
I tried Zulu25 and traced a new error that appeared to this difference:
;; Zulu 21
; clojure -M -e '(.exists (clojure.java.io/file ""))'
false
;; Zulu 25
; clojure -M -e '(.exists (clojure.java.io/file ""))'
trueOracle 25 also behaves like Zulu 25
Ran these in the same empty folder (bar .cpcache)
An anecdotal report: switching from v22 to 25 produced roughly 50% performance improvement. The work is parsing XML, producing relationship information that gets loaded into neo4j. The code heavily relies on transducers
Wow, that's amazing numbers
Yeah, I was very pleasantly surprised
Thatβs worth trying. Anybody found any negatives, or is it all upside at as far as we know at this point?
Zulu also available via Brew on MacOS.
I should provide an update: It seems my app had a lot of reflection. Itβs possible that jvm 25 does a much better job of handling reflection than previous versions. As with everything, ymmv
yeah, they've rewritten the reflection impl to use method handles