May 2025 Short-Term Project Updates Q2 2025 Projects
By Kathy Davis
This is the April/May project update for four of our Q2 2025 Funded Projects. (Reports for the other two are on a different schedule). A brief summary of each project is included to provide overall context.
Jeremiah Coyle: Bling
Add support for using hiccup to style and format messages, a template string syntax to style and format messages, and 1-3 additional formatting templates for callouts, headers, and points-of-interest.
Brandon Ringe: CALVA
A new REPL output view for Calva, which is a webview in VS Code. The webview will allow us to add more rich features to the output webview, while also providing better performance.
Bozhidar Batsov: CIDER
Provide continued support for CIDER, nREPL and the related libraries (e.g. Orchard, cidernrepl, etc) and improve them in various ways.
Jeaye Wilkerson: Jank
Build jank’s seamless C++ interop system.
Bling: Jeremiah Coyle
Q2 2025 $2k. Report No. 1, Published 1 June 2025
Upon commencing Q2 work on Bling, I reordered the list of priorities set forth in the initial project description.
Updated TO DO list:
-
Primary goals for Q2
- Respect
NO_COLOR
env var - Opt-in optimization for enhanced contrast in light or dark terminals.
- Enable Hi-Fidelity, themeable, colorized, structural printing of values via Fireworks.
- Utilize
callout
to create a specialized template for Malli validation errors. - Figlet banners with lolcat-style gradient coloring.
- Respect
-
Secondary goals for Q2
- Add enhanced support for using hiccup to style and format messages
- Create 1-3 additional formatting templates for callouts, headers, and points-of-interest.
- Add documentation about how to leverage Bling to create great-looking warnings and errors in your own projects.
All the primary goals listed above are realized in [`v0.8.0`](https://clojars.org/io.github.paintparty/bling/versions/0.8.0).
Some highlights…
Figlet banners:
Docs here
Specialized template for Malli validation errors
This is experimental, with more work to be done on optimizing for disjunctions and cases with multiple errors on same value.
Bling offers bling.explain/explain-malli
to present Malli validation errors:
(require '[bling.explain :refer [explain-malli]])
(def Address
[:map
[:id string?]
[:tags [:set keyword?]]
[:address
[:map
[:street string?]
[:city string?]
[:zip int?]
[:lonlat [:tuple double? double?]]]]])
(explain-malli
Address
{:id "Lillan",
:tags #{:coffee :artesan :garden},
:address
{:street "Ahlmanintie 29", :zip 33100, :lonlat [61.4858322 87.34]}})
The above code would print the following:

You can also pass an option trailing options map to customize the appearance of the printed output. In the example below, we are leaving out the display of the schema within the callout block:
(explain-malli
Address
{:id "Lillan",
:tags #{"coffee" :artesan :garden},
:address
{:city "Tempare" :street "Ahlmanintie 29", :zip 33100, :lonlat [61.4858322 87.34]}}
{:display-schema? false})
The above code would print the following:

High Fidelity Printing
Bling offers bling.hifi
for colorized pretty-printing of Clojure, Java, and JavaScript data structures.
bling.hifi/hifi
will return an ansi-sgr decorated string, while bling.hifi/print-hifi
will print such a string.
Under the hood, the formatting/colorizing is achieved with Fireworks.
By default, the theme of this output will be Universal Neutral
.
If you set a valid BLING_MOOD
env var, the theme of the hifi
output will be Alabaster Light
or Alabaster Dark
.
You can choose one of the other available themes by following the instructions in the Fireworks readme and setting up a config.edn
on your system, with a corresponding BLING_CONFIG
env var. This config will also let you control many other aspects of the formatting with the hifi
output.


Check out the other available themes here
Enhanced contrast
You can set a BLING_MOOD
env var to enhance the contrast of bling-formatted printings.
Docs here.
Brandon Ringe: CALVA
Q2 2025 $9K. Report 1, Published 13 May 2025.
The new REPL output view was released! It’s an opt-in feature for now and is not currently the default REPL output destination. It’s currently in a very MVP state. I’ll be fixing bugs and adding features in the coming weeks.
This output view is web-based (a VS Code webview), and is implemented entirely in ClojureScript. We use replicant for the UI.
There’s project board on GitHub that I’ve been using to track my work on this. I wanted the issues to be draft issues until the first version was released. I’ll be converting all of them to issues soon.
Here are a few issues I intend to tackle in the coming weeks:
- Whitespace is not preserved in stdout in output view
- Allow writing to output view even if it’s hidden
- Persist contents of output view between closing and reopening
Documentation:
Thanks to Thomas Heller for helping us (some time ago) explore ways of integrating ClojureScript and TypeScript in Calva. Thanks to Christian Johansen for replicant.
Bozhidar Batsov: CIDER
Q2 2025 $9K. Report 1, Published 16 May 2025.
The last month extremely fruitful for CIDER and friends and resulted in many notable releases and improvements. Below are some of the highlights:
- clojure-ts-mode 0.3
- lots of improvements to the font-locking and indentation logic
- indentation rules are now consistent with cljfmt
- clojure-ts-mode 0.4
- regular expressions are font-locked with a Tree-sitter grammar
- adds support for aligning forms
- implements many of the refactoring commands from
clojure-mode
- CIDER 1.18
- I also wrote a blog post about it
- refactor-nrepl 3.11.0
- Before this update the project was broken on Clojure 1.12
- clj-refactor.el was also updated to use the latest version of the middleware
The were also several releases of cider-nrepl and orchard, related to CIDER 1.18.
Work on CIDER 1.19 is already underway, and I’m also happy to report that clojure-ts-mode
is now in a pretty good shape for general use.
Jeaye Wilkerson: Jank
Q2 2025 $9K. Report 1, Published 7 May 2025.
Thank you!
To start with, thank you, Clojurists Together, for the sponsorship this quarter. This is the largest income I have this year, so far, so it really makes a difference.
Seamless C++ interop
This quarter, I’m focusing on seamless interop with C++ from jank. Doing this from a lisp is unprecedented. One month in, I have implemented the following.
- JIT compiling arbitrary C++ code
- Reaching into C++ values
- Constructing stack-allocated C++ values
- Overload resolution
- Implicit conversions from jank objects into native types and vice versa
- Explicit casts
You can read about all of these in detail on the jank blog here.
Next month
We’re one month into the quarter and I’m pleased with the progress so far.
However, there’s a lot remaining work to do. I still need to tackle free/static
function calls, member access, member function calls, operators, dynamic
allocations, complex type support, and automatic destructors for locals with the
same guarantees C++ provides. On top of that, I need to make sure we can process
C++ headers in a portable way. This will definitely keep me busy for the quarter!
Stay tuned for my next update in a month.