Releases: FrancescoGrazioso/Meld
0.7.2
🚀 Meld v0.7.2
This release introduces the first iteration of Qobuz integration, alongside a range of improvements to the Spotify and YouTube backends, the player UI, and
overall stability.
⚠️ Experimental Qobuz Support
Meld now includes an experimental Qobuz backend, available under Settings → Integrations → Qobuz.
Before you get too excited: this integration is currently very unstable and should be considered a preview rather than a finished feature. Some functionality may
not work as expected, playback may fail, and parts of the integration are still incomplete.
If you decide to try it, please expect bugs.
🎵 Why Qobuz?
For those unfamiliar with it, Qobuz is a music streaming service focused on high-fidelity audio quality.
Compared to YouTube Music, Qobuz offers:
- Lossless FLAC streaming
- High-resolution audio (up to 24-bit / 192 kHz where available)
- Rich album metadata and credits
- A catalog oriented toward audiophile listening
The long-term goal is to make Qobuz available as an alternative playback backend, allowing users to benefit from higher-quality audio sources within Meld.
🧪 Current Status
The integration is still in its early stages:
- Basic Qobuz support has been added
- Stability is currently poor
- Playback reliability varies
- Some content may fail to load or resolve correctly
- Expect regressions and edge cases
For this reason, the feature should be considered experimental for now.
✨ Also in This Release
Beyond Qobuz, v0.7.2 brings a number of fixes and improvements across the app.
Spotify
- Improved queue handling
- Liked Songs support
- Playlist pagination fixes
- Android Auto authentication
YouTube
- Thumbnail fallback with high-resolution artwork
- Better handling of playlist fetch timeouts
Interface
- High-resolution artwork in the player
- Improved rendering for complex-script lyrics
- MiniPlayer refinements
- New toggles to hide the "Recognize Music" and "Play Random" buttons on the Home screen (#135)
Stability
- Benign crash reports are now suppressed
- More reliable queue persistence
💬 Feedback Needed
If you encounter issues, please open a GitHub issue and include as much information as possible:
- Steps to reproduce
- Expected behavior
- Actual behavior
- Logs (if available)
Detailed reports dramatically reduce the time required to track down and fix problems.
❤️ Open Source Reminder
Meld is developed and maintained by a single person in their spare time. Between work, testing, bug fixing, and life outside of software, development time is
limited.
If you have ideas, improvements, or fixes, pull requests are always welcome. Every contribution helps make Meld better for everyone.
0.7.1
Meld 0.7.1
A big jump from 0.6.7: a much deeper Spotify integration, new SponsorBlock feature, more reliable lyrics and fewer crashes.
Highlights
SponsorBlock (opt-in)
Automatically skip non-music segments (intros, outros, sponsor reads, talking sections) using the SponsorBlock community database. Fully optional and disabled by default — find it under Settings → Player → SponsorBlock.
- Pick which categories to skip (default: only "non-music section")
- Silent skipping, or enable a toast when something is skipped
- Works with the screen locked and when seeking back into a segment
- Privacy-friendly: the video ID is never sent in plaintext to the server
Spotify-powered home
The Home tab is now populated directly with your Spotify recommendations (your mixes, recent plays, recommended albums and playlists), so the first thing you see when opening Meld actually reflects your Spotify world.
Deeper Spotify integration
- Play Spotify albums directly (previously limited)
- Spotify library folders are now visible and browsable
- All your Spotify playlists are loaded (some used to go missing)
- Liked Songs sync from Spotify
- Liked songs and Spotify playlists are also available on Android Auto
- Faster loading: optimized parallel Spotify→YouTube matching with an in-memory cache
Smoother lyrics
- When you scroll lyrics manually, auto-scroll resumes after a moment and re-aligns with the song (issue #80)
- If lyrics load late, they now correctly sync to the current playback position instead of starting from line one (issue #79, #90)
- Tapping a line jumps the song to that point and auto-scroll resumes immediately
Reliability
- New crash reporting flow via GitHub Issues, making it easier to report problems
- No more spurious crash reports for transient YouTube errors (expired URLs, "missing stream expire time", brief audio-decoder hiccups): they're now recovered silently
- More resilient image loading — a network error on a thumbnail no longer breaks the library screen
- Wider unit-test coverage in CI
Under the hood
- Auto-updating Spotify GraphQL hashes
- Performance: in-memory LRU cache for Spotify matching, in-memory DataStore snapshot
- StrictMode enabled in debug builds to catch main-thread I/O early
0.6.7
🚀 Meld v0.6.7 — Changelog
Fixed error for updates after previous version.
I'm very sorry for the inconvenience 😔
0.6.6
🚀 Meld v0.6.6 — Changelog
This update introduces powerful new features, important bug fixes, and upstream improvements to enhance performance, usability, and reliability.
✨ New Features
-
Intelligent Pre-Caching
Meld can now automatically download the next N tracks in the queue (3/5/10/20) in the background, ensuring seamless offline playback. Configurable in Settings → Storage, with an optional Wi-Fi only mode. -
Followed Artists Sync from Spotify (#13)
Artists followed on Spotify are now synchronized with the local library and marked with a dedicated Spotify chip. -
Bulk Download for Spotify Playlists (#34)
Download an entire Spotify playlist with a single tap directly from the overflow menu.
🐛 Bug Fixes
-
Speed Dial Fix
Pinning Spotify’s Liked Songs no longer triggers the"no content in fetchPlaylist response"error. -
Build and Branding Improvements
Fixed build and branding issues following the latest upstream rebase.
🔼 Upstream Updates (Metrolist v13.4.0)
- Varispeed Mode — Link playback pitch with speed
- Expanded Library Search — Search functionality extended across all library screens
- Play Music from URL — Stream tracks directly from a URL via the search bar
- Lyrics Fix — Added timeout handling for lyrics providers
- Playlist Sync Fix — Downloaded tracks are preserved during synchronization
- Queue Improvements — Fixed play-next behavior and ghost additions
- Player Navigation Fix — Improved back gesture handling in the expanded player
- Track Labels Fix — Corrected cached/downloaded indicators
- Updated Translations
💙 Enjoying Meld? Consider supporting the project and sharing your feedback!
0.6.2
v0.6.2 — Dynamic Spotify GQL Hash Management
What's new
Spotify periodically rotates the SHA-256 hashes required by its internal GraphQL API. Previously, these hashes were hardcoded — meaning a new app release was needed every time Spotify rotated them, leaving users unable to access Spotify features in the meantime.
This release introduces a fully automated hash synchronization system that keeps the app working transparently, without user intervention.
How it works
- Remote hash registry — A GitHub Actions workflow runs daily, extracts the latest hashes from the Spotify web player bundle, and publishes them to a publicly accessible JSON endpoint.
- Startup sync — Every time the app launches, it fetches the latest hashes from the remote registry in the background, ensuring maximum freshness.
- Local caching — Fetched hashes are persisted via DataStore so they're available immediately on next launch, even before the remote fetch completes.
- Automatic retry with fallback — If a GQL request fails with
PersistedQueryNotFound(HTTP 412), the app automatically retries with the previous known hash. If all known hashes fail, a force-refresh from the remote registry is triggered. - Hardcoded safety net — If both the remote registry and local cache are unavailable (e.g. first launch with no internet), the app falls back to hashes hardcoded at build time.
0.6.0
Metrolist v0.6.0 — Spotify Deep Integration
This release brings full two-way Spotify integration: edit playlists, reorder tracks, and sync your likes — all from within the app.
New Features
Bidirectional Like Sync with Spotify
- New "Sync Likes with Spotify" toggle in Spotify integration settings
- When enabled, every like/unlike action in the app (player, context menu, multi-select) is automatically synced to your Spotify Liked Songs
- On first activation, all your Spotify liked songs are imported and matched to their YouTube equivalents
- The local "Liked" playlist is replaced by your Spotify library — one source of truth
Edit Spotify Playlists from the App
- Add tracks to any of your Spotify playlists directly from song menus
- Works with both Spotify tracks (direct add) and YouTube tracks (automatic reverse lookup finds the Spotify match)
- Remove tracks from Spotify playlists with swipe-to-remove
- New playlist picker dialog for quick playlist selection
Sort & Refresh for Spotify Playlists
- Sort by: original order, name, artist, or duration
- Pull-to-refresh to reload playlists in real time
- Available in both Spotify playlists and liked songs screens
Drag-to-Reorder in Spotify Playlists
- Reorder tracks in your Spotify playlists via drag-and-drop
- Changes are synced to Spotify in real time via GraphQL
- Lock mechanism prevents accidental reordering
- Optimistic UI updates with server-side confirmation
Under the Hood
Spotify GraphQL Hash Audit
- Verified all 15 hardcoded GQL hashes against the current Spotify web player bundle
- Updated 5 rotated hashes:
libraryV3,fetchPlaylist,queryArtistOverview,addToLibrary,removeFromLibrary - Identified 2 at-risk hashes (
searchDesktop,editPlaylistAttributes) not present in the current web player — functional for now but may require future attention
Architecture
- All like sync logic (YouTube, Spotify, Last.fm) is now centralized in
SyncUtilsand runs independently of YouTube login state SongEntity.toggleLike()handles local state only — remote sync is fully delegated toSyncUtils
0.5.0
Meld v0.5.0
✨ New Features
-
Local Files Playback
- Scan and play audio files stored on your device
- Supports advanced formats including Dolby Atmos
- Added a new Local Files section in the Library
-
Fast Playlist Scrolling
- Added a draggable side scrollbar for navigating very large playlists (thousands of tracks)
-
Search in Spotify Playlists
- Added search bar for Spotify playlists and Liked Songs
- Quickly find tracks without scrolling through the entire list
-
Pin Spotify Playlists
- Ability to pin favorite Spotify playlists for quick access in the Library
🔧 Improvements
-
Improved Audio Compatibility
- Fixed playback issues with multi-channel audio
- Better handling of non-standard audio formats across devices
-
Listen Together Stability
- Improved connection stability for synchronized listening sessions
🐞 Bug Fixes
- Shuffle Behavior
- Shuffle mode no longer reshuffles the queue on every track change
- The random order is now generated once and preserved for the entire session
⚙️ Internal Changes
- Stronger code protection rules
- Various stability and internal optimizations
0.4.5
Release of version 0.4.5
Shuffle across the whole playlist
- Shuffle is applied to the entire playlist without restarting playback.
- Current playback position is preserved (no restart).
Spotify context menu
- New context menu entries for tracks linked to Spotify (e.g. open in Spotify, add to playlist, etc.).
Fix for 0:00 duration
- Fixed the bug that showed 0:00 duration for some tracks when not available from the service.
Preload and loading
- Preload: improved track preloading to reduce startup delays.
- Lazy load: lazy loading of lists for better performance and memory usage.
Batch sync
- Batch synchronization with Spotify to reduce API calls and improve stability.
Technical fixes
- getFullStatus: now always includes all tracks (0..N) in the returned state.
- Other minor stability and playback state consistency fixes.
0.4.0
Release Notes — v0.4.0
New Features
New Releases — Hybrid Spotify + YouTube Integration
The "New Releases" section has been completely redesigned with a hybrid approach combining Spotify and YouTube Music data.
- "Following" tab: shows new releases from artists you follow on Spotify, filtered from your personalized
queryWhatsNewFeed - "Discover" tab: discover new releases from artists related to your favorites, sourced from the YouTube Music catalog via fuzzy matching
- "For You" tab: combined Following + Discover view for a complete overview
- Smart caching: followed artists (12h TTL) and related artists (24h TTL) via GQL with no rate limiting
- ChipsRow with dynamic counts per tab
Manual Spotify → YouTube Match Override
When automatic matching picks the wrong version of a song (e.g. live instead of studio), you can now fix it manually.
- Dedicated dialog to paste the correct YouTube/YouTube Music URL
- Automatic preview of the new video with metadata before confirmation
- Manual matches are never overwritten by automatic matching
- 3 entry points:
- Player menu (three dots) during playback
- Context menu of any song in the app
- Long-press on Spotify playlists and Liked Songs
Podcast Support (from upstream)
Integrated the podcast infrastructure added by upstream, including database entity, Home screen sections, and episode browsing.
Improvements
Smarter Home Screen
- Less biased Home sections: REST timeout increased from 3s to 8s, cooldown from 5min to 1min, automatic retry. Tier 3 (most played songs from local DB) is now used as an active fallback, not just a last resort
- Differentiated cache TTL: 6 hours for complete data, 30 minutes for degraded data (liked songs only)
- Mood and Genres automatically hidden when "Use Spotify for Home" is active, for a more consistent experience
- Improved "Recently Played" section
Library
- Removed song count subtitle from Spotify playlists in the Library section for a cleaner look
Last.fm
- Improved Last.fm integration initialization and error handling
- Fixed scrobbling to prevent regressions compared to the original app
Playback
- Improved audio focus handling and loudness enhancer management
- Spotify playlist integration in the player
- Centralized Spotify token management with better error handling
Bug Fixes
- Fixed Home section rendering when a filter chip is selected
- Fixed foreground service start failure on Android 15
- Fixed
ClassCastExceptionon crossfade duration key migration - Fixed crash when creating local or editable playlists
- Solid color shimmer placeholder for Home screen chips
- Fixed playlist navigation from Home screen to the correct route
- Stale auth data cleared after backup restore to prevent playback issues
Performance
- Parallelized HomeScreen loading to reduce startup time
- Optimized caching strategy for Spotify REST APIs
Version: 0.4.0 (versionCode 6)
0.3.0
What's New in 0.3.0
New Features
- Recently Played section — A new "Recently Played" section on the home screen shows your last 40 listened tracks, always visible regardless of Spotify-only mode
- Spotify playlists in Android Auto — Your Spotify playlists now appear in the Android Auto media browser alongside local and YouTube playlists, with full track browsing, shuffle support, and playback via YouTube Music matching
Bug Fixes
- Home screen loads faster — Spotify REST API calls (top tracks/artists) now fail fast on 429 rate limits instead of retrying for up to 10 seconds, falling back immediately to cached data
- Home sections no longer biased towards recent likes — Improved the 3-tier profile cache with dynamic TTL (30min for degraded data vs 6h for full data) and local play count reordering when REST data is unavailable
- Last.fm scrobbling fixed — Added ProGuard keep rules for the Last.fm module to prevent class stripping in release builds, and fixed a duration overflow when the player reports unknown track length
- Spotify queue now loads more tracks — When playing from Spotify liked songs or playlists, the queue now resolves ~25 tracks around the selected song (5 before + 20 after) instead of just 1, with larger progressive batches of 20
Other
- Added account risk FAQ entry to README for transparency about third-party API usage
- Version bump to 0.3.0 (versionCode 5)