Releases: ancsemi/Haven
Release list
v3.4.0
What's new in v3.4.0
Added
- Quote button -- a quote button in the message toolbar inserts a formatted quote of the selected message into the input box.
- Up-arrow to edit last message -- pressing up in an empty message input opens the last message you sent for editing. Toggleable in Settings.
- Bot API: delete messages & play soundboard sounds -- bots can now delete messages and trigger soundboard sound playback via the API.
- SSO recent-servers dropdown -- the SSO "Link a Server" page now shows a dropdown of recently visited servers for quick selection.
Fixed
- Event sounds decoupled from notifications toggle -- join/leave sounds now play regardless of whether the master notifications toggle is off. (#5264)
- Server icon cross-origin loading -- server icons fetched from external origins now include the correct crossorigin attribute, preventing CORS errors. (#5240)
- Server list hides current server reliably -- the server list sidebar now uses the server fingerprint to identify and hide the host server.
- Server list removals persist -- manually removed servers are now normalized by origin and persist across syncs; the Desktop bridge also respects removals.
- Server list sync on page refresh / auto-login -- the encrypted server list now syncs correctly when the page reloads or the user auto-logs in.
- SSO consent page stuck -- the SSO consent page no longer gets stuck at "Checking login status..." after a session is already established.
- Desktop app promo skipped on mobile/tablet -- the desktop app promotional modal no longer appears on mobile or tablet devices.
- Stale socket evicting voice users -- a stale socket reconnect no longer incorrectly removes an active user from a voice channel.
Security
- Reply-to channel boundary validation -- the server now validates that a reply target belongs to the same channel, preventing cross-channel reply injection.
- WebRTC payload size limits -- enforced maximum payload sizes on WebRTC data channel messages.
v3.3.0
What's new in v3.3.0
Added
- Last read message indicator -- a subtle divider marks where you left off when you return to a channel. (#5259)
- Per-event volume sliders -- separate volume controls for join and leave notification sounds in User Settings.
- Server-list sync improvements -- the encrypted server list now resyncs periodically and on tab focus, so your server list stays current across devices without a full reload.
Fixed
- iOS Safari safe-area overlap -- additional safe-area inset fixes on mobile Safari preventing content from being clipped by notches and home indicator.
- CSP upgrade-insecure-requests with FORCE_HTTP -- the Content Security Policy no longer forces HTTPS upgrades when FORCE_HTTP=true is set, which was breaking HTTP-only installs. (#5258)
- Duplicate voice joins -- properly cleans up stale state from a race condition where rapidly clicking join could register a client twice in the same voice channel. (#5247)
- Case-insensitive channel tag grouping -- channel tags are now matched case-insensitively, so [General] and [general] are treated as the same group. (#5260)
- E2E backup clobber prevention -- the encryption backup flow now correctly distinguishes between no backup exists and backup server unreachable, preventing a reachability failure from overwriting a valid backup. (#5261)
v3.2.0
Added
- Mark as Read context menu — right-click a channel or DM to mark it as read. The option only appears when the channel has unread messages.
Fixed
- Pinned message jump — clicking a pinned message now correctly scrolls to and highlights it even when the message has been trimmed from the DOM.
- iOS Safari mobile issues — fixed double-tap zoom, scroll momentum, safe area insets, emoji picker positioning, and status picker rendering on Safari iOS.
- Promo modal dismiss — clicking the overlay to close a promotional modal now correctly respects the 'Don't show again' checkbox. (#5257)
Full changelog: https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md
v3.1.1
Added
- Status bar toggle tab — a small tab appears in the bottom-right corner when the status bar is hidden, providing an obvious one-click way to reveal it
- Server URL in status bar — displays the server address with click-to-copy and a privacy toggle for streamers
Changed
- Status bar default — now hidden by default on web/mobile; enable from Settings or the toggle tab. Desktop app is unchanged
- Banner display settings — height, offset, and header style are now per-user preferences (client-side) instead of server-wide
Fixed
- Mobile image overlap — images no longer overlap with adjacent messages on mobile
- Mobile reply banner overflow — reply banners now wrap properly on mobile
- Mobile message text overflow — long words/URLs now break correctly on mobile
- Desktop double status bar — fixed a regression where toggling the status bar on Desktop could show two bars
- Status bar hidden on mobile — the bar now respects user settings and condenses at smaller breakpoints instead of disappearing
v3.1.0
Added
- Server banners — servers can now have a banner image displayed at the top of the chat area. Includes overlay and non-overlay display modes, a header style dropdown with four options (Transparent, Tinted, Solid, Full), height and vertical offset sliders, and gradient fade.
- Server icon sync — server icon thumbnails are now included in the encrypted sync bundle so server icons persist across devices. (#5240)
Fixed
- Role icon upload — fixed role icon upload (field name mismatch and response handling) and added auto-resize to 16x16.
- E2E encrypted notification content — push and browser notifications for encrypted messages now show generic placeholder text instead of raw JSON. (#5256)
- Safari iOS layout — fixed safe-area insets, keyboard overlap, and navigation dot positioning on Safari iOS.
- Delete-user transaction safety — added guards for non-existent tables in delete-user database transactions. (#5252)
Haven v3.0.0
Added
- SSO registration (Link Server) — register on a new Haven server using your identity from another Haven server. Two-step flow: connect to home server, approve identity share, set local password. Username and profile picture are imported; E2E encryption preserved.
- Advanced search filters — \rom:user, \in:#channel, \has:image/file/link/video\ with filter tag badges in the search bar.
- Reply notifications — distinct notification sound for replies to your messages, with separate volume control.
- Settings tab reorganization — User/Admin tab split with a tab bar.
Changed
- Reply banner redesign — compact pill-style design, placed inside the message body.
- Emoji picker expansion — expanded food, activities, and objects categories.
Fixed
- Ordered list renumbering — messages starting with \2.\ or \3.\ no longer render as \1..
- YouTube seek slider alignment (#5250)
- Jump-to-message for search results and replies
- Voice double-join guard
- @mention and :emoji autocomplete in edit mode
- Copy image clipboard format (#5246)
- Mobile sidebar padding for Android gesture bar
- DM sidebar name updates on display name change
- Auth page centering on small screens
v2.9.9
Added
- Encrypted server list sync — your server list and ordering now sync across devices via an encrypted key stored on the server
- Jump-to-bottom button — floating button to jump back to newest messages when scrolled up
- Emoji picker in edit mode — emoji picker now available when editing messages
- ==highlight==\ markdown — wrap text in double equals signs for highlight formatting
- /poll\ slash command — create inline polls with /poll \Question\ \Option 1\ \Option 2\ ...\
Changed
- SVG toolbar icons — emoji and poll buttons now use crisp SVG icons
- Codebase modularization — monolithic socket handler split into focused domain modules
Fixed
- DM scroll position, send button sizing, lightbox arrow navigation, Safari PWA issues, scroll-to-bottom reliability, add-server dialog centering, GIF hover preview, channel handler module export
Full changelog: https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md
v2.9.8
What's new
Read-only channels — admins can now mark any text channel as read-only. Members without the new Read-Only Override role permission can still read and react, but the message input is hidden. Great for announcement channels. (#5231)
Read-Only Override role permission — grants specific roles the ability to post in read-only channels.
Server-relayed mic illumination — the speaking indicator now reflects what the server actually received rather than local mic detection. If your audio isn't reaching the server, the indicator won't light up.
Role permission row highlight — checking a permission in the role editor now lights up the entire row, making it easier to see which permissions are active at a glance.
v2.9.7
Changed
- Removed Google STUN dependency — voice/WebRTC now defaults to open-source public STUN servers instead of Google's. No functional change for end users.
Added
- \STUN_URLS\ environment variable — override default STUN servers with your own (e.g. a self-hosted coturn) for fully self-contained voice with zero external dependencies. Comma-separated list of STUN URIs.
See CHANGELOG.md for full details.
v2.9.6
Added
- Custom Terms of Service — admins can now add custom terms that appear above the default Haven ToS on the login page. Set via a new textarea in Admin Settings. (#5229)
Fixed
- Unpin message visual bug — unpinning a message while viewing the pinned messages panel no longer leaves the pin border on the message. The pinned panel now updates in real time. (#5228)
- Android app popup 'Don't show this again' — the checkbox now persists correctly across sessions.
- Android app popup layout — moved the 'NOW AVAILABLE' badge above the title and centered the title text.