What
Help improve the collaborative features of Mogan, in particular add user cursors to the live documents and improve performance or add peer-to-peer infrastructure to the live document handling.
Why
Mogan/TeXmacs has already collaborative capabilities. See e.g. the support in $TEXMACS_PATH/progs/server
and $TEXMACS_PATH/progs/client
.
We support live documents, chat rooms and shared file server. However these features are still experimental and need testing, some more security handling (authentication, etc…), etc…
and they depends on a central server (another TeXmacs instance) which should be publicly visible on the Internet (i.e. have its own IP address).
How
Various directions are possible:
-
Better UI: the current UI does not give much feedback to the user, especially wrt. problems in the connection to the server, successful connection, liveliness of the server, etc…
-
Implement user cursors in live documents : a users should be able to see where other users are actively working.
-
Investigate performance issue in the current implementation and improve on them. Also investigate other possible mechanism of synchronisation, e.g. the one used in
Typst
or other collaborative solutions. -
Develop some server-side architecture and relative monitoring to run the Mogan server in a cloud solution like Amazon AWS or similar.
-
Alternatively (and much better than the central server solution), investigate the possibility to create a peer-to-peer network using modern internet technologies where clients can connect together and sync their content without the presence of a centralised authority. Some references:
- the libp2p library (bloated, produces >100Mb executables)
- the libdatachannel C++ library. lightweight, needs a signalling server to exchange connection information (which seems an acceptable tradeoff) and then uses WebRTC to run a p2p channel
- a serverless solution for signalling https://medium.com/collaborne-engineering/serverless-yjs-72d0a84326a2
- an intro to WebRTC channels and signalling: https://blog.devgenius.io/webrtc-chat-application-772539ae97b7
-
holepunch.io a complete p2p solution (but without C++ bindings), see
hyperbeam
for a simple tunnelling p2p app. - p2psc a p2p socket creation library in C++
- p2p-socket a Node program which establish p2p connection over local TCP ports