A fork of Chora by CraftWorksMC — a lightweight music player for Subsonic/Navidrome servers and local files.
Harmony builds on Chora's excellent foundation with offline-first playback, download management, and quality-of-life improvements.
- Song, album, and playlist downloading from Navidrome with actual audio file storage (not just metadata tracking)
- Offline playback — downloaded songs play from local storage when there's no network, falling back to streaming when online
- Persistent downloads — audio files are stored in external app storage so they survive app updates (only cleared on full uninstall)
- Download indicators — green checkmarks on downloaded songs, albums, and playlists throughout the UI
- Playlist download — download entire playlists with a single tap from the playlist detail screen
- Grid/list view toggle on Albums, Playlists, and Artists screens
- Song list improvements — three-dot menus in list view with download options
- Reworked album, artist, and playlist cards with download state awareness
- Reusable song list components (SongLazyLists) for consistent behavior across screens
- Fixed crash on startup caused by EncryptedSharedPreferences corruption — connection details now use plain SharedPreferences that reliably persist across updates
- Connection details survive app updates — server URL, username, and password are stored in standard SharedPreferences (plaintext, on-device only)
- Proper release signing with keystore-based config for CI/CD builds
- Obtainium support — GitHub Actions workflow creates signed releases automatically; just add the repo URL in Obtainium for auto-updates
- NetEase lyrics provider added alongside LrcLib, with multi-line lyric display support
- Android Auto tabs now follow the navbar settings configuration
- Error handling improvements in NavidromeDataSource
- Removed legacy NavidromeConnection and NavidromeCache code for starring items
- Rebranded from CraftWorks to W13
- Open Obtainium and add a new app
- Enter this repo URL:
https://github.com/SerRodneyRich/Harmony - Obtainium will detect releases and offer updates automatically
./gradlew assembleReleaseCreate a keystore.properties file in the project root for release signing:
storeFile=../release-keystore.jks
storePassword=yourpassword
keyAlias=harmony
keyPassword=yourpasswordThis project is a fork of Chora/Harmony by CraftWorksMC. All original work is under the Apache License 2.0. Thank you to CraftWorks for building such a solid Navidrome client.
Apache License 2.0 — See LICENSE for details.
Lyrics icon provided by Remix Icon Other icons are provided by Google Icons