pg_crdt
text-diff
pg_crdt | text-diff | |
---|---|---|
3 | 2 | |
366 | 6 | |
0.0% | - | |
10.0 | 10.0 | |
over 1 year ago | over 1 year ago | |
Rust | Python | |
PostgreSQL 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.
pg_crdt
-
CRDT-richtext: Rust implementation of Peritext and Fugue
Cool, I'll check out your repos. Supabase also as Postgres CRDT (https://github.com/supabase/pg_crdt).
But, in general, I think searching in and across documents and database storage is going to a thorny problem even with existing, hyper-optimized CRDT algorithms. For example, if you just store your Yjs document as a binary blob in a Postgres column, Postgres becomes the bottleneck and all the fancy range-tree or b-tree optimizations are no longer that helpful on the server. Plus, it'd be great to have an document edit just be a tiny insert into the database that can be streamed to other clients rather than a big row update.
This all may because the focus of CRDTs seems to be rooted in a fully decentralized, P2P system but many developers want collaborative text editing in a more traditional client-server model.
-
A Yjs provider that uses Supabase Realtime for synchronization. Feedback / suggestions welcome.
I'm part of the Supabase Realtime team. Thanks for doing this! We've been wanting to do it internally ever since launching Broadcast. We've also been experimenting with what a very integrated CRDT solution looks like (e.g. pg_crdt).
-
Show HN: Pg_CRDT – an experimental CRDT extension for Postgres
This is an experimental extension for CRDTs, `pg_crdt`[0]. It supports Yjs/Yrs and Automerge.
The linked blog post describes how we're thinking about this extension in a Supabase context. Ideally this "Show HN" generates some discussion/interest, both here and in the github discussions [1].
I want to emphasise this part from the blog post[2]: "pg_crdt has not been released onto the Supabase platform (and it may never be). We’re considering many options for offline-sync/support and, while CRDTs will undoubtedly factor in, we’re not sure if this is the right approach."
[0] GitHub repo: https://github.com/supabase/pg_crdt
[1] Discussions: https://github.com/supabase/pg_crdt/discussions
[2] Blog post: https://supabase.com/blog/postgres-crdt
text-diff
-
CRDT-richtext: Rust implementation of Peritext and Fugue
https://github.com/samsquire/multiversion-concurrency-contro...
And I implemented a 3 way text diff with myers algorithm based on https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm...
https://github.com/samsquire/text-diff
I implemented an eventually consistent mesh protocol that uses timestamps to provide last write wins
-
Visualizing Diffs The Myers difference algorithm
I implemented a three direction diff at https://github.com/samsquire/text-diff
Conflict detection is fairly hard to get right, I can detect overlapping ranges to colour the output green or red.
Using this guide https://blog.jcoglan.com/2017/02/12/the-myers-diff-algorithm...
What are some alternatives?
electric - Local-first sync layer for web and mobile apps. Build reactive, realtime, local-first apps directly on Postgres.
electric_dart - A Dart implementation for Electric (electric-sql.com).
fugue-bench - Fugue list CRDT implementations and benchmarks
multiversion-concurrency-contro
yjs-pg-test - Test combining yjs and PostgreSQL using plv8 and plv8ify
crdt-benchmarks - A collection of CRDT benchmarks
yjs-sqlite-test - Test combining yjs and sqlite wasm
eventually-consistent-mesh - an attempt to create an asynchronously replicated append only eventually consistent data protocol