automerge-rs
automerge
Our great sponsors
automerge-rs | automerge | |
---|---|---|
12 | 45 | |
1,018 | 3,081 | |
- | 5.5% | |
9.8 | 9.1 | |
about 1 year ago | 9 days ago | |
JavaScript | JavaScript | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
automerge-rs
-
Automerge 2.0
See also, Autosurgeon (with a 0.3.0 release today), which is a higher level API on top of Automerge for Rust:
I'm building a mobile app with a server backend, and I was looking for resources to build them in an offline-first way (since unlike on the browser, people expect to use apps offline, if they can, such as fitness or habit trackers).
I found the concept of conflict-free relational data types (CRDTS) interesting as it allows you to have fully offline experiences while also having a conflict-free syncing experience. I was looking for some good libraries and came across automerge [0] and yrs [1], but both had some rough APIs as they're primarily low-level Rust libraries that are wrapped by higher-level TypeScript APIs.
Autosurgeon wraps the low-level API of automerge to make it much more ergonomic, closer to the TypeScript experience, but in Rust of course. You can for example use `struct`s which autosurgeon will serialize and deserialize automatically, which is not present in base automerge, which focuses more on string keys and arbitrary values.
I am planning on using this together with Flutter and flutter_rust_bridge [2] in order to use this same Rust library everywhere. In this case, the server just becomes another (albeit more privileged) client.
[0] https://github.com/automerge/automerge-rs
-
Autosurgeon 0.3.0, use conflict-free replicated data types (CRDTs) to build offline-first apps with an easy-to-use API based on Automerge
I found the concept of conflict-free relational data types (CRDTS) interesting as it allows you to have fully offline experiences while also having a conflict-free syncing experience. I was looking for some good libraries and came across automerge and yrs, but both had some rough APIs as they're primarily low-level libraries that are wrapped by TypeScript APIs.
-
What do you recommend for conflict-free replicated data type (CRDT) support in Rust?
Yes, the plan is to use PostgreSQL. I had a discussion with one of the devs in this ticket about the strategy for this.
-
Some key-value storage engines in Rust
In any case, my current plan is to use Automerge for the data handling itself (so I can easily do collaboration), but that crate doesn't handle on-disk storage. For this I need another solution, and a K/V store is well suited for this task.
-
Official /r/rust "Who's Hiring" thread for job-seekers and job-offerers [Rust 1.66]
15 years working in software, Rust has been my favourite language for the last 2. Recently completed a contract to prototype a distributed Tailscale-inspired VPN built on Ink and Switch's CRDT project automerge-rs.
-
You might not need a CRDT (Conflict-free Replicated Data Type)
Complex topic. There's a very easy-to-use CRDT library for Rust (automerge), while there isn't much support for operational transforms (although Aper is new to me, I have to check it out).
-
Testing CRDTs in Rust, From Theory to Practice
I've been watching automerge-rs like a hawk, because they seem to be the only CRDT implementation where you don't need a Mathematics master to understand how to use it. They've been working on a rewrite for the last two years, hopefully they'll do a new release soon.
- Automerge: A JSON-like data structure (a CRDT) that can be modified concurrently
- Automerge: a new foundation for collaboration software [video]
-
Show HN: SyncedStore CRDT – build multiplayer collaborative apps for React / Vue
https://github.com/automerge/automerge-rs
By the way despite that particular repo (@localfirst/state) last being touched 6 months ago, Herb Caudill definitely seems still active in this space (I believe he's been working on other parts of this more recently -- e.g. ideas about authentication), and I think automerge development itself is quite active right now leading up to a 1.0 release which seems fairly imminent, for which a lot of fundamental work has been done, also coordinating with automerge-rs.
automerge
- Automerge CRDT
-
Flutter offline
I'm not aware of any usable CRDT implementations for Dart, my plan is to use the flutter_rust_bridge to make use of automerge v2, which is a full CRDT implementation written in Rust that has the advantage of having a very simple API to work with (basically a key/value store).
- Ask HN: What is new in Algorithms / Data Structures these days?
-
Best local database that works on all platforms including web?
Yes. I asked the devs about ideas for this in this ticket and got an interesting response. It's aimed towards server-side handling, but the same ideas apply to local storage as well.
- Show HN: Pg_CRDT – an experimental CRDT extension for Postgres
-
CRDTs: A Beginner's overview for building a collaborative app
There are a lot of implementations of CRDTs out there. In JavaScript, for instance, we have Y.js (https://github.com/yjs/yjs) and automerge (https://github.com/automerge/automerge). There’s also a Y.js demo (https://demos.yjs.dev/prosemirror/prosemirror.html) that allows you to play around with them and have your own collaborative app running in just a few seconds. All messages are exchange via webRTC and manages the state via CRDTs. This can be a great sandbox to understand how CRDTs work and see.
-
Evan Wallace CRDT Algorithms
Anyone unsure of what a CRDT is, this is the perfect intro: https://www.inkandswitch.com/peritext/
The two most widely used CRDT implementations (combining JSON like general purpose types and rich text editing types) are:
- Automerge https://github.com/automerge/automerge
-
Should I Move From PHP to Node/Express?
For instance, practicing "local first web" using automerge with all it's Distributed Persistence Primitives on CRDT's and Vector Clocks - i.e. when the Browser View is treated like a Database replica, essentially; or adopting a real data mapper that's giving you an API from your database Schema, using Prisma or Hasura... or even implementing a custom codegenereted one, as a babel plugin, on top of TSED and Micro-ORM.
- Maintaining Referential Integrity During Insertions And Deletions
- Muse 2.0
What are some alternatives?
yjs - Shared data types for building collaborative software
rust-libp2p - The Rust Implementation of the libp2p networking stack.
crdt-benchmarks - A collection of CRDT benchmarks
y-crdt - Rust port of Yjs
y-websocket - Websocket Connector for Yjs
SyncedStore - SyncedStore CRDT is an easy-to-use library for building live, collaborative applications that sync automatically.
FluidFramework - Library for building distributed, real-time collaborative web applications
slate-yjs - Yjs binding for Slate