- SQLite is now the default database.
- Datastar is used for server-side rendering.
- Introduces biff.graph[2] and biff.fx, two libraries that both help structure your application logic.
- Biff is now "just" a collection of independent libraries rather than a single monolithic framework, which makes it much easier to swap out the various parts. e.g. using a non-default database is much less work now.
I'd been experimenting with a good chunk of this work (the database change and the biff.graph / biff.fx stuff) starting 2 years ago. The Datastar and independent libraries stuff goes back 6 months or so. Datastar's been on my radar for a while and has been picking up steam in the Clojure community, for good reason IMO. The independent library stuff was instigated by me trying out LLM-driven coding for the first time earlier this year: I wanted to try making a Clojure web app without using Biff to see if web frameworks still seemed helpful (my conclusion: absolutely) and how I might do things from first principles were I to start over. So I did that and then started packaging up/rewriting various Biff code as smaller individual libraries as I went.
Note that I consider Biff to be mostly "hand-coded"; I start with LLM-written drafts of code but often by the time I'm done editing it's been completely reworked. The initial drafts of docs are all hand-written. I'm interested to try using it for vibe-coding apps though. e.g. how much of the code that requires good judgment can I pull into the framework so that the apps are then easier for LLMs to not screw up.