Releases: ancsemi/Haven
Releases · ancsemi/Haven
Release list
v3.31.2
Haven Server v3.31.2
Fixed
- The manual "Download Backup" button now works on large servers (#5434). Automatic backups were fixed in 3.31.0, but the manual download still built the entire zip to a temporary file before sending anything, so on a big server (30GB of files) it sat silent for minutes and a proxy in front of Haven returned a 502 before the download ever started. The download now streams the archive straight to the browser as it builds, so it starts immediately and stays alive for the whole transfer.
Full changelog: https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md
v3.31.1
Haven Server v3.31.1
Fixed
- Restoring a large backup no longer fails with "failed to fetch" (#5436). Restoring a full backup that included files broke on three separate limits: the server aborted any request that took longer than 30 seconds (the ~30s "failed to fetch" people saw), the upload itself was capped at 4GB, and the restore read the entire uploaded zip into memory the way the old backup path did, so a large archive ran the server out of memory. Restores now allow long uploads, accept large files, and stream the archive straight to disk, so a 15GB or larger backup restores without crashing. Slow-header (slowloris) protection is unchanged.
Changed
- The backup screen now spells out that only full backups can be restored in place (#5435). A backup has to include both Messages and Uploaded files to be restorable from the Restore box; smaller channels/users/settings backups are meant to be re-imported by hand. That was always the case but wasn't stated, so a partial backup failing to restore looked like a bug.
Full changelog: https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md
v3.31.0
Haven Server v3.31.0
Added
- Rich link preview cards for Bluesky and X/Twitter (#5429). Social links now embed as full cards with the author's avatar and name, the post text, sized media (videos get a play badge), and engagement counts (replies, reposts, likes, views), matching the mobile app. Embed size is now a single Off / Small / Medium / Full setting shared by the Settings picker and a per-embed toggle, with a caret to collapse individual previews. Generic links and YouTube use the same card style. Thanks to Amnibro for the contribution.
Fixed
- Large backups that include files no longer crash the server (#5434). Backups built the whole archive in memory before writing it out, so once the uploads folder got large (reported around 30GB) the server ran out of memory and went down, while a structure-only backup stayed tiny and worked fine. Backups now stream straight to disk as they build, keeping memory flat no matter how much is stored, for both manual downloads and scheduled auto-backups. The archive format is unchanged, so existing backups still restore.
Changed
- Refined the Russian wording on the password recovery screen (#5420). Thanks to CUBEEEK.
Full changelog: https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md
v3.30.3
Fixed
- "Create Channel" sidebar section stayed visible for users who could only create sub-channels (#5433 follow-up). The flat permissions list sent to the client for UI gating mixed server-wide and channel-scoped grants together, so a user with
create_channelscoped to a single channel saw the always-on sidebar "Create Channel" section — a dead control, since every submission creates a top-level channel and gets denied by the (correctly scoped) server check. That section is now gated on a global-only permission check, so it only appears for admins and users with a genuine server-widecreate_channelgrant.
Follow-up to v3.30.2 (flag crop fix), v3.30.1 (Windows flag rendering), and v3.30.0 (Flags emoji category, smarter emoji search, #5432, #5433).
v3.30.2
Fixed
- Betsy Ross and Gadsden flags didn't match the aspect ratio of the other Flags emoji. They were noticeably flatter/wider than the rest of the set, since their source artwork wasn't 4:3 like the bundled country flags. Both are now cropped to the same 4:3 frame (canton preserved in full on Betsy Ross; snake and lettering preserved in full on Gadsden), so they sit consistently alongside every other flag.
Follow-up to v3.30.1 (Windows flag rendering fix) and v3.30.0 (Flags emoji category, smarter emoji search, #5432, #5433).
v3.30.1
Fixed
- Flags emoji category showed bare country codes on Windows. Windows browsers don't render Unicode regional-indicator flags and fall back to the two-letter code ("US", "GB", "DE", …), so the new Flags category looked like a list of letters there. Every country flag is now a bundled SVG image, so flags render the same on every platform — in the picker, in messages, and in reactions.
Follow-up to v3.30.0, which introduced the Flags emoji category, smarter emoji search, and fixes for the last-read divider (#5432) and channel-scoped role permissions (#5433).
v3.30.0
Added
- Flags emoji category. The emoji picker has a new Flags category with a broad set of country flags. The US flag leads the list, followed by two classic American flags — the Betsy Ross flag and the Gadsden ("Don't Tread on Me") flag — which ship built in and render inline in messages and reactions like any other emoji.
- Screen share pop-out maximize toggle (#5430). The screen-share pop-out window now has a maximize/restore toggle so a shared stream can fill the pop-out.
Improved
- Smarter emoji search. Typing an actual punctuation mark now finds the matching emoji — e.g.
?surfaces ❓ and⁉️ ,!surfaces ❗, and#or a digit matches its keycap emoji. Search also covers the new bundled flag emoji by name.
Fixed
- "New messages" divider and auto-scroll stopped appearing (#5432). Opening a channel recorded it as fully read before its history finished loading, so the last-read divider from #5259 had nothing to anchor to. The read position is now saved after the history request, restoring the divider and the jump-to-unread scroll.
- Channel-scoped role permissions leaked server-wide (#5433). Per-assignment permission checkboxes ticked on a role granted inside a specific channel (e.g. "create channel", "rename sub-channels") were being applied everywhere. They're now scoped to the channel they were granted in and its sub-channels; server-wide assignments still apply everywhere as before.
Changed
- README refresh (#5431). Documented custom stickers and personas, the built-in backup tools, and the
::persona shortcut, marked the Russian translation as human-reviewed, and updated roadmap statuses.
v3.29.0
Added
- Spoiler images and a per-viewer Hide Image option. When sending an image you can now mark it as a spoiler — an eye toggle on each queued image — and it renders blurred behind a "Spoiler" label for everyone, revealing on click. Works for normal uploads, encrypted DM images, and persona/bundled sends. Separately, you can right-click any image already in chat and choose "Hide Image" to collapse it to a placeholder in your own view only; it's stored per-device, and clicking the placeholder restores the image.
- Invite link management. Admins can now create and manage multiple invite links from a dedicated menu, each with its own per-link channel grants, optional expiry, and use limits. Copying a link is reliable with a clear success toast and a dedicated popout, and the landing site can auto-join the community from an
?invite=link instead of manual code entry.
Fixed
- Guests couldn't reach sub-channels or voice rooms in their allowed area (#5401). The guest access picker only listed top-level channels and auto-joined just the public sub-channels under a whitelisted parent, so private sub-channels were unreachable and voice rooms a guest wasn't a member of failed with "not a member of this channel" (the server already allowed guests to use voice once they were in the room). The picker now lists every channel individually — parents, sub-channels, and voice rooms, each tagged so you can see what's private or voice — and guests are joined to exactly the rooms you select (ticking a sub-channel includes its parent so it appears in the sidebar). The server still enforces membership and per-channel settings, so nothing is widened beyond what you grant.
- Back-to-back messages from one person showed as separate blocks in pop-out DMs and threads. Consecutive messages from the same sender within a few minutes now group together — no repeated name/avatar header — the way the main channel already does, in both the DM pop-out and in threads. In threads, deleting the first message of a group now promotes the next reply so it keeps its author header.
Changed
- Haven Desktop download links bumped to v1.4.25 on the landing pages.
Haven v3.28.0
Added
- Admin-only "Hide Channel" to declutter the sidebar (#5409). Admins can't leave channels (they need access to all of them), so their channel list just keeps growing. Right-click a channel (admin only) to hide it from your own sidebar without touching membership or affecting anyone else. Hidden channels stay fully accessible via an "N hidden channels" bar that opens a modal to unhide them individually or all at once. Stored per-device, like mute.
Fixed
- Screen-share audio drifted out of sync over TURN relays (#5426). Audio was routed through the Web Audio mixer, whose fixed clock drifts against WebRTC's jitter buffer, so after a minute or two on a relayed connection it stuttered and desynced (LAN was fine). Native playout is now the default; the Web Audio mixer is an opt-in toggle for the >100% per-stream volume boost.
- Custom sounds, emojis, and stickers didn't update live (#5426). Other clients only saw changes after a restart. Uploads, deletes, and renames now refresh the affected library for everyone immediately.
- Voice could go silent for some peers after a brief disconnect (#5427). After a reconnect while still in voice, Haven now ICE-restarts every peer (staggered) so a dead relayed path is rebuilt both ways instead of leaving you audible to some people and silent to others.
- Reopening a screen share could stick on "Requesting stream…" (#5426). The watch path now uses the late-joiner retry watchdog, re-requesting until a live video track arrives.
- Sub-channel access via a crafted code or deep link (#5408). Joining a sub-channel by code now requires membership of the parent; private subs are never granted by code. Rejections reuse the generic "invalid code" error.
- Guests couldn't see the Join Voice button in allowed channels (#5401). The button-visibility gates now exempt guests too, matching the server, which already allowed it.
- Server address in the status bar didn't copy in the desktop app. Added the Electron clipboard fallback the other copy buttons use (#182).
Changed
v3.27.0
Haven v3.27.0
Added
- Admin-configurable STUN/TURN voice servers (#5399). A new Settings → Voice & Connectivity section lets server admins point voice and screen share at their own STUN servers (one
stun:URI per line, or comma-separated) and an optional TURN server with static credentials — without setting environment variables or redeploying./api/ice-serversnow resolves in the order admin setting →STUN_URLS/TURN_URLenv → built-in STUN pool, so a server's connectivity can be fixed live from the admin panel. The TURN password is stored as an admin-only sensitive setting and every value is scheme/length validated before saving. Clients that can't reach any STUN server now show a one-time warning toast (calls may only work on the local network until an admin sets STUN/TURN) instead of silently hanging on "ICE: Connecting…".
Fixed
- The stream viewer's "close" (✕) button broke screen sharing. The viewer header has two different ✕ buttons: the per-tile ✕ safely hides a single stream (restorable), but the header ✕ stopped your own broadcast and fully tore down every stream tile. Destroying a tile dropped the only reference to a sharer's still-live video, so the stream couldn't be reopened and even a fresh reshare wouldn't reattach without a hard-refresh — it also closed streams you were only watching and removed the restore button. The header ✕ now closes streams the same restorable way the per-tile ✕ does (hide + mute, recoverable from the hidden-streams bar or the LIVE badge) and never stops your own share.
Full changelog: https://github.com/ancsemi/Haven/blob/main/CHANGELOG.md