Skip to content

v3.18.0 - Server-synced nicknames, per-channel default role, /break, auto-clear, screen-share fixes

Choose a tag to compare

@ancsemi ancsemi released this 27 May 16:29
· 54 commits to main since this release

v3.18.0 — Server-synced nicknames, per-channel default role, /break, auto-clear, screen-share + watchdog fixes

Added

  • Server-synced nicknames (#5394). Nicknames now persist server-side so they follow you to new devices and browsers. They're still personal and private — only you see them. On first connect after this update, any nicknames already stored in your browser are pushed up automatically.
  • Per-channel default role (#5389). Channel Functions → "Default Role" picks a server role that gets auto-granted (channel-scoped) to every current member and to anyone who joins later. Setting it backfills all existing members in one transaction; clearing it leaves prior grants in place so admins can decide whether to revoke from the Roles UI. DMs are excluded.
  • Admin-adjustable max sticker file size (#5392). Admin Settings → Uploads & Limits now has a "Max Sticker File Size (KB)" input (256–10240 KB, default 1024). Bump it up if you want stickers to double as a GIF library.
  • /break slash command + persona compacting hard-stop (#5393). Different personas posted in quick succession used to visually compact into one block for other viewers. Now: the grouping check also compares persona username and the displayed username, a new break_chain column lets any message hard-stop compaction, and the new /break <message> slash command lets users manually force a fresh group.
  • Admin password reset (opt-in) backend (#5300). New admin_password_reset_enabled server setting (default off) lets admins reset a user's password to a one-time temp value. Bumps password_version to invalidate old JWTs and forces a password change on next login. Audit-logged. E2E warning surfaced in Admin Settings (the user's wrap key derives from the password, so old encrypted DM history becomes unrecoverable on their side, matching the recovery-codes flow). Backend by @Amnibro.
  • Channel auto-clear messages timer mode (#5390). New auto_delete_mode per channel (delete vs clear). Auto-clear wipes messages on the configured interval without deleting the channel itself. The channel badge shows hours plus a recurring glyph so it's visually distinct from one-shot expiry.

Fixed

  • Screen-share reshare: black screen and invisible tile (#5390). stopScreenShare now awaits per-peer renegotiation with Promise.allSettled (8 s safety cap) instead of racing a fixed 3 s timeout. Dead-track detection in the sameLiveTrack guard forces srcObject reassignment on reshare, and ontrack.onended skips tile teardown if a new screen-share is already registered.
  • Screen-share fullscreen exit ghost tile on transient track.onunmute (#5391). The reassignment is now skipped when the track is already attached and live, so brief unmute events no longer cause a freeze or blank tile.
  • Channels-list watchdog: HTTP validate + retry + reload on silence (#5391). Rare case where the socket appeared connected but channels-list never landed. The watchdog now HTTP-validates the session, retries the socket event on silence, and triggers a clean page reload if validation itself fails.
  • Landing-page emojis rendering as ? / ?? after edits. PowerShell's Set-Content without -Encoding utf8 was rewriting docs/index.html and website/index.html as Windows-1252. Restored correct UTF-8 BOM encoding and added .editorconfig + .gitattributes guardrails.