A simple and light-weight app that streams music from a Subsonic or Navidrome server, or from the phone's storage.
Please do not use as a learning resource. This was my first Kotlin project, and the code is not well-organized at all. AI was used earlier in development (and it shows, the code is a mess lol)
- Subsonic/Navidrome support.
- Android Auto.
- Material 3 UI.
- Download songs, albums, and playlists from server.
- Green offline/downloaded status indicators.
- Toggle between grid and list views for albums, playlists, and artists.
- Internet Radio. [Metadata only from IceCast servers]
- Synced And Unsynced Lyrics. [From lrclib.net or self-hosted instance]
- Navidrome and Local playlists.
- Multiple Navidrome libraries.
- Transcoding.
- Better Android TV navigation.
- Local DB for local files and Navidrome offline mode.
- Jellyfin (Music) Support.
- Chromecast
- In Android Auto, radios do not set metadata correctly.
- Rebrand: App name shows "Harmony" in launcher and app info
- Playlist download: Open a Navidrome playlist, download button visible, tap downloads all songs
- Downloaded indicators: Local songs/albums show green checkmark; Navidrome items do not
- List views: Toggle button on Albums/Playlists/Artists screens switches between grid and list; three-dot menu appears in list view with download option
- Regression: Existing playback, search, Android Auto, lyrics still work
To help keep this project free and open source to everyone, consider donating. Thank you!
Made with ❤️ in Italy
Lyrics icon provided by Remix Icon Other icons are provided by Google Icons









