clove

How clove is made

clove is vibe coded. Nearly all of it, the C interpreter, the libraries, the tests and most of these docs, was written by Anthropic's Claude, with a person deciding what to build, trying it out, and saying when it's wrong. You should know that before you use it.

We love Clojure. We wanted one we could drop into a C program, extend with our own natives, and change all the way down to the core library, and this was the fastest way to get it. It's a hobby project, and it isn't meant for critical work.

Checking it against the real thing

A model's idea of how Clojure behaves is no substitute for Clojure, so clove is tested against Clojure itself. There are over 2,000 assertions in the test suite, and every bug fix adds one. A corpus of 545 expressions has to produce the same output as JVM Clojure. Every night, a fuzzer generates random expressions, runs them through clove and through babashka, and reports where they disagree. CI runs the suite on Linux, macOS and Windows, and on Linux runs it again under AddressSanitizer with the garbage collector forced to run constantly.

Where clove differs from Clojure on purpose, the difference is written down in Coming from Clojure.

This catches a lot, but not everything. Nobody has read clove line by line the way people read a mature implementation, so expect wrong answers, crashes, and changes between versions. If your work matters, use Clojure, ClojureScript or babashka. clove is for tinkering, toys, personal tools, and seeing how a Lisp works inside.

Clojure's policy on generated code

Clojure doesn't accept code written by AI. Its contributing page, under "No Generated Code" (as of 2026-11-01), says:

Clojure's code is written and reviewed by humans. Code generated by a large language model or similar technology, such as Anthropic's Claude, GitHub/Microsoft's Copilot, OpenAI's ChatGPT, Facebook/Meta's Code Llama et al, is not compliant with the covenants and representations of Clojure's Contributor's Agreement, and is thus not acceptable as code for Clojure.

An exception may be made for human written generators whose source code is contributed along with the patch.

That policy is about contributions to Clojure, and clove isn't one. It's a separate, unofficial reimplementation, not affiliated with or endorsed by Clojure's maintainers. It does mean nothing in clove belongs upstream: if you contribute to Clojure, leave clove's code out of your patches.

What clove takes from Clojure

The language, mainly: its design, its semantics and its names. When clove and the JVM disagree, the JVM is right. Three of Clojure's own libraries, clojure.set, clojure.walk and clojure.zip, ship unmodified in vendor/ with Rich Hickey's copyright notices intact, and people wrote those. The docstrings behind (doc ...) are shortened from Clojure's. clove uses the same license as Clojure, the Eclipse Public License 1.0.

Thanks

To Clojure, Rich Hickey and the people who maintain it, for the language. To babashka, which clove is tested against every night. To jank, another Clojure headed for native code. And to Janet and Fennel, which showed how good a small embeddable Lisp, and its docs, can be.