Write TOgether is a real-time collaborative text editor made in PoliTO (Politecnico di Torino) as project of the course System Programming (Programmazione di Sistema). It is inspired by Conclave and Overleaf.
cd scripts/
./install_dependencies.sh
- [Optional] If you want to use the server not only on localhost:
- Change the password in the SQL script and in the code.
- Replace certificate and private key for the server. Read the instructions.
- Start MySQL and create the database using the SQL script.
- Run the server (on port 5000 and with saving period 5 seconds):
cd scripts/ ./run.sh server 5000 5000
- Run these commands:
cd scripts/ ./install.sh
- Launch the application (connect to localhost on port 5000).
- Client-server architecture
- Each user has a profile (username, name, surname, email, icon)
- Authentication with username and password
- Client can sign up and log in
- Client can edit their profile
- Client can create or open documents
- Clients can collaboratively edit documents (coherence guaranteed)
- Server automatically saves the documents
- Client shows number and identity of users editing a document
- Client shows the cursors of the other users
- Client can highlight the text with colors according to the author
- Export document to PDF
- Format of characters (bold, italic, underline)
- Undo, Redo, Cut, Copy, Paste (with menu entries, toolbar and shortcuts)
- Invite to collaboration (by means of URI)
- Multiple sessions of same user (e.g. a user can log in from different devices)
- Multiple open documents (i.e. a user can open more documents at the same time)
- Remote cursor update also for position changed (not just insert/erase as in Conclave)
- Encrypted connection with TLS
- List of both online and offline users with access to the document (possibility of text coloring also for offline users)
- View full profile of other users
- Filters for document list
- Word and char count
- Both client and server are portable and multi-platform, being written with the powerful Qt framework. They have been tested on Ubuntu 18.04, Ubuntu 20.04 and Windows 10.
- The application protocol is designed ad hoc and is built on top of TCP. Currently it is textual and uses JSON. Have a look at the documentation here.
- The client uses 1 thread.
- The server uses an ideal number of threads based on the number of cores. The sockets are distributed uniformly among the threads.
- The server uses MySQL to save periodically the open documents. All the queries are prepared as prepared statements to guarantee protection against SQL injection.
- The server does not store password as plain-text, it stores hashes computed using Crypto++.
- Both client and server use UTF-16 encoding.
- Document naming with author and document name (two-level directory)