pg_crdt
yjs
pg_crdt | yjs | |
---|---|---|
3 | 53 | |
366 | 15,225 | |
0.0% | 3.1% | |
10.0 | 8.6 | |
over 1 year ago | 5 days ago | |
Rust | JavaScript | |
PostgreSQL License | MIT |
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
yjs
- Show HN: Collaborate on your YC Application with CRDT-powered forms
-
Making CRDTs 98% More Efficient
One idea is just to use fewer random bits in peerIDs. Yjs (https://docs.yjs.dev/) gets away with just 32 random bits. If you compromise and use 64 random bits, then even a very popular doc with 1 million lifetime peerIDs will have a < 10^-7 lifetime probability of collision.
-
An Interactive Intro to CRDTs
I've seen it come up often in collaborative text editors.
Also see: https://github.com/yjs/yjs
-
JSON Schema Store
You are absolutely right that XML is better for document structures.
My current theory is that Yjs [0] is the new JSON+XML. It gives you both JSON and XML types in one nested structure, all with conflict free merging via incremental updates.
Also, you note the issue with XML and overlapping inline markup. Yjs has an answer for that with its text type, you can apply attributes (for styling or anything else) via arbatary ranges. They can overlap.
Obviously I'm being a little hypabolic suggesting it will replace JSON, the beauty of JSON is is simplicity, but for many systems building on Yjs or similar CRDT based serialisation systems is the future.
https://github.com/yjs/yjs/
-
Launch HN: Tiptap (YC S23) β Toolkit for developing collaborative editors
Note: https://github.com/yjs/yjs for collaborative "document edition, and user cursors"; has WebRTC, web socket, matrix.org backend
-
Wormholers, what can CCP and wormholers do to improve J-Space?
CCP needs to revamp proto anyway, due to recent exploits... practically, nothing really prevents 'em from using some sort of CRDT's to make the state of the sig view eventually consistent (yjs lib, if we're speaking frontendian).
-
How to use Yjs with Ruby on Rails?
Yjs framework: Because it is a CRDT implementation which provides collaborative editing and offline-first capability.
-
πππ EweserDB, the user-owned database πππ
No problem. The database CRUD features are just helpers as an abstraction on top of yjs: https://docs.yjs.dev/. Eweser adds schemas in the form of typescript types to make using it simpler, more structured, and interoperability easier.
- Ask HN: What is new in Algorithms / Data Structures these days?
- How does Google docs send the changes done by other users in real-time?
What are some alternatives?
electric - Local-first sync layer for web and mobile apps. Build reactive, realtime, local-first apps directly on Postgres.
automerge - A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.
electric_dart - A Dart implementation for Electric (electric-sql.com).
liveblocks - Liveblocks is a platform to ship collaborative features like comments, notifications, text editors in minutes instead of months.
fugue-bench - Fugue list CRDT implementations and benchmarks
automerge-rs - Rust implementation of automerge [Moved to: https://github.com/automerge/automerge]
multiversion-concurrency-contro
crdt-woot - Implementation of collaborative editing algorithm CRDT WOOT.
crdt-benchmarks - A collection of CRDT benchmarks
milkdown - πΌ Plugin driven WYSIWYG markdown editor framework.
yjs-pg-test - Test combining yjs and PostgreSQL using plv8 and plv8ify
MobX - Simple, scalable state management.