10 KiB
10 KiB
Changelog
All notable changes to PeerSpeak are documented here.
[Unreleased]
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.
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.