Signal Messager Clone in Rust
Important: The following is an a work-in-progress. Provided for testing and demo purposes only. Feel free to reach out for clarity. Use responsibly.
The following project is based on a (non-vibecoded) browser based messaging app as further described here.
I'm proactively learning rust, but I don't consider myself a rust programmer. I started of creating a basic ui demo of the app. All the data there is hard coded with mock responses. There is no "actual" messaging functionality.
- code: https://github.com/positive-intentions/whatsup
- demo: https://positive-intentions.github.io/whatsup
it soon gets bloated as i start adding more ui components, so i moved them to a separate repo to be imported. As a webdev im used to things like storybook to view and edit components. I asked about my options in a post and it doesnt seem like something is suitable for my needs.
https://www.reddit.com/r/rust/comments/1vg7hox/looking/_for/_storybookforrust
So one thing led to another... and i created my own version of storybook. Its ultimately only for my own benefit and i can easily address nuanced needs like being able to display a tui on a browser.
- code: https://github.com/positive-intentions/whatsup-ui
- demo: https://positive-intentions.github.io/whatsup-ui
The storybook and ui components are basically for my own use. I already have an existing rust project i could use this on. So i made the storybook-like components exportable and reusable for my signal-protocol project.
- code: https://github.com/positive-intentions/signal-protocol
- demo: https://signal.positive-intentions.com/
I've previous put time and effort towards the signal protocol. It should be reasonably tested and documented. The signal protocol alone isn't going to fit the requirements of my messaging app. It needs to be post-quantum secure. I previous worked on a js implementation for ml-kem, so as part of this new approach, I would like to move towards a pure rust approach for ml-kem.
- code: https://github.com/positive-intentions/ml-kem
- demo: https://positive-intentions.github.io/ml-kem
Unlike the signal-protocol which needed more involvement to create, the ml-kem is using dependencies to match the official implementation. I can benefit from audits and reviews from the official implementation. The signal-protocol and ml-kem were ultimately stepping-stones created to lead towards PQXDH.
- code: https://github.com/positive-intentions/pqxdh
- demo: https://positive-intentions.github.io/pqxdh
I think there are countless details I could improve on the cryptography. There is clearly much more needed, but I'm going to "pause" progress on the cryptography in favour of progress on the project features. I was previously investigation options for decentralised storage here. I wanted to try implementing something that would be a suitable storage solution for my project.
(Note: I suspect providers like GitHub, Codeberg and Gitlab might see the way the app works as against their terms-of-service.)
There is much more to improve and consider there for things like encrypting the data at rest, so let's create a cryptography utility library.
- code: https://github.com/positive-intentions/crypto
- demo: https://positive-intentions.github.io/crypto
The main purpose of being able to read/write to git is for "messaging app" functionality. For that i would need to store more structured data that i could query. So i created an abstraction would make it easier to develop with intuitively. i wanted something like an api. I wanted to be able to interact with it using a graph-ql-like experience. I added support for encryption on granular parts of the schema.
This project is far from finished. I would also need to work towards a solution for webrtc messaging, local storage and countless other details. To find out more, check out the following links:
IMPORTANT: AI doesnt replace due-diligence... especially notable on a project like this. None of my work has been audited or reviewed. I'm sharing for transparency on progress. Please use responsibly.
1 reply
That's an unfortunate view. I'm just learning and trying things out.