Rusty Messaging System

Hint: To get yourself familiar with the basics,
start by visiting the room rusty-example with password secret-phrase.


How does it work?

The Rusty Messaging System is an instant messenger. All messages are encrypted client-side, which means that the server does not know the message content (which includes author information).

Messaging is organized in rooms. You can enter one by typing its name — the room-key — in the box above and hit the button next to it.

Since messages are encrypted, you won't be able to read their contents, when entering a room. In the top right of the room page is a field to enter a password. This is used to decrypt messages in the room, as well as to encrypt messages sent by yourself in that room. Be encouraged to play around with that field, to see when messages will be readable, but note that decryption is triggered not on entering a character, but when leaving the field.

In order to chat with a person or a group of persons, you need to agree with them — outside this application — on a room-key as well as a certain password. Make sure to use the same password to allow your peers to read your messages. On the other hand, nothing will prevent you from using a different password. That way, multiple isolated conversations could happen in the same room. There is also nothing that prevents others to participate in your room. Rooms are public, your message contents are not.

Privacy policy

No data is collected from you. No user tracking takes place.

Message contents and author information is only transferred and stored as encrypted blobs. The web server responsible for handling messages doesn't even log IP addresses.

Questions?

Write me an email or leave an issue in the issue tracker.

The project is open source. You can view the source code and participate here.

Technical trivia

Intend of the project is mainly to learn new technologies.

The server is written in Rust and communicates solely via RMP, a custom TCP based message protocol. To let this web client talk with the server, a HTTP↔RMP gateway was necessary. For this I built a very simple HTTP server from scratch, also in Rust. The web client itself uses the Vue.js framework in version 3 and the sjcl cryptography library.

After years of mostly web based development, it is quite an experience to work with things like non-HTTP based communication or a programming language which makes you think in bits & bytes. I encourage everyone, once now and then, to write something completely different from your daily work.

Regards,

Simon