Changelog
What's new in Vibrdrome
Security
- Added an explicit confirmation when saving a public, non-local HTTP server connection. Local/LAN HTTP servers and HTTPS connections are unchanged.
Bug fixes
- Fixed the progress slider and time display on tracks whose duration is under-reported by the player: elapsed time no longer counts past the end of the slider, the total reflects the longer of the player and server durations, and seeking can reach the true end of the track (#58).
- Fixed the mini player overlapping the tab bar on small iPhones without a home-indicator inset (iPhone SE, mini): the player now clears the taller iOS 26 tab bar, while notched phones are unchanged (#69).
- Quick Settings (Now Playing → gear) now opens at full height so the Download and Share rows are reachable on smaller iPhones, where they were previously clipped below the sheet; the sheet can still be dragged down to the medium size (#72).
- Fixed a stacked double back-arrow when opening Settings → Player through the bottom-right “More” tab on iPhone: overflow tabs (e.g. Radio, Settings) now use an app-owned More menu instead of the system overflow, so navigating deeper keeps a single back button (#70).
Library & Metadata
- Multi-artist tracks show each credited artist as an individually tappable link to that artist's page; single-artist tracks and older servers fall back to a single link as before (#59).
- Tracks on Various Artists / compilation albums now show their real per-track artist instead of “Various Artists”, using the OpenSubsonic
artists array (Subsonic) and participants.artist (Navidrome native) (#59).
- Album editions are shown separately from the album title, matching the Navidrome web app's distinction between release name and edition, e.g. “Deluxe Edition” (#60).
- Get Info gained OpenSubsonic metadata: Credits (composer / contributors / album artist) and Classical (works / movements / groupings) for songs, plus bit depth, sampling rate, channels, ISRC, and explicit status; albums add release / original-release dates, moods, compilation flag, disc titles, and full genre lists.
- Named disc titles appear as disc separators in album detail when the server provides them.
- Lock screen and CarPlay use the OpenSubsonic display album artist and composer.
- New “Is compilation” tristate filter in the macOS album filter sidebar.
Performance
- Opening Search no longer hitches — genre loading moved off the main actor so the navigation transition stays smooth (#80).
Security
- Artist external link URLs hardened (macOS): the artist-name substitution is strictly percent-encoded so it can't inject extra query parameters (#73), and links are restricted to http/https schemes so a tampered template can't open
javascript:, file:, mailto:, or custom app-scheme URLs (#74).
Lyrics
- Internet lyrics fallback: when your server has no lyrics, Vibrdrome looks them up on LRCLIB and shows them — synced (auto-scroll, tap-to-seek) when available, otherwise plain. A Settings → Player toggle (default on) controls this; lookups send title/artist/album to lrclib.net (#82).
- Per-song lyric timing nudge: shift synced-lyric timing in 0.1s steps when a track runs a little ahead or behind. Remembered per song (#86).
Downloads
- The Downloads screen groups your offline music by album (artwork, artist, count → tap to open) and surfaces a Playlists section, instead of one flat list (#76).
Shortcuts
- New “Play Playlist” action for the Shortcuts app and Siri — play one of your playlists by name (#57).
Stability
- Fixed a background-download crash (RUNNINGBOARD
0xdead10cc): the SwiftData save that runs when a download completes while the app is suspended is now protected by a background-task assertion so it can't be killed mid-write (#77).
Stability
- Crash & hang diagnostics via MetricKit: the app captures crash, hang, CPU-exception, and disk-write-exception reports from the system, stores the newest 25 locally, and shows them in Settings → Diagnostics with a one-tap Copy. No remote crash backend — nothing leaves the device unless you send it.
- The Diagnostics screen is now reachable from Settings (previously unlinked).
Bug fixes
- Now Playing toolbar icons were invisible in light mode over light album art; contrast restored (#79).
- Favorites empty state no longer shows two overlapping messages (#67).
- Mini-player artwork resets to 0° when Spinning Art is disabled instead of freezing at the last angle (#71).
- Now Playing toolbar: sheet detents and icon shadow refinements (#68).
- Widget cover-art storage moved from App Group UserDefaults to a file, fixing stale/oversized widget artwork.
- Songs view restored the inset-grouped card look.
- macOS artist detail redesign: hero header, expandable biography, genre pills, customizable external links (Last.fm / MusicBrainz / Wikipedia / Google by default)
- New macOS Home page with discovery sections (Quick Actions, Jump Back In, Recently Added, Most Played, Featured Genre, more) and configurable section order
- New macOS loading screen on startup, transitions to home once sync is ready
- macOS album detail metadata view: clickable genre and label pills, copy-selectable MusicBrainz ID, faster navigation
- macOS song table: 11 reorderable columns, persisted across launches
- Hover overlay on macOS album grid cards: favorite, rating, and a centered play/pause button that starts the album or toggles playback if it is already the active queue
- Song pre-download: the next track fetches in advance for gapless transitions on slow connections; smart shuffle gets a cached-lookahead redesign
- Library filter UI + adaptive grids on macOS (multi-select genre / label / artist, TriState favorites and downloaded toggles)
- Multi-genre support across album list, search, and filter sidebar
- WebP cover art support, off-MainActor filter, Nuke image prefetch
- SwiftData #Index across CachedSong / CachedAlbum / CachedArtist plus a new AlbumGenre join table; substantial album view performance work (iOS 18 / macOS 15 minimum)
- CarPlay: Albums alphabet directory now reads the full library from local cache regardless of server sort order (no more "only # and T" letter buckets)
- Cold launch: iOS lock-screen widget now shows the saved track after force-quit + reconnect (audio session uses longFormAudio policy). CarPlay's top-right Now Playing button still needs the user to start playback once -- iOS reserves that status for apps with observed audio activity. Template-stack overflow crash from tapping the system Now Playing icon while deep in navigation is fixed.
- Audio interruption: notifications announced over CarPlay no longer restart the track at 00:00 on iOS 26.x; the resume now seeks back to the saved position before resuming playback rate
- Bug fixes: GenresView optimism crash defense, AlbumGridCard star/rating sync restored, FolderDetailView iPad navigation loop, Remove Offline orphan cleanup, cover art prefetch cache-guard, Queue view ordering, PlaylistsView mosaic scaling
- Visualizer: real 32-band FFT drives Spectrum, Waveform, and Aurora (bass on the left, treble on the right)
- Visualizer: peak-hold caps on Spectrum preset; FFT window 1024 -> 2048 for finer low-end resolution
- CarPlay: two-letter drill-down for Artists and Albums so large collections are navigable
- CarPlay: alphabet index fits the screen; hard caps lifted on Albums and Starred
- Audio: call or text interruption near the top of a track no longer restarts playback from 0
- Get Info: handles SwiftData .optional and .foreignReference Mirror styles in the Raw tab
- Get Info window with Overview and Raw metadata tabs
- CMD+K / CMD+F search keyboard shortcuts on macOS
- Now Playing toolbar: hides when empty, new Toolbar Background toggle
- New Radio Mix toolbar item (song-similarity mix)
- Radio grid cards: long-press to Delete Station
- Add Station form: labeled sections for Name / Stream URL / Homepage
- Liquid Glass toggle subtitle explains what it does
- iPad floating keyboard no longer drags the mini player up
- Fix: CarPlay Genres crash on tap (SwiftUI rasterization asserted on missing environment)
- Replaced rasterized fallback with a plain SF Symbol; album art still loads async
- Fix: Genres tab crash on open
- Fix: CarPlay Radio now a flat scrollable list (was chunked by 20)
- CarPlay caps raised: Genres uncapped, Favorite Songs/Albums 20 -> 200
- New Apple Music-style Library tab with Playlists / Artists / Albums / Songs / Genres / Downloaded + Recently Added
- Default tab bar: Home, Favorites, Library, Search, Radio
- Favorites tab reworked with Songs / Albums / Artists segments and grid-list toggle
- New home carousels: Favorite Albums and Featured Genre (daily rotation)
- Heart button on Album Detail and Artist Detail to favorite/unfavorite
- Filter menu on Artists and Albums (All / Favorites / Downloaded)
- Genre list now uses real album artwork
- CarPlay: genre list shows album art + audio resumes after Siri/call/message interruptions
- macOS window title hidden next to traffic lights
- Larger section headings across library views
- iPad landscape mini player no longer stretches full-width
- 536 unit tests in 40 suites
- Fix: semicolon-containing genres (Hip Hop; Pop) no longer error on tap
- Fix: first tap on song/album rows now plays or navigates reliably
- Fix: Album search now searches the entire library, not just loaded pages
- Fix: audio glitch when spam-tapping tracks or play/pause
- Tighter touch separation between song title and artist in track rows
- Contributor CARPLAY_ENABLED build flag + signing guide
- 536 unit tests in 40 suites
- Album Collections: save filter presets to sidebar
- 336 AI-generated genre icons (DALL-E 3)
- Genre filter in Albums sort menu
- Grid columns up to 10 on macOS
- Auto-Suggest on/off toggle
- navigationDestination fix
- 536 unit tests in 40 suites
- Queue overhaul: all tracks visible, tap plays without hiding others
- Recently Played records gapless auto-advance, filters brief skips
- Now Playing landscape layout (art left, controls right)
- Grid art scales to 3/4 column settings
- Full context menu on queue tracks
- Watch album art refreshes on track change
- Auto-Suggest on/off toggle in Settings
- Cold-start audio session fix
- 536 unit tests in 40 suites
- Lossless badge in Now Playing (toggleable in Settings)
- Your Top Artists carousel on Home with album art
- Search tab auto-focuses keyboard
- iPad sidebar scrollable past mini player
- Delete downloads crash fix
- 532 unit tests in 40 suites
- Tab bar reorder works instantly without kicking to Home
- Queue layout: Recently Played, Now Playing, Up Next
- Queue auto-scrolls to Now Playing on open
- Play history tracks all playback paths
- 532 unit tests in 40 suites
- Tab bar drag-to-reorder restored
- A-Z section index on Artists with tap-to-jump
- Configurable grid columns (2/3/4) across all grid views
- Search bars hidden by default (pull down to reveal)
- 532 unit tests in 40 suites
- Fix: Sleep timer end-of-track resume advances to next track
- Fix: Recently Played tracks actual play history
- Fix: Track title no longer navigates away (long-press for Song Info)
- ReplayGain info shown in Now Playing streaming info
- Playlist Play Next, Add to Queue on detail and context menus
- 532 unit tests in 40 suites
- Security: credentials to Keychain, download path sanitization
- Accessibility: VoiceOver labels throughout player and track rows
- CarPlay: Recently Played replaces broken Search, radio station sections
- macOS UI overhaul: polished mini player, Now Playing, album detail, grid/list
- iPad: server manager responsiveness fix
- ReplayGain pre-gain and fallback gain for loudness matching
- Album Play Next and Add to Queue actions
- 532 unit tests in 40 suites
- CarPlay overhaul: Now Playing, Up Next, progress tracking, auto-navigate
- Apple Music-style dock: Artists, Albums, Songs, Genres, Favorites tabs
- Toolbar cleanup, green dot in menu, tappable artist on albums
- Offline ListenBrainz/Last.fm scrobble queue
- Last.fm auth fix, visualizer stutter fix
- 8 bug fixes from full app audit (playlist delete, downloads, sleep timer, lyrics)
- 512 unit tests in 37 suites
- Tappable artist name on album detail navigates to artist page
- Offline scrobble queue for ListenBrainz and Last.fm
- Fix: Last.fm auth for passwords with special characters
- Fix: Visualizer no longer stutters audio on open
- 512 unit tests in 37 suites
- Last.fm scrobbling with username/password sign-in flow
- Backup & Restore settings (named JSON export/import)
- Faceted search: Genre, Year, Format filter chips
- Deep links: vibrdrome:// URLs in shared text
- Crossfade curves: Linear, Equal Power, Logarithmic
- Fix: Transcoding through reverse proxy no longer garbles audio
- Fix: Visualizer UI stays visible during menu interaction
- Fix: No audio stutter when opening visualizer
- Album sort fix, multi-select batch actions, refactoring pass
- 512 unit tests in 37 suites
- Fix: Repeat All loops entire queue (was restarting current track)
- Fix: Transcoded streams resume on error instead of restarting
- Settings 2.0: Player, Appearance, Tab Bar sub-pages with 15+ toggles
- Smaller album art, bigger text, spinning art toggle, progress ring
- Home tab with server name, profile menu, playlist creation
- Connection indicator, haptic tab switch, Downloads tab
- Mini player dock matching, white area bug fix
- Always-visible search bars on all browse views
- Now playing indicator with animated waveform
- Swipe actions: Play Next / Add to Queue
- Toolbar drag-to-reorder in Settings
- iOS 26 Liquid Glass and floating tab bar
- Playlist public/private sharing
- macOS keyboard shortcuts and single-instance
- Discord Rich Presence with Application ID
- 510 unit tests in 37 suites
- Now Playing toolbar: bold white icons, customizable in Settings
- Album detail: Apple Music style buttons, lossless badge, per-track hearts
- Mini player tint reduced to match system tab bar
- Text contrast improved for light mode
- Track row: tappable heart, bigger download icon, inline menu
- Smart shuffle: avoids consecutive same-artist tracks
- Recently Played section in Queue view
- Mini player long-press context menu
- Search result counts, haptics on radio/queue/search
- Back button removed from Now Playing (swipe down to dismiss)
- Bottom toolbar: 6 bigger icons with native AirPlay
- Quick Settings sheet: sleep timer, speed, crossfade, download, share
- Spacing improvements throughout
- Now Playing: all titles tappable, album name restored, bigger icons
- Sleep timer moved into more menu
- Custom progress and volume sliders (small dot, no thumb)
- Playlist Play button style matched to Shuffle
- Tighter spacing throughout Now Playing
- Jukebox mode: remote control for server-side audio playback
- Visualizer: much better beat sync with asymmetric smoothing
- Playlist Play button icon visibility fix
- Now Playing spacing improvements
- Album art tap navigates to album detail
- 495 unit tests in 34 suites
- Tap album art in Now Playing to navigate to album detail
- Now Playing redesign: heart/stars/sleep row, shuffle/repeat with transport, volume slider, streaming info, More menu
- Album Detail: full-bleed parallax art header, circular action buttons
- Watch app album artwork and auto-reconnect
- Songs view: 1 API call instead of 51 per page
- Playlist share button
- Offline mode fix: downloaded songs now playable and discoverable
- Offline banner tappable — navigates to Downloads
- Offline search — searches downloaded songs locally
- Bottom padding fix on 7 views (mini player no longer covers content)
- ListenBrainz scrobbling with settings toggle and token input
- Discord Rich Presence (macOS): shows song/artist/album in Discord
- watchOS companion app: Now Playing, Queue, Library, sleep timer, star/shuffle/repeat
- Similar Artists section on Artist Detail
- Artist biography from Last.fm/MusicBrainz
- Mini player swipe left/right for next/previous
- Favorites and Downloads: Play All / Shuffle buttons
- Songs view: infinite scroll, Play All / Shuffle, song count
- Queue total duration in header
- Album Detail: Start Radio, Share buttons
- Song sharing in context menus
- Now Playing fade/scale transition
- Accessibility: 35+ identifiers, improved contrast
- Audio clipping fix for AirPlay/casting
- AirPlay 2 multi-room verified
- 482 unit tests in 33 suites
- Remove Dynamic Island Live Activity (duplicate of system Now Playing, caused double lock screen and zombie notifications)
- CarPlay login: improved Keychain retry with 3 attempts at increasing delays (1s, 2s, 5s)
- CarPlay radio: add DuckDuckGo favicon fallback for stations without Navidrome 0.61 server artwork
- 448 unit tests in 29 suites
- Mini player redesign: capsule shape with spinning album art and circular progress ring
- Tappable genre badge on Now Playing navigates to genre albums
- Inline download button on every track row
- Smart Playlists pill added to Library
- Playlist and Radio grid/list view toggle
- Widget overhaul: album art blur, large size, interactive controls
- Dynamic Island Live Activity for now playing
- Smart queue: auto-continues with similar songs
- Queue sharing: save current queue as playlist
- Album detail: disc separators, Similar Albums carousel
- Artist page: Top Songs section
- CarPlay artwork on all lists, radio stale art fix
- Text Size picker (Small/Default/Large/Extra Large)
- Offline mode banner
- Long-press album art to save/share
- Toolbar spacing increased, underlines removed
- 451 unit tests, security fixes, performance optimizations
- Dynamic Island Live Activity for now playing
- Smart queue: auto-continues with similar songs when queue ends
- Queue sharing: save current queue as playlist
- Album detail: disc separators, Similar Albums carousel
- Artist page: Top Songs section before albums
- Download indicators on tracks
- Offline mode banner
- Long-press album art to save/share
- Playlist and Radio grid/list toggle
- Recently Played carousel
- Widget: album art blur, large size, interactive controls
- Security fixes and 451 unit tests
- Now Playing redesign: controls toolbar moved above progress bar, actions below
- 5-star ratings with Subsonic setRating API
- Sleep timer countdown visible next to moon icon
- Fade/scale animation on Now Playing open
- Genre artwork thumbnails in genres list
- Decades card layout with album art backgrounds
- Playlist artwork mosaic (2x2 grid for playlists without server artwork)
- Play History screen with today/week/all-time stats, top artists, top albums
- Accessibility audit: identifiers added to 17 views, star rating contrast improved
- Performance: stop unnecessary MPNowPlayingInfoCenter updates, use Nuke cache for dominant color
- 442 unit tests in 27 suites
- Tappable artist/album names on Now Playing (dismiss and navigate to detail)
- Queue context menu on long-press (Play Now, Play Next, Remove)
- Queue swipe-left to remove
- CarPlay credential retry with 1s delay
- Home screen widget (Now Playing, small and medium sizes)
- Siri Shortcuts (Play Favorites, Play Random Mix, Toggle Playback, Skip Track, Artist Radio)
- Mini player background tints with album art dominant color
- Up Next subtitle on mini player
- Haptic feedback on playback controls and star
- Pull to refresh on Library
- Search history (saves on submit, shows recent searches)
- Radio station artwork in mini player and CarPlay
- Fix radio artwork crash (MPMediaItemArtwork closure isolation)
- Navidrome 0.61 radio station artwork (coverArt with ra-{id} workaround)
- Security: switch favicon service from Google to DuckDuckGo
- Security: fix isLocalAddress for full RFC 1918 range
- 392 unit tests, security audit, privacy policy updated
- Fix CarPlay logout when connecting (Keychain accessibility change)
- Allow HTTP connections to non-local servers (DuckDNS, dynamic DNS)
- Security warning shown for HTTP URLs recommending HTTPS
- Fix lock screen showing 15-second skip buttons instead of previous/next track
- Library folder switching for multi-library Navidrome servers
- musicFolderId support added to album list, search, starred, and random songs API calls
- Fix CarPlay crash caused by CPSearchTemplate in tab bar
- Search moved to Library > Search in CarPlay
- Radio station favicons from homepage domain and radio-browser.info
- CarPlay threading improvements (@MainActor on scene delegate and search handler)
- CarPlay audio entitlement enabled
- Customizable Library layout (show/hide/reorder pills and carousels)
- 6 new visualizer presets: Lava Lamp, Starfield, Ripple, Fireflies, Prism, Ocean (18 total)
- Smoother visualizer audio reactivity (reduced FFT gain, lower smoothing factor, lerp interpolation)
- Photosensitivity warning on first visualizer launch with "Don't Show Again" option
- Disable Visualizer toggle in Settings > Accessibility
- Epilepsy notice and prefers-reduced-motion CSS on website
- Fix device rotation dismissing player, visualizer, and lyrics views
- Move fullScreenCover for NowPlayingView to ContentView for rotation stability
- Lift showNowPlaying, showVisualizer, showLyrics state to AppState
- Remove unused Metal shader variable
- Rotation UI tests verifying player/visualizer/lyrics stay open
- Audio-reactive visualizer with FFT spectrum analysis
- 12 Metal shader presets
- Library quick access pills and carousels
- Bug fixes and stability improvements
- Initial TestFlight release