Releases: btcforplebs/nostr-vault
Release list
Nostr Vault 2.7.2 (Android, build 18)
Nostr Vault v2.7.2 (Build 18) Release Notes
A smoother, faster feed on everyday phones, and the Android app catching up with the iPhone. Scrolling on a 4 GB phone no longer stalls while posts and threads load. The feed preloads what is coming, shows photos at their real size with a soft preview, and keeps your place. New in this release: a Followers view, Web of Trust and language filters on Global, a Lightning wallet with history and lightning addresses, and one-tap sign-in with Clave.
Faster
- Smooth Scrolling on Low-RAM Phones: The feed was re-sorting up to 10,000 notes on the main thread every time a relay sent posts, and in threaded mode it regrouped the whole feed each time a reply's parent arrived. That work now happens in the background, so the list keeps moving. New posts wait until you stop scrolling before they are added, only the row that changed redraws, GIFs use the phone's hardware decoder, and the app's own code is precompiled at install. On a 4 GB test phone: no missed frames in 5,388, where before the list froze for 20 seconds at a time.
- The Feed Loads Ahead of You: The next posts load before you reach them. Photos open at their real size with a blurred preview while they load, and quoted and earlier posts hold their space instead of pushing the feed down.
- Fewer Connections: Lookups share one connection per relay instead of opening a new one each time, and a relay that refuses is left alone for two minutes.
New
- Followers: The Relay tab has a Followers view: who followed you recently, who came back, and everyone, with a red dot for new follows since you last looked. The Relay tab bar is now Notes · Likes · Zaps · Followers.
- Global Filters: Global shows your Web of Trust by default; the shield switches to Everyone. A language button lets you pick which languages to see.
- Lightning Wallet: Payment history, and send to lightning addresses and LNURLs as well as invoices, with the amount checked before you pay.
- Sign in With Clave: One tap opens Clave, you approve, and you are back connected. The signer session also stays up while you approve, instead of dying when you switch apps.
- Comments: NIP-22 comments (kind 1111) show up in threads, and you answer a comment with a comment.
- Zaps: The bolt flies from your avatar to the zap button and lands with a lightning strike and a haptic crack.
- Photo Zoom: Photos zoom out of their spot in the feed and swipe back into it. The viewer has Save.
- Media Tab Backup Badge: Every tile shows whether it is backed up to your Blossom servers.
- One Feed Button: Like the iPhone: an icon with a status dot, tap for the feed list.
Bug Fixes
- Settings Apply Themselves: Changing a setting the relay reads at start now restarts the relay for you, only when it would actually start differently. No more "restart to apply".
- Posts With Photos Are Not Lost: A post was cancelled when no outside Blossom server accepted its media, even though the photo was saved on your phone. It now waits and sends when a server is reachable.
- Notification Taps land on the post in the Relay tab.
- Threads: The start of a thread is looked for on the relays that have it, threaded cards show the newest replies, the thread lines sit beside profile pictures, and a quote is no longer treated as a reply.
- Keep Your Place when switching between expanded, condensed and threaded layouts.
- Old Notes Show the Year, instead of "57w".
- Quoting a Repost cites the original post, and relay picks in the composer attach as previews.
- The Top Bar folds away with the bottom bar as you scroll, and the New Posts button folds with it.
Nostr Vault 2.7.0
NostrVault v2.7.0 (Build 15) Release Notes
A new look and a lot of new surface. The filing-cabinet icon is gone — the app now wears the lit arch in Sunset Orange, as a proper adaptive icon and as the silhouette you see in your notification shade. Behind it the app has a real visual system for the first time: one elevation ramp, named colours instead of hardcoded ones, and animations that honour Reduce Motion. This release also adds home-screen widgets, Reels, long-form Articles, a Recipes feed, Live streams with chat and zapping, and a search that asks everywhere at once. Your chosen signer is now used for everything you sign, and the Global feed no longer shows the raw firehose to brand-new accounts.
Security
- Some Actions Bypassed Your Signer: Likes, reposts, follows, mute and relay lists, deletes, reports, drafts and group sign-ins went through a separate signing path that did not use the remote signer or Amber you had chosen. Everything you sign now goes through your chosen signer, and what comes back is checked: a signature for a different account, or for anything other than what was asked, is refused.
- The Global Feed Showed Everything to New Accounts: The spam filter is built from your follow graph, and an empty graph — exactly what a new account has — let everybody through. Global now shows only accounts in your graph, and the graph is seeded from the app's own starter packs so a new account has one within seconds of first launch.
New
- A New App Icon: The lit arch in Sunset Orange, as an adaptive icon, with a themed monochrome layer so notifications show the brand instead of a generic dot.
- A Consistent Look: One elevation ramp and one set of named colours behind every screen — card and page contrast used to be inverted — plus one animation vocabulary with Reduce Motion support.
- Home-Screen Widgets.
- Reels: A full-screen video feed in the feed menu — one video per page, swipe up for the next, with its neighbours already loading. Following by default; Global asks first. Posts marked with a content warning are left out.
- Search Everywhere at Once: Global search asks your device, your Mac relay and several Nostr search services in parallel, shows results as they arrive, and shows how each source is doing — so a service that is down no longer looks like "no results".
- Use a Relay From Another App: Advanced › External Relay turns off the built-in relay and Blossom server and points the app at ones running in another app on your phone, such as Citrine — for keeping your client and your storage in separate sandboxes.
- A Threaded Feed: The feed's view button now cycles expanded, condensed and threaded. Threaded gathers a conversation into one card with its replies on a rail; tap a reply to open it in place with its action bar, tap again to go to the thread. Each feed remembers its own layout.
- Articles: Long-form posts from the people you follow, drawn as articles with a reader.
- Recipes: A feed of cooking posts from zapcooking and nostrcooking, live from relays.
- Live Streams: Only the streams actually on air that can actually play, with chat, zapping, report and block.
- Scan a Signer's QR Code: Connect a remote signer with the camera instead of typing a bunker string, including during setup.
- Taps From Outside the App open the right screen, and Groups is reachable.
Removed
- The Ecash Wallet: Ecash is cash held at a mint you have to trust, and the mint this app shipped against was drained and shut down. Rather than keep a feature carrying that risk, it is gone — along with its mint setting, its step in setup, and the Sats widget that showed its balance. Lightning and Nostr Wallet Connect are untouched. If you are holding ecash in an older version, move it out before you update; the wallet screen is the only place it can be spent from.
Bug Fixes
- Threads Stuck on "Loading the Start of This Thread": The start of a thread usually arrived — the feed just never looked again. It does now, and it stops throwing away the notes it fetched.
- Discovery Now Comes From the People You Follow: It used to rank whoever the app happened to have seen, all tied, in arbitrary order. It now counts who your follows follow, the same way the Apple apps do.
- Search Read the Feed, Not Your Relay: In relay mode, search looked through whatever the feed happened to have loaded instead of asking your own relay, so anything not currently in memory was invisible to it. It now queries the relay.
- Quoted Posts: A quoted post now draws as a card in the feed, on the focused note and on the relay tab, with quoted articles resolved.
- Zap Amounts: Read from the invoice, since receipts do not carry them — and an invoice with no amount no longer reads as 1 BTC in live chat.
- Live Streams: The live feed no longer crashes on its first real run, and the chat composer no longer sits behind the tab bar.
- Posts With Unusual Characters: Backslashes, tabs and other control characters were encoded wrongly in signed events, which relays could reject.
- Signing Failures: Saving your profile no longer crashes when the signer fails — it says what went wrong — and a like or repost that could not be signed is undone instead of showing as done.
- Tap Targets: The note action row is a full 48dp tall with no dead gaps between buttons.
- Search Results Can Be Acted On: Reply, repost, like and zap from a result instead of buttons that draw nothing.
- Report and Block From the Feed.
- Engagement Counts Are Shown: The card was already being handed them.
- Drafts: A swipe asks before it deletes, and the Drafts screen is the drafts screen.
- Text Size: The setting does something now.
- Names and Avatars no longer stay as fallbacks in feed rows, and a media link stops printing above its own thumbnail.
- Media Uploads: A failed signature is retried instead of failing the post.
- Paying an Invoice: Confirms first, and shows the amount before you approve it.
- A Fresh Clone Could Not Build the App At All.
Nostr Vault — Build 14
Haven App v2.6.0 Build 14 (macOS / iOS) Release Notes
This release fixes the sync loop that pegged the Mac relay at 100% CPU after about a day and fired a notification every minute, closes a hole that let anyone fake zap totals, repairs authentication on the local relay, and stops posts with media failing on the first attempt. The Mac app also uses noticeably less memory in the background and can finally be installed on a Mac other than the one that built it.
Security
- Zap Totals Could Be Faked: A zap receipt is an ordinary Nostr event, and the apps counted every one they saw without checking it. Anyone able to reach a relay your app queried could publish a receipt claiming any amount against any note or profile. Receipts are now validated against the recipient's Lightning provider — the pubkey that published the receipt must be the one that provider authorizes. Validation deliberately fails open when that can't be determined (no Lightning address, network error, or a provider that doesn't advertise one), so legitimate zaps are never dropped.
Improvements
- Catch-Up Sync Slowed to a Sane Interval: The default moves from every 60 seconds to every 15 minutes, with a hard minimum so an old saved setting can't bring the old behaviour back.
- Lower Background Memory (macOS): The relay returns memory to the system the moment the app goes to the background, instead of waiting for the next sync or import — on an idle relay that could be an hour away. About a quarter lower in steady state.
- Installable on Other Macs: Every previous macOS build was signed so that it only ran on the machine that built it; on any other Mac it was terminated at launch with no explanation and no crash report. Builds are now signed for distribution. A downloaded copy still needs its quarantine flag cleared once until notarization is set up.
- Default Relay List:
relay.damus.iowas removed from the defaults after it began refusing sync queries and rate-limiting connections. Relays you configured yourself are untouched. - Matching Version Numbers: macOS, iOS and Android now all report 2.6.0 (14), instead of three different version numbers for the same release.
Bug Fixes
- Mac Relay Hitting 100% CPU After a Day: Catch-up sync rebuilt its entire comparison set for every relay on every 60-second round, re-downloaded backlog it had already rejected, and re-probed relays that always refuse. Once the databases grew enough that a round outlasted its own interval, rounds ran back-to-back indefinitely. Now built once per round and reused, with rejected events remembered and refusing relays cached.
- A Notification Every Minute: The same loop fired a fresh summary each round. On iOS, the "Catching up" summary was also triggered by ordinary background resyncs rather than only when returning after being away.
- Posting With Media Failed on the First Try: Uploads nearly always failed once and worked on retry, because the default mirrors had gone dead and the Mac relay mirror was asleep until the failed attempt woke it. Mirrors are now warmed when the composer opens and the upload retries once before failing.
- Authentication Broken on the Local Relay (macOS): The relay checked authentication against a secure address while macOS serves the local relay unencrypted, so authentication always failed and every read requiring it was silently rejected.
- Profile Notes Fetched From the Wrong Relays: Loading someone's notes queried the relays they read from rather than the ones they publish to, so profiles could look emptier than they are.
- Reposting Articles: Long-form articles were reposted using the note-only event kind, producing something most clients ignore.
- Replies Vanishing From Their Own Threads: In threads with seven or more participants, short replies tripped the mention-spam filter and disappeared — including your own.
- Blocking Didn't Take Effect Until Restart: Blocking hid content from view immediately, but the relay was never told, so it kept importing and notifying about that person all session.
- Notifications for Old Backlog: Catching up on old events could light the activity dot and fire notifications as if they were new.
- Multi-Account Corruption: Routine background publishing briefly switched the active account internally, which every part of the app read as a real account switch and responded to by wiping loaded events.
- Multi-Relay Signer Connections: A
bunker://link listing several relays kept only the first, leaving reconnects with no fallback. - Silent Video Failures: When every source for a video failed, the feed showed a black rectangle instead of its thumbnail and offered no error or retry. Failures are now surfaced and "Try Again" works.
- Stall When Playing Cached Video: Integrity-checking a cached video read and hashed up to 64 MB on the main thread, which could visibly hitch scrolling.
- Audio Interrupted During Picture-in-Picture: Scrolling the feed while a video played full-screen or in PiP handed the audio session to the muted feed player.
- A Single Bad Setting Could Prevent Startup: A malformed or blank value in the relay's configuration — twenty settings qualified, including the relay port — made the app quit during startup with no error and no crash report. Bad values now fall back to their default.
Nostr Vault — Build 10
Build 10 — Zaps Only Mode, @-mention autocomplete, and feed reliability.
iOS build 10 (1.1.1) · Android versionCode 4 (1.1.0) · macOS 2.5.1 (10)
New
- Zaps Only Mode — Appearance setting that removes likes and reactions throughout the app, making zaps the only way to engage and the primary source of notifications.
- @-mention autocomplete — type
@in the composer to search and tag people you follow, others in the thread, or anyone found via relay search; mentions show as readable names. - Swipe through a note's photos full-screen — tap any image to open a pager across all of that note's media.
- Following / Global toggle for the Media tab.
- Separate Notes and Engagement filters in the Relay view.
Improved
- Feed loads reliably on cold start — no more "relay connected but feed empty," and far less need to pull-to-refresh.
- Photos and videos display at their natural aspect ratio.
- Crash-safe drafts: in-progress posts are saved before sending and restored after an interruption.
- Relay tab reliably surfaces tagged replies and your own notes; pull-to-refresh triggers an immediate sync.
- Notification dot lights up only for others' activity, not your own posts.
- Unfollowing someone immediately removes their notes from the feed.
- Media tab shows only your own content; smoother long scroll-back; refreshed default relay list.
Fixed
- Mentions could point to the wrong person when two people shared a display name.
- Drafts were unnecessarily re-saved/re-synced when reopening the composer.
- Editing a pending post left an orphaned draft behind.
- Follow-list loading now picks the newest version instead of whichever relay replied first.
Downloads
- Android:
NostrVault-b10-v1.1.0.apk(signed, arm64-v8a / armeabi-v7a / x86_64) - macOS: build archived; the notarized
.dmgwill be added after export. - iOS: via TestFlight.
HAVEN for Mac 2.3.0
v2.3.0 - 2026-02-21
Important
Installation Note: Haven is currently unsigned code. macOS will likely block the application from opening by default. To bypass this, open Settings → Privacy & Security, scroll down to Security, and click Open Anyway.
Note
Coming Soon: The next release will move to a C-shared relay architecture, compiling the Go relay directly into the Swift app as a single process. This is required for App Store and TestFlight distribution. See C_SHARED_RELAY.md for details on what's changing.
Added
- Audio Playback: The media viewer now supports playing
.mp3,.wav,.m4a,.aac,.flac, and.oggaudio files with a dedicated player UI featuring play/pause, seek controls, and a progress scrubber. Audio files are also detected via magic bytes (ID3, RIFF/WAVE) for extensionless Blossom items. - Blossom File Extensions: Media exports now use a trust-but-verify system — querying the relay for MIME metadata and cross-checking against file magic bytes — to apply accurate file extensions. Supports virtually all file types via UTType, with magic-byte verification for JPEG, PNG, GIF, WebP, AVIF, HEIC, TIFF, BMP, MP4, MOV, WebM, MP3, WAV, FLAC, OGG, ZIP, APK, GZIP, and PDF. Additional fallback coverage for AAC, Opus, M4A, MKV, SVG, TAR, DOCX, XLSX, PPTX, and JAR.
- Blossom Import: Importing media automatically strips extensions to ensure compatibility with the relay.
- Dashboard Quick Actions: Added "Export JSONL" and "Export Blossom" buttons directly to the Dashboard for easier backups.
- Import Button Rename: Clarified the "Import" button on the Dashboard to "Import Notes".
- Media Tab Filter: Added a source filter to the Media Tab, allowing users to toggle between "Blossom" (local/uploaded) and "Cache" (captured from notes) media.
- Dynamic Search Bar: The search bar is now context-aware, appearing only in "Notes" mode and being replaced by the source filter in "Media" mode.
- Whitelist & Blacklist Management: Moved to a dedicated "Access Control" tab in Settings, with multi-npub support and corresponding config fields written to JSON.
- DB Engine Selection: Added a database engine step to the Setup Wizard allowing users to choose between storage backends.
- JSONL Export/Import: Replaced the old cloud-only backup UI with local JSONL export and import via native save/open panels in Settings.
- Automatic Lock Recovery: When a database lock is detected, the app now force-kills stale processes, clears lock files, and restarts the relay automatically.
- "Fix & Restart" Button: Replaced the multi-step "open Terminal and run pkill" error overlay with a one-click Retry button that handles cleanup automatically.
- Backup Restore from Setup Wizard: Users can now restore from a
.zipor.jsonlbackup during initial setup, with port conflict detection and retry support. - Setup Wizard: Blossom Media Restore: Added Blossom media import as a dedicated setup wizard step (previously only available in Settings).
- Floating Menu Bar Arrow: After setup completion, a floating animated purple arrow with a glow effect points at the menu bar relay icon with a "Your relay lives here" label, helping new users locate the app.
- C-Shared Relay Architecture (in development on
feat/c-shared-relay): The Go relay is now compiled as a static C library (libhaven.a) and linked directly into the Swift app — making HAVEN a single-process application. This eliminates child process management, orphaned processes, and PID tracking. Required for App Store / TestFlight distribution. - Upstream Sync: Pulled latest upstream changes from
bitvora/havenintohaven-go/. - Project Documentation: Added
docs/RELEASE_PROCESS.md(step-by-step release guide),docs/C_SHARED_RELAY.md(architecture overview of the c-shared approach), anddocs/upstream-sync.md(subtree sync instructions).
Changed
- Dashboard Relays Hidden by Default: The relay list on the Dashboard is now collapsed by default to reduce visual clutter, toggled via the existing eye icon.
- Dashboard Layout: Improved vertical spacing so the Dashboard fills the window height.
- Setup Wizard: Split Import/Restore into Dedicated Steps: The single "Import Your Data" step has been split into three independent, skippable steps: "Import from Relays" (pull notes from external relays), "Restore Notes" (restore JSONL backup), and "Restore Media" (restore Blossom media).
- Setup Window Sizing: Fixed inconsistent window sizes between the initial launch popup and the menu bar "Start Setup" flow. Both now open at 600x700.
- Application Performance: Optimized UI responsiveness by caching regex patterns and moving heavy computations off the main thread.
- Relay Error Handling: Improved relay error popups by removing the ineffective "Fix and Restart" option and providing clearer instructions for the "pkill" command.
- Setup Wizard Overhaul: Rewrote the setup flow with ScrollView support, a new identity step with inline whitelist editing, and a dedicated database engine step.
- Backup Settings Simplified: Removed AWS and GCP backup providers; streamlined to S3-compatible only for cloud backups.
- Welcome Window: The pre-setup menu bar view now shows a simple "Start Setup" prompt that opens the wizard in a dedicated window, rather than embedding the full wizard inline.
- Process Startup:
state = .bootingis now set immediately and synchronously before any async work, preventing a race where two relay processes could launch simultaneously. - Shutdown Reliability:
stopRelay()now waits up to 5 seconds for the process to exit and escalates to SIGKILL if SIGTERM is ignored. App termination wait increased from 0.2s to 1.0s.
Fixed
- Priority Inversions: Resolved runtime priority inversion warnings in image loading by making
ImageDownsampler.downsampleasync with.utilitypriority, and updating call sites inAnimatedImage.swiftandViewerView.swift. - Sandbox Permissions: Resolved "Operation not permitted" errors during backup and import by using temporary directories for zip/unzip operations.
- Improved Backup Reliability: Replaced direct file archiving with a safer two-step process to avoid permission issues.
- Dashboard UI: Fixed an issue where export status messages could persist indefinitely.
- Database Lock Boot Loop: Fixed a critical race condition where two haven processes could start simultaneously, causing them to fight over database locks and loop forever.
- Inactivity Timer: Replaced broken
Timer-based implementation (which couldn't mutate SwiftUI struct state) with a properTask.sleepapproach that correctly resets to the dashboard tab. - Import Log Parsing: Added a byte-level log buffer (
processBufferedOutput) to handle multibyte characters and incomplete lines during note import, preventing hangs. - Duplicate readabilityHandler: Removed a dead first pipe handler in
importNotesthat was immediately overwritten by a second one. - Settings Save Leak: Added
onDisappearcancellation of the debounced save task in SettingsView.
Known Issues
- This release is not eligible for App Store distribution. The following changes are in progress on
feat/c-shared-relay:- Embed the Go relay as a C-shared library (replacing the separate helper process) for full App Sandbox compliance
- Remove disallowed entitlements (
allow-jit,allow-unsigned-executable-memory,disable-library-validation) - Add required Privacy Manifest (
PrivacyInfo.xcprivacy) - Replace blanket
NSAllowsArbitraryLoadswithNSAllowsLocalNetworking - Add
ITSAppUsesNonExemptEncryptiondeclaration
Haven App v2.2.1
Release Notes
This update improves Web of Trust (WoT) configuration and enhances media streaming stability.
Important
Installation Note: Haven is currently unsigned code. macOS will likely block the application from opening by default. To bypass this, simply Right-Click (or Control-Click) the app and select Open. You may need to do this twice.
Bug Fixes & Optimizations
- Web of Trust Improvements: Added configurable WoT Depth and Minimum Followers settings in the Advanced tab. This allows users to fine-tune who is allowed to write to their private relays.
- WoT Refresh Control: Introduced a configurable refresh interval for the Web of Trust network (1h, 12h, 24h, 7d).
Thank you for using Haven!
Haven for Mac - Release 2.2.0
Haven Release 2.2.0
Important
Installation Note: Haven is currently unsigned code. macOS will likely block the application from opening by default. To bypass this, simply Right-Click (or Control-Click) the app and select Open. You may need to do this twice.
🎥 Video Playback Framework Overhaul
We've completely rewritten how the app interacts with local media to handle "extensionless" files (common in Nostr/Blossom storage) that previously failed to play.
- Local Video Playback: Fixed an issue where locally synced videos would fail to load. The app now uses a smart symlinking strategy to ensure
AVFoundationcorrectly recognizes video formats. - "File Too Small" Errors: Resolved a bug where video size checks were inspecting the symlink instead of the actual file, preventing playback of valid videos.
- Thumbnail Generation: Videos now generate accurate thumbnails instantly, even for extensionless files. Added a 200ms "settle" delay and retry logic to prevent
FFR_Commonerror -12847 which occurred when AVFoundation attempted to decode video files before they were fully flushed to disk.
🖼️ Media Viewer & Layout
- Correct Sorting: Media items in the viewer are now strictly sorted by the Nostr event timestamp (newest first). This fixes issues where syncing would scramble the order based on file download time.
- Layout Stability: Resolved aggressive layout constraint warnings in the video player controls. The player now intelligently waits for sufficient screen space before initializing, preventing UI "crunch" errors during view transitions.
- Visual Polish: Enforced minimum frame sizes for the video player overlay to ensure controls are always accessible.
- Media Caching: Implemented locking mechanisms to prevent race conditions and ensure only one download task runs per unique file hash. Fixed deduplication for different URLs pointing to the same file.
🌩️ Backend & Networking (Web of Trust)
Significant refactoring of the internal Go backend to improve performance and code organization, incorporating major improvements from upstream (bitvora/haven).
- WOT Refactor: Extracted the Web of Trust (WoT) functionality into its own dedicated package (
haven-go/wot). - New Features:
- Code Quality: General cleanup, including switching to
slogand set-based optimization (see PR #113).
🚀 Performance & Startup Optimization
- Dashboard Stats: Consolidated stats refresh triggers to separate local disk size updates from remote counts, eliminating redundant network fetches at launch.
- WebSocket Improvements:
- Added
User-Agent: Haven/1.0header to resolve connection handshake issues with specific relays (e.g., nostr.wine). - Implemented
isClosingflag to suppress noisy error logs during intentional disconnects. - Added
isTemporaryflag to reduce log noise for one-off utility connections.
- Added
- Batched Metadata Fetching: Implemented 500ms batched metadata fetching with deduplication to prevent redundant relay connections for profile data.
- Stats Service Refactor: Refactored into a singleton pattern with re-entrancy protection for more reliable stats updates.
🔒 Security
- App Transport Security: Added
Info.plistwith proper App Transport Security settings for network requests.
📦 Maintenance
- Version Bump: 2.2.0
- Dependencies: Updated various Go dependencies to their latest safe versions.
- CI/CD: Streamlined release artifact generation.
Thank you for using Haven!
HAVEN for Mac v2.1.1: Native, Verifiable, & Robust
This release marks a major milestone in defining HAVEN for Mac as the premier native experience for Haven. We have restructured the entire repository to ensure complete transparency, allowing any user to easily verify and build the core Go backend themselves. "Don't trust, verify" is now a first-class citizen.
🚀 What's New
- Repo Restructuring: We've organized the codebase into
haven-go/(backend) andHavenApp/(frontend), making it easier to navigate and audit. - App Identity: The application is now officially named
HAVEN.app. - Verifiable Builds: Added new documentation
docs/VERIFY_BUILD.mdguiding you on how to compile the Go backend from source and verify the binary.
🐛 Bug Fixes & Improvements
- Settings: Added a Save and Restart Relay button, allowing for immediate configuration updates without manual restarts.
- Networking: Fixed
ws://vswss://handling to ensure correct secure/insecure connection establishment for domains. - Media Streaming: Implemented a high-performance 256KB userspace buffer workaround to bypass macOS Sandbox issues, ensuring reliable and fast media playback.
- Stability: Improved relay URL generation and standardized internal benchmarks.
Important
Installation Note: If macOS blocks the application, simply Right-Click the app and select Open or build in xcode with docs/VERIFY_BUILD.md.
Powered by 100% of the original codebase.
Haven App v2.1.0 - TestFlight Ready
We are thrilled to announce the release of Haven App 2.1.0! This major update brings significant new features, performance improvements, and critical bug fixes to enhance your Nostr experience on macOS.
Important
Installation Note: Haven is currently unsigned code. macOS will likely block the application from opening by default. To bypass this, simply Right-Click (or Control-Click) the app and select Open. You may need to do this twice.
Runtime Note if the relay fails to start initially, run pkill -9 haven in the terminal.
New Features
- Pop-out Viewer Window: You can now pop out the viewer into its own independent window, perfect for multi-tasking and keeping your feed visible while you work.
- Welcome Window: A brand new welcome experience guides new users on first launch, making it easier than ever to get started with Haven.
- Automated Database Maintenance: The app now intelligently detects and automatically resolves database locks, ensuring your relay starts smoothly every time without manual intervention.
- Media Caching: A new caching system improves media loading performance and reliability.
- Relay Statistics: Added real-time statistics tracking to monitor relay performance and event counts.
Improvements
- Performance Optimization: Significant reduction in CPU usage, particularly resolving issues where the app could lock up during relay startup.
- Media Layout: Completely overhauled media handling in the grid and full-screen viewer. Images and videos now scale correctly without distortion or cropping issues.
- Connectivity: Improved WebSocket connection logic with smarter retry mechanisms to ensure stable connections to your relay.
- Security: Enabled Hardened Runtime and configured proper entitlements for better integration with macOS security features.
- Swift 6 Readiness: Addressed strict concurrency violations across the codebase, ensuring future-proof code and thread-safety compliance.
- Stability: Codebase is now compiled with
SWIFT_STRICT_CONCURRENCY=complete, resolving potential race conditions in relay management, websocket connectivity, and media caching.
Bug Fixes
- SSL/TLS Handshake: Fixed issues where local media would fail to load due to SSL errors.
- Image Crashes: Resolved crashes related to image thumbnail downsampling.
- UI Glitches: Fixed deprecated code warnings and various layout glitches in the viewer and dashboard.
- Import/Export: Improved reliability of data import and pre-import cleanup processes.
- Scrolling Stability: Fixed a crash that could occur when scrolling through a large list of text notes.
Thank you for using Haven!
Haven for Mac v2.0.0
Haven App v2.0.0 Release Notes
We are thrilled to announce the release of Haven App 2.0.0! This major update brings significant new features, performance improvements, and critical bug fixes to enhance your Nostr experience on macOS.
Important
Installation Note: Haven is currently unsigned code. macOS will likely block the application from opening by default. To bypass this, simply Right-Click (or Control-Click) the app and select Open. You may need to do this twice.
New Features
- Pop-out Viewer Window: You can now pop out the viewer into its own independent window, perfect for multi-tasking and keeping your feed visible while you work.
- Welcome Window: A brand new welcome experience guides new users on first launch, making it easier than ever to get started with Haven.
- Automated Database Maintenance: The app now intelligently detects and automatically resolves database locks, ensuring your relay starts smoothly every time without manual intervention.
- Media Caching: A new caching system improves media loading performance and reliability.
Improvements
- Performance Optimization: Significant reduction in CPU usage, particularly resolving issues where the app could lock up during relay startup.
- Media Layout: Completely overhauled media handling in the grid and full-screen viewer. Images and videos now scale correctly without distortion or cropping issues.
- Connectivity: Improved WebSocket connection logic with smarter retry mechanisms to ensure stable connections to your relay.
- Security: Enabled Hardened Runtime and configured proper entitlements for better integration with macOS security features.
Bug Fixes
- SSL/TLS Handshake: Fixed issues where local media would fail to load due to SSL errors.
- Image Crashes: Resolved crashes related to image thumbnail downsampling.
- UI Glitches: Fixed deprecated code warnings and various layout glitches in the viewer and dashboard.
- Import/Export: Improved reliability of data import and pre-import cleanup processes.



