A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.
Find a file
Alex Good 9332ed4ad9
wip
2022-03-20 14:48:30 +00:00
.github/workflows Add wasm tests to CI 2022-03-09 16:02:08 +00:00
.vim wip 2022-03-20 14:48:30 +00:00
automerge wip 2022-03-20 14:48:30 +00:00
automerge-cli Merge pull request #283 from jeffa5/experiment-make 2022-03-04 16:53:17 -05:00
automerge-js Fix js proxy api 2022-03-04 11:46:03 +00:00
automerge-wasm v20 - object replacement char 2022-03-14 14:47:54 -04:00
edit-trace Add loading to edit-trace rust benchmark 2022-03-09 18:12:05 +00:00
examples/cra Update app to include text editor, import Automerge correctly 2022-01-31 10:55:45 -07:00
scripts/ci change the wasm commit back to an array 2022-03-09 10:41:14 -05:00
.envrc Add nix config 2021-12-17 11:48:14 +00:00
.gitignore wip 2022-03-20 14:48:30 +00:00
Cargo.toml wip 2022-03-20 14:48:30 +00:00
deny.toml update license deny.yaml 2022-03-03 11:09:26 -05:00
flake.lock flake.lock: Update 2022-02-04 16:56:38 +00:00
flake.nix Change rust flake to use default profile 2022-02-04 16:58:58 +00:00
howtosplit.adoc wip 2022-03-20 14:48:30 +00:00
LICENSE Add deny.toml and a script for calling cargo deny 2021-12-24 10:18:16 -08:00
Makefile Fixup readme and add makefile 2021-12-17 23:37:21 +00:00
README.md Add CI to README 2021-12-24 10:18:16 -08:00
testchange wip 2022-03-20 14:48:30 +00:00
testdoc wip 2022-03-20 14:48:30 +00:00
todo.adoc wip 2022-03-20 14:48:30 +00:00
TODO.md update todo 2022-01-18 12:45:10 -05:00

Automerge - NEXT

This is pretty much a ground up rewrite of automerge-rs. The objective of this rewrite is to radically simplify the API. The end goal being to produce a library which is easy to work with both in Rust and from FFI.

How?

The current iteration of automerge-rs is complicated to work with because it adopts the frontend/backend split architecture of the JS implementation. This architecture was necessary due to basic operations on the automerge opset being too slow to perform on the UI thread. Recently @orionz has been able to improve the performance to the point where the split is no longer necessary. This means we can adopt a much simpler mutable API.

The architecture is now built around the OpTree. This is a data structure which supports efficiently inserting new operations and realising values of existing operations. Most interactions with the OpTree are in the form of implementations of TreeQuery - a trait which can be used to traverse the optree and producing state of some kind. User facing operations are exposed on an Automerge object, under the covers these operations typically instantiate some TreeQuery and run it over the OpTree.

Status

We have working code which passes all of the tests in the JS test suite. We're now working on writing a bunch more tests and cleaning up the API.

Development

Running CI

The steps CI will run are all defined in ./scripts/ci. Obviously CI will run everything when you submit a PR, but if you want to run everything locally before you push you can run ./scripts/ci/run to run everything.

Running the JS tests

You will need to have node, yarn, rust and wasm-pack installed.

To build and test the rust library:

  $ cd automerge
  $ cargo test

To build and test the wasm library:

  ## setup
  $ cd automerge-wasm
  $ yarn

  ## building or testing
  $ yarn build
  $ yarn test

  ## without this the js library wont automatically use changes
  $ yarn link

  ## cutting a release or doing benchmarking
  $ yarn release
  $ yarn opt ## or set `wasm-opt = false` in Cargo.toml on supported platforms (not arm64 osx)

And finally to test the js library. This is where most of the tests reside.

  ## setup
  $ cd automerge-js
  $ yarn
  $ yarn link "automerge-wasm"

  ## testing
  $ yarn test

Benchmarking

The edit-trace folder has the main code for running the edit trace benchmarking.