Projects

opencord

Personal
Rust
Files
README

Opencord

Opencord is a Windows-first native peer-to-peer community app. Messages are stored locally in SQLite and missing history is synchronized directly from other group members when they reconnect.

[!WARNING] This is an unaudited prototype, not production cryptographic software. Read the security model before using it for sensitive data.

What works

  • Native Rust desktop UI with no browser runtime
  • Four persistent themes, accent colors, compact/cozy layouts, UI scaling, and editable peer profiles
  • Channel search, quick switching, per-channel drafts, reply/copy actions, and responsive member panels
  • Encrypted groups, text channels, messages, and attachments (up to 8 MiB)
  • Signed invite capabilities (opencord://join/...)
  • Automatic LAN discovery with mDNS
  • Direct QUIC connections by UDP address, remembered peer endpoints, and best-effort UPnP port mapping
  • Signed, per-author event logs with automatic missing-range reconciliation
  • Full history bootstrap for a new member from any online peer holding it
  • Peer-to-peer Opus voice calls with audio active only while joined
  • Peer-to-peer screen sharing with an idle-until-enabled capture worker
  • Local peer blocking
  • SQLite WAL storage containing ciphertext event bodies

Why this stack

Rust keeps the network, storage, audio, cryptography, and UI in one native process with predictable resource use. egui renders through wgpu on Windows; SQLite provides durable local indexing; Quinn carries direct QUIC sessions; CPAL and Opus provide compact audio. App-layer content uses XChaCha20-Poly1305, while persistent identities and events use Ed25519.

WebRTC is not embedded in this prototype: Opus over QUIC keeps the binary and runtime smaller. A future ICE adapter can improve NAT traversal without changing the event or identity model.

See architecture and wire protocol for the design details.

Build on Windows

Prerequisites:

  • Rust 1.95 or newer with the MSVC toolchain
  • Visual Studio 2022 Build Tools with Desktop development with C++

From a Developer PowerShell:

cargo test --all-targets
cargo run --release

The optimized executable is written to target\release\opencord.exe. Profile data defaults to %LOCALAPPDATA%\CodyKoInABox\Opencord.

Windows Firewall must allow inbound and outbound UDP for direct peers. The default listen address is 0.0.0.0:39217.

Use it

  1. Start Opencord and create a group with the + button.
  2. Choose Invite, copy the capability, and send it privately to a peer.
  3. The peer uses the arrow button to import it. On the same LAN, discovery and synchronization are automatic. For a reachable internet peer, use Connect with its public UDP address if the invite endpoint is stale.
  4. Leave at least one history-holding peer online while a new member rebuilds.

An invite contains the group decryption capability and grants access to the history held by connected members. Treat it like a password.

To run two isolated profiles on one computer:

.\target\release\opencord.exe --data-dir .demo\alice --listen 127.0.0.1:40101 --name Alice --no-discovery
.\target\release\opencord.exe --data-dir .demo\bob   --listen 127.0.0.1:40102 --name Bob   --no-discovery --connect 127.0.0.1:40101

Create the group on Alice, export its invite, and import it on Bob. Direct connection alone does not reveal groups; both peers must possess the invite.

Run opencord.exe --help for every command-line option.

Keyboard shortcuts

  • Ctrl+K: quick channel switcher
  • Ctrl+F: search the current channel
  • Ctrl+,: settings
  • Alt+Up / Alt+Down: previous or next channel
  • Escape: close search or the active dialog

Connectivity model

Peers behind incompatible carrier-grade NAT cannot always establish a new connection without a reachable peer, manual port forwarding, or a relay. Since Opencord connects peers directly, it does not currently include hosted rendezvous, STUN, TURN, or relay infrastructure. Offline delivery is completed when another replica holding the message comes online.

Development checks

cargo fmt --all -- --check
cargo clippy --all-targets -- -D warnings
cargo test --all-targets
cargo build --release --locked

The integration suite starts two real QUIC nodes and verifies history rebuild, live exchange, encrypted channel replication, voice packets, and screen frames.

Current Windows baseline

The optimized demo profile on the development machine reached a usable window in about 0.57 seconds, held at 0% measured idle CPU, used 157.6 MiB resident RAM, and produced a 16.8 MiB executable. The Vulkan graphics driver is the largest resident cost; DX12 and direct OpenGL were both worse on this machine. These are machine-specific prototype measurements and a baseline for further UI-renderer work, not universal guarantees.

Created by CodyKoInABox and licensed under AGPL-3.0-or-later.