github.com/mirage/irmin ↗
Irmin is a distributed database that follows the same design principles as Git
Open this visualization on its own page →
Contributors
51
Lines of Code
12,760
From
2013-04-22
To
2021-01-08
About mirage/irmin
Irmin is an OCaml library for building mergeable, branchable distributed data stores based on the design principles of Git. It applies version-control system concepts to large-scale distributed data, providing Git-like operations such as clone, push, pull, branch, and rebase, but optimized for automatic programs performing high-speed operations with fully-automated conflict handling. The library is highly customizable, allowing developers to define custom data types, storage backends (in-memory, disk, Redis, browser storage, etc.), and event-driven behaviors for programmable dynamic dataflow pipelines.
Irmin was created at the University of Cambridge in 2013 as the default storage layer for MirageOS applications. Rather than a complete database engine, it is a collection of composable libraries designed to address challenges raised by the CAP Theorem. The core consists of well-defined low-level data structures for persistence and synchronization, with efficient synchronization algorithms and higher-level data structures. Some components have formal semantics and support Conflict-free Replicated Data-Types (CRDTs). Irmin makes minimal OS assumptions, making it highly portable across environments from Linux to web browsers to Xen unikernels.
The project has seen substantial real-world adoption across three categories: as a portable structured key-value store (used by XenStore, Cuekeeper, Caldav, Tezos, and others), as a distributed database backend (IMAP servers, ARP caching, Cassandra-based caching), and as an event-driven dataflow engine (Datakit CI, OCurrent). Irmin is primarily maintained by Tarides and includes packages for various storage backends like Git, filesystem, chunked storage, pack format, and GraphQL interfaces.