Cursive 2026.1-eap4 is out. It's a bugfix release, fixing one UI deadlock and a bunch of standard style formatting issues. https://cursive-ide.com/blog/cursive-2026.1-eap4.html
[ANN] Nubank's aws-api 0.8.812 https://groups.google.com/g/clojure/c/0_2yBeJjNJA
• Add support for AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable (by @dancmeyers) https://github.com/cognitect-labs/aws-api/issues/293
• Remove data.xml dependency https://github.com/cognitect-labs/aws-api/issues/252 - Prevents cryptic error when using the non-alpha release of data.xml
README: https://github.com/cognitect-labs/aws-api/
API: https://cognitect-labs.github.io/aws-api/
Changelog: https://github.com/cognitect-labs/aws-api/blob/master/CHANGES.md
Upgrade Notes: https://github.com/cognitect-labs/aws-api/blob/master/UPGRADE.md
Latest Releases of api, endpoints, and all services: https://github.com/cognitect-labs/aws-api/blob/master/latest-releases.edn
new release {com.github.danlentz/clj-figlet "0.1.4"] i hope folks check it out. I think we’re in a good place here, unless anyone has any other ideas or suggestions.
Rendering engine rewritten to match the C figlet exactly. 45 bundled fonts. Output verified against the reference binary with 17,000+ randomized assertions per test run.
What's new:
- write-font for serializing fonts back to .flf — full round-trip support
- validate-font / valid-font? backed by clojure.spec
- all-fonts discovers bundled fonts from the classpath
- 35 new contributed fonts (45 total)
https://github.com/danlentz/clj-figletA new spec would definitely be a good way to go deeper into rabbit hole.
There is some ansi sgr utility code which may or may not be useful https://github.com/paintparty/bling/blob/main/src/bling/ansi.cljc and you can use bling.core/?sgr for visual debugging of sgr-wrapped strings.
It would be cool to have a function or cli that slurps in dir with a config.edn (font metadata) and a bunch of individual files like a.txt b.txt etc., then generates the flf file. Maybe something like this already exists, but I haven’t come across it.
yeah I would talk to the UN
my philosphy for color figlet font is that it should not be polluted with any mention of ansi. there are 16 terminal colors they can be represended by characters B , b, W, w, etc
i dunno. i’m way further with making it work than I am with defining the spec. here’s where i’m at https://github.com/danlentz/clj-figlet/blob/015-color/doc/papers/figfont3-proposal.md
> thank you for joining in on this i am kind of excited to have a fun right brained project for one
For sure - just added a couple issues to the repo, to get the ball rolling
> maybe we can make the format dsl somehow useful for bling
Yes, was looking at this … I’m gonna experiment with it.
> the whole world needs bling
Soon will be releasing a smaller, more focused, lower level lib that Bling itself will use for SGR styling, so maybe that could be leveraged by clj-format
> how did you get to be both a designer and clojure programmer?
No idea! :)
Feel free to DM me
thank you for joining in on this i am kind of excited to have a fun right brained project for one
once
maybe we can make the format dsl somehow useful for bling
the whole world needs bling
how did you get to be both a designer and clojure programmer?
(which you clearly are, despite your potestations)
there are so many good fonts out there to play with
what do you think about extending the figfont spec with ansi color? i know i said i was done, but now im not sure.
i’m so far in a rabbit hole
I'm not sure what governing body would allow me to release a fig-font v3 spec. I'm assuming it's the United Nations
That's a really good idea. Yes, I’m coming at this knowing little to nothing about type design lol. And y the ghost and dance fonts are hysterical. I really want a v3 flowerpower where the letters are green and the flowers are like pink and yellow or something.
You can get part of the way to full flowerpower with tricks on the rendering side, with the current fig standard - did a POC in bling.banner the other day https://github.com/paintparty/bling/blob/6fc7f768fc363e0a252745075e8c7cbc8b65bcb1/src/bling/banner.cljc#L758
(println (bling.banner/banner
{:text "Flower Power"
:font "flowerpower"
:color :green
:atomic-filter {#{"(" ")" "_"} {:color :yellow}
"o" {:color :magenta}}}))Fits really well when things are geometric and deterministic:
(println (bling.banner/banner
(let [text "OHIO"]
{:text text
:font "Doh"
:atomic-filter {(->> text (map str) (into #{})) {:color :gray}
":" {:color :red}}})))(println (bling.banner/banner
{:text "HELLO"
:font isometric-1
:atomic-filter {#{"\\" "/" "_"} {:color :red}
":" {:color :green}}}))
you can specify replacements for individual chars ftw:
(println (bling.banner/banner
{:text "HELLO"
:font isometric-1
:atomic-filter {#{"\\" "/" "_"} {:color :red}
":" {:color :blue
:replacement "*"}}}))Maybe this kind of logic would make sense in the v3 spec as a “post-processing” concept that figdrivers could implement, totally separate from the shape / pallette row stuff BTW, made a couple tweaks to the v3 flf3 pseudocode example above for clarity … defines a default global color and then two distinct dynamic color slots, one for the ghost-figures and one for the ghost eyes hahaha
Ok. This is so fun. Figfont3 must move forward.
I can give you edit access to the repo if you want
Nice work on the fonts.md!
> https://github.com/danlentz/clj-figlet/blob/015-color/doc/papers/figfont3-proposal.md
Finally got a chance to look at this yesterday. Great read, interesting set of problems.
> i’m way further with making it work than I am with defining the spec.
Curious, does it work in latest clj-figlet , or maybe on the 015-color branch?
It's out there on 015
experimentally
I integrated figlet (and tables, nested tables, nested figlet tables) to the DSL here and using it is now a pleasure https://clojurians.slack.com/archives/C015AL9QYH1/p1776273044314079
Added macros / pre-expansion to the language
Yes I saw that - very impressive! Definitely will be using clj-format in near future
I kind of love it I'm mad when I'm at a project where I don't have it now
Also, FWIW, LLMs seem to be able to generate very nice, well factored, semantic DSL and do 1000% better output formatting than I've ever done by hand
Hahaha yes I know - I just had the LLM make me a clojure namespace last night that formats and colorizes css strings (fully themeable) for output in a terminal (debugging purposes). It took a little back and forth to work out the kinks but way faster than trying to figure out how to use an existing lib in another lang and way way faster than writing something by hand
haha thats awesome. sl do you think i should merge this?
LLMs are super good at woeking with this DSL i'm never had prettier output its kind of a joy to have
You mean merge the v3 spec branch?
feel free to open PR's it sounds like you've been going down this road longer than i have
or y, whats your thoughts on v3. minimally invasive enough?
> it sounds like you’ve been going down this road longer than i have haha no way, just did that toy impl of figlet in Bling, which was fun, but like I didn’t even know there was a Figlet spec. I just wanted something that would work in cljc, so I wrote a dirty script to auto port a few fonts that I liked into a makeshift format so they could be loaded from a namespace, like this https://github.com/paintparty/bling/blob/main/src/bling/fonts/ansi_shadow.cljc
My thoughts on v3 … keeping in mind that they are just cursory and I really haven’t gone that deep on the technical side wrt Figlet … would just be some loose feedback from a illustrated type designer / illustrated type design implementation perspective. I think a v3 like what you are describing would be useful for font designs with multiple, distinct, intertwined figurative elements, like this one (`Ghost.flf`):
.-. .-') ,---.
\ ( OO ) | |
;-----.\ .-'),-----. .-'),-----. | |
| .-. | ( OO' .-. '( OO' .-. '| |
| '-' /_)/ | | | |/ | | | || |
| .-. `. \_) | |\| |\_) | |\| || .'
| | \ | \ | | | | \ | | | |`--'
| '--' / `' '-' ' `' '-' '.--.
`------' `-----' `-----' '--'
But why bake specific color information in? Couldn’t it be more
powerful/flexible to use a set of generic, single-char placeholders? Each one
could map to descriptive property name (maybe in the header?) that could be
leveraged by the figdriver. This way the font designer could provide a default color
which could be overridden by the user via the placeholder. Something like:
(figlet/render "Ghost"
"Boo!"
{:ghost-figures {:color :green :font-weight :bold}
:style {:color :red}})
The figdriver could also look for an optional :style map to globally style all other
sub-chars in the output.
Also, would it be possible to do something like the #C construct below, in order to
eliminate the need for programmatic detection of color rows (and also the edge
case you describe of shape rows that consist only of pallette characters, like Doh.flf)?
So each FigChar either has a plane with stylable subchars or not.
Some pseudocode, this example would allow the end user to color the ghosts and glyphs independently:
flf3a$ 9 8 15 0 20 0 16255 0 red x="ghost-figures" gray y="ghost-eyes" green
____ #
.' __ \ #
/ .' \ | #
| | (_/ | #
\ `.__.'\ #
`.___ .' #
##
('-. #C
xxxx
( OO ).-. #
x yy xxxx
/ . --. / #
x x x x
| \-. \ #
x x
.-'-' | | #
xxxxx
\| |_.' | #
x
| .-. | #
| | | | #
`--' `--' ##
##
;; For reference, the FigCharacter with color rows above looks like this:
('-. #
( OO ).-. #
/ . --. / #
| \-. \ #
.-'-' | | #
\| |_.' | #
| .-. | #
| | | | #
`--' `--' ##these are really good questions let me think and get back to you
hitting mcdonalds and heding home
thanks! no rush enjoy your happy meal
yum 🍔
The later ones are kind of impressive. Flower power is still kind of weak? At least, not being a designer, it's not what I'd imagine. I know only POC
I can spend a little bit of time playing with this a little bit next week I’ve unwound some of my other TODOs. I can add you as a contributor or, if you can structure and summarize any ideas in a GitHub issue that could help me work on it. You definitely have way more of a grip on what a colorized font spec should look like than I do
This could even be a fun “10 minute” conj talk
the isometric-1 layers are impressive
they look hard to do though. for the layman
its kind of an interesting, fun, unusual project
i have the {:figlet} directive as an optional / force loaded dep in clj-format. I think thats in a lot of cases the way to interface with clj-figlet
I can give you edit access to the repo if you wantThat would be great, no rush though I can just start with a couple issues: • One addressing ideas around the v3 spec • Another wrt to adding fonts … have some qs about it that other ppl might potentially have as well > The later ones are kind of impressive. Flower power is still kind of weak? At least, not being a designer, it’s not what I’d imagine. I know only POC Yeah the flower power example was just to demonstrate that you would actually need something like the v3 spec to do it properly… like it looks a little broken but if you could specify the color perfectly and maybe make the individual subchars of the figchars alternating colors, and also be able to selective bold subchars, it would get closer to what I imagine you had in mind from your desc > the isometric-1 layers are impressive > they look hard to do though. for the layman Yeah those are easy to achieve, technically, with the existing v2 spec and a capable post-processor (like the one in bling.banner, which seems like it would be easy to codify into a v3 figdriver + reference implementation). It could be hard to manually pass the filtering as cli args at the terminal, but I can’t imagine it would be that difficult for most programmers to figure that sort of thing if they are using it from their language of choice.
(println (bling.banner/banner
{:text "HELLO"
:font isometric-1
:atomic-filter {#{"\\" "/" "_"} {:color :red}
":" {:color :blue
:replacement "*"}}}))
could just be something like this, for example, in JS:
banner(
"Hello",
"isometric-1",
{
atomicFilter: [
{
target: ["\\", "/", "_"],
style: { color: "red" }
},
{
target: [":"],
style: { color: "blue" },
replacement: "*"
}
]
}
);
I think a true layman would just use one of the existing classic lo-fi figlet banner generator sites on the web and twiddle whatever options they are given> i have the {:figlet} directive as an optional / force loaded dep in clj-format. I think thats in a lot of cases the way to interface with clj-figlet Yeah that makes sense.