announcements 2025-09-16

https://github.com/ring-clojure/ring has been released that fixes some reported reflection warnings.

πŸ†’ 2
3
πŸͺž 1
πŸ™ 1
πŸŽ‰ 18

Much appreciated sir!

I released https://github.com/jramosg/color-tools. A complete toolkit for working with colors in Clojure and Clojurescript

1
🌈 14
πŸŽ‰ 9

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 !!

πŸ™ 1

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"}

πŸ‘ 3
4
πŸš€ 17
Alex Miller (Clojure team) 2025-09-16T15:53:48.378449Z

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.

48
20
πŸ₯³ 7
πŸ™ 6
🏎️ 10
πŸš€ 8

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?

Alex Miller (Clojure team) 2025-09-16T16:25:40.465109Z

yes, they are now caching profiling info (branch prediction etc)

🀘 2
Alex Miller (Clojure team) 2025-09-16T16:26:27.901959Z

they're also doing a much better job of caching the post-linked references

Alex Miller (Clojure team) 2025-09-16T16:27:44.228479Z

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

Alex Miller (Clojure team) 2025-09-16T16:29:13.019199Z

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.

πŸ‘ 4

@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

Alex Miller (Clojure team) 2025-09-17T11:57:24.340669Z

You should AOT compile targeting the minimum Java version you intend to run on.

Alex Miller (Clojure team) 2025-09-17T12:01:44.654329Z

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

Alex Miller (Clojure team) 2025-09-17T12:05:59.732129Z

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

I am assuming it will be OK to compile with 21 and run with 25.

Alex Miller (Clojure team) 2025-09-17T13:11:03.274929Z

Yes

πŸ™πŸΎ 1

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 ""))'
true

😬 1

Oracle 25 also behaves like Zulu 25

Ran these in the same empty folder (bar .cpcache)

looks like it was considered a bug that got fixed with 25

πŸ₯² 1

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

πŸ™Œ 1
😎 4

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

Alex Miller (Clojure team) 2025-09-18T20:51:10.549609Z

yeah, they've rewritten the reflection impl to use method handles

πŸ‘ 1