#auto-merge #persistent #document #state #back-end #wrapper #user

automerge-persistent

The core library for managing persistent state of Automerge documents

5 releases (3 breaking)

0.4.0 May 13, 2023
0.3.1 Mar 8, 2023
0.3.0 Mar 8, 2023
0.2.0 Dec 20, 2022
0.1.0 Sep 26, 2022

#5 in #automerge

38 downloads per month
Used in 3 crates

MIT license

30KB
493 lines

Automerge persistent

This project extends automerge-rs with some persistence. There is a core trait for what functionality a persister should have and a backend wrapper struct to utilise this.

For now, see the benches for an example of a sled backend. Adding more backends to this repo would be very much appreciated.

Good backends to have would be:

  • memory (for some testing scenarios)
  • sled
  • localstorage
  • indexeddb
  • filesystem
  • other suggestions welcome!

Usage

The PersistentBackend struct should be the main point of reference and should fit in place of a normal Backend. It can load from the persistent storage and automatically saves on the appropriate actions (but more efficiently). Occasionally the user should schedule a call to compact if storage and load time are of concern. This gathers the changes and saves the backend in the more compressed form, then the old changes are removed.


lib.rs:

A library for constructing efficient persistent automerge documents.

A PersistentAutomerge wraps an automerge::Automerge and handles making the changes applied to it durable. This works by persisting every change before it is applied to the document. Then occasionally the user should call compact to save the document in a more compact format and cleanup the included changes. This strategy aims to be fast while also being space efficient (up to the user's requirements).

let persister = MemoryPersister::default();
let doc = PersistentAutomerge::load(persister).unwrap();

Dependencies

~4.5MB
~99K SLoC