A native Android music player for JioSaavn content β part of the JARVIS ecosystem.
Built by CodeWithLakxsh
Get the latest signed APK from the Releases page:
Prefer to build it yourself? Skip ahead to Installation β Build from source.
JARVIS Music is an Android-first music streaming app that brings a Spotify-style experience to JioSaavn content. It searches and streams songs through a self-hostable JioSaavn API (a Flask + jiosaavn backend included in this repository), with support for offline downloads, liked-song libraries, and custom playlists.
The app is a flagship piece of the JARVIS ecosystem β a family of projects by CodeWithLakxsh.
Note: this README is derived entirely from static source analysis. The project has not been runtime-tested for this publication.
All features below are verified directly from the source code:
- Search & stream β search JioSaavn songs via the bundled API (
Retrofit+Resultendpoint), stream with Media3 / ExoPlayer. - Home dashboard β trending/mix sections (Hindi, Punjabi, Hip-Hop, Pop, etc.) rendered as a grid and horizontal rows.
- Mini + full player β bottom-sheet player with album art, seek bar, and controls (play/pause, next/prev).
- Infinite queue β when the queue runs low, new songs are auto-fetched and appended; shuffle & repeat modes included.
- Liked songs β heart any track; saved locally in Room.
- Offline downloads β download songs via Android
DownloadManagerto the app's external music folder; play them back offline. - Playlists β create playlists, add songs, and play them back.
- Search history β recent queries saved with
SharedPreferences. - Onboarding β pick favourite artists on first launch.
- Artist profiles β open an artist's top tracks from search results.
- Dark theme β always-on dark UI with a Spotify-green accent (
#1DB954).
| Layer | Technology |
|---|---|
| Language | Kotlin |
| UI | Android Jetpack (AppCompat, Material Components, ViewBinding, ConstraintLayout) |
| Media | Media3 / ExoPlayer |
| Networking | Retrofit 2 + Gson, OkHttp |
| Image loading | Glide |
| Local storage | Room |
| Concurrency | Kotlin Coroutines |
| Build | Gradle (Kotlin DSL) 8.13 Β· AGP 8.11.2 Β· Kotlin 2.0.21 |
| Backend API | Python Flask + jiosaavn library |
The Android app never talks to JioSaavn directly. It calls a JioSaavn API service that wraps the jiosaavn Python package and returns a normalized JSON list of songs. The app's RetrofitInstance points at a deployed instance of that API (configurable in app/src/main/java/com/laksh/jarvismusic/api/RetrofitInstance.kt).
flowchart LR
U[User on Android] --> A[JARVIS Music App]
A --> B[Retrofit / OkHttp]
B --> C[JioSaavn API<br/>Flask + jiosaavn]
C --> D[JioSaavn<br/>content]
A --> E[ExoPlayer / Media3]
A --> F[Room DB<br/>Liked songs Β· Playlists]
A --> G[DownloadManager<br/>Offline MP3s]
JarvisMusic/
βββ app/ # Android application module
β βββ src/main/
β βββ java/com/laksh/jarvismusic/
β β βββ MainActivity.kt # Player host, queue, mini/full player
β β βββ HomeFragment.kt # Dashboard sections
β β βββ SearchFragment.kt # Search + history
β β βββ LibraryFragment.kt# Liked / Downloads / Playlists
β β βββ OnboardingActivity.kt
β β βββ ArtistProfileActivity.kt
β β βββ PlaylistsActivity.kt / PlaylistDetailsActivity.kt
β β βββ LikedSongsActivity.kt / DownloadedSongsActivity.kt
β β βββ api/ # Retrofit, Room entities & DAOs
β β βββ *Adapter.kt # RecyclerView adapters
β βββ res/ # Layouts, drawables, themes, menus
βββ api/ # Self-hostable JioSaavn API (Python/Flask)
β βββ index.py # Flask entry point (port 5100)
β βββ requirements.txt
βββ gradle/ # Gradle wrapper & version catalog
βββ build.gradle.kts
βββ settings.gradle.kts
βββ gradle.properties
Inferred from build configuration and dependency manifests β not runtime-verified.
- Android Studio (Iguana or newer) with the Android SDK platform 35.
- JDK 17 (required by the Gradle configuration).
- Gradle 8.13 β the wrapper is included (
gradlew). - For the backend API: Python 3.8+ and
pip.
You can either download a pre-built APK or build from source.
- Download the latest APK from the Releases page.
- Open the APK on your Android device (Android 7.0 / API 24+).
- If prompted, allow "Install unknown apps" for your browser or file manager, then tap Install.
Commands below are derived from the project's configuration and source.
# Clone the repository
git clone https://github.com/CodeWithLakxsh/jarvis-music.git
# Build a debug APK
./gradlew assembleDebugAlternatively, open the project in Android Studio, let Gradle sync, and press Run.
cd api
pip install -r requirements.txt
python index.py # serves on 0.0.0.0:5100The Android app expects an API instance at the BASE_URL defined in RetrofitInstance.kt. Point it at a local or deployed instance of api/.
| Variable | Where | Purpose |
|---|---|---|
SECRET |
api/ environment |
Flask session-signing key. If unset, a random key is generated per process. |
BASE_URL |
RetrofitInstance.kt |
Base URL of the JioSaavn API the app queries. |
See api/.env.example for the backend environment template.
- On first launch, choose at least 3 artists to personalise your library.
- Use Home to browse sections, Search to find any song, and Library to access liked songs, downloads, and playlists.
- Tap a song to start playback; swipe the player sheet up for the full player with queue, shuffle, and repeat.
- Tap the heart to like a song, the download icon to save it offline.
The release build type is configured in app/build.gradle.kts (minification disabled, ProGuard rules at app/proguard-rules.pro). Build an APK with:
./gradlew assembleRelease- The Flask backend reads its signing key from the
SECRETenvironment variable β never commit a real.envfile (see.gitignore). - Reports for security issues: see SECURITY.md.
Contributions are welcome! Please read CONTRIBUTING.md and the issue templates before opening a pull request.
No open-source license has currently been granted for this repository.
CodeWithLakxsh
- GitHub: https://github.com/CodeWithLakxsh
- Portfolio: https://codewithlakxsh.github.io/