<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Marin Dedić</title>
    <description>The latest articles on Forem by Marin Dedić (@realman78).</description>
    <link>https://forem.com/realman78</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3855913%2F4f8d3ffc-c6cc-430e-a2da-7328bf94fc53.jpeg</url>
      <title>Forem: Marin Dedić</title>
      <link>https://forem.com/realman78</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/realman78"/>
    <language>en</language>
    <item>
      <title>A P2P messenger with dual network modes (Fast + Tor)</title>
      <dc:creator>Marin Dedić</dc:creator>
      <pubDate>Wed, 01 Apr 2026 15:09:19 +0000</pubDate>
      <link>https://forem.com/realman78/a-p2p-messenger-with-dual-network-modes-fast-tor-5g33</link>
      <guid>https://forem.com/realman78/a-p2p-messenger-with-dual-network-modes-fast-tor-5g33</guid>
      <description>&lt;p&gt;Hello dev community,&lt;/p&gt;

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;The app runs in 2 completely isolated modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast mode: relay/DCUtR -&amp;gt; lower latency, calls support&lt;/li&gt;
&lt;li&gt;anonymous mode: Tor message routing -&amp;gt; slower, anonymous&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Messaging works peer-to-peer when possible, but falls back to DHT “offline buckets” when peers are offline. Messages are acknowledged and pruned after delivery.&lt;/p&gt;

&lt;p&gt;Group chat uses: - GossipSub for realtime delivery - control messages over offline buckets - ACK/republish cycles for reliability - key rotation with epoch-based topics - encrypted group metadata stored in DHT records&lt;/p&gt;

&lt;p&gt;Other: - E2E direct chat - file transfer with chunked encrypted streams - 1:1 audio/video calls (fast mode only, WebRTC)&lt;/p&gt;

&lt;p&gt;Some tradeoffs: - Tor mode has noticeable latency - mode switching requires restart - offline delivery is "eventual consistency" - no group calls yet (coming)&lt;/p&gt;

&lt;p&gt;I’d appreciate feedback, that's why I posted this as a beta version!&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/Realman78/Kiyeovo" rel="noopener noreferrer"&gt;https://github.com/Realman78/Kiyeovo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>security</category>
      <category>typescript</category>
      <category>anonymous</category>
    </item>
  </channel>
</rss>
