I develop a JavaScript based collaborative “bulletin board / pin board” web application. One User can create “sticky notes / post its ” in his app instance in the web browser and shares them with other users like in this mockup:
Note1 is shared with user1 and user2, but note2 is shared with user1 and user3. This means if user2 opens his bulletin board web app instance, he can only load the note 1 that is shared with him or create his own notes that he can then share with other users.
I have the following requirements for my realtime framework:
Every note must be identifiable with an ID and it must be possible to assign users in read/write/owner roles to the note.
It must be possible to load a note into an app instance when the id is porvided, given that the user has the right to access this note, therefore the framework should provide an authentication mechanism.
The content of the note is a String that can be collaboratively modified by using Operational Transforms. If user1 changes the text all other users that have the note loaded get notified and update their view.
It would be good if I have one collaborative Document/(JSON)Object for every sticky note instance.
I started with Google Drive realtime API and this API does basically everything I want except: If I want that several notes ( in googles case they call them realtime documents
) exist in my app I need one HTTP connection for every realtime document instance that is present which I cannot accept because it is not scalable. If I use one realtime document for the whole app => I cannot share single notes in this realtime document with a subset of users because one whole realtime document is always shared with all collaborative users.
Then I tried ShareDB ( former ShareJS ) but this uses node libaries on the client side that I have to include using broserify and I can only use plain JavaScript and not a build tool that gives me a bundle.js as a result.
I also tired TogetherJS which I cannot use because it does not support the manual process of creating and loading realtime objects.
I tired firebase but figgured out that they do not support OT out of the box.
There is also swellrt which works similar to googles realtime API and it is possible to access several realtime objects using one websocket connection but it is in the alpha state and crashes very often.
My Question is if anyone knows another stable ( open source / proprietary ) realtime Framework that I can try next ?