In this post I’ll give updates about open source I worked on during September and October 2025.
To see previous OSS updates, go here.
I’d like to thank all the sponsors and contributors that make this work possible. Without you, the below projects would not be as mature or wouldn’t exist or be maintained at all! So a sincere thank you to everyone who contributes to the sustainability of these projects.

Current top tier sponsors:
Open the details section for more info…
In this post I’ll give updates about open source I worked on during September and October 2025.
To see previous OSS updates, go here.
I’d like to thank all the sponsors and contributors that make this work possible. Without you, the below projects would not be as mature or wouldn’t exist or be maintained at all! So a sincere thank you to everyone who contributes to the sustainability of these projects.

Current top tier sponsors:
Open the details section for more info about sponsoring.
Sponsor info
If you want to ensure that the projects I work on are sustainably maintained, you can sponsor this work in the following ways. Thank you!
- Github Sponsors
 - The Babashka or Clj-kondo OpenCollective
 - Ko-fi
 - Patreon
 - Clojurists Together
 
Updates
The summer heat has faded, and autumn is upon us. One big focus for me is preparing my talk for Clojure Conj 2025, titled “Making tools developers actually use”. I did a test run of the talk at the Dutch Clojure Meetup. It went a bit too long at 45 minutes, so I have to shrink it almost by half for the Conj. The more I work on the talk the more ideas come up, so it’s challenging!

Of course I spent a ton of time on OSS the past two months as well. Some special mentions:
- I’m pretty excited by Eucalypt, a remake of Reagent for Squint without React by Chris McCormick. It lets you build UIs with the Reagent API in less than 10kb of gzip’ed JS. The code was initially generated by an LLM, but now work is going into making the code base thoroughly tested and simplified where possible.
 - After studying Eucalypt’s code I figured that making an even more minimal Reagent-like by hand would be fun. This is where I came up with Reagami. The API looks like a hybrid between Reagent and Replicant. You can build apps with Reagami starting around 5kb gzip’ed.
 - Edamame got Clojure CLR support thanks to Ambrose Bonnaire-Sergeant.
 - SCI Clojure CLR support is underway. The 
sci.impl.Reflectorcode, based onclojure.lang.Reflectorwas ported to Clojure with the purpose that it would then be easier to translate to Clojure CLR. - Cljdoc chose squint for its small bundle sizes and easy migration off of TypeScript towards CLJS
 - Via work on Squint, I found a way to optimize 
strin ClojureScript (worst case 4x, best case 200x) 
Here are updates about the projects/libraries I’ve worked on in the last two months in detail.
babashka: native, fast starting Clojure interpreter for scripting.
- Bump to clojure 1.12.3
 - #1870: add 
.addMethodto clojure.lang.MultiFn - #1869: add 
clojure.lang.ITransientCollectionforinstance?checks - #1865: support 
reify+equals+hashCodeonObject - Add 
java.nio.charset.CharsetDecoder,java.nio.charset.CodingErrorAction,java.nio.charset.CharacterCodingExceptionin support of the sfv library - Fix 
nrepl-servercompletions and lookup op to be compatible with rebel-readline - Add 
clojure.lang.Refforinstance?checks - Bump SCI: align unresolved symbol error message with Clojure
 - Use GraalVM 25
 - Bump deps.clj to 1.12.3.1557
 - Change unknown or REPL file path to 
NO_SOURCE_PATHinstead of<expr>since this can cause issues on Windows when checking for absolute file paths - #1001: fix encoding issues on Windows in Powershell. Also see this GraalVM issue
 - Fixes around 
java.securityand allowing setting deprecated Cipher suites at runtime. See this commit. - Support Windows Git Bash in bash install script
 
SCI: Configurable Clojure/Script interpreter suitable for scripting
- ClojureCLR support in progress (with Ambrose Bonnaire Sergeant)
 
edamame: configurable EDN and Clojure parser with location metadata and more
- 1.5.33 (2025-10-28)
 - Add ClojureCLR support (@frenchy64)
 
clj-kondo: static analyzer and linter for Clojure code that sparks joy.
- Unreleased
 - #2651: resume linting after paren mismatches
 - 2025.10.23
 - #2590: NEW linter: 
duplicate-key-in-assoc, defaults to:warning - #2639: NEW 
:equals-nillinter to detect(= nil x)or(= x nil)patterns and suggest(nil? x)instead (@conao3) - #2633: support new 
defparkingopmacro in core.async alpha - #2635: Add 
:interfaceflag to:flagsset in:java-class-definitionsanalysis output to distinguish Java interfaces from classes (@hugoduncan) - #2636: set global SCI context so hooks can use 
requiring-resolveetc. - #2641: fix linting of 
defbody, no results due to laziness bug - #1743: change 
:not-empty?to only warn on objects that are already seqs - Performance optimization for 
:ns-groups(thanks @severeoverfl0w) - Flip 
:self-requiring-namespacelevel from:offto:warning - 2025.09.22
 - Remove 
dbgfromdata_readers.cljsince this breaks when using together with CIDER - 2025.09.19
 - #1894: support 
destructsyntax - #2624: lint argument types passed to 
getandget-in(especially to catch swapped arguments to get in threading macros) (@borkdude, @Uthar) - #2564: detect calling set with wrong number of arguments
 - #2603: warn on 
:inline-defwith nesteddeftest 
squint: CLJS syntax to JS compiler
- Support passing keyword to 
mapv - Inline 
identical?calls - Clean up emission of paren wrapping
 - Add 
nat-int?,neg-int?,pos-int?(@eNotchy) - Add 
rand - Fix rendering of 
nullandundefinedin#html - #747: 
#htmlescape fix - Optimize nested 
assoccalls, e.g. produced with-> - Avoid object spread when object isn’t shared (
auto-transient) - Optimize 
=,and, andnot=even more not=on undefined and false should returntrue- Optimize code produced for 
assoc,assoc!andgetwhen object argument can be inferred or is type hinted with^object - Optimize 
strusing macro that compiles into template strings +?? ''for null/undefined - Fix #732: 
take-lastshould returnnilor empty seq for negative numbers - #725: 
keysandvalsshould work onjs/Map - Make 
map-indexedandkeep-indexedlazy - Compile time optimization for 
=when using it on numbers, strings or keyword literals - Switch 
=to a deep-equals implementation that works on primitives, objects,Arrays,MapsandSets - Fix #710: add 
parse-double - Fix #714: 
assoc-inonnilorundefined - Fix #714: 
dissoconnilorundefined - Basic 
:import-mapssupport insquint.edn(just literal replacements, prefixes not supported yet) 
reagami: A minimal zero-deps Reagent-like for Squint and CLJS
- First releases
 
clerk: Moldable Live Programming for Clojure
- Support evaluation of quoted regex
 - Support macros defined in notebooks
 - Bump cherry
 
- More efficient drop-in replacement for CLJS str. This work was already upstreamed into CLJS, so coming near you in the next CLJS release.
 
unused-deps: Find unused deps in a clojure project
- Support finding unused git deps
 
scittle: Execute Clojure(Script) directly from browser script tags via SCI
- Fix SCI regression where interop on keywords like 
(.catch ...)was accidentally munched 
- Add 
:startattribute to ordered lists not starting with 1 (@spicyfalafel) 
cherry: Experimental ClojureScript to ES6 module compiler
- Bump squint compiler common component and standard library
 - Bump other deps
 - Optimize 
=,str,not= - Support 
:macrosoption +:referso you can use unqualified macros using compiler state (seemacro-state-test) 
deps.clj: A faithful port of the clojure CLI bash script to Clojure
- Released several versions catching up with the clojure CLI
 
pod-babashka-go-sqlite3: A babashka pod for interacting with sqlite3
- Add 
close-connection - Fix #38: add 
get-connectionto cache connection - Fix potential memory leak
 - Better handling of parent process death by handling EOF of stdin
 - #25: use musl to compile linux binaries to avoid dependency on glibc
 
quickdoc: Quick and minimal API doc generation for Clojure
- Fix extra newline in codeblock
 
Contributions to third party projects:
- Optimize 
str(4x worst case, 200x best case) - Make 
munge-strpublic 
- Optimize 
:ns-groupshandling by caching regex creation and usage 
Other projects
These are (some of the) other projects I’m involved with but little to no activity happened in the past month.
Click for more details - [CLI](https://github.com/babashka/cli): Turn Clojure functions into CLIs! - [pod-babashka-fswatcher](https://github.com/babashka/pod-babashka-fswatcher): babashka filewatcher pod - [sci.nrepl](https://github.com/babashka/sci.nrepl): nREPL server for SCI projects that run in the browser - [babashka.nrepl-client](https://github.com/babashka/nrepl-client) - [fs](https://github.com/babashka/fs) - File system utility library for Clojure - [http-server](https://github.com/babashka/http-server): serve static assets - [nbb](https://github.com/babashka/nbb): Scripting in Clojure on Node.js using SCI - [sci.configs](https://github.com/babashka/sci.configs): A collection of ready to be used SCI configs. - [http-client](https://github.com/babashka/http-client): babashka’s http-client - [quickblog](https://github.com/borkdude/quickblog): light-weight static blog engine for Clojure and babashka - [process](https://github.com/babashka/process): Clojure library for shelling out / spawning sub-processes - [html](https://github.com/borkdude/html): Html generation library inspired by squint’s html tag - [instaparse-bb](https://github.com/babashka/instaparse-bb): Use instaparse from babashka - [sql pods](https://github.com/babashka/babashka-sql-pods): babashka pods for SQL databases - [rewrite-edn](https://github.com/borkdude/rewrite-edn): Utility lib on top of - [rewrite-clj](https://github.com/clj-commons/rewrite-clj): Rewrite Clojure code and edn - [tools-deps-native](https://github.com/babashka/tools-deps-native) and [tools.bbuild](https://github.com/babashka/tools.bbuild): use tools.deps directly from babashka - [bbin](https://github.com/babashka/bbin): Install any Babashka script or project with one command - [qualify-methods](https://github.com/borkdude/qualify-methods) - Initial release of experimental tool to rewrite instance calls to use fully qualified methods (Clojure 1.12 only) - [neil](https://github.com/babashka/neil): A CLI to add common aliases and features to deps.edn-based projects.
- [tools](https://github.com/borkdude/tools): a set of [bbin](https://github.com/babashka/bbin/) installable scripts - [babashka.json](https://github.com/babashka/json): babashka JSON library/adapter - [speculative](https://github.com/borkdude/speculative) - [squint-macros](https://github.com/squint-cljs/squint-macros): a couple of macros that stand-in for [applied-science/js-interop](https://github.com/applied-science/js-interop) and [promesa](https://github.com/funcool/promesa) to make CLJS projects compatible with squint and/or cherry. - [grasp](https://github.com/borkdude/grasp): Grep Clojure code using clojure.spec regexes - [lein-clj-kondo](https://github.com/clj-kondo/lein-clj-kondo): a leiningen plugin for clj-kondo - [http-kit](https://github.com/http-kit/http-kit): Simple, high-performance event-driven HTTP client+server for Clojure. - [babashka.nrepl](https://github.com/babashka/babashka.nrepl): The nREPL server from babashka as a library, so it can be used from other SCI-based CLIs - [jet](https://github.com/borkdude/jet): CLI to transform between JSON, EDN, YAML and Transit using Clojure - [lein2deps](https://github.com/borkdude/lein2deps): leiningen to deps.edn converter - [cljs-showcase](https://github.com/borkdude/cljs-showcase): Showcase CLJS libs using SCI - [babashka.book](https://github.com/babashka/book): Babashka manual - [pod-babashka-buddy](https://github.com/babashka/pod-babashka-buddy): A pod around buddy core (Cryptographic Api for Clojure). - [gh-release-artifact](https://github.com/borkdude/gh-release-artifact): Upload artifacts to Github releases idempotently - [carve](https://github.com/borkdude/carve) - Remove unused Clojure vars - [4ever-clojure](https://github.com/oxalorg/4ever-clojure) - Pure CLJS version of 4clojure, meant to run forever! - [pod-babashka-lanterna](https://github.com/babashka/pod-babashka-lanterna): Interact with clojure-lanterna from babashka - [joyride](https://github.com/BetterThanTomorrow/joyride): VSCode CLJS scripting and REPL (via [SCI](https://github.com/babashka/sci)) - [clj2el](https://borkdude.github.io/clj2el/): transpile Clojure to elisp - [deflet](https://github.com/borkdude/deflet): make let-expressions REPL-friendly! - [deps.add-lib](https://github.com/borkdude/deps.add-lib): Clojure 1.12’s add-lib feature for leiningen and/or other environments without a specific version of the clojure CLI