collaborative editing


This is the new site about the Infinote protocol as currently implemented by libinfinity. The Infinote protocol provides real-time collaborative editing of documents with the main focus being on collaborative plain text editing. In the meanwhile there are quite a few solutions out there, but all of them implement a different protocol and thus cannot be used with other tools. Our goal is to provide a flexible yet powerful open framework and clients for various environments that can interoperate with each other.

The Big Picture

The following is a very brief introduction to the Infinote architecture. More detailed information will hopefully be available soon.

Infinote can be separated into several hierarchies. At the highest level there is a classical client/server communication layer. Each server can optionally provide a simple IRC-like chat the clients can subscribe to to easily communicate while working on the server. Each server also has a directory of documents, or directory in short. This is a filesystem-like hierarchical tree which a client can explore pretty much the same way a filesystem can be explored. It can contain subdirectories or notes. A subdirectory again can contain more subdirectories or notes. A note is a basically a document on the server which clients can modify at the same time. Currently, there exist implementations for two type of notes: Notes of type InfChat provide a chat similar to the server-global one and notes of type InfText provide plain text editing. The protocol does not make any restriction on what note types there are. If both client and server support a given note type, then they can edit it.

To edit a note, a client first asks to be subscribed to a session corresponding to the note. A session represents the contents of a note. Upon subscription the server sends the document content to the client, a process called synchronization. After synchronization, a client can view others making changes to the document, but it cannot make changes itself. To do so, it needs to join a user into the session. This user can then make changes.

Once a client is subscribed to a session it does not need the server connection anymore if the communication method allows direct communication to the other participants.

Learn More

The complete Infinote Protocol specification is available (not yet complete, see the old page for further reference - the content will eventually be migrated to this page).

Projects using Infinote