# real-time collaborative editing software
Re-turning to this real-time collaborative editing dive, visiting different softwares, histories and environments.

__PUBLISH__


# Desktop based & peer-to-peer

## Hyperpad-desktop
Using Electron, which makes it cross-platform accessible.

>>> p2p ??

## Gobby (!)
https://gobby.github.io/
"Gobby is a collaborative editor supporting multiple documents in one session and a multi-user chat."

https://www.infinote.org/ (infinote protocol)
https://github.com/gobby/libinfinity (infinotes, a stand-alone infinote server)
https://pypi.org/project/Py-Infinote/ (python library speaking infinote)
https://github.com/sveith/jinfinote (javascript implementation of infinote)

gobby/testing,now 0.6.0~20170204~e5c2d1-3 amd64 [installed]
  infinote-based collaborative text editor

infinoted/testing 0.7.1-1 amd64
  dedicated server for infinote-based collaborative editing

tiny note: tried to install it on a mac os (failed eventually after 30 min install time) and brew overwrote my prev python + other installations. :| luckily nothing broke! but it was a tiny moment of suprise... yes.... shit! my mistake for not installing it in a venv :S hope everything is oke again now! yep all good :] not sure though if you can install it in a venv, as it is an apt package. ah ok, i installed it through brew, so it's very possible that brew messed up. but very curious to try on a linux machine! haha, great merge of sentences ;). :P git merge, real-time syncing! ;) great document mb btw! i love the insertion of chatty notes :D ahah that's definitely something i can help with :O hehe ! We have a great color match as well atm. ;) so 90s, i use to love pink and purple combinations. hahaha yes all we need is another light green shade and a Patagonia logo in a top right corner

Using infinoted
https://github.com/gobby/gobby/wiki/Dedicated%20Server download links and plugins
https://www.mankier.com/1/infinoted-0.7 man page
http://techmonks.net/working-together-on-text-and-source-code-with-gobby-and-infinoted/ tutorial

Setup a Gobby server
1. install infinoted
2. create the file /etc/xdg/infinoted.conf and add the following settings:

[infinoted]
security-policy=require-tls
certificate-file=/etc/xdg/infinoted.cert
key-file=/etc/xdg/infinoted.key
password=YOURPASSWORDHERE
autosave-interval=5
root-directory=/var/data/gobby/data
sync-directory=/var/data/gobby/export
sync-interval=120

3. run infinoted with --create-certificate --create-key to generate the certificate and key ($ infinoted --create-certificate --create-key)
4. start infinoted on every restart of the server. Edit the file /etc/rc.local and add this:

# starts up infinoted (gobby server)
# configuration file is in /etc/xdg/infinoted.conf
infinoted &

5. restart the server

# Browser based & peer-to-peer

## Conclave
https://conclave-team.github.io/conclave-site/
"A private and secure real-time collaborative text editor"
"a peer-to-peer, real-time, collaborative text editor built from scratch in JavaScript."
Great documentation about Conflict-Free Replicated Data Type (CRDT) and their peer-to-peer architecture!

>>> not maintained anymore

## IPFS & pubsub 
Pubsub is a decentralized "pattern" (this is how they call it) that can be used for 
>>> tiny note: have tried it and it is not ideal, but it is interesting in terms of streaming text without any authorship indication

Their next blogpost: "Decentralized Real-Time Collaborative Documents - Conflict-free editing in the browser using js-ipfs and CRDTs"
https://blog.ipfs.io/30-js-ipfs-crdts.md
"In this 10-minute video [ https://www.youtube.com/watch?v=-kdx8rJd8rQ ] I show you how we can use the js-ipfs library and conflict-free replicated data types (CRDTs) to build a simple text editor that allows several peers to collaborate in real-time. The resulting interactions between the nodes are conflict-free, support offline use, and allow nodes to come in and out of the network while continuously converging data to a single state in all the nodes."

PubSub
pubsub = publish & subscribe pattern 
https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
"This pattern provides greater network scalabilityanda more dynamic network topology, with a resulting decreased flexibility to modify the publisher and the structure of the published data."

## Dat multiwriter
https://blog.datproject.org/2018/05/14/dat-shopping-list/
a first step, but in order to sync with other writers through the browser, the application needs to connect to a node.js server elsewhere (called the gateway). 

https://ar.al/2018/08/04/multiwriter-dat-could-power-the-next-web/

>>> in development

# Browser based & single server 

## Etherpad lite
"In 2009, Google started beta testing Google Wave, a real-time collaboration environment which Google hoped would eventually displace email and instant messaging.[citation needed] EtherPad was acquired by Google, which allocated the EtherPad team to work within the Wave project. However, Google announced in August 2010 on its blog[7] that it had decided to stop developing Wave as a standalone project, due to insufficient user adoption. After Google released the abandoned EtherPad source code as open source in December 2009, the community took over its development and produced a complete rewrite named Etherpad lite, which is written entirely in JavaScript and built on top of node.js." https://en.wikipedia.org/wiki/Collaborative_real-time_editor

A list of active public SSL secured pad servers: <https://github.com/ether/etherpad-lite/wiki/Sites-that-run-Etherpad-Lite>

## CodiMD
<https://demo.codimd.org/> demo server
<https://hackmd.io/> CodiMD is a (recent -- March 2019) fork of HackMD, <https://github.com/codimd/server/blob/master/docs/history.md> documentation of the history of this project 
<https://github.com/codimd/cli> a CLI tool for CodiMD, with options to export to html/pdf/slides/md

## textb
<https://textb.org/t/ymh6lj10lo/>
* markdown support
* python/django based

by <https://r-w-x.org/>

## hackmd
https://hackmd.io/

## PeerPad
https://peerpad.net
https://github.com/peer-base/peer-pad

"PeerPad is a decentralized editor that allows concurrent writing of text. Besides making live changes to a given document, it allows read-only nodes to follow the changes in real-time. It also allows you to publish a self-contained snapshot of the document to IPFS."

## ShareDB
https://github.com/dennisdebel/artce
nodejs try out, using operational transforms for conflict free collaborative editing. (Not production ready).

## CKEditor 5
https://ckeditor.com/blog/Lessons-learned-from-creating-a-rich-text-editor-with-real-time-collaboration/

## Convergence
https://convergence.io/

# Document-based collaborative editing?
The examples are pretty interesting. Specially the offline writing and online syncing combination is a promising feature...

But all the text stays in the browser? It would be great to store local copies of the text directly, preferrably as files.

Plus, the NodeJS javascript heaviness is not so attractive.

Is there software that works p2p, allows for discovery in your current local network, and saves local copies of the document as (plain) text documents? 

https://en.wikipedia.org/wiki/Collaborative_real-time_editor
https://www.youtube.com/watch?time_continue=13&v=qI8r8D46JOY - Doug Engelbart "Mother of All Demos" (1968) presenting collaborative editing 
http://www.realjabber.org/ - real time editing over XMPP
https://linux.die.net/man/1/ytalk - ytalk real-time & multi-user chat version of talk
http://www.realtimetext.org/ - RealTimeText.org is a website to stimulate knowledge in the field of Real-Time Text (RTT)

http://www.realtimetext.org/sites/default/files/images/FastText-logo_outline_300.png Fast Text logo ;)

# Links 
* <https://juretriglav.si/open-source-collaborative-text-editors/> review article mainly about CKEditor 5 & Atlaskit Editor (by Jure Triglav, May 2019)
* <https://github.com/JefMari/awesome-wysiwyg> listings of web real-time collaborative rich text editing software (same author as article above)
* <https://www.inkandswitch.com/local-first.html> an article on local-first software, mostly covering collaborative editing tools, but also others (such as pixelpusher)
* <https://diversions.constantvzw.org/wiki/index.php?title=Eventual_Consistency> article by Michael Murtaugh in the DiVersions publication, on the underlying algorithms/mechanisms of Etherpad and "diffractive technotexts"

Technotexts: When a literary work interrogates the inscription technology that produces it, it mobilizes relexive loops between its imaginative world and the material apparatus embodying that creation as a physical presence. - N. Katherine Hayles, Writing Machines (MIT press, 2002), 25.