Relay 0.3.0
I just tagged a new version of Relay. Special thanks to Lukas Santos for contributing some fixes and improvements to Relay!
Here's what's new since 0.2.3:
UI Redesigns
- Login view -- New welcome page with a pick-list of server offerings alongside the standard login screen.
- Inspector -- Redesigned with a segmented tab capsule layout grouping settings into General, Members, Behavior, Notifications, Security, and Roles.
- Room list -- Refactored into subviews; muted rooms are now excluded from sorting and display a "mute" icon.
- Toolbars -- Simplified with a centered avatar/room name and an explicit inspector button, replacing the non-intuitive avatar-tap interaction. The "Create Room" button was removed in favor of the room directory.
- Settings -- Restructured into separate files per tab; Account Settings tab got a visual refresh.
- GIF picker -- Styled with a floating glass search field and an attribution capsule.
New Features
- Colored message bubbles -- Sender-specific bubble colors derived from a stable DJB2 hash of the Matrix user ID, adaptive to light/dark mode. Off by default, toggled via a new Appearance preferences tab.
- Drag & drop -- Files can now be dropped directly onto the timeline view.
- Offline sync monitoring -- Automatic reconnection when connectivity is restored.
- Room list message previews -- Shows the author and last message text in the room list and notifications.
- Link previews in room list -- Room subtitle previews now visualize links (accent-colored) without making them tappable.
Notifications Overhaul
- Notifications now respect per-room notification modes (All Messages, Mentions & Keywords Only, Mute) with sensible defaults (DMs default to All, groups to Mentions & Keywords).
- Per-room notification overrides configurable via the room inspector.
- Red dot for DMs/mentions/keyword matches; blue dot for regular unread messages.
- Banner suppressed (sound still plays) when viewing the notified room.
- Keyword push rules now use the Matrix REST API directly, creating standard
content-type rules compatible with other Matrix clients like Element. - Only actual messages trigger notifications, not state events.
Bug Fixes
- Incoming verification -- Fixed flow failing to present the sheet and start SAS due to observation timing, sheet modifier placement, and a missing
startSasVerification()call. - Verification banner -- No longer flashes on startup; gated behind an explicit verification-state check.
- Logout/re-login lifecycle -- Fixed broken sync and stale state after logging out and back in (zombie sync, stale keychain callbacks, missing cache cleanup).
- DM avatars -- Fixed missing avatars in sidebar and toolbar by falling back to the first hero's avatar URL.
- Dock badge logic -- Updated to be more accurate.
- Blockquote styling -- Increased text alpha for better readability.
Infrastructure
- GIPHY API key is now XOR-obfuscated at build time instead of stored in plain text.
- Added CI workflow for building on macOS with Xcode 26.