Skip to content

v3.20.1 - Emergency STUN fix

Choose a tag to compare

@ancsemi ancsemi released this 01 Jun 02:37
· 38 commits to main since this release

3.20.1 — Emergency STUN fix (#5399)

Both hardcoded default STUN servers in voice.js had gone offline (stun.stunprotocol.org was decommissioned upstream; stun.nextcloud.com stopped responding to binding requests). Result was that any Haven instance using the default ICE config lost external WebRTC simultaneously — LAN-to-LAN voice still worked (host candidates don''t need STUN), but anyone outside the server''s subnet got stuck on "ICE: Connecting…". Soundboard and screen-share failed to external users for the same reason.

Defaults are now a non-Google preferred pool (Cloudflare, Metered, Twilio). At voice-manager init a runtime probe opens a throwaway RTCPeerConnection against each default URL and prunes the ones that don''t produce a srflx candidate within ~2.5 seconds. If every preferred server fails the probe, a Google fallback pool engages automatically as a last resort. Admin-configured TURN (via /api/ice-servers) continues to take precedence over both, so anyone running their own TURN is unaffected.

If you''re hosting a Haven server, updating to 3.20.1 restores external voice / screen-share for your users with no config changes required. Configuring a real TURN server (coturn etc.) is still recommended for symmetric-NAT users; STUN alone can''t help them.


This release also bundles every change since v3.18.0:

3.20.0 — IP-level bans

  • New ban_ip role permission (admins always have it). Ban User modal gains an "Also ban recent IP address(es)" checkbox (up to 5 most-recent IPs per user). New "Banned IPs" manage modal under Settings → Admin → Members for direct ban / unban with reason. Enforced at both the HTTP layer (30s cache) and Socket.IO layer; live sockets from a freshly-banned IP are disconnected immediately. Exact-string match in v1 (no CIDR / IPv6 normalization yet).

3.19.1 — Desktop settings + G-Sync workarounds

  • #36: Settings checkboxes and keybind recorders no longer dead until you click the matching left-nav item — both Desktop sections now init eagerly when the modal opens.
  • #35: Two opt-in Debug toggles for Nvidia G-Sync / VRR FPS-drop: "Disable GPU vsync" and "Remove Chromium frame-rate cap". Pairs with Haven Desktop 1.4.21. Off by default, require restart.

3.19.0 — Join as Guest (#5381) + bot routing fix (#5398)

  • Admins can enable a guest-login mode and whitelist specific channels guests are auto-joined to. Guests get a real (temporary) account with a 12h token, no DMs, no E2E key derivation, and a visible Guest badge in the member list and message header. Row is cleaned up a few seconds after their last socket disconnects.
  • #5398: Per-bot slash-command routing fix — bots with the same command name in different channels now route to the right callback URL instead of whichever bot was saved last.

3.18.3 — Shortcut recorder UX (#184)

  • Desktop shortcut-recorder now shows a specific, actionable toast when a bind fails ("install libuiohook" vs "pick a different combo") instead of the previous one-size-fits-all message. Pairs with Haven Desktop 1.4.20+.

3.18.2 — Donors modal layout fix

  • Thank You / donors modal restructured so the Ko-fi donate button stays pinned at the bottom instead of falling below the fold on shorter screens.

3.18.1 — Screen-share encoder tuning (#5379)

  • Bitrate caps raised 2–3x per resolution (720p: 4 Mbps, 1080p: 8 Mbps, 1440p: 14 Mbps). Encoder hinted as motion content. degradationPreference: maintain-framerate so the encoder drops resolution before chopping frames under bandwidth pressure. Big quality bump for games / video over screen-share.

Other unreleased changes since v3.18.0 (no separate version bump)

  • Voice: reconnect + screen-share renegotiation desync fix (#5347) — per-peer offer/answer flags, queued renegotiation drain, and single unified _renegotiate() for initial offer / ICE restart / screen-share renegotiation.
  • Channel rotation desync fix — chat / members no longer blank on rotation.
  • Bots: opt-in moderation REST API (#5397) — admins can grant can_moderate to webhook bots for kick / ban / mute.
  • DDNS: auto-update DuckDNS / Cloudflare / generic so ISP IP changes don''t break the server.
  • Translations: ru.json synced with current en.json (thanks @QuiXMaDe, #5395).