https://github.com/xlfe/radiale Radiale is a home automation system combining Clojure for orchestration and Python for device integrations, connected via Babashka pods. - Sharing because I've been doing some "renovation" on the project. Feedback welcomed! I've been using it for a few years now to run the IoT devices for my home (automation).
I vibed a https://codeberg.org/timokramer/charm.clj that's supposed to bring the niceties of https://github.com/charmbracelet/bubbletea to clojure. It works for my simple examples and it runs as native-image, maybe it is of use for someone, I am planning to build something more sophisticated with it. If someone finds problems with it please let me know. It's just a proof of concept for me so far.
@timok the clojure CLI now added support for codeberg domains, so you can publish it as org.codeberg.timokramer/charm.clj
I wonder if I should add jline to bb so people can make TUIs with it (and potentially run libs like this)
you can already do TUI stuff but mostly via shelling out to gum (or via bblgum lib) or a pod
the main thing withholding me from adding jline is that they are now at version 3.. how fast do these versions come out and how much churn will this add to bb
yeah, I thought about this as well since jline seems the only needed dep to make a tui on jvm. there is already a jline4 alpha release. would be cool of course to have it in babashka.
wait, one example of a pure bb TUI is this one: https://github.com/yannvanhalewyn/prstack/ for inspiration
oh wait, it also seems to be using gum now :)
let me try to make a PoC for bb with jline3 where you can run this lib... but hearing about jline4 already makes me worried
can't find any traces of jline4 though
but it's under the jline3 repo
yeah, it makes no sense that they always switch to a different repo, don't know why is that
any more info on this?
nah, i don't think it will happen soon
can you explain why you are using this version?
org.jline/jline-terminal-jni {:mvn/version "3.26.1"}what's the "-jni" thing about?
here is a good explanation to this: https://github.com/jline/jline3/pull/1374
jni is the prefered terminal interface
ok... and you tested it with graalvm native-image right?
any additional config needed?
yeah, in examples you can find the setup i used for it
$ clojure -M:babashka/dev -cp src counter.clj
Jan 27, 2026 12:07:42 PM org.jline.utils.Log logr
WARNING: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)
Counter App
โญโโโโฎ
โ 0 โ
โฐโโโโฏ
how do I enable debug logging? ;)This is awesome! I have always been upset with the state of TUI in clojure. I have so many use-cases for this. Really nice work
In a private converdation, @timok and I figured out how to make jline work with bb :)
$ bb -cp ../../src:src -m examples.todos
Todo List
2 pending, 1 done
> [x] Learn charm.clj
[ ] Build a TUI app
[ ] Have fun!
j/k up/down โข a add todo โข x toggle done โข d delete โข ? help โข โฆ
All examples in the docs/examples directory work. I pushed it to the jline branch in bbI was searching for something like that for some time! Looking forward to use in https://eca.dev/ in the future, would be nice to add some screenshots of what's possible
noted
Any screenshots of functionality that you've implemented?
FYI io.github.yourname/charm.clj
Hey @timok this is exactly what I and @adityaathalye were looking for the past week. Keep me in loop for any help needed for testing and ui.
or packaging
yeah, will be investigating some testing with probably charmbracelet/vhs @hmisraji07 very happy for collaboration.
sure @timok.
https://github.com/squint-cljs/squint: Light-weight ClojureScript dialect
v0.10.185 (2026-01-26) - 0.9.169
โข Add squint.math, also available as clojure.math namespace (a direct port of the original)
โข Fix emitting negative zero value (`-0.0`)
โข pr-str, prn etc now print EDN (with the idea that you can paste it back into your program)
โข new #js/Map reader that reads a JavaScript Map from a Clojure map (maps are printed like this with pr-str too)
More updates in ๐งต
Continued:
โข Fix https://github.com/squint-cljs/squint/issues/792: prn js/undefined as nil
โข Fix https://github.com/squint-cljs/squint/issues/793: fix yield* IIFE (needs wrapping in parens)
โข https://github.com/squint-cljs/squint/pull/779: Added compare-and-swap!, swap-vals! and reset-vals! (https://github.com/tonsky)
โข https://github.com/squint-cljs/squint/pull/788: Fixed compilation of dotimes with _ binding (https://github.com/tonsky)
โข https://github.com/squint-cljs/squint/pull/790: Fixed shuffle not working on lazy sequences (https://github.com/tonsky)
โข Multiple :require-macros with :refer now accumulate instead of overwriting (https://github.com/willcohen)
โข Allow macro namespaces to load "node:fs", etc. to read config files for conditional compilation
โข Don't emit IIFE for top-level let so you can write let over defn to capture values.
โข Fix js-yield and js-yield* in expression position
โข Implement some? as macro
โข Fix https://github.com/squint-cljs/squint/issues/758: volatile!, vswap!, vreset!
โข pr-str, prn etc now print EDN (with the idea that you can paste it back into your program)
โข new #js/Map reader that reads a JavaScript Map from a Clojure map (maps are printed like this with pr-str too)
โข Support passing keyword to mapv
โข https://github.com/squint-cljs/squint/issues/759: doseq can't be used in expression context
โข Fix https://github.com/squint-cljs/squint/issues/753: optimize output of dotimes
โข alength as macro
โข Inline identical? calls
โข Clean up emissiong of paren wrapping
โข Add nat-int?, neg-int?, pos-int? (https://github.com/eNotchy)
โข Add rand
โข Fix rendering of null and undefined in #html
โข https://github.com/squint-cljs/squint/issues/747: #html escape fix
โข Optimize nested assoc calls, e.g. produced with ->
โข Avoid object spread when object isn't shared (`auto-transient`)
โข Optimize str even more
โข Remove debug output from compilation
โข Optimize =, and, and not= even more
โข not= on undefined and false should return true
โข Optimize code produced for assoc, assoc! and get when object argument can be inferred or is type hinted with ^object
โข Optimize str using macro that compiles into template strings + ?? '' for null/undefined
โข Fix https://github.com/squint-cljs/squint/issues/732: take-last should return nil or empty seq for negative numbers
โข https://github.com/squint-cljs/squint/issues/725: keys and vals should work on js/Map
โข Make map-indexed and keep-indexed lazy
goddamn that's a lot of fixes
Nice work!
Clojure CLI 1.12.4.1597 is now available
โข TDEPS-273 Add http://codeberg.org to git deps auto url support (use [org|page].codeberg.USER/PROJECT as your lib, git url then inferred)
โข TDEPS-269 Embed and check tar checksums in Linux and Posix installers
โข TDEPS-274 Add additional options to curl in linux and posix installer for retry and timeout