Irmin is a library for persistent stores with built-in snapshot, branching and reverting mechanisms. It is designed to use a large variety of backends. Irmin is written in pure OCaml and does not depend on external C stubs; it aims is to run everywhere, from Linux to Xen unikernels.
Irmin is packaged with opam:
opam install irmin
Irmin comes with a command-line tool called irmin
. See irmin --help
for further reading. Use either irmin <command> --help
or
irmin help <command>
for more information on a specific command.
To get the full capabilites of Irmin, use the API:
open Lwt
open Irmin_unix
let store = Irmin.basic (module Irmin_git.FS) (module Irmin.Contents.String)
let config = Irmin_git.config ~root:"/tmp/irmin/test" ~bare:true ()
let prog =
Irmin.create store config task >>= fun t ->
Irmin.update (t "Updating foo/bar") ["foo"; "bar"] "hi!" >>= fun () ->
Irmin.read_exn (t "Reading foo/bar") ["foo"; "bar"] >>= fun x ->
Printf.printf "Read: %s\n%!" x;
return_unit
let () = Lwt_main.run prog
To compile the example above, save it to a file called example.ml
. Install irmin and git with opam (opam install irmin git
) and run
$ ocamlfind ocamlopt example.ml -o example -package lwt,irmin.unix,lwt.unix -linkpkg
$ ./example
Read: hi!
The examples
directory contains more examples. To build them, run
$ ./configure --enable-examples
$ make
A tutorial is available on the wiki.
To report any issues please use the bugtracker on Github.