ekko-overview.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Ekko — Messaging Without Middlemen</title> 6 <link rel="preconnect" href="https://fonts.googleapis.com"> 7 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 8 <link href="https://fonts.googleapis.com/css2?family=Exo+2:wght@400;600;700&display=swap" rel="stylesheet"> 9 <style> 10 @page { 11 size: A4; 12 margin: 2.5cm 2cm; 13 @bottom-center { 14 content: counter(page); 15 font-size: 10px; 16 color: #666; 17 } 18 } 19 body { 20 font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif; 21 color: #1a1a2e; 22 line-height: 1.65; 23 font-size: 11pt; 24 max-width: 100%; 25 } 26 h1 { 27 font-size: 28pt; 28 color: #0D0D18; 29 text-align: center; 30 margin-top: 3cm; 31 margin-bottom: 0.5cm; 32 letter-spacing: -0.5px; 33 } 34 .subtitle { 35 text-align: center; 36 font-size: 14pt; 37 color: #555; 38 margin-bottom: 2cm; 39 } 40 h2 { 41 font-size: 18pt; 42 color: #0D0D18; 43 border-bottom: 2px solid #0D0D18; 44 padding-bottom: 6px; 45 margin-top: 1.5cm; 46 page-break-after: avoid; 47 } 48 h3 { 49 font-size: 13pt; 50 color: #2a2a4a; 51 margin-top: 0.8cm; 52 page-break-after: avoid; 53 } 54 p, li { 55 font-size: 11pt; 56 margin-bottom: 0.3cm; 57 } 58 ul { 59 padding-left: 1.2cm; 60 } 61 li { 62 margin-bottom: 0.15cm; 63 } 64 strong { 65 color: #0D0D18; 66 } 67 .highlight-box { 68 background: #f0f4ff; 69 border-left: 4px solid #3366cc; 70 padding: 12px 16px; 71 margin: 0.5cm 0; 72 border-radius: 0 6px 6px 0; 73 page-break-inside: avoid; 74 } 75 .highlight-box p { 76 margin: 4px 0; 77 } 78 .warning-box { 79 background: #fff8f0; 80 border-left: 4px solid #cc7733; 81 padding: 12px 16px; 82 margin: 0.5cm 0; 83 border-radius: 0 6px 6px 0; 84 page-break-inside: avoid; 85 } 86 .transport-card { 87 background: #fafafa; 88 border: 1px solid #ddd; 89 border-radius: 8px; 90 padding: 16px 20px; 91 margin: 0.5cm 0; 92 page-break-inside: avoid; 93 } 94 .transport-card h3 { 95 margin-top: 0; 96 color: #0D0D18; 97 font-size: 14pt; 98 } 99 .transport-card .how { 100 font-style: italic; 101 color: #444; 102 font-size: 10pt; 103 margin-top: 0.3cm; 104 } 105 table { 106 width: 100%; 107 border-collapse: collapse; 108 margin: 0.5cm 0; 109 font-size: 10pt; 110 page-break-inside: avoid; 111 } 112 th { 113 background: #0D0D18; 114 color: white; 115 padding: 8px 12px; 116 text-align: left; 117 font-weight: 600; 118 } 119 td { 120 padding: 7px 12px; 121 border-bottom: 1px solid #ddd; 122 } 123 tr:nth-child(even) td { 124 background: #f8f8f8; 125 } 126 .check { color: #22863a; font-weight: bold; } 127 .cross { color: #cb2431; } 128 .partial { color: #b08800; } 129 .cover-features { 130 display: flex; 131 flex-wrap: wrap; 132 gap: 8px; 133 justify-content: center; 134 margin: 1cm 0; 135 } 136 .cover-feature { 137 background: #0D0D18; 138 color: white; 139 padding: 6px 14px; 140 border-radius: 20px; 141 font-size: 9pt; 142 font-weight: 500; 143 } 144 .section-intro { 145 font-size: 12pt; 146 color: #333; 147 font-style: italic; 148 margin-bottom: 0.5cm; 149 } 150 .roadmap-item { 151 background: #f5f0ff; 152 border-left: 4px solid #7c3aed; 153 padding: 12px 16px; 154 margin: 0.5cm 0; 155 border-radius: 0 6px 6px 0; 156 page-break-inside: avoid; 157 } 158 /* Transport diagram */ 159 .diagram-container { 160 text-align: center; 161 margin: 0.8cm 0; 162 page-break-inside: avoid; 163 } 164 .diagram-container svg { 165 max-width: 100%; 166 } 167 .page-break { 168 page-break-before: always; 169 } 170 </style> 171 </head> 172 <body> 173 174 <!-- Cover Page --> 175 <h1>Ekko</h1> 176 <p class="subtitle">Messaging Without Middlemen</p> 177 178 <div class="cover-features"> 179 <span class="cover-feature">No Accounts</span> 180 <span class="cover-feature">No Servers</span> 181 <span class="cover-feature">No Metadata</span> 182 <span class="cover-feature">End-to-End Encrypted</span> 183 <span class="cover-feature">Offline Capable</span> 184 <span class="cover-feature">Cross-Platform</span> 185 <span class="cover-feature">Auditable Security</span> 186 <span class="cover-feature">Mesh Networking</span> 187 </div> 188 189 <!-- Architecture Overview Diagram --> 190 <div class="diagram-container"> 191 <svg viewBox="0 0 600 320" xmlns="http://www.w3.org/2000/svg"> 192 <!-- Background --> 193 <rect width="600" height="320" fill="#fafafa" rx="12"/> 194 195 <!-- Device A --> 196 <rect x="30" y="110" width="100" height="120" rx="12" fill="#0D0D18" stroke="#333" stroke-width="1.5"/> 197 <rect x="40" y="125" width="80" height="75" rx="4" fill="#1a1a3e"/> 198 <text x="80" y="165" text-anchor="middle" fill="#7cabf0" font-size="11" font-weight="600">Ekko</text> 199 <circle cx="80" cy="210" r="6" fill="none" stroke="#555" stroke-width="1.5"/> 200 <text x="80" y="250" text-anchor="middle" fill="#666" font-size="10">Your Device</text> 201 202 <!-- Device B --> 203 <rect x="470" y="110" width="100" height="120" rx="12" fill="#0D0D18" stroke="#333" stroke-width="1.5"/> 204 <rect x="480" y="125" width="80" height="75" rx="4" fill="#1a1a3e"/> 205 <text x="520" y="165" text-anchor="middle" fill="#7cabf0" font-size="11" font-weight="600">Ekko</text> 206 <circle cx="520" cy="210" r="6" fill="none" stroke="#555" stroke-width="1.5"/> 207 <text x="520" y="250" text-anchor="middle" fill="#666" font-size="10">Contact's Device</text> 208 209 <!-- Transport paths --> 210 <!-- BLE --> 211 <path d="M130 140 Q 300 90 470 140" fill="none" stroke="#3b82f6" stroke-width="2" stroke-dasharray="6,3"/> 212 <text x="300" y="100" text-anchor="middle" fill="#3b82f6" font-size="9" font-weight="600">Bluetooth</text> 213 214 <!-- DHT --> 215 <path d="M130 160 Q 300 145 470 160" fill="none" stroke="#22c55e" stroke-width="2"/> 216 <text x="300" y="148" text-anchor="middle" fill="#16a34a" font-size="9" font-weight="600">DHT Network</text> 217 218 <!-- Tor --> 219 <path d="M130 180 Q 300 190 470 180" fill="none" stroke="#a855f7" stroke-width="2"/> 220 <text x="300" y="195" text-anchor="middle" fill="#9333ea" font-size="9" font-weight="600">Tor Onion</text> 221 222 <!-- iroh --> 223 <path d="M130 200 Q 300 225 470 200" fill="none" stroke="#f59e0b" stroke-width="2" stroke-dasharray="4,4"/> 224 <text x="300" y="228" text-anchor="middle" fill="#d97706" font-size="9" font-weight="600">iroh QUIC</text> 225 226 <!-- Mesh --> 227 <path d="M130 220 Q 300 265 470 220" fill="none" stroke="#ef4444" stroke-width="2" stroke-dasharray="2,4"/> 228 <text x="300" y="268" text-anchor="middle" fill="#dc2626" font-size="9" font-weight="600">Mesh Relay</text> 229 230 <!-- Title --> 231 <text x="300" y="30" text-anchor="middle" fill="#0D0D18" font-size="14" font-weight="700">Five Independent Communication Paths</text> 232 <text x="300" y="50" text-anchor="middle" fill="#666" font-size="10">No central server. No single point of failure.</text> 233 234 <!-- Legend --> 235 <text x="300" y="300" text-anchor="middle" fill="#888" font-size="9">If one path is blocked, messages automatically use another.</text> 236 </svg> 237 </div> 238 239 240 <!-- Why Ekko Exists --> 241 <h2 class="page-break">Why Ekko Exists</h2> 242 243 <p>Every mainstream messaging app — WhatsApp, Signal, iMessage, Telegram — relies on central servers operated by a single company. Even when messages are encrypted, the server still knows <em>who</em> you're talking to, <em>when</em>, and <em>how often</em>. If the company goes down, gets hacked, or is compelled by a government to hand over data, your communication is at risk.</p> 244 245 <p>Ekko takes a fundamentally different approach: <strong>there is no server.</strong> Your messages travel through decentralized networks that no single entity controls. Your identity is a cryptographic key stored only on your device — not an email address, not a phone number, not a username tied to any service.</p> 246 247 <div class="highlight-box"> 248 <p><strong>Who is Ekko for?</strong></p> 249 <p>• Journalists and activists operating in sensitive environments</p> 250 <p>• Privacy-conscious individuals who don't want their social graph harvested</p> 251 <p>• Communities with unreliable internet where Bluetooth and mesh networking keep communication alive</p> 252 <p>• Anyone who believes messaging infrastructure shouldn't depend on the goodwill of a corporation</p> 253 </div> 254 255 256 <!-- Features --> 257 <h2>Current Features</h2> 258 259 <h3>Messaging</h3> 260 <ul> 261 <li><strong>Encrypted text messaging</strong> — Every message is encrypted end-to-end with modern cryptography (ChaCha20-Poly1305). There is no Ekko server that could read your messages.</li> 262 <li><strong>File and photo sharing</strong> — Send documents, photos, and videos of any size. Large files are automatically chunked and reassembled.</li> 263 <li><strong>Group conversations</strong> — Create groups, add members, and send encrypted group messages. Group invitations require explicit acceptance.</li> 264 <li><strong>Message reactions</strong> — React to messages with emojis.</li> 265 <li><strong>GIF support</strong> — Built-in GIF picker for expressive conversations.</li> 266 <li><strong>Disappearing messages</strong> — Auto-delete after 5 minutes, 1 hour, 1 day, or 1 week.</li> 267 </ul> 268 269 <h3>Identity and Contacts</h3> 270 <ul> 271 <li><strong>No accounts required</strong> — Your identity is generated on your device as a cryptographic keypair. Nothing to register.</li> 272 <li><strong>QR code contact exchange</strong> — Add contacts by scanning each other's QR codes in person.</li> 273 <li><strong>Nearby discovery</strong> — Find contacts via Bluetooth when you're in the same room.</li> 274 <li><strong>Profile sharing controls</strong> — Choose who sees your profile picture and display name.</li> 275 <li><strong>Contact verification</strong> — Unique fingerprints for verifying identity in person.</li> 276 </ul> 277 278 <h3>Security</h3> 279 <ul> 280 <li><strong>Automatic encryption</strong> — Your database is encrypted with a randomly generated passphrase. Security is the default.</li> 281 <li><strong>Biometric unlock</strong> — Face ID or Touch ID support.</li> 282 <li><strong>Local-only storage</strong> — All data lives on your device. No cloud backup to subpoena.</li> 283 <li><strong>Backup and restore</strong> — Export your encrypted database for safekeeping.</li> 284 </ul> 285 286 <h3>Platforms</h3> 287 <ul> 288 <li>iOS (iPhone and iPad)</li> 289 <li>Android</li> 290 <li>macOS (native desktop app)</li> 291 <li>Windows (in development)</li> 292 </ul> 293 294 295 <!-- Transports --> 296 <h2 class="page-break">How Messages Travel</h2> 297 298 <p class="section-intro">Ekko uses five different communication paths. The app automatically selects the best available path — you don't need to configure anything.</p> 299 300 <!-- Transport Selection Diagram --> 301 <h3>Automatic Transport Selection</h3> 302 <div class="diagram-container"> 303 <svg viewBox="0 0 600 220" xmlns="http://www.w3.org/2000/svg"> 304 <rect width="600" height="220" fill="#fafafa" rx="12"/> 305 306 <!-- Flow --> 307 <rect x="20" y="50" width="110" height="40" rx="8" fill="#0D0D18"/> 308 <text x="75" y="74" text-anchor="middle" fill="white" font-size="10" font-weight="600">You send a message</text> 309 310 <!-- Arrow --> 311 <line x1="130" y1="70" x2="160" y2="70" stroke="#666" stroke-width="1.5" marker-end="url(#arrowhead)"/> 312 313 <!-- Decision --> 314 <polygon points="230,45 300,70 230,95 160,70" fill="#f0f4ff" stroke="#3366cc" stroke-width="1.5"/> 315 <text x="230" y="73" text-anchor="middle" fill="#3366cc" font-size="9" font-weight="600">Contact nearby?</text> 316 317 <!-- Yes path --> 318 <line x1="230" y1="45" x2="230" y2="20" stroke="#22c55e" stroke-width="1.5"/> 319 <text x="240" y="36" fill="#22c55e" font-size="8">Yes</text> 320 <rect x="185" y="5" width="90" height="15" rx="4" fill="#22c55e"/> 321 <text x="230" y="15" text-anchor="middle" fill="white" font-size="8" font-weight="600">Bluetooth (instant)</text> 322 323 <!-- No path --> 324 <line x1="300" y1="70" x2="330" y2="70" stroke="#666" stroke-width="1.5"/> 325 <text x="308" y="64" fill="#cb2431" font-size="8">No</text> 326 327 <!-- Second decision --> 328 <polygon points="400,45 470,70 400,95 330,70" fill="#f5f0ff" stroke="#7c3aed" stroke-width="1.5"/> 329 <text x="400" y="68" text-anchor="middle" fill="#7c3aed" font-size="8" font-weight="600">Anonymous</text> 330 <text x="400" y="78" text-anchor="middle" fill="#7c3aed" font-size="8" font-weight="600">mode?</text> 331 332 <!-- Yes - Tor --> 333 <line x1="400" y1="45" x2="400" y2="20" stroke="#a855f7" stroke-width="1.5"/> 334 <text x="410" y="36" fill="#a855f7" font-size="8">Yes</text> 335 <rect x="355" y="5" width="90" height="15" rx="4" fill="#a855f7"/> 336 <text x="400" y="15" text-anchor="middle" fill="white" font-size="8" font-weight="600">Tor (anonymous)</text> 337 338 <!-- No - multiple --> 339 <line x1="470" y1="70" x2="500" y2="70" stroke="#666" stroke-width="1.5"/> 340 <text x="478" y="64" fill="#cb2431" font-size="8">No</text> 341 342 <!-- All transports --> 343 <rect x="500" y="42" width="85" height="18" rx="4" fill="#22c55e"/> 344 <text x="542" y="54" text-anchor="middle" fill="white" font-size="8" font-weight="600">DHT (30s-5min)</text> 345 346 <rect x="500" y="64" width="85" height="18" rx="4" fill="#f59e0b"/> 347 <text x="542" y="76" text-anchor="middle" fill="white" font-size="8" font-weight="600">iroh (seconds)</text> 348 349 <rect x="500" y="86" width="85" height="18" rx="4" fill="#a855f7"/> 350 <text x="542" y="98" text-anchor="middle" fill="white" font-size="8" font-weight="600">Tor (5-15s setup)</text> 351 352 <!-- Bottom note --> 353 <rect x="60" y="130" width="480" height="70" rx="8" fill="#fff8f0" stroke="#cc7733" stroke-width="1"/> 354 <text x="300" y="150" text-anchor="middle" fill="#0D0D18" font-size="10" font-weight="600">Plus: Mesh Relay via Bluetooth Gossip</text> 355 <text x="300" y="167" text-anchor="middle" fill="#555" font-size="9">When you meet someone via Bluetooth, your devices relay encrypted</text> 356 <text x="300" y="181" text-anchor="middle" fill="#555" font-size="9">messages for anyone — not just your contacts. Every device is a courier.</text> 357 358 <!-- Arrow marker --> 359 <defs> 360 <marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto"> 361 <polygon points="0 0, 8 3, 0 6" fill="#666"/> 362 </marker> 363 </defs> 364 </svg> 365 </div> 366 367 <div class="transport-card"> 368 <h3>Bluetooth (BLE) — Face-to-Face Messaging</h3> 369 <p>When you're physically near someone (within about 30 feet), Ekko sends messages directly over Bluetooth. No internet needed. This is the fastest path and works even if all networks are down.</p> 370 <p class="how">Your phone quietly advertises its presence. When a contact's phone is nearby, the two devices establish an encrypted tunnel and exchange messages instantly. The data never touches the internet.</p> 371 </div> 372 373 <div class="transport-card"> 374 <h3>Internet (DHT) — Decentralized Message Delivery</h3> 375 <p>When you're not nearby, Ekko uses a global peer-to-peer network called a Distributed Hash Table — the same kind of network that powers BitTorrent. Your encrypted messages are placed into this network, and your contacts pick them up when they come online.</p> 376 <p class="how">Think of it like a public bulletin board where messages are written in a code only the intended recipient can read. The bulletin board is maintained by thousands of independent computers worldwide — no single company runs it.</p> 377 </div> 378 379 <div class="transport-card"> 380 <h3>Onion Routing (Tor) — Anonymous Direct Connection</h3> 381 <p>For maximum privacy, Ekko can establish a direct connection through the Tor network. Your messages bounce through multiple encrypted layers so that neither you nor your contact reveal your location or IP address.</p> 382 <p class="how">Each device creates a hidden address (an "onion service") reachable only through the Tor network. Messages travel through three layers of encryption across different countries. Even if someone watches network traffic, they can't tell who's talking to whom.</p> 383 </div> 384 385 <div class="transport-card"> 386 <h3>Quick Relay (iroh) — NAT-Busting P2P</h3> 387 <p>Some networks (corporate firewalls, strict mobile carriers) block direct connections. Ekko uses a modern protocol called QUIC to punch through these barriers. If a direct link isn't possible, messages pass through a free relay — still encrypted end-to-end.</p> 388 <p class="how">Devices exchange endpoint IDs through the decentralized network, then connect directly using a protocol that's faster and more reliable than traditional connections. The relay only helps devices find each other — it never sees your message content.</p> 389 </div> 390 391 <div class="transport-card"> 392 <h3>Mesh Relay (BLE Gossip) — Store and Forward</h3> 393 <p>When two people meet via Bluetooth, their devices can also relay encrypted messages for anyone — not just their own contacts. If one person has internet and the other doesn't, the connected person forwards messages without being able to read them. Every Ekko device acts as a potential courier in a larger mesh network.</p> 394 <p class="how">After a normal Bluetooth exchange, devices enter "gossip mode" and share encrypted blobs meant for other people. The relay person can't decrypt these messages and doesn't even know who the intended recipients are. This extends Ekko's reach into areas with spotty connectivity and helps messages find their way to people you've never met.</p> 395 </div> 396 397 398 <!-- Latency Explanation --> 399 <h2 class="page-break">Why Messages Take Longer Than WhatsApp</h2> 400 401 <p>If you're used to iMessage or WhatsApp, you'll notice that Ekko messages can take a few seconds — or sometimes minutes — to arrive. This is a deliberate trade-off.</p> 402 403 <!-- Latency Comparison Diagram --> 404 <div class="diagram-container"> 405 <svg viewBox="0 0 600 200" xmlns="http://www.w3.org/2000/svg"> 406 <rect width="600" height="200" fill="#fafafa" rx="12"/> 407 <text x="300" y="25" text-anchor="middle" fill="#0D0D18" font-size="13" font-weight="700">Delivery Speed vs. Privacy Trade-off</text> 408 409 <!-- Axes --> 410 <line x1="80" y1="45" x2="80" y2="170" stroke="#ccc" stroke-width="1"/> 411 <line x1="80" y1="170" x2="560" y2="170" stroke="#ccc" stroke-width="1"/> 412 <text x="320" y="192" text-anchor="middle" fill="#888" font-size="9">Privacy Protection</text> 413 <text x="30" y="110" text-anchor="middle" fill="#888" font-size="9" transform="rotate(-90,30,110)">Speed</text> 414 415 <!-- Scale labels --> 416 <text x="100" y="183" fill="#aaa" font-size="8">Low</text> 417 <text x="535" y="183" fill="#aaa" font-size="8">High</text> 418 <text x="72" y="165" fill="#aaa" font-size="8" text-anchor="end">Slow</text> 419 <text x="72" y="55" fill="#aaa" font-size="8" text-anchor="end">Fast</text> 420 421 <!-- Data points --> 422 <!-- iMessage --> 423 <circle cx="120" cy="60" r="18" fill="#007AFF" opacity="0.2" stroke="#007AFF" stroke-width="1.5"/> 424 <text x="120" y="63" text-anchor="middle" fill="#007AFF" font-size="8" font-weight="600">iMessage</text> 425 426 <!-- WhatsApp --> 427 <circle cx="170" cy="65" r="18" fill="#25D366" opacity="0.2" stroke="#25D366" stroke-width="1.5"/> 428 <text x="170" y="68" text-anchor="middle" fill="#1da851" font-size="8" font-weight="600">WhatsApp</text> 429 430 <!-- Signal --> 431 <circle cx="280" cy="70" r="18" fill="#3a76f0" opacity="0.2" stroke="#3a76f0" stroke-width="1.5"/> 432 <text x="280" y="73" text-anchor="middle" fill="#3a76f0" font-size="8" font-weight="600">Signal</text> 433 434 <!-- Ekko BLE --> 435 <circle cx="420" cy="55" r="18" fill="#3b82f6" opacity="0.2" stroke="#3b82f6" stroke-width="1.5"/> 436 <text x="420" y="53" text-anchor="middle" fill="#3b82f6" font-size="7" font-weight="600">Ekko</text> 437 <text x="420" y="62" text-anchor="middle" fill="#3b82f6" font-size="7">(BLE)</text> 438 439 <!-- Ekko iroh --> 440 <circle cx="460" cy="90" r="18" fill="#f59e0b" opacity="0.2" stroke="#f59e0b" stroke-width="1.5"/> 441 <text x="460" y="88" text-anchor="middle" fill="#d97706" font-size="7" font-weight="600">Ekko</text> 442 <text x="460" y="97" text-anchor="middle" fill="#d97706" font-size="7">(iroh)</text> 443 444 <!-- Ekko Tor --> 445 <circle cx="520" cy="110" r="18" fill="#a855f7" opacity="0.2" stroke="#a855f7" stroke-width="1.5"/> 446 <text x="520" y="108" text-anchor="middle" fill="#9333ea" font-size="7" font-weight="600">Ekko</text> 447 <text x="520" y="117" text-anchor="middle" fill="#9333ea" font-size="7">(Tor)</text> 448 449 <!-- Ekko DHT --> 450 <circle cx="490" cy="140" r="18" fill="#22c55e" opacity="0.2" stroke="#22c55e" stroke-width="1.5"/> 451 <text x="490" y="138" text-anchor="middle" fill="#16a34a" font-size="7" font-weight="600">Ekko</text> 452 <text x="490" y="147" text-anchor="middle" fill="#16a34a" font-size="7">(DHT)</text> 453 </svg> 454 </div> 455 456 <h3>Centralized Apps Have a Speed Advantage — at a Cost</h3> 457 458 <p>WhatsApp and iMessage route every message through company-owned servers in data centers with dedicated, always-on connections. When you send a message, it goes to Apple's or Meta's server in milliseconds, and the server pushes it to the recipient instantly.</p> 459 460 <div class="warning-box"> 461 <p><strong>But this speed comes with trade-offs:</strong></p> 462 <p>• The company knows your social graph — who you talk to, when, and how often</p> 463 <p>• Single point of failure — if the server goes down, no one can communicate</p> 464 <p>• Censorship vulnerability — governments can pressure one company to block users</p> 465 <p>• Trust requirement — you must trust the company won't change its privacy policies</p> 466 </div> 467 468 <h3>Ekko Takes a Different Path — Literally</h3> 469 470 <p>Ekko messages travel through decentralized networks with no central coordinator:</p> 471 472 <ul> 473 <li><strong>DHT delivery</strong> involves publishing your encrypted message to a distributed network and waiting for the recipient to poll. Round-trip is typically 30 seconds to a few minutes.</li> 474 <li><strong>Tor connections</strong> route through three independent relays. Establishing the initial circuit takes 5–15 seconds; subsequent messages are near-instant.</li> 475 <li><strong>Bluetooth</strong> is actually <em>faster</em> than centralized apps for nearby contacts — under one second with no internet round-trip.</li> 476 <li><strong>iroh relay</strong> connections are comparable to centralized services once established, but initial setup takes a few seconds.</li> 477 </ul> 478 479 <div class="highlight-box"> 480 <p><strong>The latency is the privacy.</strong></p> 481 <p>The extra time isn't a bug — it's the natural consequence of removing the middleman. Every second of latency represents a layer of privacy protection: no server logs, no relationship mapping, no single point of compromise.</p> 482 <p>For nearby contacts, Bluetooth is faster than any centralized app. For distant contacts, the trade-off is seconds of latency in exchange for communication that no third party can monitor, block, or control.</p> 483 </div> 484 485 486 <!-- Roadmap --> 487 <h2 class="page-break">Development Roadmap</h2> 488 489 <p class="section-intro">Ekko's core is free and fully functional. Planned subscription services enhance speed and reliability without compromising privacy or limiting free users.</p> 490 491 <div class="roadmap-item"> 492 <h3>DHT Subscription Service (Planned)</h3> 493 <p>Currently, Ekko uses the public BitTorrent DHT to store and retrieve messages. This works well but has natural limitations: each entry holds about 950 bytes, messages persist for about 48 hours, and recipients must poll for new messages.</p> 494 <p>The DHT Subscription Service will offer:</p> 495 <ul> 496 <li><strong>Push notifications</strong> — Instant alerts when new messages arrive, instead of polling</li> 497 <li><strong>Extended message retention</strong> — Messages stored longer for devices offline for extended periods</li> 498 <li><strong>Priority publishing</strong> — Faster message propagation across the network</li> 499 <li><strong>Larger payloads</strong> — Bigger messages without chunking overhead</li> 500 </ul> 501 <p>This service will operate as DHT "super-nodes" that participate in the public network while offering premium features. The underlying protocol remains open — non-subscribers continue using the free public DHT.</p> 502 </div> 503 504 <div class="roadmap-item"> 505 <h3>Relay Subscription Service (Planned)</h3> 506 <p>For users who want centralized-app reliability without sacrificing privacy:</p> 507 <ul> 508 <li><strong>Dedicated relay infrastructure</strong> — High-availability relay nodes operated by Ekko</li> 509 <li><strong>Offline message queuing</strong> — Messages stored until the recipient comes online, fully encrypted</li> 510 <li><strong>Faster delivery</strong> — Reduced latency approaching centralized messenger speeds</li> 511 <li><strong>Geographic distribution</strong> — Relay nodes in multiple regions worldwide</li> 512 </ul> 513 <p>The relay uses a <strong>zero-knowledge architecture</strong>: relay nodes store and forward encrypted blobs without any ability to inspect content, identify senders, or correlate recipients. Subscribers authenticate using cryptographic tokens — no personal information required.</p> 514 </div> 515 516 <h3>Pricing Philosophy</h3> 517 <ul> 518 <li><strong>Free tier remains fully functional</strong> — All transports, all features, no artificial limitations</li> 519 <li><strong>Subscriptions enhance speed and reliability</strong> — Not access to basic functionality</li> 520 <li><strong>No data monetization</strong> — Ekko will never sell user data, display ads, or harvest metadata</li> 521 <li><strong>Transparent operation</strong> — Subscription infrastructure will be independently auditable</li> 522 </ul> 523 524 525 <!-- Comparison Table --> 526 <h2 class="page-break">How Ekko Compares</h2> 527 528 <table> 529 <tr> 530 <th>Feature</th> 531 <th>Ekko</th> 532 <th>WhatsApp</th> 533 <th>Signal</th> 534 <th>iMessage</th> 535 </tr> 536 <tr> 537 <td>Requires account</td> 538 <td class="check">No</td> 539 <td class="cross">Yes (phone)</td> 540 <td class="cross">Yes (phone)</td> 541 <td class="cross">Yes (Apple ID)</td> 542 </tr> 543 <tr> 544 <td>Central server</td> 545 <td class="check">None</td> 546 <td class="cross">Meta servers</td> 547 <td class="cross">Signal servers</td> 548 <td class="cross">Apple servers</td> 549 </tr> 550 <tr> 551 <td>End-to-end encryption</td> 552 <td class="check">Yes</td> 553 <td class="check">Yes</td> 554 <td class="check">Yes</td> 555 <td class="check">Yes</td> 556 </tr> 557 <tr> 558 <td>Metadata protection</td> 559 <td class="check">Yes</td> 560 <td class="cross">No</td> 561 <td class="partial">Partial</td> 562 <td class="cross">No</td> 563 </tr> 564 <tr> 565 <td>Works offline</td> 566 <td class="check">Yes (BLE)</td> 567 <td class="cross">No</td> 568 <td class="cross">No</td> 569 <td class="cross">No</td> 570 </tr> 571 <tr> 572 <td>Open source</td> 573 <td class="cross">No</td> 574 <td class="cross">No</td> 575 <td class="check">Yes</td> 576 <td class="cross">No</td> 577 </tr> 578 <tr> 579 <td>Cross-platform</td> 580 <td class="check">iOS, Android, macOS, Windows</td> 581 <td class="check">iOS, Android, Web</td> 582 <td class="check">iOS, Android, Desktop</td> 583 <td class="cross">Apple only</td> 584 </tr> 585 <tr> 586 <td>Mesh networking</td> 587 <td class="check">Yes</td> 588 <td class="cross">No</td> 589 <td class="cross">No</td> 590 <td class="cross">No</td> 591 </tr> 592 <tr> 593 <td>Anonymous routing</td> 594 <td class="check">Yes (Tor)</td> 595 <td class="cross">No</td> 596 <td class="cross">No</td> 597 <td class="cross">No</td> 598 </tr> 599 </table> 600 601 602 <!-- Get Started --> 603 <h2>Get Started</h2> 604 605 <ol> 606 <li>Install Ekko on your device</li> 607 <li>The app generates your identity automatically — no sign-up needed</li> 608 <li>Meet a contact in person and scan each other's QR codes</li> 609 <li>Start messaging — Ekko handles the rest</li> 610 </ol> 611 612 <div class="highlight-box" style="text-align: center; margin-top: 1cm;"> 613 <p style="font-size: 14pt; font-weight: 600; margin: 0;">Your messages. Your device. No middlemen.</p> 614 </div> 615 616 </body> 617 </html>