I've been experimenting a bit with CouchDB recently. I've been really impressed with how quickly it lets you get started; interacting with it always feels obvious. I've spent enough time doing web apps to get tired of how everyone always jumps straight to the unholy combination of a relational database system and object-relational mapper whenever they need any persistence. (When all you have is a hammer...) So using CouchDB with a functional language is a breath of fresh air.

Putting together a CouchDB adapter in Clojure is really a matter of no more than a page worth of code once you've got an HTTP client, so it's left as an exercise to the reader. Since functional languages encourage working closer to your core data types (which have clear mappings to JSON) there's very little cognitive overhead when it comes to using Couch for persistence.

Last week while I was in Portland I put together a client written in Elisp called relax.el. This lets you browse Couch databases from the comfort of Emacs. It also lets you edit documents straight from an Emacs buffer, which is much more convenient than using the browser's text tools from Futon.

There are a few quirks with regard to pagination, (just press g if it gets messed up) but it's pretty useful as it is. It should be in ELPA soon, so M-x knock-yourself-out .

๛