2023 Long Term Projects: March & April Updates

By Kathy Davis

There is a lot to catch up on! Check out the March and April 2023 updates from:
Bozhidar Batsov
Michiel Borkent
Sean Corfield
Eric Dallo
Christophe Grand
Thomas Heller
Nikita Prokopov
Tommi Reiman
Peter Stromberg
Peter Taoussanis

Bozhidar Batsov

(Published 29 April 2023)






Michiel Borkent


But first off, I’d like to thank all the sponsors and contributors that make this work possible! Top sponsors:

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!

If you’re used to sponsoring through some other means which isn’t listed above, please get in touch. On to the projects that I’ve been working on!

March Report

(Published 07 April 2023)


Experimental ClojureScript to ES6 module compiler
This month I’ve been preparing cherry as a compiler that you can embed in your existing CLJS / shadow-cljs applications. This makes cherry an additional alternative to SCI and self-hosted CLJS.

Read about embedding cherry into your application here.
I’ve been working on several PRs to include cherry as an additional evaluator in:


The Small Clojure Interpreter (SCI) integrated with emacs as a loadable module.
This is a new project by Jack Rusher and I’ve helped him with the SCI integration.


Transpile clojure to elisp. A brand new project to transpile Clojure to Elisp.
It might be of value for those who know Clojure better than Elisp and want to have something to get started. It’s far from complete. Try it in the playground here.


Make let-expressions REPL-friendly!
The deflet macro lets your write inline-def expressions, while expanding those to regular let expressions, giving you the benefits of REPL-driven development without polluting production code with top level vars.


Native, fast starting Clojure interpreter for scripting

New release: 1.3.175 (2023-03-18)), 1.3.176 (2023-03-18)


This is a JSON abstraction library that you can include in babashka and JVM projects while also including your own favorite JSON implementation. The idea is that babashka libraries can include this, while JVM projects don’t have to switch their JSON implementation to cheshire.core.

Babashka compatibility in external libs

I worked together with the maintainers of the following libraries to make them compatible with babashka:


Static analyzer and linter for Clojure code that sparks joy

New release: 2023.03.17 Some highlights:

Check the changelog for details.


Configurable Clojure/Script interpreter suitable for scripting and Clojure DSLs

New release: 0.7.39 (2023-03-07)

Contributions to other projects:

Brief mentions:

The following projects also got updates, mostly in the form of maintenance and performance improvements. This post would get too long if I had to go into detail about them, so I’ll briefly mention them in random order:

Other projects:

These are (some of the) other projects I’m involved with but little to no activity happened in the past month.

Discuss this post here.
Tagged: clojure oss updates

April 2023 Report

(Published: 30 April 2023)

In this post I’ll give updates about open source I worked on during April 2023. To see previous OSS updates, go here.


Babashka-conf is happening June 10th in Berlin. Save the date and/or submit your babashka/clojure-related talk or workshop in the CfP!


The following projects had updates in the last month. Note that only highlights are mentioned and not a full overview of all changes. See the project’s changelogs for all changes.

Contributions to other projects:

Other projects:

These are (some of the) other projects I’m involved with but little to no activity happened in the past month.

Discuss this post here.
Tagged: clojure oss updates

Sean Corfield

(Published 30 April 2023)

In my previous Long-Term Funding update) I said that I planned “to review and/or overhaul the Getting Started, Introduction, and Web Development sections, with a focus on the latter.” (of the clojure-doc.org website). I mostly achieved that goal but didn’t get to the additional goal I set of writing a tools.build cookbook. I have sketched out the topics I hope to cover in that cookbook, however.

How did the past two months go?


I updated Getting Started with Clojure to talk about both Leiningen and the Clojure CLI and wrote a new Getting Started with the Clojure CLI page that also covers tools.build / build.clj and building uberjars. Both pages now have a new section highlighting Interactive Development (as opposed to “just” using a REPL).

I reviewed the Introduction to Clojure and decided it was mostly sound, but added more examples, tweaked the formatting, and added references to the Clojure CLI.

I reworked John Gabriele’s excellent Basic Web Development guide to use the Clojure CLI, updated all the library references, and reordered the sections to work bottom-up so that code could always be evaluated in the REPL.

I didn’t get as far as I wanted with the tools.build cookbook due to a combination of writer’s block (and stress over my mother being taken to hospital unexpectedly for a fractured hip – she’s nearly 90, has osteoporosis, and her oxygen levels are too low/precarious for surgery at this point; she’s home now but it’s been a rough few weeks).


As the Practical.li project templates were being developed, John found a bug in the template project which I fixed and in turn I reviewed drafts of his articles about creating project templates using deps.new, both of which are now linked from the deps-new README and documentation.


During March/April, HoneySQL saw four new releases, which were mostly an even split between improving documentation and expanding ANSI SQL support.

Many of the questions I see about HoneySQL on Slack (and other places) suggest deficiencies in the documentation so, while I try to answer those questions directly on Slack, I also tend to create GitHub issues for them to see if I can improve the documentation in those areas.

Some of the ANSI SQL improvements including support for INTERVAL, keyword arguments in function calls, nested JOIN, standardizing TRUNCATE syntax, and WITH ORDINALITY. There were also bug fixes and documentation improvements around DO UPDATE SET and a number of other constructs.

I’d also like to give a special shout-out to Eugene Pakhomov who contributed three pull requests to the release that went out in early March.


next.jdbc also saw four releases, which provided a mix of bug fixes, compatibility improvements (with clojure.java.jdbc, to ease migration), documentation improvements, and a few enhancements.


The Juxt team were present in force at Clojure/conj this year and announced early access to XTDB 2.0.

I think this will be a very exciting release, with improved bitemporality (including temporal joins and range scans), a new columnar architecture, and – the part that interests me the most – a dynamic relation engine that provides both a Datalog API and a SQL API.

That inspired me to create a new project, offering experimental support for XTDB 2.0 in next.jdbc: next.jdbc.xt. This allows you to treat an XTDB client “node” as a “connectable” so you can call execute!, execute-one!, and plan on it (as well as the full range of “friendly SQL functions”).

As XTDB 2.0 evolves, I plan to continue to enhance this new project to hopefully support batch operations and perhaps full transaction support, if possible.

What’s Next?

In May/June, I hope to get the tools.build cookbook written and to review/overhaul the Libraries pages (both authoring and the directory).

Tags:“clojure” “clojure-doc.org” “open source” “tools.build” “community”

Eric Dallo

(Published 1 May 2023)

These 2 months I spent a considerable time improving java interop support in both clj-kondo and clojure-lsp, so LSP can understand it better and provide completion, definition, hover and other features in a close future as mentioned below.


The main highlights for this release are:






#2503: parse java files via javaparser to produce java-member-definitions analysis #1983: add support for java member analysis, via new java-member-definitions bucket (@ericdallo).

ClojureConj 2023

I gave a talk at ClojureConj about how to use clojure-lsp as a linter for multiple projects and how to manage everything in a single place, should be available soon in https://www.youtube.com/@ClojureTV/videos

Christophe Grand

(Published 4 May 2023)


The period ended with the Conj and our ClojureDart talk was well received 🎉. Still it’s worth repeating the core message: ClojureDart is useable right now! You can use it to write mobile or desktop apps, CLIs and lambdas. Web even. It doesn’t mean our work is done but language-wise the only missing feature are multimethods. Macros do work but sometimes need some annotations – this will be fixed once we are self-hosted. And there are so many places where we can still make interop nicer.

Speaking of self-hosted, the reader rewrite (the previous one was accidentally quadratic 🙄) is coming to fruition now that the design is settled. Design took time because I wanted to have a chunked reader, so as to be able to process big files and REPL input.

A lot of time was spent fixing bugs or making usability improvements (I’m looking forward to porting gen tests from CLJ/CLJS) and helping users on Slack. More often than not fixes/improvements were an answer to users experiences.


Chunked seqs on vectors (twice!), inconsistent hash values across platforms (web vs others), fixed cross-nses protocols which AOT compiled fine but failed on hot-reload, fixed bug with collisions on transient maps, fixed issue with comparator fns.


New features:

Future work:


Thomas Heller

(Published 3 May 2023)


Time was mostly spent on doing maintenance work and some bugfixes. As well as helping people out via the typical channels (eg. Clojurians Slack).
Current shadow-cljs version: 2.23.3 Changelog

Notable Updates:

Nikita Prokopov

(Published 1 May 2023)

Three big things happened in the last two months:

Humble UI


Clojure Sublimed

Sublime Executor



Tommi Reiman

(Published 03 April 2023)



New stuff


0.11.0 (2023-04-12)

0.10.4 (2023-03-19)

0.10.3 (2023-03-18)



  [:x :int]

  [:y :int]

  [::m/default [:map-of :string :string]]]

 {:x 1, :y 2, "kikka" "kukka"})

; => true


 [:map-of :int :int]

 {1 1, 2 "2", "3" 3, "4" "4"}


; => {1 1}

borkdude/edamame 1.1.17 -> 1.3.20

0.10.2 (2023-03-05)

mvxcvi/mvxcvi 2.0.0 -> 2.1.0

borkdude/edamame 1.0.0 -> 1.1.17

Something else

Retuning from my first Conj, really enjoyed the trip!


Peter Stromberg

(Published 3 May 2023)

It’s fantastic being sponsored to work on something I love to work with, for people I love to work for. These two month I have been even more user feedback driven than usual. Letting the conversations with users inform me where Calva could help them better. I have then quite immediately addressed the things I think I understand how to address.

With other things it can take quite some time to understand what should be done. The idea for a solution needs to present itself, but some times the idea is very shy! This has been the case with REPL connection automation. It’s an area where Calva is strong, yet it hasn’t been possible to bring it to zero interaction, and some users really want that. Now, finally, Calva can quite easily be configured for this. While at it, Calva REPL start and connection (a.k.a. Jack-in) is now available for many more projects, even with quite special setup requirements. The solution was to let the user provide their own scripts and Calva will call the script providing environment and command line arguments to control that the REPL is started in a shape that Calva needs it to be. It’s quite obvious, but it took several years to figure it out. 😄

A common mistake in monorepos was to use the Calva command for copying the Jack-in command line for a particular project and then run this command line in the wrong monorepo directory. Note the past tense there. Now the copied command can be run from any directory on the computer. Further, the problems on some OS:s with Calva Jack-in zombies walking around after a REPL session are now much less pronounced.

Another thing that talking to users make obvious is that a lot of Calva’s functionality is something of a secret. It is satisfying to be able to answer: ”How do I do X?” with: ”There’s a settings Y”, or ”Use the command Z”. Though, this often means that Calva is making Y and Z hard to find. We’ve now been able to focus a bit on this and to use feedback from users to surface important REPL functionality better.

Calva Notebooks got some nice attention from Kira McLean at The Conj. As great as the Notebooks are for some users, a bug in VS Code LiveShare has made the Notebook feature a blocker for using Calva in LiveShare sessions. Stefan van den Oord have been maintaining a build of Calva with Notebooks disabled, but many users probably have had no idea about this. We finally found a more convenient workaround, where we can ship the Notebook configuration in a separate extension (named Calva Spritz) that is bundled with Calva. This extension can easily be disabled during LiveShare sessions.

As a side effect to the LiveShare and Notebooks problem workaround, we also realized that the same mechanism can be used to make Joyride reach the parts of the VS Code API we thought was denied to Joyride scripts. Users can provide Joyride with a Sidecar extension manifest, and this way control all of VS Code with ClojureScript, in user space.

** Some more things we got done:

During the past months both Brandon Ringe and I have gotten increasingly fed up with a family of problems stemming from the limitations posed by using a regular file for REPL output, and other output, and also for REPL input. This is a bit ironic because with the Clojurists Together Summer of Bugs 2020 sponsoring, I used a lot of the time to get rid of the problematic Webview solution for REPL Window that Calva had back then. Misunderstand this correctly (as we say in Sweden), the regular file solution has served Calva very well, and saved us from the impossible task of fixing the problems with the old Webview. But the limitations are getting too obvious, and now replacing the regular file REPL Window with one based on a Webview is a hot candidate for our time spent the coming two months…

Peter Taoussanis

(Published 25 April 2023)

Mar/Apr 2023 updates for Peter Taoussanis More details now also at taoensso.com/clojure/2023 👍


http-kit v2.7.0-beta2 has been released 🎉 This is the first major http-kit release since June 2022, and includes work from 15 contributors.

Improvements include:


One of my major open-source goals for this year is the release of a new data security framework, currently planned for August. This will be the first major all-new Clojure work I’ve put out in over 7 years, and has been my main focus so far this year.
Will share more details closer to release, but as a quick teaser: the high-level goal is to make it easy for non-experts to quickly integrate solid data encryption into a variety of types of apps. The work is being grown from an expansion of techniques I’ve used in my own apps, and heavily optimised for ease-of-use.

More beginner-focused documentation

Another of my goals for this year (and moving forward) is to put more emphasis on documentation quality, and on providing a smoother experience for beginners.
As part of that work, I’ve started rolling out GitHub wikis for community documentation on my various projects.

I’ll be seeding these myself over time, but ultimately my hope is to make it easier and more sustainable for each project’s own community to contribute documentation and tips. Tempel (mentioned above) will be my first release to be built from the start with this wiki-focused documentation concept in mind.

What’s next:

The current plan:

A big thanks to Clojurists Together, Nubank, lambdaschmiede, and other sponsors of my open-source work 🙏