CI / check (push) Successful in 2m54s
Local-only changes since 0.6.4 (no wire change; PROTO planes unchanged), so this is a PATCH bump per VERSIONING.md. Ships the low-latency screen-share live-edge fix (4bfc184), which landed three hours after the v0.6.4 tag and was therefore never released. Also adds the missing CHANGELOG entry for the participant "Advanced audio" foldout (26d6600), which shipped without one. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
10 KiB
10 KiB
Changelog
All notable changes to PeerSpeak are documented here.
[Unreleased]
[0.6.5] — 2026-07-19
Added
- Chat message sounds. Successful outgoing messages and admitted incoming messages now have distinct notification chimes, each with its own enable toggle and optional custom WAV path in Notifications settings.
- Contact presence sounds. The home-screen contacts list now announces a contact becoming online or offline. Initial online contacts are announced; initial offline results stay silent. Both events have independent toggles and optional custom WAV paths.
- Notification sound browser. Every notification event now has a native Browse button for choosing a custom WAV instead of typing its path manually.
Changed
- Tidier per-participant audio controls. The equalizer bands and noise gate for each participant now live behind an "Advanced audio" foldout instead of being expanded all the time, so a call with several people no longer fills the panel with sliders. The controls themselves are unchanged.
Fixed
- Low-latency screen sharing stays near the live edge again. mpv's timestamp pacing could let stale frames accumulate across the reliable PixelPass transport until a share was 7–10 seconds behind. Low-latency mode now presents decoded frames immediately; Smooth mode retains timestamp pacing when keeping shared-video audio and video synchronized matters more.
0.6.4 — 2026-07-18
Added
- Chat now tells you when a message didn't send. A message that couldn't go out — because you weren't in a room, or the broadcast failed — is marked "⚠ Not sent" with a Retry button, instead of sitting in the transcript looking delivered. A successful send shows nothing (PeerSpeak has no delivery/read receipts, so anything else would be a false promise).
- Fast typing no longer loses messages. When you fire off a quick burst, messages past the first few are held as "queued…" and sent a moment apart, matching the rate other people's clients accept. Previously a fast burst could look sent on your end while some messages silently never reached the room.
Changed
- Tidier music playlist drawer. The slide-out playlist no longer repeats the play/skip controls already on the player bar, and the track list now grows to fill the drawer instead of being boxed into a short scroll area, so you can see more of your playlist at once.
- Safer chat under the hood. A round of chat hardening tightened how incoming messages, display names, links, and file/image attachments are validated and bounded, so a malformed or hostile message from a peer can't spoof a name, replay, flood, or run the app out of memory. No change to how normal chat looks or works.
Fixed
- Burst packet loss no longer splices the wrong audio into the gap. Loss concealment used Opus in-band FEC even when the next packet to arrive wasn't the one immediately after the gap, so losing several packets in a row could briefly play a later frame's audio in the wrong position. FEC now only reconstructs a gap from its immediate successor packet; larger gaps are concealed normally.
- A failed network restart no longer silently kills the app. Changing the network mode (or regenerating your identity) rebuilds the connection stack; if that rebuild failed — rare, but possible when the local socket can't bind — PeerSpeak kept its window open but silently stopped responding to every command. It now falls back to your previous network settings and says so, and only gives up (with a clear error telling you to restart) if even the fallback fails.
0.6.3 — 2026-07-06
Added
- In-app screen-sharing controls. A new Screen sharing section in Settings, plus a per-call quality picker on the Share control, put the whole share pipeline under your control without editing config files. Encode side: quality preset, bitrate, framerate, maximum resolution, maximum viewers, a force-software-encode switch, and an escape hatch for extra pixelpass arguments. Playback side: choose mpv or VLC, toggle hardware decoding, pick a buffering posture (low-latency vs. smooth), set the demuxer cache, and pass extra mpv arguments. Everything is stored locally in your config and defaults are unchanged, so existing setups keep working as-is.
Fixed
- Shared video no longer freezes on the first frame while audio keeps playing. Hardware decoding now defaults off; forcing
--hwdec=autostalled some viewers' hardware decoder on frame 1. You can re-enable hardware decoding from the new Screen sharing settings if your machine handles it well. - The per-call quality picker is now honored. The inline quality dropdown next to the Share button was being reset to the saved default before a share started, so every share silently used the default quality regardless of what you picked.
- VLC now respects your playback settings. VLC hardware-decodes by default, so a VLC viewer previously ignored the hardware-decode toggle (and could hit the same frame-1 freeze) and the buffering posture. VLC viewers now map both settings onto VLC's own options.
0.6.2 — 2026-07-03
Fixed
- Friends list now reflects status changes without a restart. A presence probe that fails now actively marks the friend offline, so a friend who goes offline, leaves a room, or turns invisible no longer lingers showing a stale "online" / "in a room" status until PeerSpeak is relaunched. Previously only successful probes updated the list, so it could ratchet a friend's status up but never down. The auto-refresh interval was also shortened from 60s to 15s so the list tracks changes more closely.
Added
- Manual "⟳ Rescan" button on the Friends panel that refreshes everyone's presence immediately, instead of waiting for the next auto-refresh.
Licensing
- PeerSpeak is now released under the MIT License (previously an unlicensed private build). Added a
LICENSEfile and aTHIRD_PARTY_LICENSESfile enumerating the full dependency manifest plus the canonical text of every referenced license, with notices for the statically bundled Opus codec and the embedded fonts (Iced-Icons, Cantarell/OFL-1.1). Both files ship in the Arch and Debian packages.
0.6.0 — 2026-06-28
Added
- Shared music listening (W22). A new Playlist panel lets you build a personal queue of local audio files and play them on a dedicated music player — Browse to add tracks, play/pause, previous/next, seek, per-track reorder, remove, and a local volume slider, all persisted across sessions.
.plsand.m3uplaylists can be imported (remote and non-audio entries are skipped). - Tune in to a friend's music. Flip "Let others tune in" and peers see your current track under the Public tab; one click on Listen streams it to them. Playback is timeline-synced — play, pause, skip, and seek mirror across everyone with no drift — and the next track is prefetched for gapless transitions. Each listener gets an independent per-source volume, so music sits under voice at whatever level they like; voice chat stays fully audible throughout.
- Standalone Playlist card in the 3-Column layout. The playlist now lives in its own card stacked under the chat, with a draggable divider to resize it and its own scrollbar when space is tight. The other layouts keep the playlist in the Controls panel.
Security
- Shared-music metadata is treated as untrusted: the broadcast track name is sanitized and its size is cap-checked at gossip ingest, fetched bytes are confirmed to be audio before decoding, and only a small descriptor ever rides gossip — track bytes move point-to-point over the existing files plane, one fetch in flight at a time.
Changed
- Wire protocol bump (gossip v5). Shared listening adds presence fields, so 0.6.0 peers cannot share a swarm with 0.5.x peers — everyone in a room must update together.
0.5.1 — 2026-06-27
Added
- Volume control for inline chat audio clips. A master volume slider plus a Universal volume toggle now sit in the Chat panel header, and every audio attachment gets its own 🔊 slider on its play row. With Universal volume on (the default), one level applies to all clips and persists across sessions; turn it off to give each clip its own independent level.
0.5.0 — 2026-06-27
Added
- Right-click context menu (Cut / Copy / Paste / Select All) on every text-entry field. (A9)
- Selectable, copyable text for values that used to be read-only: your full node ID and the room ticket can now be click-selected and copied, and chat messages are drag-selectable (highlight + Ctrl+C / Ctrl+A) while clickable links keep working. (W21 Phase 1 + 2)
- Clock-skew warning: when a peer can't be seen because the two systems' clocks differ by more than the replay-protection window, PeerSpeak now shows a "your clocks are out of sync" banner instead of failing silently. (A25)
- Per-application audio capture for screen-share, removing the call-audio loopback echo when sharing a window, plus surfacing of pixelpass startup errors. (A23)
Changed / Fixed
- Critical commands are now delivered reliably under load — muting, releasing push-to-talk, and leaving a room can no longer be silently dropped while a slider is being dragged (prevents a hot-mic state mismatch). (A15)
- Screen-share now passes
--strict-audioand surfaces app-audio drop warnings; the source picker state machine and pactl handling were hardened. (A23) - Per-peer volume control path verified and covered by regression tests. (A24)
Security
- Hardened against insider resource-exhaustion: bounded + author-keyed chat attachment cache, capped recovery-identity state, and other Tier-C caps (F-01 / F-02 / F-03 / F-12).
Packaging
- Added Debian/Ubuntu
.debpackaging (cargo-deb metadata); the official.debis now built on Debian 12 (bookworm) for wide compatibility. - Arch
PKGBUILDclones over anonymous HTTPS.
Earlier releases: see git tags v0.4.0, v0.3.0, v0.2.0.