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:
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.

Docs here

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

Docs here

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.


Alabaster Dark        
Alabaster Light        

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:

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:

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.

  1. JIT compiling arbitrary C++ code
  2. Reaching into C++ values
  3. Constructing stack-allocated C++ values
  4. Overload resolution
  5. Implicit conversions from jank objects into native types and vice versa
  6. 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.