othello
collabs
othello | collabs | |
---|---|---|
2 | 2 | |
34 | 244 | |
- | 3.7% | |
10.0 | 6.4 | |
about 8 years ago | about 1 month ago | |
Clojure | TypeScript | |
Eclipse Public License 1.0 | Apache License 2.0 |
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.
othello
-
You don't need a CRDT to build a collaborative experience
I haven’t explored this space in a while, but I have a couple of examples that could be helpful. A Clojure library of mine [0] has a decent README with some background reading on how to use operational transform.
I also reimplemented it in a surprisingly tiny amount of OCaml [1] which was a fun way to learn that language :)
[0]: https://github.com/jahfer/othello
-
WIP implementation of an ActivityPub library in Clojure
It’s been a while since I’ve written Clojure (the bulk of my authoring was nearly a decade ago) so I’m happy to receive any feedback you all might have. Also willing to answer any questions. Cheers!
collabs
-
You don't need a CRDT to build a collaborative experience
> Opaque State: [...] You can’t inspect your model represented by the CRDT without using the CRDT library to decode the blob, and you can’t just store the underlying model state because the CRDT needs its change history also. You’re left with an opaque blob of data in your database.
As someone who works on a CRDT library with opaque state [1], I agree that this is a big barrier to adoption. Features like partial loading, per-paragraph permissions, and accept/reject suggestions seem pretty easy to implement if each text char is just a row in your server's DB, but I would have trouble implementing them on top of e.g. Yjs.
For text editing, one idea is to separate the CRDT "positions" from the text itself, which you can then store as a map (position -> char) in your own data structures. I've made a simple (but inefficient) library along these lines [2] and would be interested in ideas for further development.
[1] Collabs - https://collabs.readthedocs.io
[2] position-strings - https://www.npmjs.com/package/position-strings
- Collabs, a collections library for collaborative data structures
What are some alternatives?
othello-ocaml - Reimplementation of https://github.com/jahfer/othello in OCaml programming language
rich-text - Format for representing rich text documents and changes
ot.js