There is Irmin: https://github.com/mirage/irmin
It is currently only offered as an OCaml API, but there are future plans for the GraphQL and Cap'n'Proto APIs.
Despite the complex API and still scanty documentation, it allows you to connect any backend (In-Memory, Unix Filesystem, Git In-Memory and Git On-Disk). Thus, it works even on Unikernels and browsers.
It also offers a bi-directional model in which changes to the local Git repository affect the state of the application and vice versa. With a sophisticated API, you can work at any Git level:
- Add only blob storage .
- Transactional / Compound Tree Layer.
- A commit layer with a change chain and metadata.
- Layer Branch / Ref / Tag (only local, but also offers remote) for variability.
Immutable storage is often associated / considered for blobs + trees + commits in the documentation.
Thanks to the content-addressing inherited Git function, Irmin allows deduplication and therefore reduces memory consumption. Some functionally robust data structures fit perfectly into this database, and tripartite joining is a new approach for handling CRDT-style join conflicts.
source share