Annually-Funded Developers' Update: May & June 2026

By Kathy Davis

Hello Fellow Clojurists!

This is the third of six reports from the developers who are receiving annual funding for 2026. Thanks to everyone for supporting their work and these important contributions to the Clojure community. Their previous reports can be found here:
January/February 2026
March/April 2026


Bozhidar Batsov: cider-nREPL, neat, Sayid, port, Orchard, CIDER, and more
Clojure Camp: datascript playground, fill in the blank excercises
Eric Dallo: eca, eca clients, clojure-lsp
Jeaye Wilkerson: Jank optimization and beta release prep
Michiel Borkent: babashka, SCI, fs, squint, cream, and much more

Bozhidar Batsov

2026 Annual Funding Report 3. Published July 10, 2026.

The past two months were some of the most productive I’ve had in a long while. I had a lot of inspiration during this period and managed to tackle plenty of long-standing ideas and issues across the entire nREPL/CIDER ecosystem. I even grew the ecosystem with a couple of brand new projects. The highlights:

Below are the details, project by project.

CIDER

CIDER 1.22 (“São Miguel”) landed in mid-June, wrapping up the 1.x series. Its main features:

It also fixed a long list of small annoyances: severe editor lag in unlinked buffers, several TRAMP and SSH tunnel problems, request id leaks, and a bunch of broken menu entries.

Right after that I switched the development version to 2.0 and most of the planned work is already done. The headline items so far:

That last one deserves a special mention: evaluation results that are images now render inline out of the box, and file/URL results offer their content on demand, six years after the feature had to be disabled over its safety problems. There was also a big cleanup pass: consolidated configuration options, the REPL history browser renamed to cider-history to end a long-standing naming clash, theme-aware faces instead of hardcoded colors, refreshed docs and a regenerated refcard.

CIDER 2.0 is available from MELPA snapshots and I’d love for more people to take it for a spin before the final release.

cider-nrepl

Lots of cider-nrepl releases, driving the CIDER work above:

Along the way the project’s build was migrated from Leiningen to tools.deps, which required a new MrAnderson release (see the blog posts below).

Orchard

Orchard, the library that powers much of cider-nrepl’s functionality, kept pace:

Sayid

Sayid, the omniscient Clojure debugger, had been dormant for years and I finally gave it the revival it deserved:

port

port is a brand new project I started in May: a minimalist Clojure interactive programming environment for Emacs, built on prepl instead of nREPL. It went from nothing to three releases in the course of the month:

I don’t have any particular plans for the future of this project - it was just something I’d wanted to experiment with for a while. I see it as an interesting option for people looking for some middle ground between inf-clojure and CIDER.

neat

neat is the other new arrival: a small, language-agnostic nREPL client for Emacs. 0.1.0 has the essentials in place: a pure-elisp bencode codec, a comint-based REPL, and a source-buffer minor mode with eval, completion, eldoc, xref and doc lookup, tested against Clojure, Babashka and Basilisp. It’s early days, but it’s a nice testbed for exercising the nREPL protocol outside CIDER.

This project also means I’ve dropped any plans to try to make CIDER a language-agnostic development environment. Going forward CIDER will focus only on Clojure-like languages, and everything else will be covered by neat.

Piggieback and Weasel

The nREPL org saw some ClojureScript-flavored action:

I also backfilled proper GitHub releases for the historic tags of both projects, so their release history is finally browsable.

Improving the ClojureScript support in CIDER has long been a major objective for me, and these small changes were some initial steps in that direction.

refactor-nrepl and clj-refactor

refactor-nrepl got three releases: 3.12.0, 3.13.0 and 3.14.0, the last one making the AST-based indexing much faster and more reliable. clj-refactor.el received a round of maintenance on master as well, and will get a new release after I wrap up the work on CIDER 2.0.

I’m still pondering the future of both projects, as I plan to move the most useful refactor-nrepl features (those that don’t carry a lot of complexity) to CIDER and cider-nrepl eventually, and I’m not sure the flagship AST-powered refactorings are very competitive these days (compared to clojure-lsp and static project-wide analysis a la clj-kondo in general). I’d certainly appreciate more feedback from the users of clj-refactor on the subject.

Blog posts

I wrote a few articles related to the work above:

What’s next

Getting CIDER 2.0 across the finish line is the main priority, followed by a clj-refactor release once that settles. I’ve plucked most of the low-hanging fruit by now, but there’s always more to do.

Thanks to Clojurists Together for the continued support of my Clojure OSS work! You rock!


Clojure Camp

2026 Annual Funding Report 3. Published July 12, 2026.

What happened:

Plans:


Eric Dallo

2026 Annual Funding Report 3. Published July 11, 2026.

Another 2 months of intense work! The focus this time was on stability, performance and polish: ECA got smarter context management, a new provider, and much more robust MCP/OAuth support, while clojure-lsp finally received the long-awaited memory and startup performance overhaul I planned in the last report. Thanks ClojuristsTogether and everyone from the community helping with issues, feedback and contributions! :heart:

ECA

ECA keeps growing steadily, now with more than 900 stars and contributions coming every week. As usual the changelog is huge, so here are the main highlights:

eca-context Dallo MayJune 2026 smaller

0.132.0 - 0.144.0

ECA clients

All clients received improvements (resume-chat picker, MCP servers management from settings, per-chat model/agent scoping, context-usage bar, light theme fixes) plus client specific work:

We also started two new experiments in the org: eca-cli, an ECA client for terminals, and eca-ios, an iOS app to remotely connect to a running ECA server.

clojure-lsp

These 2 months were all about the plan mentioned in the last report: memory management and startup performance! The results are really exciting for large projects: warm initialize dropped from ~73s to ~8s on a large monorepo, and memory usage was drastically reduced for projects with big dependency sets. All of this is guarded by the new performance integration tests so we don’t regress, thanks for the community sharing their kind words with good results of the improvements, that means a lot to me!

Details about the release below:

2026.07.06-14.34.19


Jeaye Wilkerson

2026 Annual Funding Report 3. Published July 11, 2026.

Hi everyone. :) Thank you so much for the sponsorship this year. Last update, I covered how I had just added a new intermediate representation (IR) for jank, as well as some other optimization work. The last two months of jank development have been broken into two parts:

Further optimization work
Beta release preparation

Optimization work

I wrote a blog post about the optimizations I did to jank in order to run a naive ray tracer faster than Clojure JVM. This involved more than tripling jank’s overall speed at the benchmark by improving the low-level representation of our numbers, improving compiler inlining, optimizing the machinery behind function calls, and minimizing the generated code size by 30%. These benefits will carry to many other benchmarks, and real applications, going forward.

Beta release

Starting in June, I switched my focus away from optimization and toward checking all of the boxes needed to get jank into people’s hands as quickly as possible. To do this, I want to ensure there is an impressive vertical slice of jank for everyone to use.

A big part of that vertical slice is related to build systems, AOT compilation, and native packages. I have been working, with Kyle Cesare, on jank’s native build setup. At this point, we have an incredible UX for the lein-jank plugin, thanks to all of Kyle’s work, and it plays into all of the things I’ve been building on the jank side. AOT compilation in jank is very fast, compared to Graal native images, and the binary sizes are even smaller. Startup time is instantaneous.

To play into our new build system, I have created the jank commons, which is a set of packages for consuming native libraries from jank. This builds on all of the tooling Kyle has created. To start with, we have libraries focused on graphics programming (OpenGL, GLFW, Raylib, Dear ImGUI) and TUI programming (ftxui). We’ll be building on this to incorporate more and more of the native world, making the consumption of native libs in jank just a one line change in your project.clj.

I’ve also been working a lot on jank’s distribution and packaging. There are new continuous Arch builds, which make the jank-bin AUR package much more reliable. I’ve also fixed some LLVM 23 related issues to make the jank-git AUR package work better.

On top of all of this has been countless small fixes for jank’s behavior. Right now is a great time to jump in and try out jank. More documentation is on the way, along with more fixes and stability.

Thanks, again, for the support as I develop jank! Stay tuned for my next blog post, covering the state of jank and what’s to come.


Michiel Borkent

2026 Annual Funding Report 3. Published July 8, 2026.

In this post I’ll give updates about open source I worked on during May and June 2026.

To see previous OSS updates, go here.

Sponsors

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.

gratitude

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. If you work for a company that uses my OSS, please ask your employer, that would be even better. Thank you!

Updates

A lot happened in the past two months! Not just coding but also…

Babashka Conf 2026 and Dutch Clojure Days

Three years after the initial installment, Babashka Conf 2026 happened on May 8th at the OBA Oosterdok library in Amsterdam, with David Nolen, primary maintainer of ClojureScript, as our keynote speaker. Thanks to our sponsors Nubank, Exoscale, Bob, Flexiana and Itonomi, to Wendy Randolph for hosting, and to all the speakers, volunteers and attendees who made it such an inspiring day. You can watch all the videos here. Thanks to Ray for recording! The day after, Dutch Clojure Days 2026 rounded out a full weekend of Clojure in Amsterdam, where I did a presentation about ClojureScript and async/await. The video of that is hopefully coming soon.

image

Babashka Conf 2026. From left to right: David Nolen, Jen Myers, Adrian Smith, Josh Glover, Rahul Dé, Arne Brasseur, Christoph Neumann, Timo Kramer, Jynn Nelson, Wendy Randolph.

Upcoming: babashka workshop at the Clojure/conj

I’m pleased to announce that Rahul Dé and I will be hosting a babashka workshop at the Clojure Conj 2026. The workshop will showcase various use cases of babashka. This hands-on workshop covers the whole lifecycle of a babashka tool, from a quick script to a published, installable CLI app. We assume you know the basics of Clojure and won’t explain the language itself. Topics include:

Every concept comes with an exercise, building toward one culminating CLI app. There will be lots of interaction and fun!

Blog posts

Besides this update I published two blog posts in the past two months:

and a ClojureScript reference on async functions:

Projects

Babashka CLI got the most attention this cycle. I added automatic --help generation for dispatch-based CLIs and shell tab completion for bash, zsh, fish, PowerShell and Nushell. There’s a dedicated post with a “build your own git” walkthrough linked above. I also made Babashka CLI Squint compatible, so CLIs built with it run on Node.js and in the browser, published as the @babashka/cli npm package. Also ClojureDart support for Babashka CLI got added.

Squint saw a large amount of work that kept going right into early July: a browser nREPL, dynamic vars and binding that survive across separately-compiled ESM modules, an EDN reader, cached lazy seqs, defrecord and a wide set of core protocols, and a big compatibility push to make it pass jank’s clojure-test-suite. Replicant now runs on Squint too. I added key diffing to Reagami and did some benchmarks, showing that Reagami on squint performs in the ballpark of React. The benchmark also shows that Replicant on Squint performs even a tad better than on ClojureScript. Not that this makes a huge difference in practice, but it’s nice to validate the idea that Squint, for typical apps, can be a valid CLJS replacement while not giving up that much in terms of Clojure features.

A security issue in SCI deserves a callout. A string type-hint could bypass the :classes allowlist and statically initialize any class on the classpath at analysis time. If you sandbox untrusted code with SCI, upgrade to 0.13.53. ClojureDart support and fine-grained interop control (which was needed for cljd support since it has no reflection) also got added. You can now make REPLs for your mobile apps!

Since porting was a theme these past months, I’ll mention another one: babashka.fs now runs on Node.js via ClojureScript and squint, published as the @babashka/fs npm package.

Here are some highlights per project. See each project’s CHANGELOG.md for the full list.

Contributions to third party projects:

Other projects

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

Click for more details