-
released this
2026-06-22 20:28:56 +00:00 | 107 commits to main since this releasePeerSpeak v0.4.0 — Game Presence, inline audio & a bug-sweep hardening pass.
⚠️ BREAKING (network): the gossip protocol bumps to v3. v0.4.0 peers cannot
see or hear v0.3.x peers — everyone in a room must update together.✨ Features
- Game presence — opt-in (default off). Detects the game you're playing
(Steam + running-process scan), shows a "Playing …" line on your roster card
for friends in the room, and sets a per-game call background. Broadcast over
the gossip presence plane; clears when you quit the game. - Inline chat audio player — play voice/audio attachments inline, with
duration, right in the chat. - Redesigned app icon.
🐛 Fixes
- Empty roster on join — a peer that announced before the room-joined event
could be wiped from the roster (worse with echo cancellation on). Room state
is now reset at join initiation, so early peers survive. - Bug-sweep hardening (adversarial review): PipeWire capture-chunk clamp
(no realtime-callback abort); reserve-before-publish on PipeWire playout (no
fill-gauge wedge); game-detector spawn no longer busy-loops on a closed
channel; collision-free recording paths; bounded Windows registry reads. - Rejoin from Recents now keys retained peers by room topic, so a
member-issued ticket rejoins correctly. - Echo-cancel isolation — virtual nodes are per-process, so enabling AEC in
one instance can't tear down another instance's call. - Recording disk-full — a failed write stops recording cleanly once, with a
UI error, instead of looping silently. - File-transfer serve connection stays alive until the fetcher has the bytes;
chat attachment saves use an async dialog.
Tests: 407 lib tests pass · clippy --all-targets clean · release build green.
Downloads
- Game presence — opt-in (default off). Detects the game you're playing