- Automatic connection recovery: Added Retry connection on fail at the bottom of Player and audio → Misc, enabled by default. Failed playlist loading and eligible playback errors trigger up to three retries, with a three-second delay before each attempt. Connection state is refreshed without force-closing the app or clearing your login.
- Current-song disk prefetching: Background caching fetches up to 32 MB of the current song on unmetered connections, respecting the song-cache setting and cache-size limit.
- Stream URL reuse: Valid cached stream URLs bypass unnecessary database and settings lookups when opening or seeking within a song.
- Optional blur effects: Added Enable blur effects under Appearance → Theme, disabled by default. Blurred full-player and mini-player backgrounds fall back to the theme background when disabled; lyric-card preview blur is also disabled.
- Less frequent progress updates: Changed the full player's playback-position polling interval from 100 ms to 150 ms, without changing audio timing.
- Reduced memory budgets: Lowered the artwork memory-cache limit from 15% to 8%, reduced the database page-cache budget from roughly 16 MB to 4 MB, and reduced database executors to two query threads and one transaction thread.
- WebView cleanup: Login WebViews are destroyed when their screen is disposed, and the playback-token WebView is released after five minutes of inactivity.
- Playback service lifecycle: Removed the explicit service-start request when opening the app. The activity still binds to the service, and playback explicitly starts it to support background listening.
- Build environment: Gradle uses Oracle GraalVM JDK 21; Android compilation toolchains use Temurin 21 to avoid GraalVM's Android
jlinkcompatibility issue. The Java/Kotlin bytecode target remains 21. This does not replace Android's ART runtime.
These changes target responsiveness, connection recovery, and resource usage. Performance gains depend on the device and network and have not been quantified through device benchmarks.
|
|
|
|
|
|
Got questions? Check out our FAQ page for answers to the most common ones.
We use Weblate to translate Metrolist. Help us bring Metrolist to more people!
| Project | Authors |
|---|---|
| InnerTune | Zion Huang · Malopieds |
| OuterTune | Davide Garberi · Michael Zh |
| Project | Contribution |
|---|---|
| Better Lyrics | Time-synced lyrics with word-by-word highlighting & YouTube Music integration |
| metroserver | Listen-together real-time backend |
| MusicRecognizer | Music recognition feature & Shazam API integration |
| zemer-cipher | YouTube cipher deobfuscation and PoToken generation |
| Blacksmith | High-performance GitHub Actions runners powering our CI |
This project is not affiliated with, funded, authorized, endorsed by, or in any way associated with YouTube, Google LLC, Metrolist Group LLC, or any of their affiliates and subsidiaries.
All trademarks, service marks, and intellectual property rights referenced in this project belong to their respective owners.






