Back to Home
v0.8.1 2026-05-15
Fixed
• Hosted sessions failing with "User not loaded. Please sign in again." in released builds (#226 )
• Root cause: VITE_SUPABASE_URL and VITE_SUPABASE_ANON_KEY were not passed to npm run tauri build in CI or in scripts/build-and-release.sh, so the Supabase client was never initialised in the shipped binary.
• CI and the local release script now require both variables and fail fast if either is missing.
0.8.0 - 2026-02-19
Added
• User authentication with Supabase OAuth
• Sign in with Google, Apple, or Email via external browser
• Secure token storage in system keychain (macOS Keychain, Windows Credential Manager)
• Automatic token refresh every 4 minutes when authenticated
• Offline mode detection with UI indicator
• Deep link handling (homekaraoke://) for OAuth callback
• User menu with avatar and sign out option
• Host Session feature for guest access (#201 )
• Host button in session bar (requires authentication)
• Join code display (format: HK-XXXX-XXXX) visible from distance
• QR code for quick mobile join
• Copy code and copy link buttons
• Live stats: connected guests and pending requests
• Join code overlay on idle video player
• Stop hosting button to end guest access
• Automatic cleanup when ending session
• Hosted session ownership tracking (#207 )
• Hosted session info now stored in sessions table (not settings)
• Tracks which user started hosting for proper ownership
• Automatic restoration of hosted session on app restart
• Different user detection: shows dialog when another user was hosting
• Status tracking: active, paused, ended
• Prevents hosting conflicts when different user is already hosting
• Note: Users upgrading from v0.7.7 will need to re-host their session once
• Fair Queue toggle for automatic fair song insertion (#205 )
• Toggle button next to Fair Shuffle in queue panel
• When enabled, new songs insert at fair position based on singer rotation
• Algorithm: insert after round N+1 completes (N = singer's current song count)
• Preserves existing queue order - only new songs are placed fairly
• Falls back to append-to-end when no singer selected
• Setting persists across app restarts
• Song Request Approval for hosted sessions (#211 )
• Notification when guests submit new song requests with "View" action
• Requests button in queue panel header with badge showing pending count
• Approval modal displays requests grouped by guest name
• Approve or reject individual requests, or approve all at once
• Per-guest "Approve All" button for bulk approval by guest
• Approved songs automatically added to queue
• Keyboard accessible modal (Escape to close, Tab navigation, focus trap)
• Lazy loading thumbnails for performance with many requests
• Auto-assign singer when approving song requests (#215 )
• Automatically creates or finds singer for guest based on user ID
• Returning guests are recognized across sessions
• Race condition protection for concurrent approvals
Changed
• Use user_id instead of session_guest_id for guest identification (#222 )
• More stable identifier that persists across sessions
• Enables reliable singer recognition for returning guests
v0.7.7 2026-01-18
Fixed
• NextSongOverlay no longer shows current song when it's the last in queue (#197 )
v0.7.6 2026-01-17
Added
• Keyboard shortcuts for improved navigation (#192 )
• Global: Space (play/pause), M (mute), Up/Down (volume), N (next video)
• Video: F (fullscreen toggle), ESC (exit fullscreen), Left/Right (seek)
• Management: Cmd+O (add file), Cmd+F or / (focus search), Tab (switch panel)
• Queue: Arrow keys (navigate), Delete (remove), Enter (play selected)
• Fullscreen video mode with double-click or F key toggle
• UX polish improvements
• Loading states for all async operations
• Empty states with helpful messages
• Tooltips on control buttons
• Confirmation dialogs for destructive actions (clear queue, history, delete session)
• Cloud playlists feature planning (#194 )
• Detailed implementation plan for host client
• Edge case documentation for sessions, network, co-hosts
Fixed
• Removing a singer from a session no longer deletes them from Stored Singers (#188 )
• Persistent singers are now preserved when removed from session
• Only non-persistent, orphaned singers are deleted
• Added proper validation for session/singer existence in backend
v0.7.5 2026-01-14
Added
• Search history with type-ahead completion (#181 )
• Remembers past YouTube and local library searches per session
• Ghost text inline completion shows top matching suggestion
• Dropdown list with keyboard navigation (arrows, Tab, Enter, Escape)
• Settings: toggle global history, configure limits, clear history button
• Separate history tracking for YouTube vs local searches
Fixed
• Queue items no longer lost when starting a new session (#179 )
• Race condition where async database writes hadn't completed before session migration
• Now flushes all pending queue operations before session transitions
v0.7.4 2026-01-13
Added
• Overlay title bar style for cleaner, more modern window appearance (#176 )
• Main window: Borderless look with macOS traffic light controls
• Detached player: Drag from anywhere on video, double-click for fullscreen
• Platform-conditional spacing (macOS only shows traffic light area)
• TypeScript types for data-tauri-drag-region attribute
• Z-index hierarchy documentation in architecture.md
v0.7.3 2026-01-12
Added
• Configurable "Prefetch Next Video" setting with options: Never, 10s, 20s (default), 30s (#155 )
• Only applies to yt-dlp streaming mode
• Pre-loads stream URL before current song ends for seamless transitions
Changed
• Settings dialog restructured for clearer organization (#164 )
• YouTube tab (first): API key configuration only
• Advanced tab: yt-dlp settings (Search Method, Streaming Mode, Prefetch)
• "Reset All Settings" moved to Advanced tab under "Danger Zone"
Fixed
• Layout restore now correctly reattaches player when saved layout has attached player (#168 )
• Previously, restoring a layout saved with attached player would leave player detached
• Also saves attached player state explicitly for future restores
v0.7.2 2026-01-11
Added
• One-time Windows audio notice on first video play (#162 )
• Informs users to toggle mute or pause/play if first video has no sound
• Uses Tauri OS plugin for reliable platform detection
Fixed
• YouTube Embed playback now works on Windows without yt-dlp (#162 )
• App was incorrectly trying to use yt-dlp for all playback
• Now properly falls back to YouTube Embed when yt-dlp unavailable
• Settings UI simplified when yt-dlp not installed (#162 )
• Search Method and Video Streaming Mode hidden (only YouTube options available)
• Cleaner UX with less confusion about unavailable features
v0.7.1 2026-01-10
Added
• YouTube Data API v3 for search (#149 )
• Official API replaces yt-dlp as default search method
• Configure API key in Settings > YouTube tab
• ~100 free searches per day with Google Cloud API key
• Automatic fallback to yt-dlp if API key not configured
• Video duration fetched via batch API call for efficiency
• Created GitHub issues for future settings (#152 -160)
• Playback: Video Quality, Autoplay, Default Volume, Prefetch
• Display: Next Song Overlay, Singer Announcement, Player Position
• Queue: History Limit, Clear on Exit
Changed
• Settings reorganized: YouTube configuration moved to dedicated "YouTube" tab
• Unimplemented settings hidden until features are ready
• yt-dlp marked as "Unofficial" option in settings
Fixed
• Console window no longer flashes when running yt-dlp/ffmpeg on Windows (#150 )
v0.7.0 2026-01-06
Added
• Library browser now shows favorites star on each video (#139 )
• Library view automatically refreshes after rescan completes (#139 )
• Local build script for creating polished DMG releases (scripts/build-and-release.sh)
• Playwright E2E tests with 104 test cases across Chromium/WebKit (#125 )
• Test coverage for search, queue management, player controls, error handling
• Tauri API mock infrastructure for browser-based testing
• Comprehensive testing guide at tests/e2e/GUIDE.md
• Justfile with 70+ development workflow commands
Changed
• Navigation tabs styled as proper tab headers instead of buttons (#137 )
• Player/Search/Library tabs (left panel)
• Queue/History tabs (right panel)
• Active tab visually connects to content panel
• Added accessibility attributes (role="tab", aria-selected)
v0.6.3 2026-01-06
Added
• Enhanced metadata fetching for local library (Phase 5b) (#133 )
• Fetch song info from MusicBrainz (duration, album, year, artist credit)
• Fetch synced lyrics from Lrclib API
• Read companion .lrc files as fallback for lyrics
• Detect MP3+G CDG companion files (shows has_cdg indicator)
• Options enabled in Settings > Library > Rescan Options
v0.6.2 2026-01-06
Added
• Local video library support (Phase 5a) (#131 )
• Add folders from Settings > Library tab to scan for video files
• Search local files with "Local" toggle in search bar
• Supported formats: mp4, mkv, avi, webm, mov, m4v, wmv, flv
• Filename parsing extracts artist/title (e.g., "Artist - Title.mp4")
• Optional .hkmeta.json sidecar files for custom metadata
• Missing file detection with visual feedback
• Click-to-start overlay for browser autoplay compliance
Security
• Path traversal protection with canonicalization
• System directory blocking (cannot add /System, /Library, etc.)
• Recursion depth limiting for directory scanning
• Symlink detection to prevent infinite loops
v0.6.1 2026-01-04
Changed
• yt-dlp availability check is now lazy (#127 )
• Only checks on startup if playback mode is set to 'ytdlp'
• Checks when opening Settings > Advanced tab (with loading indicator)
• Caches result to database to avoid redundant checks
• Added "Recheck" button for manual re-check after installing yt-dlp
v0.6.0 2026-01-03
Added
• YouTube iframe as default playback mode (#123 )
• No external dependencies required - works out of the box
• yt-dlp now optional, available in Settings > Advanced
• Autoplay handling with retry logic and "Click to Play" fallback
• Automatic skip for videos that block embedding (error 101/150)
• Settings dialog with tabbed interface (#122 )
• Access via HomeKaraoke > Settings or ⌘,
• Tabs: Playback, Display, Queue & History, Advanced, About
• Settings persist to SQLite database
• Arrow key navigation between tabs
• Check for Updates button in About tab
• Open Log Folder button in About tab
• Video streaming mode setting in Advanced tab
Changed
• Update check now uses cached endpoint at homekaraoke.app (#121 )
• Avoids GitHub API rate limits (60 requests/hour per IP)
• Falls back to GitHub API if cached endpoint is unavailable
• DependencyCheck no longer blocks app startup when yt-dlp is missing
v0.5.9 2026-01-01
Added
• Windows platform support (#105 )
• Windows build in CI (produces MSI and NSIS installers)
• Media controls integration (play/pause from taskbar)
• Note: No code signing yet (SmartScreen warnings expected)
• Note: Multi-display support not available on Windows
v0.5.8-beta 2026-01-01
Fixed
• DMG containing Contents folder instead of HomeKaraoke.app bundle (#119 )
• create-dmg now receives staging directory instead of .app path directly
• Added trap for guaranteed cleanup of temporary staging directory
Fixed
• DMG installer missing custom background and having small icons in CI builds
• Replaced Tauri's AppleScript-based DMG styling with create-dmg tool
• Uses --sandbox-safe mode that works in headless GitHub Actions
Added
• Prefetch first queue item when player is idle (faster playback start)
Fixed
• Next song overlay showing wrong song during loading transition (#117 )
Changed
• Increased prefetch threshold from 20s to 30s for slower machines (#117 )
Fixed
• Seek bar not working when app starts with detached player (#116 )
Added
• Custom karaoke-themed background image for macOS DMG installer (#112 )
• Active singer selection for auto-assigning singers when adding songs (#109 )
• "Adding as" dropdown in search panel to select active singer
• Songs added to queue automatically assigned to selected singer
• Active singer persisted per session
Changed
• Notification duration now varies by type (#111 )
• Success: 3s, Info: 4s, Warning: 6s, Error: 8s
Added
• Fair Shuffle button in Queue panel (#109 )
• Reorganizes queue into fair round-robin order by singer
• Multi-singer items (duets) count for ALL singers involved
• Uses MAX count algorithm: duets wait until all singers are due
• 11 unit tests for shuffle algorithm
• Icon-only buttons for Queue and History panels
• Shuffle, Trash, Star, and ListRestart icons from lucide-react
• Improved accessibility with aria-labels
Changed
• Reduced notification auto-hide duration from 10s to 4s
Added
• Update notification on app startup (#99 )
• Checks GitHub releases API for newer versions
• Shows notification with Download button linking to release page
• Remembers dismissed versions to avoid repeated notifications
• Comprehensive CONTRIBUTING.md guide for new contributors (#103 )
• In-app notification system for errors and messages (#98 )
• Notification bar slides up from bottom of screen
• Support for error, warning, success, and info notification types
• Auto-hide after 10 seconds with manual dismiss option
• Indicator button to view last notification after it hides
• Notifications can include action buttons with external links
• Replaces silent errors with visible user feedback
Fixed
• Fix choppy video playback in detached window on Fedora Linux (#100 )
• Disable WebKitGTK DMABuf renderer to resolve multi-window video rendering issues
Fixed
• Fix video playback not working on Fedora Linux (#93 )
• Add GStreamer codec plugin dependencies for Linux packages
• RPM: gstreamer1-plugins-base, gstreamer1-plugins-good, gstreamer1-libav
• DEB: gstreamer1.0-plugins-base, gstreamer1.0-plugins-good, gstreamer1.0-libav
• Prefer H.264 (avc) codec and exclude HLS streams for WebKitGTK compatibility
Added
• Singer Favorites feature (#88 )
• Persistent singers can save favorite songs
• Star button on search results and history items to add/remove favorites
• Manage Favorites dialog (Singers menu) to view and manage favorites per singer
• Load Favorites to Queue dialog to quickly add favorites to queue
• Auto-assign singer when loading favorites to queue
• Promote session singers to persistent via star icon
• Add persistent singers to session from singer picker dropdown
• unique_name field for singer disambiguation
Changed
• Rename app from "Karaoke" to "HomeKaraoke" (#91 )
• Updated bundle identifier to app.homekaraoke
• Updated all UI labels, window titles, and menu items
• Updated D-Bus/MPRIS name for media controls
Added
• Linux build support for Fedora and Debian (#89 )
• Builds .deb packages for Debian/Ubuntu
• Builds .rpm packages for Fedora/RHEL
• Builds .AppImage for other distributions
• Media controls work via MPRIS/D-Bus
• Note: Display layout save/restore not yet available on Linux
• Apple Developer code signing and notarization for macOS distribution (#85 )
• App is now signed with Developer ID certificate
• Builds are notarized with Apple for Gatekeeper approval
• GitHub Actions workflow updated to sign and notarize release builds
0.4.0 - 2025-12-28
Added
• Reload button in PlayerControls for stuck videos (#69 )
• Re-fetches streaming URL and reloads video from the beginning
• Useful when videos get stuck in loading state
• "Play Next" button in search results to add songs to top of queue (#72 )
• Inserts song at position 0 so it plays immediately after the current song
• If nothing is playing, starts playback immediately
• Button order: [+] Add to Queue, [⏭] Play Next (green), [▶] Play Now
Changed
• Improve About dialog with description and GitHub link (#65 )
• Display app description and clickable GitHub repository link
• Show author information and copyright with dynamic year
• Use compile-time environment variables from Cargo.toml for consistency
• Use thiserror for structured error types in Rust backend (#57 )
• Replace string-based error handling with typed CommandError enum
• Better error categorization (database, validation, not found, etc.)
• Errors now include type information for easier debugging
• Updated all command modules: display, queue, session, keep_awake, media_controls, youtube
Fixed
• Associate existing queue and history with newly started session (#77 )
• Queue and history items are now migrated to the new session when clicking "Start Session"
• Previous behavior would reset the UI and leave items orphaned in the old session
• Fix song duration display not updating when switching songs in detached mode (#71 )
• Duration from video metadata in detached window is now synced back to main window
• Resets duration/currentTime when setting new video to prevent stale values
• Fix queue not continuing after playing from History or Search (#68 )
• Songs played from Search or History no longer cause auto-play to continue through history
• When a song ends naturally, the next song always comes from the queue
• "Next" button still navigates forward through history as expected
• Fix window restoring to wrong display and size (#60 )
• Use Tauri's monitor API for consistent physical pixel coordinates
• Previously used CoreGraphics logical points which don't match window positions on Retina displays
• Windows now correctly restore to their saved position on the correct monitor
0.3.5 - 2025-12-27
Fixed
• Add missing Tauri permissions for window position/size operations
• Fixes "window.set_position not allowed" error during layout restore
0.3.4 - 2025-12-27
Added
• "Replay All" button in History panel to move all history items back to queue (#47 )
• Moves all played songs back to the queue in their original order
• Clears history after moving items
• Persisted to database for session recovery
Fixed
• Validate window bounds before restoring position (#52 )
• Prevents windows from being positioned off-screen after display changes
• Windows are centered on main display if saved position is no longer valid
• Constrains window size if larger than current display
0.3.3 - 2025-12-26
Added
• Display hotplug detection and window layout restore (#48 )
• Automatically detects when displays are connected/disconnected
• Save current window layout via View → Save Display Layout menu
• Restore dialog appears when a saved display configuration is detected
• "Remember my choice" option for automatic restore without dialog
• Auto-restore saved layouts on app startup
• Detach button appears on hover over video player
• Database storage for display configs and window states with proper migrations
Changed
• Refactor: Extracted shared video playback logic into playVideo helper (#42 )
• Consolidated duplicate code from PlayerControls and useMediaControls
• New playVideo() function in playerStore handles stream URL fetching, state updates, and error handling
Fixed
• Media controls event polling thread now shuts down gracefully on app exit (#40 )
• Added shutdown flag mechanism with recv_timeout for responsive termination
• Thread handle stored in AppState for proper cleanup
• Video loading indicator now works correctly when player is detached
• Fixed double audio issue when starting with detached player window
0.3.1 - 2025-12-26
Added
• macOS Now Playing widget integration (#38 )
• Display song title and artist in Control Center, Touch Bar, and AirPods controls
• Support for media key controls (play/pause, next, previous)
• Album artwork from YouTube thumbnails
• Playback position and progress tracking
0.3.0 - 2025-12-26
Added
• Queue and history persistence across app restarts (#31 )
• Queue and history data saved to SQLite database per session
• Sessions menu in macOS menu bar for managing stored sessions
• Load, rename, and delete stored sessions from dialog
• Singer assignments preserved with queue items
• Empty sessions automatically cleaned up on end
• Singer avatars displayed in stored sessions list
• Infinite scroll pagination for search results (#35 )
• Automatically loads more results when scrolling to bottom
• Fetches up to 50 results per search (displays 15 at a time)
• Shows "Loading more..." indicator while fetching
• Displays "End of results" when all results are shown
0.2.1 - 2025-12-26
Fixed
• Singer picker button now has better contrast against queue item tiles (#30 )
• Singer picker button has distinct hover state with blue highlight (#30 )
• Singer assignment dropdown now fits within window bounds (#32 )
• Dropdown opens below button when insufficient space above
• Dropdown is scrollable when list of singers exceeds available space
0.2.0 - 2025-12-25
Added
• Debug logging mode with macOS app menu toggle (#21 , #22 )
• Persistent file logging via tauri-plugin-log (~20MB max, 4 rotated files)
• View → Debug Mode menu toggle
• View → Open Log Folder menu item
• Structured logging with scoped loggers throughout the app
• Show next song overlay with countdown before video ends (#12 , #17 )
• Prefetch next video stream URL to reduce loading time (#11 )
• Detachable video player window (#6 , #7 , #20 )
• Pop out video to separate window
• State sync between main and detached windows
• Reattach functionality
• Microphone app icon for all platforms (#14 )
• UI Polish: Tabbed view, keep-awake, and draggable queue (#4 , #8 )
• YouTube integration with yt-dlp (#2 , #3 )
• Search YouTube videos
• Stream playback
• Auto-install yt-dlp if missing
Fixed
• yt-dlp detection in built .app bundles (#16 )
• Detached player state synchronization issues (#20 )
• Various seek, progress bar, and error handling improvements
0.1.0 - 2025-12-01
Added
• Initial release
• Basic Tauri + React + TypeScript setup
• SQLite database for persistence
• Queue and history management
• Basic video player controls