CNChat is a simple end-to-end encrypted chat application. The server runs on Java and can accept any number of clients. The client is written in JavaScript, and is intended to run in the browser.
In order to allow users to create conversations with offline users, the server needs to read from a database of cryptographic keys, which each user provides with two public keys and two wrapped private keys when they register.
The documentation goes in depth on the key exchange protocol used, how to run the ChatServer, and how to run the ChatClient.