This site describes the Infinote protocol as currently implemented by libinfinity. It 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.
See the in-progress Infinote Protocol Specification for details on how Infinote and libinfinity work internally.