This repo contains tests for otto
. otto
enables any boring Rust data structure (without Rc
, RefCell
etc.) to be used as a replicated data type. It supports achieving convergence via multiple approaches, including:
- Wrapping with
Crdt<T>
to leverage operation-based CRDT techniques. - Methods
insert_and_rebase_forward
,insert_and_rebase_back
andconverge
to leverage OT techniques with a synchronising server.
It also supports combining these approaches to synchronise a mix of clients using both CRDT and OT techniques.
- Minimal bookkeeping (no timestamps, IDs or similar)
- Rich set of data types (e.g.
RichText
) and operations (e.g.sort
andgroup_by
operations onList<T>
) - Composability (support arbitrary nesting of types, e.g.
List<(u64, List<u8>)>
) - Differential dataflow support
- Performance, sufficient for overhead to be negligible in real-world use (within ~1 OoM of Diamond types)
- Achieve the strongest known useful properties (e.g. convergence and inverse properties)
Data type | Operations supported |
---|---|
Map<K, V> |
insert(K, V) , delete(K) , map_at(K, V::Instr) |
Set<T> |
insert(T) , delete(T) |
List<T> |
insert_at(usize, T) , delete_at(usize) , map_at(usize, T::Instr) |
Register<T> |
set(T) , map(T::Instr) |
(A, B, ...) |
map_a(A::Instr) , map_b(B::Instr) , ... |
#[derive(State)] for arbitrary structs and enums |
map_field_a(A::Instr) , map_field_b(B::Instr) , ... |
bool u8 u16 u32 u64 u128 i8 i16 i32 i64 i128 f32 f64 char usize isize |
- |
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE.txt or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT.txt or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.