conclave-team / conclave

CRDT and WebRTC based real-time, peer-to-peer, collaborative text editor
http://conclave.tech
MIT License
700 stars 125 forks source link

Crdt lib #13

Open ghost opened 6 years ago

ghost commented 6 years ago

Thanks for a good write-up of how your system works. Very readable and clear !

I am interested in this area and have used y.js. it's good but not as comprehensive as your system.

I would like to write a golang version of your system. That will allow it to run on mobiles but also in web browser as JavaScript and webassembly. Let me know what you think.

Also I think we can also extend the file system to share and sync files stored in the browser in a db. I guess you might be thinking about that for the future ?

Anyway please let me know ..

rcalfredson commented 5 years ago

Would like please to ask, are you still interested in Golang implementation of technology similar to this?

sunny-b commented 5 years ago

Hey @gedw99 and @rcalfredson, thanks for the interest! I'm not sure about the rest of the team but creating a golang CRDT library definitely sounds interesting. I use golang a lot at my current role and can see the benefits of creating a library in it.

I've played around with CRDTs in Go (https://github.com/sunny-b/go_cart/blob/master/crdt.go) but haven't committed to anything. I'd be interested in hearing your ideas for it.

rcalfredson commented 5 years ago

Thank you for sharing this, @sunny-b! Regarding Golang, the part that interests me the most is the potential of using this language to enable CRDT use on a mobile platform, and in the process, making at least one generic Go library that people could use no matter what functionality they desire.

To give context, I have been working on an application that is derived from your Conclave project, and this is called Daily Page (here is repo and site prototype). This idea uses the DB synching described in the original post above, but, as of yet, no Golang.

Looking forward, I am interested to get a mobile version of it to work as well. That part, honestly, I have not begun to think about very deeply yet, but here are the first steps I would be interested to figure out toward that goal:

  1. To make generic CRDT library in Golang, with no implementation-specific details, which would live in an indepedent repo.
  2. To apply that library to an editor application. As for which editor it would interface with, and even whether an appropriate option exists yet, that is still a mystery. Perhaps to begin with, it would just be some abstract representation of an editor (some sort of API?).

These are my ideas for it, although, to clarify, they are more mid-term or long-term than they are short-term. If there were any part I started right away on it, probably I would go pretty slowly!