A persistent B-ish-tree

View the Project on GitHub Incubaid/baardskeerder

Baardskeerder is a so-called Copy-on-Write B-tree (aka Append-only B-tree), a fully-persistent datastructure which can be implemented using nothing but append writes towards the storage medium on which the data is stored.

A CoW B-tree implements a fully-persistent B-tree datastructure by copying paths from leaf to root whenever a given key is added (or altered) inside the tree.

The project was launched to replace Tokyo Cabinet, used as part of our distributed & consistent key-value store, Arakoon.

This is a technology preview, so keep this in mind whenever thinking about using this in a real-world application: the codebase is still in flux, the on-disk database format will most certainly change (without backwards compatibility) before the first version is released,...

Getting Started

Baardskeerder uses several features only provided by the Linux kernel, so it can't (for now) be used on other platforms. Some features require a very recent (>= 3.0) kernel and require specific file-system support, currently only provided by ext4, XFS and OCFS2.

It's written in OCaml, so you'll need a recent (>= 3.12) OCaml compiler on your system. The build system uses ocamlbuild and ocamlfind.

Finally, a working C compiler and up-to-date system header files are required.

To build the library, test executable and benchmark tool, execute make in the src tree. Run make install to install the library on your system.

To render the documentation, you'll need Sphinx and its dependencies installed. Execute make html in the doc tree to generate HTML output. Execute make help to see a list of other output formats available.

Warning: the documentation is out of date in several places, and updating it is currently low priority. If you want to know how it works, take a look at our blog.


Baardskeerder is available under the LGPL-3 license. See COPYING for more information.


The Baardskeerder project was created by Romain @toolslive Slootmaekers and Nicolas @NicolasT Trangez as part of their work at @Incubaid.

You can get in touch with the team by e-mail at, or using Twitter @Incubaid.