In this post I'll give updates about open source I worked on during March and April 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!
On to the projects that I've been working on!
Blog posts I blogged about an important improvement in babashka regarding type hints here .
Interviews Also I did an interview with Jiri from Clojure Corner by Flexiana, viewable here .
VIDEO Updates Here are updates about the projects/libraries I've worked on in the last two months.
babashka : native, fast starting Clojure interpreter for scripting.
Improve Java reflection based on provided type hints (read blog post here ) Add compatibility with the fusebox library Fix virtual ThreadBuilder interop Add java.util.concurrent.ThreadLocalRandom Add java.util.concurrent.locks.ReentrantLock Add classes:java.time.chrono.ChronoLocalDatejava.time.temporal.TemporalUnitjava.time.chrono.ChronoLocalDateTimejava.time.chrono.ChronoZonedDateTimejava.time.chrono.Chronology #1806 : Add cheshire.factory namespace (@lread )Bump GraalVM to 24 Bump SCI to 0.9.45 Bump edamame to 1.4.28 #1801 : Add java.util.regex.PatternSyntaxExceptionBump core.async to 1.8.735 Bump cheshire to 6.0.0 Bump babashka.cli to 0.8.65 clerk : Moldable Live Programming for Clojure
Replace tools.analyzer with a more light-weight analyzer which also adds support for Clojure 1.12 squint : CLJS syntax to JS compiler
#653 : respect :context expr in compile-string#657 : respect :context expr in set! expression#659 : fix invalid code produced for REPL mode with respect to return#651 Support :require + :rename + allow renamed value to be used in other :require clauseFix #649 : reset ns when compiling file and fix initial global object Fix #647 : emit explicit null when written in else branch of if Fix #640 : don't emit anonymous function if it is a statement (@jonasseglare ) Fix #643 : Support lexicographic compare of arrays (@jonasseglare ) Fix #602 : support hiccup-style shorthand for id and class attributes in #jsx and #html Fix #635 : range fixes Fix #636 : add run! defclass: elide constructor when not providedFix #603 : don't emit multiple returns Drop constructor requirement for defclass clj-kondo : static analyzer and linter for Clojure code that sparks joy.
#2522 : support :config-in-ns on :missing-protocol-method#2524 : support :redundant-ignore on :missing-protocol-method#1292 : NEW linter: :missing-protocol-method. See docs #2512 : support vars ending with ., e.g. py. according to clojure analyzer#2516 : add new --repro flag to ignore home configuration#2493 : reduce image size of native image#2496 : Malformed deftype form results in NPE#2499 : Fix (alias) bug (@Noahtheduke )#2492 : Report unsupported escape characters in strings#2502 : add end locations to invalid symbol#2511 : fix multiple parse errors caused by incomplete formsdocument var-usages location info edge cases (@sheluchin ) Upgrade to GraalVM 24 Bump datalog parser Bump built-in cache SCI : Configurable Clojure/Script interpreter suitable for scripting
Fix #957 : sci.async/eval-string+ should return promise with :val nil for ns form rather than :val <Promise> Fix #959 : Java interop improvement: instance method invocation now leverages type hints Fix #942 : improve error location of invalid destructuring Add volatile? to core vars Fix #950 : interop on local in CLJS Bump edamame to 1.4.28 quickdoc : Quick and minimal API doc generation for Clojure
Fix #32 : fix anchor links to take into account var names that differ only by case Revert source link in var title and move back to <sub> Specify clojure 1.11 as the minimal Clojure version in deps.edn Fix macro information Fix #39 : fix link when var is named multiple times in docstring Upgrade clj-kondo to 2025.04.07 Add explicit org.babashka/cli dependency CLI : Turn Clojure functions into CLIs!
#119 : format-table now formats multiline cells appropriately (@lread )Remove pom.xml and project.clj for cljdoc #116 : Un-deprecate :collect option to support custom transformation of arguments to collections (@lread )Support :collect in :spec process : Clojure library for shelling out / spawning sub-processes
#163 , #164 : Program resolution strategy for exec and Windows now matches macOS/Linux/PowerShell (@lread )Fix memory leak by executing shutdown hook when process finishes earlier than VM exit (@maxweber ) html : Html generation library inspired by squint's html tag
Fix #3 : allow dynamic attribute value: (html [:a {:a (+ 1 2 3)}]) Fix #9 : shortcuts for id and classes cherry : Experimental ClojureScript to ES6 module compiler
Add cljs.pprint/pprint Add add-tap Bump squint compiler common which brings in new #html id and class shortcuts + additional features and optimizations, such as an optimization for aset nbb : Scripting in Clojure on Node.js using SCI
Add better Deno + jsr: dependency support, stay tuned. instaparse-bb : Use instaparse from babashka
edamame : Configurable EDN/Clojure parser with location metadata
#117 : throw on triple colon keywordfs - File system utility library for Clojure
#141 : fs/match doesn't match when root dir contains glob or regex characters in path#138 : Fix fs/update-file to support paths (@rfhayashi )sql pods : babashka pods for SQL databases
Upgrade to GraalVM 23, fixes encoding issue with Korean characters 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 rewrite-edn : Utility lib on top ofdeps.clj : A faithful port of the clojure CLI bash script to Clojurescittle : Execute Clojure(Script) directly from browser script tags via SCIrewrite-clj : Rewrite Clojure code and ednpod-babashka-go-sqlite3 : A babashka pod for interacting with sqlite3tools-deps-native and tools.bbuild : use tools.deps directly from babashkahttp-client : babashka's http-clienthttp-server : serve static assetsbbin : Install any Babashka script or project with one commansci.configs : A collection of ready to be used SCI configs.Added a configuration for cljs.spec.alpha and related namespaces qualify-methods Initial release of experimental tool to rewrite instance calls to use fully qualified methods (Clojure 1.12 only0 neil : A CLI to add common aliases and features to deps.edn-based projects.tools : a set of bbin installable scriptssci.nrepl : nREPL server for SCI projects that run in the browserbabashka.json : babashka JSON library/adaptersquint-macros : a couple of macros that stand-in for applied-science/js-interop and promesa to make CLJS projects compatible with squint and/or cherry.grasp : Grep Clojure code using clojure.spec regexeslein-clj-kondo : a leiningen plugin for clj-kondohttp-kit : Simple, high-performance event-driven HTTP client+server for Clojure.babashka.nrepl : The nREPL server from babashka as a library, so it can be used from other SCI-based CLIsjet : CLI to transform between JSON, EDN, YAML and Transit using Clojurepod-babashka-fswatcher : babashka filewatcher podlein2deps : leiningen to deps.edn convertercljs-showcase : Showcase CLJS libs using SCIbabashka.book : Babashka manualpod-babashka-buddy : A pod around buddy core (Cryptographic Api for Clojure).gh-release-artifact : Upload artifacts to Github releases idempotentlycarve - Remove unused Clojure vars4ever-clojure - Pure CLJS version of 4clojure, meant to run forever!pod-babashka-lanterna : Interact with clojure-lanterna from babashkajoyride : VSCode CLJS scripting and REPL (via SCI )clj2el : transpile Clojure to elispdeflet : make let-expressions REPL-friendly!deps.add-lib : Clojure 1.12's add-lib feature for leiningen and/or other environments without a specific version of the clojure CLI