alt.hn

6/9/2026 at 4:12:52 PM

Biff.core: system composition for Clojure web apps

https://biffweb.com/p/core/

by jacobobryant

6/9/2026 at 9:31:09 PM

Maybe I'm grumpy and old or something, but I wish there was only one Component library for Clojure, out of all the things this should have been the one everyone settled on.

by lukaszkorecki

6/9/2026 at 9:35:00 PM

If everyone wants to move to biff.core that's fine with me!

by jacobobryant

6/10/2026 at 1:53:34 AM

Said every author of a component library :) Maybe the plurality of choice is good.

by embedding-shape

6/10/2026 at 2:29:03 AM

hehe yes. There are plenty of other languages with dominant frameworks etc; I like being in a community of experimenters.

by jacobobryant

6/9/2026 at 4:16:16 PM

Recently my impression has been that whatever the agentic tools are best at is also what's best for solo projects or proof of concepts.

I used to love writing custom CSS, but Claude is just so much better at Tailwind that I ended up switching, even though I still kind of loathe the class soup.

Is AI any good at Clojure?

by holistio

6/9/2026 at 6:24:10 PM

> Is AI any good at Clojure?

It's okay when you use it just like any other PL, which is roughly the Unix/pipe model - batch-style. Agent spawns process -> reads stdout/stderr -> spawns next process. State lives in-between the calls and in files. Each tool invocation is stateless.

Things get far more interesting when you give an LLM a true Lisp REPL. LLM stops guessing and starts empirically analyzing current state of things and produces working solution faster, costing far less tokens. And you get to watch it solve things interactively, e.g. I often let AI poke through our UI (via Playwright-driven Clojurescript REPL), while monitoring situation in k8s - through nrepl port, connected to Clojure REPL.

by iLemming

6/9/2026 at 5:04:17 PM

AI is very good at Clojure. In fact, from what I can see, I get a much better experience on a large Clojure+ClojureScript code base than many other people. Surprisingly so. I'm still not sure why, is it higher token density of the language? My experience? Large, well-written and well-maintained code base to lean on as context? In any case, the experience so far has been excellent.

by jwr

6/10/2026 at 1:43:31 AM

I have been trying to explain to people that LLMs are worse in languages like Rust. You have a better test harness with the type system, but the syntax is so much more complicated. Handling all of those special cases, where a misplaced asterisk can mean accessing a completely different data structure, is exactly what LLMs are bad at. Because it is just trying to write something plausible.

Clojure meanwhile is very terse without being unreadable. It really does read like a series of data transformations.

by Capricorn2481

6/9/2026 at 5:00:33 PM

Last year, I thought it was awful. Even Opus would reliably unbalance parentheses on practically every edit and then enter a doom spiral of making things worse as it tried to figure out the right place to put a `)`.

Recently, I’ve been quite impressed, at least with Claude. At some point they figured out the parens issue, and the code is largely solid and idiomatic. I’ve mostly used it with Polylith apps, so the context for any given change is naturally well-defined. Usual issues with failing to reuse existing functions or make sound decisions about architecture, but no more so than I’ve seen with TypeScript or Rust.

I think there are a few points in its favour: it’s a very concise language, the documentation is terse but precise and comprehensive, and while there’s obviously nowhere near as much Clojure out there as there is JavaScript or Python, there is a lot. As the Clojure demographic skews toward experienced, senior programmers, I’d guess the quality of that corpus is probably well above average.

Java stack trace errors might even be an advantage now.

by mechanicum

6/9/2026 at 6:04:34 PM

Yes. Generally, it's quite good. It does have a blind spot with parens, but good old Claude Opus then cranks up a python script (yes!) to sort it all out. I wouldn't leave any of the models out on their own - you'll still have to clean up some obviously crazy stuff, but it's pretty clear what needs to done. In conclusion, Claude and ChatGPT are quite decent at Clojure. Oh, I do like Biff.

by kayo_20211030

6/9/2026 at 6:41:59 PM

I would guess the parens will be problematic because of tokenization. something like `)))` is a single token and so is ')])'. I think having strings like that as single tokens probably makes the link between open and closing parens harder to associate. Probably could be papered over with harness help.

by y1n0

6/9/2026 at 7:13:50 PM

It's the language best positioned for AI with world class nREPL.

by arikrahman

6/9/2026 at 4:26:15 PM

This is a bit of an "XY Problem" question.

I have migrated all my code to Gleam, FE and BE, Bun, browser, and BEAM.

Claude knows much less about Gleam than it does about Javascript or React. However the constraints of Gleam and its Elm inspired framework Lustre are so strong, Claude gives me much better results.

The only difference is I need to adjust my initial guidance.

by oDot

6/9/2026 at 6:03:22 PM

Any favorite gleam projects to learn from?

I've always admired the direction gleam was heading in, and the community is awesome. But with gradual typing now in elixir, I'm weighing whether or not gleam offers anything special enough to get me spending time there instead of just using elixir.

by elxr

6/9/2026 at 8:21:07 PM

I wrote a book about setting up a small gleam project, covers organization of the project in general. A draft is live at https://escherize.com/gleam-katas

by escherize

6/9/2026 at 9:18:36 PM

Beautiful. Will definitely work through this.

by elxr

6/9/2026 at 6:17:26 PM

Lustre is great

by packetlost

6/9/2026 at 5:00:46 PM

How are you liking Gleam and Lustre? What went particularly well or badly?

by bbkane

6/9/2026 at 4:22:24 PM

AI has been working out well for me writing Clojure, both in personal projects and at work. Documentation, not so much... I write all that by hand.

For Biff I've been using AI to generate a rough draft of all the code and then I take a manual pass over things before releasing. Seems to be a good middle ground.

by jacobobryant

6/9/2026 at 7:37:13 PM

Maybe I'm just lucky, but I almost never run into paren-matching issues. Hooked to a working REPL, Clojure isn't merely "good", I'd say it is dominant compared to a lot of other langs.

by devin

6/9/2026 at 10:51:55 PM

If anyone can enlighten me as to why my above comment is getting downvoted: please do.

My impression is that I voiced a valid concern. I suspected handling parentheses is problematic.

by holistio

6/10/2026 at 3:11:55 AM

> why my above comment is getting downvoted

The most infamous two letters of our time - humans do not like machines, and absolutely hate those who do.

> I voiced a valid concern

Not unwarranted. When you treat a homoiconic language just like any other, LLMs do sometimes get messy with paren-balancing, but most models correct it on a second-third try. You still get some benefits - e.g., Clojure is the most token efficient mainstreamish PL.

To get the most benefit from it, one must teach the model to treat it just like a human programmer would. It makes no sense to treat Clojure like Python or Go, or C - it's like ordering a pair of swim fins and jumping into water with the unpacked box. Lisp dialects shine when you use the REPL (true Lisp REPL - not some faux-repl like Python's), so you have to "teach" the model a way to operate the live REPL, not passively reading/writing "static" code that's fed into it batch-style. When you do that, models not only get much better grasp of where the syntactic elements should be, they start reasoning about the program in a way more interesting fashion, empirically evaling pieces on the fly, interactively - without juggling state, without compiling, without even having to save things (until proven to work).

Does that make Clojure "the best LLM-suited PL"? Not really - there's simply no such thing. For sure though, the homoiconic nature of the language absolutely makes it enormously interesting and well-suited for it.

by iLemming

6/9/2026 at 5:47:37 PM

It is but it remains shockingly bad at closing sufficiently deeply nested parens at least as far as chatGPT

by michaelmrose

6/9/2026 at 6:37:05 PM

I bet you're just treating it like any other (non-homoiconic) language. An agent that edits files and re-runs `clj` is doing something fundamentally different from what a Clojure developer typically does. When you give the agent a REPL - things get far more interesting.

by iLemming

6/10/2026 at 7:54:54 AM

Not really running agents at all literally just using the $20 chatGPT subscription and editing files.

by michaelmrose