I just released a small library for when you're using SQLite with Clojure and you want things like regexps, custom UDFs, and proper Unicode casefold: https://github.com/latacora/clj-sqlite-bridge I originally wrote it for an internal project but it seemed generally valuable (in fact, we immediately started using it in a different one) and fortunately Claude Code has made busywork like this far less expensive 🙂
New features in clj-sqlite-bridge since the initial UDF support: • Aggregate & window UDFs — register Clojure functions as SQLite aggregates (like SUM) and window functions (like OVER clauses), with automatic per-group state management • Custom collations — define how strings are compared for ORDER BY, =, DISTINCT, and GROUP BY; ships with a ready-made example unicode_ci collation (Unicode-aware case-insensitive) • Busy & progress handlers — control retry behavior on SQLITE_BUSY and implement query timeouts/cancellation • Runtime limits — query and tighten per-connection SQLite limits (max SQL length, column count, expression depth, etc.) • Backup & restore — back up a live database to a file (or restore from one) using SQLite's Online Backup API, with progress callbacks and stepped copies • Serialize/deserialize — snapshot an entire SQLite database to a byte[] and restore from it, useful for transmitting or embedding database state