{"id":16979974,"url":"https://github.com/vaibhav2002/musicx","last_synced_at":"2025-07-17T03:32:02.966Z","repository":{"id":54751039,"uuid":"446123333","full_name":"Vaibhav2002/MusicX","owner":"Vaibhav2002","description":"MusicX is a music player 🎵 android app built using Kotlin and Jetpack Compose. It follows M.A.D. practices and hence is a good learning resource for beginners","archived":false,"fork":false,"pushed_at":"2023-02-19T14:20:22.000Z","size":57525,"stargazers_count":164,"open_issues_count":3,"forks_count":20,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-02T05:46:16.965Z","etag":null,"topics":["android","coroutines","coroutines-flow","firebase","hacktoberfest","hacktoberfest2022","jetpack-compose","kotlin","material3","mvvm-android","room","scopedstorage","storage"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Vaibhav2002.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-09T15:12:57.000Z","updated_at":"2025-03-25T18:31:42.000Z","dependencies_parsed_at":"2024-10-27T12:47:44.218Z","dependency_job_id":"f3bd9b13-6f13-4b7c-8eca-26224559c979","html_url":"https://github.com/Vaibhav2002/MusicX","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/Vaibhav2002/MusicX","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FMusicX","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FMusicX/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FMusicX/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FMusicX/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Vaibhav2002","download_url":"https://codeload.github.com/Vaibhav2002/MusicX/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Vaibhav2002%2FMusicX/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265563010,"owners_count":23788629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","coroutines","coroutines-flow","firebase","hacktoberfest","hacktoberfest2022","jetpack-compose","kotlin","material3","mvvm-android","room","scopedstorage","storage"],"created_at":"2024-10-14T01:48:08.648Z","updated_at":"2025-07-17T03:32:02.947Z","avatar_url":"https://github.com/Vaibhav2002.png","language":"Kotlin","funding_links":["https://www.buymeacoffee.com/VaibhavJaiswal","https://img.buymeacoffee.com/button-api/?text=Buy"],"categories":[],"sub_categories":[],"readme":"![](media/cover-light.png)\n![](media/cover-dark.png)\n\n# **MusicX** \n\n**MusicX** is a music player app made using Jetpack Compose and follows Material 3 guidelines.\n\n# Application Install\n\n***You can Install and test latest MusicX app from below 👇***\n\n[![MusicX](https://img.shields.io/badge/MusicX✅-APK-red.svg?style=for-the-badge\u0026logo=android)](https://github.com/Vaibhav2002/MusicX/releases/tag/v1.0.2)\n\n## Setup\n- Clone the repository on your machine.\n- Create project in Firebase, enable firestore, set rules to public and download google-services.json and paste in the app folder.\n- Add all your songs in Firestore.\n- Add your AudD api key and base url in Secrets.kt\n  ```kotlin\n    const val API_KEY = \"\"  //add your AudD api key here\n    const val BASE_URL = \"\" //add your AudD base url here\n  ```\n- I have create a sample music list which i uploaded on Firebase, you can use it , all you need to do is to download the mp3 and upload it on any cloud storage and add the url in the objects in MusicList.kt\n```kotlin\n    Music(\n            id = UUID.randomUUID().toString(),\n            title = \"Rap God\",\n            artists = listOf(\"Eminem\"),\n            imageUrl = \"https://i.scdn.co/image/ab67616d00004851643e6ecebab400d52574e4b2\",\n            musicUrl = \"\", // add the url here\n            duration = 363000L\n        ),\n```\n\n## About\n\nIt uses Firebase as its backend and also used AudD api to get lyrics of songs. \n\n- Fully functional.\n- Clean and Simple Material 3 UI built using Jetpack Compose.\n- It supports dark theme too 🌗.\n\n### App Features\n\n- **Home Screen** - Shows a list of all songs available.\n- **Music Player Screen** - Music Player screen with music controls.\n- **Playlist Screen** - Screen showing the current playlist/play queue.\n\n### Insights into the app 🔎\n\n![](media/design-light.png)\n\n\n![](media/design-dark.png)\n\n## 📸 Screenshots\n\n|||||\n|:----------------------------------------:|:-----------------------------------------:|:-----------------------------------------: |:-----------------------------------------: |\n| ![](media/home-light.jpg) | ![](media/player-light.jpg) | ![](media/playlist-light.jpg) | ![](media/lyrics-light.jpg) |\n| ![](media/home-dark.jpg) | ![](media/player-dark.jpg) | ![](media/playlist-dark.jpg) | ![](media/lyrics-dark.jpg) |\n\n\n### Technical details \n\n- MusicX uses Firebase to fetch all songs.\n- MusicX uses AudD api to get lyrics of songs.\n- MusicX is built fllowing Material 3 Guidelines.\n- MusicX is built using [Jetpack Compose](https://developer.android.com/jetpack/compose?gclid=CjwKCAiArOqOBhBmEiwAsgeLmUlv4dbl6KV3yBs7SXOpYReSF8DaG5yWJipHnkO-OEWgyMHgjn1BixoC8bUQAvD_BwE\u0026gclsrc=aw.ds).\n- MusicX is made using Kotlin and following Modern Android Development practices.\n- MusicX uses all Jetpack libraries and follows MVVM architecture. It also has a G.O.A.T rating in Android's  M.A.D scorecard.\n- MusicX's code follows all the best practices and software development principles which make it a very good learning resource for beginners.\n\n![summary.png](media/summary.png)\n\n## Built With 🛠\n- [Kotlin](https://kotlinlang.org/) - First class and official programming language for Android development.\n- [Jetpack Compose](https://developer.android.com/jetpack/compose?gclid=CjwKCAiArOqOBhBmEiwAsgeLmUlv4dbl6KV3yBs7SXOpYReSF8DaG5yWJipHnkO-OEWgyMHgjn1BixoC8bUQAvD_BwE\u0026gclsrc=aw.ds) - Jetpack Compose is Android’s modern toolkit for building native UI.\n- [Material 3](https://m3.material.io) - Material Design 3, Google’s most expressive and adaptable design system\n- [Coroutines](https://kotlinlang.org/docs/reference/coroutines-overview.html) - For asynchronous and more..\n- [Flow](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/) - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.\n - [StateFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.\n - [SharedFlow](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow) - A SharedFlow is a highly-configurable generalization of StateFlow.\n- [Android Architecture Components](https://developer.android.com/topic/libraries/architecture) - Collection of libraries that help you design robust, testable, and maintainable apps.\n  - [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel) - Stores UI-related data that isn't destroyed on UI changes. \n  - [Room](https://developer.android.com/training/data-storage/room) - Room is an android library which is an ORM which wraps android's native SQLite database\n- [Exoplayer](https://exoplayer.dev) - Exoplayer library is used to play media in Android.\n- [Dependency Injection](https://developer.android.com/training/dependency-injection) - \n  - [Hilt-Dagger](https://dagger.dev/hilt/) - Standard library to incorporate Dagger dependency injection into an Android application.\n  - [Hilt-ViewModel](https://developer.android.com/training/dependency-injection/hilt-jetpack) - DI for injecting `ViewModel`.\n- Backend\n  - [Firebase](https://firebase.google.com)\n    - Firebase Firestore - A NoSQL database to store all data\n    - Firebase Storage - A Cloud storage.\n- [AudD Api](https://audd.io) - Api to fetch lyrics of songs\n- [Retrofit](https://github.com/square/retrofit) - An Http Client for android.\n- [Timber](https://github.com/JakeWharton/timber) - A simple logging library for android.\n- [GSON Converter](https://github.com/square/retrofit/tree/master/retrofit-converters/gson) - A Converter which uses Moshi for serialization to and from JSON.\n- [Coil](https://github.com/coil-kt/coil) - An image loading library for Android backed by Kotlin Coroutines.\n- [Material Components for Android](https://github.com/material-components/material-components-android) - Modular and customizable Material Design UI components for Android.\n\n# Package Structure\n    \n    dev.vaibhav.musicX    # Root Package\n    .\n    ├── data                    # For data handling.\n    |   ├── local               # Room DB and its related classes\n    |   ├── remote              # Firebase, AudD and their relative classes\n    │   ├── model               # Model data classes and mapper classes, both remote and local entities\n    │   └── repo                # Single source of data.\n    |\n    ├── di                      # Dependency Injection             \n    │   └── module              # DI Modules\n    |\n    ├──exoplayer                # Exoplayer related files etc.\n    |\n    ├── ui                      # UI/View layer\n    |   ├── components          # Common Composaled required.\n    |   ├── screens             # All Screens in app.    \n    │   ├── theme               # App theme related files.\n    │   ├── usecases            # Use-cases for features.\n    |   ├── utils               # Utility classes for UI.\n    |\n    └── utils                   # Utility Classes / Kotlin extensions\n\n\n## Architecture\nThis app uses [***MVVM (Model View View-Model)***](https://developer.android.com/jetpack/docs/guide#recommended-app-arch) architecture.\n\n![](https://developer.android.com/topic/libraries/architecture/images/final-architecture.png)\n  \n\n\n---\n\n## If you like my projects and want to support me to build more cool open source projects\n  \n\u003ca href=\"https://www.buymeacoffee.com/VaibhavJaiswal\"\u003e\u003cimg src=\"https://img.buymeacoffee.com/button-api/?text=Buy me a coffee\u0026emoji=\u0026slug=VaibhavJaiswal\u0026button_colour=FFDD00\u0026font_colour=000000\u0026font_family=Cookie\u0026outline_colour=000000\u0026coffee_colour=ffffff\"\u003e\u003c/a\u003e\n\n---\n\n ## Contact\nIf you need any help, you can connect with me.\n\nVisit:- [Vaibhav Jaiswal](https://vaibhavjaiswal.vercel.app/#/)\n  \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaibhav2002%2Fmusicx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvaibhav2002%2Fmusicx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaibhav2002%2Fmusicx/lists"}