frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: A P2P messenger with dual network modes (Fast and Tor)

https://github.com/Realman78/Kiyeovo/
23•Realman78•7h ago
Hello HN,

I have been working on a desktop P2P messenger called Kiyeovo for the last ~8 months, and I just published its beta version.

Quick backstory: It started out as a CLI application for my Graduate Thesis, where I tried to make the most secure and private messenger application possible. Then, I transformed it into a desktop application, gave it "clearnet" support and added a bunch of features.

Short summary:

The app runs in 2 completely isolated modes:

- fast mode: relay/DCUtR -> lower latency, calls support

- anonymous mode: Tor message routing -> slower, anonymous

These modes use different protocol IDs, DHT namespaces, pubsub topics and storage scopes so there’s no data crossover between them.

Messaging works peer-to-peer when both parties are online, but falls back to DHT "offline buckets" when one of them is not. To ensure robustness, messages are ACK-ed and deleted after being read.

Group chats use GossipSub for realtime messaging. Group messages are also saved to offline buckets in order for offline users to be able to read them upon logging in. Kick/Join/Leave events are also propagated using the DHT. Group metadata and all offline data is of course encrypted.

Other features: Chats are E2E, file sharing is supported, 1:1 audio/video calls are supported (only in fast mode though, using WebRTC)

Tradeoffs: Tor has noticeable latency, offline delivery is not immediately guaranteed, but rather "eventually consistent"; beta version does not have group calls yet.

I’d appreciate feedback, that's why I posted this as a beta version

Repo: https://github.com/Realman78/Kiyeovo

Comments

kopitev174•6h ago
I worked on a p2p group chat app for a short time (no central server, same as this), but the group updates were a real problem. how do they get distributed?
Realman78•5h ago
The group creator distributes the updates to each group member individually (each pair of users has their own buckets). Of course, if the member is not online for a long time, the update does not just get lost, it gets republished and will continue to republish until the member has read the update. Did I answer your question?
blamestross•57m ago
I don't recommend DHTs with public participants being made from scratch. Use mainline bittorrent DHT instead. Small networks are really easy to eclipse and censor.

DHTs of trusted participants are great.

noman-land•14m ago
How does one find large DHTs? Is there anything connecting them all?
kvisner•24m ago
So most messaging apps rely on a phone number or centralized server to provide a means of making atleast the initial connection. In a purely P2P messaging system, how do I, as a user, find the other person I might want to talk to?
blamestross•1m ago
I'm a fan of "face to face mutual qr code key exchange." I should implement that someday.