|Number of watchers on Github||846|
|Number of open issues||46|
|Average time to close an issue||11 days|
|Average time to merge a PR||2 days|
|Open pull requests||10+|
|Closed pull requests||8+|
|Last commit||7 months ago|
|Repo Created||over 5 years ago|
|Repo Last Updated||7 months ago|
|Organization / Author||mirage|
|Do you use irmin? Leave a review!|
|View open issues (46)|
|View irmin activity|
|View on github|
|Latest Open Source Launches|
Trendy new open source projects in your inbox! View examples
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 to run everywhere, from Linux, to browsers and Xen unikernels.
Irmin is a library to version-control application data. It has the following features:
on-disk format various formats are supported, including the Git format: Irmin on-disk repositories can be inspected and modified using the classic Git command-line tools.
wire format various formats are supported, including the Git protocol (only in client mode) or a simple JSON-based REST API (client and server).
dynamic behaviour Irmin allows the users to define custom merge functions, to use in-memory transactions (to keep track of reads as well as writes) and to define event-driven workflows using a notification mechanism.
These abstractions allow developers to create applications with concurrent behaviors which are both efficient and safe.
Irmin ships with various backends. It provides the following OCamlfind pacakges:
irmin.memis an in-memory backend.
irmin.gituses the Git format to persist data on disk.
irmin.fsuses bin_prot to persist data on disk.
irmin.httpuses JSON over HTTP to speak with an Irmin server.
Other external backends are available as external OPAM packages
opam install <pkg> to install):
Here a list of Irmin users:
What a Distributed, Version-Controlled ARP Cache Gets You. Blog post describing how Irmin can be used with Mirage to store the network stack's ARP cache, which allows the history to be viewed using the git tools.
Using Irmin to add fault-tolerance to the Xenstore database. Porting the Xen hypervisor toolstack to support Git persistence via Irmin.
Introducing Irmin: Git-like distributed, branchable storage. This is the first post that describes Irmin, the new Git-like storage layer for Mirage OS 2.0.
Irmin is packaged with opam:
opam install irmin-unix # install all the optional depencies
Irmin comes with a command-line tool called
--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.Infix open Irmin_unix module Store = Irmin_unix.Git.FS.KV (Irmin.Contents.String) let config = Irmin_git.config ~bare:true "/tmp/irmin/test" let info fmt = Irmin_unix.info ~author:"me <email@example.com>" fmt let prog = Store.Repo.v config >>= Store.master >>= fun t -> Store.set t ~info:(info "Updating foo/bar") ["foo"; "bar"] "hi!" >>= fun () -> Store.get t ["foo"; "bar"] >>= fun x -> Printf.printf "Read: %s\n%!" x; Lwt.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-unix) and
$ ocamlfind ocamlopt example.ml -o example -package irmin.unix,lwt.unix -linkpkg $ ./example Read: hi!
examples directory contains more examples. To build them, run
$ ./configure --enable-examples $ make
Tutorials are available on the wiki.
To report any issues please use the bugtracker on Github.
See the LICENSE file.
Development of Irmin was supported in part by the EU FP7 User-Centric Networking project, Grant No. 611001.
-safe-stringis enabled by default (#477, @djs55)