SimpMusic

GitHub

A cross-platform music app using YouTube Music for backend

AI Prompts & Endpoints
Agent Skills View CodeWiki Knowledge Base

Repository: maxrave-dev/SimpMusic


Stars: 8774

CLAUDE.md

CLAUDE.md - SimpMusic Project Guide for AI Agents

📋 Project Overview

SimpMusic is a FOSS (Free and Open Source Software) YouTube Music client for Android and Desktop, built with Compose Multiplatform.

Main Purpose


- Stream music from YouTube Music and YouTube for free, ad-free, with background playback
- Provide advanced features like Spotify Canvas, AI song suggestions, synced lyrics
- Support both Android and Desktop (Windows, macOS, Linux)

Basic Information


- Package name: com.maxrave.simpmusic
- Primary language: Kotlin
- UI Framework: Jetpack Compose / Compose Multiplatform
- Architecture: Clean Architecture + MVVM
- Build system: Gradle (Kotlin DSL)

🏗️ Architecture

Clean Architecture Layers

text
┌─────────────────────────────────────┐
│ Presentation Layer (UI) │
│ - Jetpack Compose / Compose MP │
│ - ViewModels (MVVM) │
│ - UI States │
├─────────────────────────────────────┤
│ Domain Layer │
│ - Use Cases │
│ - Domain Models │
│ - Repository Interfaces │
├─────────────────────────────────────┤
│ Data Layer │
│ - Repository Implementations │
│ - Data Sources (Remote/Local) │
│ - Database (Room) │
├─────────────────────────────────────┤
│ Service Layer │
│ - YouTube Music Scraper │
│ - Spotify Service │
│ - AI Service │
│ - Lyrics Service │
│ - Discord RPC (Kizzy) │
└─────────────────────────────────────┘

📁 Module Structure

Root Modules

#### 1. composeApp/
- Shared Compose Multiplatform module - main module containing shared code
- Supports: Android, Desktop (JVM), iOS (future)
- Contains all UI (Compose) and business logic
- Source sets:
- commonMain/: Shared code for all platforms
- androidMain/: Android-specific code
- desktopMain/: Desktop-specific code
- Can run Desktop app directly from this module

#### 2. androidApp/
- Android-specific module to build Android app
- Depends on composeApp as a shared module
- Contains Android-specific configuration:
- AndroidManifest.xml
- Android build configuration
- Android resources (if needed)
- Entry point for Android app

#### 3. core/
Contains core modules organized by functionality:

##### core/common/
- Shared utilities
- Extension functions
- Constants
- Helper classes

##### core/domain/
- Domain models
- Use cases
- Repository interfaces
- Business logic rules

##### core/data/
- Repository implementations
- Data sources (Remote & Local)
- Database schemas (Room)
- Data mappers

##### core/media/
- media3/: Media3 ExoPlayer integration (includes CrossfadeExoPlayerAdapter for DJ-style crossfade on Android)
- media3-ui/: Media3 UI components
- media-jvm/: JVM media playback (VLCJ - replaced GStreamer post-1.0.4)
- media-jvm-ui/: JVM media UI components

##### core/service/
Service modules:

- kotlinYtmusicScraper/: YouTube Music API scraper
- spotify/: Spotify Web API integration (Canvas, Lyrics)
- aiService/: AI features (OpenAI, Gemini integration)
- lyricsService/: Lyrics fetching (LRCLIB, SimpMusic Lyrics, BetterLyrics)
- kizzy/: Discord Rich Presence
- ktorExt/: Ktor extensions for networking

#### 4. crashlytics/ & crashlytics-empty/
- crashlytics/: Full version with Sentry crash reporting
- crashlytics-empty/: FOSS version without tracking

🛠️ Key Technologies

Android/Mobile


- Jetpack Compose: Modern UI toolkit
- Material Design 3: Design system
- Media3 (ExoPlayer): Media playback
- Room: Local database
- Coroutines & Flow: Async programming
- Hilt/Koin: Dependency injection

Desktop


- Compose for Desktop: UI
- VLCJ: Audio playback (replaced GStreamer since post-1.0.4)
- VLC native libraries are bundled per platform via vlc-setup Gradle plugin

Networking & APIs


- Ktor Client: HTTP client
- Kotlin Serialization: JSON parsing
- YouTube Music hidden API: Data source
- Spotify Web API: Canvas and lyrics
- OpenAI/Gemini API: AI features

Data & Storage


- Room Database: Local persistence
- DataStore: Preferences
- Caching: Offline playback support

Third-party Integrations


- SponsorBlock: Skip sponsors
- ReturnYouTubeDislike: Vote information
- LRCLIB: Lyrics provider
- BetterLyrics: Additional lyrics provider (added in v1.0.4)
- Sentry: Crash reporting (Full version only)

📝 Development Guidelines

Code Style


- Kotlin coding conventions: Follow Kotlin official guidelines
- Compose best practices: Single source of truth, unidirectional data flow
- Clean Architecture: Strict layer separation, dependency rule

Module Dependencies


text
UI Layer (composeApp)

Domain Layer (core/domain)

Data Layer (core/data)

Service Layer (core/service/*)

Common (core/common)

Dependency Rule: Higher layer modules can only depend on lower layer modules, NOT vice versa.

Working with UI


- Use Jetpack Compose for all new UI
- Follow Material Design 3 guidelines
- State management with StateFlow or State\<T>
- Side effects with LaunchedEffect, DisposableEffect

Working with Data


- Repository pattern for all data operations
- Use cases for complex business logic
- Mapping between Data models ↔ Domain models ↔ UI models
- Room for local persistence
- Ktor for network requests

Research Before Implementation (MANDATORY)

Before implementing code, researching code, or answering technical questions, the AI agent MUST follow this research workflow:

#### Step 1: Look up official documentation
- Use MCP Context7 (resolve-library-idquery-docs) to fetch up-to-date documentation for any library/framework about to be used
- Understand the latest API surface, breaking changes, and recommended usage patterns

#### Step 2: Evaluate pros, cons, and alternatives
- Use WebSearch to research:
- Pros and cons of the library/approach
- Alternative libraries or approaches that solve the same problem
- Known issues, performance concerns, or deprecation notices
- Compare and evaluate whether the chosen library/approach is the best fit for this project

#### Step 3: Study OSS best practices
- Use Grep (on GitHub via web search) or WebSearch to find how well-known open-source projects implement similar features
- Verify the approach follows established best practices before adopting it
- Pay attention to patterns used in projects with similar architecture (Clean Architecture, Compose Multiplatform, etc.)

#### Step 4: Make a decision and justify
- Only proceed with implementation after completing steps 1-3
- If a library/approach has significant drawbacks or better alternatives exist, recommend the better option to the user before proceeding
- Document the rationale briefly when introducing new dependencies or patterns

This workflow applies to: Adding new libraries, choosing architectural patterns, implementing new features with unfamiliar APIs, answering "how should we do X?" questions, and evaluating technical approaches.

This workflow does NOT apply to: Simple bug fixes in existing code, minor refactoring, or tasks using libraries already well-established in the project.

Verification After Code Changes


- Do NOT build the app to verify code changes. Instead, use JetBrains MCP tools (get_file_problems, getDiagnostics) to check for compile errors and warnings in real-time.
- Only run Gradle build when explicitly requested by the user or for final release verification.

Testing


- Unit tests for Domain layer (Use cases)
- Repository tests with fake data sources
- UI tests with Compose Testing

🎯 Common Tasks

1. Add New UI Feature


Location: composeApp/src/commonMain/kotlin/
- Create Composable function in appropriate package
- Use ViewModel for state management
- Follow Material 3 design patterns

2. Add New API Endpoint


Location: core/service/kotlinYtmusicScraper/
- Implement endpoint in corresponding service
- Create data model for response
- Map to domain model

3. Add New Database Entity


Location: core/data/src/main/java/.../database/
- Define Entity with Room annotations
- Create DAO interface
- Update Database class
- Create migration if needed

4. Add New Use Case


Location: core/domain/src/main/java/.../usecase/
- Create use case class
- Inject repository dependencies
- Implement business logic
- Return Result/Flow

5. Work with Media Playback


Location: core/media/media3/ (Android) or core/media/media-jvm/ (Desktop)
- Media3/ExoPlayer + CrossfadeExoPlayerAdapter for Android
- VLCJ (VlcPlayerAdapter) for Desktop
- Queue management in core/data/src/.../mediaservice/
- Playback controls

6. Add New Lyrics Provider


Location: core/service/lyricsService/
- Implement lyrics fetcher interface
- Add fallback logic
- Handle synced/unsynced lyrics

7. AI Features


Location: core/service/aiService/
- OpenAI integration
- Gemini integration
- AI lyrics translation
- Song recommendations

📍 Important Files and Locations

Configuration


- build.gradle.kts (root): Root build configuration
- gradle/libs.versions.toml: Version catalog for dependencies
- settings.gradle.kts: Module inclusion

Main Application


- composeApp/src/commonMain/kotlin/: Shared Compose code
- composeApp/src/androidMain/kotlin/: Android-specific code
- composeApp/src/desktopMain/kotlin/: Desktop-specific code

Database


- core/data/src/main/java/.../database/: Room database schemas
- Migrations in Database class

Network


- core/service/kotlinYtmusicScraper/: YouTube Music API
- core/service/spotify/: Spotify API
- core/service/ktorExt/: Ktor utilities

Resources


- composeApp/src/commonMain/composeResources/: Shared resources
- composeApp/src/androidMain/res/: Android resources
- Crowdin integration for translations

🔧 Build Variants

Android


- Full: With Sentry crash reporting (module: crashlytics)
- FOSS: No tracking (module: crashlytics-empty)

Desktop


- Windows: .msi installer
- macOS: .dmg (ARM and x86-64)
- Linux: .AppImage (DEB and RPM removed post-1.0.4)

🚨 Important Notes

Privacy & Data Collection


- FOSS version: NO tracking
- Full version: Only Sentry crash reporting
- "Send back to Google" feature: Optional, only when user enables

Platform-specific Considerations

#### Android
- Min SDK: Check androidApp/build.gradle.kts
- Target SDK: Latest stable
- Android Auto support
- Background playback with MediaSession

#### Desktop
- Required Dependencies:
- VLCJ: Audio playback (bundled via vlc-setup plugin)
- Features:
- Deep link support (simpmusic:// and simpmusic.org)
- Mini Player window (always-on-top, resizable, draggable)
- Crash dialog
- Custom title bar (disabled in VM environments)
- Limitations:
- No offline playback
- No video playback

External APIs


- YouTube Music: Hidden/unofficial API (may change anytime)
- Spotify: Requires login for lyrics
- OpenAI/Gemini: User must provide API key
- SponsorBlock: Public API
- LRCLIB: Public lyrics API

🎵 Media Playback Architecture

Desktop Player (VLCJ - replaced GStreamer post-1.0.4)

Location: core/media/media-jvm/src/main/java/com/simpmusic/media_jvm/VlcPlayerAdapter.kt

- Uses VLCJ library for audio playback (GStreamer was removed)
- VLC native libraries bundled per platform via vlc-setup Gradle plugin in composeApp/build.gradle.kts
- Bundled natives stored in vlc-natives/{linux,macos,windows}/
- Supports crossfade transition with dual-player approach

#### Crossfade Transition (Desktop)
- Configurable duration: 1-15 seconds (default: 5 seconds)
- Audio-only: Crossfade is skipped for video playback
- Settings persisted via DataStore

Android Player (Media3/ExoPlayer)

#### Crossfade & DJ-style Transition (added in v1.0.4)

Location: core/media/media3/src/main/java/com/maxrave/media3/exoplayer/CrossfadeExoPlayerAdapter.kt

- DJ-style crossfade with adjustable duration
- Requires 320kbps stream preference to enable DJ mode
- Auto crossfade mode (like AutoMix)
- CrossfadeFilterAudioProcessor for audio processing
- Edge cases: disabled for video, repeat one, last track

🤝 Contributing

Code of Conduct


See CODE_OF_CONDUCT.md

Pull Request Guidelines


1. Fork and create branch from dev
2. Follow coding conventions
3. Test thoroughly before submitting
4. Update documentation if needed
5. PR title: Clear and descriptive
6. PR description: Explain changes and reasoning

Translation


- Use Crowdin: https://crowdin.com/project/simpmusic
- Don't edit translation files directly

📚 References

Inspiration & Credits


- InnerTune: YouTube Music data extraction inspiration
- SmartTube: YouTube streaming URL extraction
- SponsorBlock: Sponsor skip functionality
- LRCLIB: Lyrics provider

External Documentation


- Compose Multiplatform
- Material Design 3
- Media3 (ExoPlayer)
- Room Database
- Ktor Client
- VLCJ

Community


- Website: https://simpmusic.org
- Discord: https://discord.gg/Rq5tWVM9Hg
- GitHub Issues: Bug reports and feature requests

---

🎯 Quick Start for AI Agents

When working with this project:

1. Always check layer dependencies: Don't violate Clean Architecture rules
2. Use existing patterns: Review current code to follow established patterns
3. Platform-aware: Code in commonMain must work for both Android and Desktop
4. Test thoroughly: Especially critical for media playback and network code
5. Consider privacy: FOSS version must NOT have tracking
6. Check external API stability: YouTube Music API may change at any time

When Encountering Issues


- Check Discord server for known issues
- Review recent commits and PRs
- View dependency graph: asset/dependencies_graph.svg
- Test on both Android and Desktop if code is in commonMain

Platform-Specific Code Patterns

Example: Desktop-only UI settings

kotlin
if (getPlatform() == Platform.Desktop) {
// Desktop-specific UI or logic
}

Example: Android-only features

kotlin
if (getPlatform() == Platform.Android) {
// Android-specific UI or logic
}

📜 Changelog Summary (post-1.0.4)

Architecture Changes


- Desktop: GStreamer → VLCJ: Completely replaced GStreamer with VLCJ for desktop audio playback
- DEB/RPM builds removed: Desktop Linux now only ships AppImage

New Features (v1.0.4)


- Android Crossfade & DJ-style transition: CrossfadeExoPlayerAdapter with auto mode (like AutoMix)
- BetterLyrics provider: Additional lyrics source integrated into lyricsService
- 320kbps audio stream option: Higher quality streaming preference
- Parallel download: Improved download speed
- Character-level animated lyrics: Word-by-word lyrics with spring animations
- SimpMusic Chart: Chart playlists integrated into Library screen
- Favorites: Liked songs feature with UI integration
- Custom OpenAI base URL: Support for compatible API endpoints

New Features (v1.0.1 - v1.0.3)


- Desktop Mini Player: Always-on-top, resizable, draggable mini player window with volume/like controls
- Analytics/Local Tracking: Track top artists, albums, and tracks locally (no remote tracking)
- Auto Backup: Automatic backup settings
- Custom Title Bar: Desktop window control with transparency support
- SimpMusic Lyrics voting: Vote functionality for community lyrics

New Features (post-1.0.4, dev branch)


- Deep link support: simpmusic:// and simpmusic.org URL schemes
- Desktop Crash dialog: Error reporting UI for desktop
- Playback speed/pitch controls: Redesigned UI with improved animations
- VM environment detection: Disable transparency and custom titlebar in VMs

🔄 CLAUDE.md Auto-Update Rule (MANDATORY)

After completing any of the following types of changes, the AI agent MUST update this CLAUDE.md file:

1. Architecture changes: Module additions/removals, dependency changes (e.g., library swaps like GStreamer → VLCJ), build system changes
2. New major features: New modules, new service integrations, new platform capabilities
3. API/Technology migrations: Swapping core libraries, changing data flow patterns
4. Build/CI changes: New build variants, changed packaging formats, CI workflow changes
5. Module structure changes: Adding/removing modules in settings.gradle.kts

What to update:
- Relevant sections in this document (Module Structure, Key Technologies, etc.)
- Add entry to Changelog Summary section with date/version context
- Update "Last updated" date at the bottom

What NOT to update for:
- Bug fixes, minor UI tweaks, translation updates
- Simple refactoring within existing patterns
- Dependency version bumps without API changes

---

This document helps AI Agents quickly understand the SimpMusic project. Update regularly when there are major changes to architecture or structure.

Last updated: 2026-03-14
Project version: Check latest release on GitHub
Maintained by: maxrave-dev and contributors


README.md

<div align="center"> <img src="https://raw.githubusercontent.com/maxrave-dev/SimpMusic/main/fastlane/metadata/android/en-US/images/featureGraphic.png"> <h1>SimpMusic</h1>
A FOSS YouTube Music client for Android and Desktop with many features from<br>Spotify, SponsorBlock, ReturnYouTubeDislike using Compose Multiplatform to develop.
<br>
<br>
<a href="https://github.com/maxrave-dev/SimpMusic/releases"><img src="https://img.shields.io/github/v/release/maxrave-dev/SimpMusic"></a> <a href="https://github.com/maxrave-dev/SimpMusic/releases"><img src="https://img.shields.io/github/downloads/maxrave-dev/SimpMusic/total"></a> <br> <br> <a href="https://trendshift.io/repositories/13482" target="_blank"><img src="https://trendshift.io/api/badge/repositories/13482" alt="maxrave-dev%2FSimpMusic | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
<br>
<br>
<a href="https://www.producthunt.com/products/simpmusic/reviews?utm_source=badge-product_rating&utm_medium=badge&utm_source=badge-simpmusic" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/product_rating.svg?product_id=903836&theme=dark" alt="SimpMusic - A&#0032;FOSS&#0032;YouTube&#0032;Music&#0032;client&#0032;for&#0032;Android&#0032;with&#0032;many&#0032;features | Product Hunt" style="width: 242px; height: 108px;" width="242" height="108" /></a>
<br>
<h4>Download</h4>
<a href="https://apt.izzysoft.de/packages/com.maxrave.simpmusic/"><img src="https://gitlab.com/IzzyOnDroid/repo/-/raw/master/assets/IzzyOnDroid.png" width="200"></a>
<a href="https://f-droid.org/en/packages/com.maxrave.simpmusic/"><img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" width="200"></a>
<a href="https://www.openapk.net/simpmusic/com.maxrave.simpmusic/"><img src="https://www.openapk.net/images/openapk-badge.png" width="200"></a>
<a href="https://github.com/maxrave-dev/SimpMusic/releases"><img src="https://raw.githubusercontent.com/NeoApplications/Neo-Backup/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" width="200"></a>
<h4>Nightly Build</h4>
<a href="https://simpmusic.org/nightly-download"><img src="https://github.com/maxrave-dev/SimpMusic/actions/workflows/android.yml/badge.svg"></a><br/> <a href="https://simpmusic.org/nightly-download"><img src="https://raw.githubusercontent.com/NeoApplications/Neo-Backup/034b226cea5c1b30eb4f6a6f313e4dadcbb0ece4/badge_github.png" width="200"></a>
</div>

SimpMusic is available on Desktop now!


Features ✨️


- Play music from YouTube Music or YouTube for free, without ads and in the background
- High quality up-to 320kbps stream (NEW)
- Browsing Home, Charts, Podcast, Moods & Genre with YouTube Music data at high speed
- Search everything on YouTube
- Analyze your playing data, create custom playlists, and sync with YouTube Music...
- Spotify Canvas supported
- Powered your experience with SimpMusic Chart (https://chart.simpmusic.org/)
- Play 1080p video option with subtitle
- AI song suggestions
- Customize your playlist, synced with YouTube Music
- Notifications from followed artists
- Caching and offline playback support
- Crossfade with DJ-style like Apple Music (NEW)
- Synced lyrics from SimpMusic Lyrics, LRCLIB, Spotify (require login) and YouTube Transcript - AI lyrics translation (BETA) (\*)
- Personalize data (\) and multi-YouTube-account support
- Local "scrobble" like Last.fm (NEW)
- Supports SponsorBlock and Return YouTube Dislike
- Sleep Timer
- Android Auto with online content
- Discord Rich Presence support
- And many more!

(\*) Use your OpenAI or Gemini API key

(\) For users who chose "Send back to Google" feature


Warning

> This app is in the beta stage, so it may have many bugs and make it crash. If you find any bugs,
please create an issue or contact me via email or Discord server.

Because of depending on YouTube Music, the player error will happen and it's normally, please don't ask me about the stable state of this app.


Screenshots


<p align="center">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/01.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/02.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/03.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/04.png?raw=true" width="200" /> </p> <p align="center">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/05.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/17.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/07.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/08.png?raw=true" width="200" /> </p> <p align="center">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/09.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/10.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/11.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/12.png?raw=true" width="200" /> </p> <p align="center">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/13.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/14.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/15.png?raw=true" width="200" />
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/16.png?raw=true" width="200" /> </p> <p align="center">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/screenshot/06.png?raw=true" width="800" />
</p>

#### More screenshots here.

## Data
- This app uses hidden API from YouTube Music with some tricks to get data from YouTube Music.
- Use Spotify Web API and some tricks to get Spotify Canvas and Lyrics
- Thanks to InnerTune for the idea to get data from YouTube Music. This repo is my inspiration to create this app.
- Special thanks to SmartTube. This repo help me to extract the streaming URL of YouTube Music.
- My app is using SponsorBlock to skip sponsor in YouTube videos.
- ReturnYouTubeDislike for getting information on votes
- Main lyrics data from SimpMusic Lyrics
- Alternative lyrics data from LRCLIB. More information LRCLIB

## Privacy
SimpMusic doesn't have any tracker or third-party server for collecting user data in FOSS version. If YouTube
logged-in users enable "Send back to Google" feature, SimpMusic only uses YouTube Music Tracking API to send listening history and listening record of video to Google for better recommendations and
supporting artist or YouTube Creator (For API reference,
see this).

We collect crash data in the Full version to improve the app.

Full or FOSS version


I use Sentry crashlytics to catch all crashes in the Full version. Sentry is the open-source project.
If you don't want to be collected crash data, you must use FOSS version.

Desktop app

Which file should I download?


- For Windows: Download the file with extension .msi.
- For macOS: Download the file with extension .dmg.
- For Linux: Download the file with extension .AppImage (all Linux distributions)

Log in guide: https://www.simpmusic.org/blogs/en/how-to-log-in-on-desktop-app


#### Discord login guide: https://gist.github.com/MarvNC/e601f3603df22f36ebd3102c501116c6

Some limitations on Desktop app:


- Very buggy on some Linux distributions (because of Jetbrains not fix).

Please report issues on our Discord server if you find any bugs.

Translation


![Crowdin](https://crowdin.com/project/simpmusic)
<br/>
You can help me translate this app into your language by using Crowdin SimpMusic on Crowdin
#### Special thanks to all translators on Crowdin ❤️
## FAQ
#### 1. Wrong Lyrics?
Lyrics are provided by LRCLIB and other sources. Sometimes lyrics may not match perfectly with YouTube"
videoId" parameter. So I need to use some "String Matcher" and "Duration" for search lyrics. So
sometimes, some songs or videos get the wrong lyrics

#### 2. Why the name or brand is "SimpMusic"?
Simply, because I love the name. It's a combination of 'Simple' and 'Music'. But SimpMusic is not a simple app, it's all you need for a powerful music streaming app.

#### More FAQ, join my Discord channel

1. 100% Free, Open-Source & Strictly Non-Commercial


SimpMusic is a fully open-source project (FOSS) created purely for educational purposes and personal use. We do not sell this application, nor do we monetize it in any way. There are no advertisements, no premium features, no subscriptions, and no hidden fees within the app. This project has absolutely no commercial value or financial intent.

2. A Custom Browser with Content Filtering


SimpMusic acts strictly as a specialized, third-party web browser and client. It simply parses the publicly available website content and APIs of YouTube and YouTube Music, rendering them in a custom user interface. The ad-free experience it provides is fundamentally no different from using a standard web browser (like Chrome, Firefox, or Brave) equipped with a common ad-blocking extension (such as uBlock Origin).

3. Support Content Creators


We deeply respect the hard work of artists, musicians, and content creators. We strongly encourage all users to subscribe to YouTube Premium. Purchasing a Premium subscription is the best way to financially support the creators you listen to and ensure the continued growth of the platform. SimpMusic is built as a proof-of-concept for developers and enthusiasts, not to harm creators' revenues.

4. No Hosting of Copyrighted Material


We do not host, upload, distribute, or store any audio, video, or copyrighted media files on our own servers. All content accessed through this application is stored entirely on Google's/YouTube's servers and remains the property of their respective copyright owners. The app merely acts as a conduit to stream publicly accessible links.


The software is provided "AS IS", without warranty of any kind. The developers of SimpMusic do not encourage or condone piracy. Users are solely responsible for ensuring their usage of this app complies with their local copyright laws and the Terms of Service of the platforms they access.

Because we do not host any media files, we cannot process DMCA takedown requests for audio or video content. However, if you represent a copyright holder or have legal concerns regarding the open-source code itself, please contact us via email at: [email protected]

## Contribute
We're looking for more contributors, all contributions are welcome!
See our CODE OF CONDUCT

Thanks for all my contributors:

<a href="https://github.com/maxrave-dev/SimpMusic/graphs/contributors">
<img src="https://contrib.rocks/image?repo=maxrave-dev/SimpMusic" />
</a>

## Showcase
This project is following clean architecture and MVVM pattern (in UI, app module).

### Dependencies graph
<p float="left">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/main/asset/dependencies_graph.svg?raw=true" width="800">
</p>

## Support & Donations
#### Special thanks to all supporter ❤️
<div align="left">
<a href="https://simpmusic.org/"><img alt="Visit the website" height="50" src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/documentation/website_vector.svg"></a> &nbsp;
<a href="https://discord.gg/Rq5tWVM9Hg"><img alt="Discord Server" height="50" src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/social/discord-plural_vector.svg"></a> &nbsp;
<br> <a href="https://www.buymeacoffee.com/maxrave"><img alt="Buy me a Coffee" height="50" src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/donate/buymeacoffee-singular_vector.svg"></a> &nbsp;
<a href="https://liberapay.com/maxrave/"><img alt="liberapay" height="50"
src="https://raw.githubusercontent.com/liberapay/liberapay.com/master/www/assets/liberapay/logo-v2_black-on-yellow.svg"></a>
</div>

### MOMO or Vietnamese banking
<p float="left">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/dev/asset/52770992.jpg?raw=true" width="300">
</p>

SimpMusic is sponsored by:


<br />
<a href="https://vercel.com/oss">
<img alt="Vercel OSS Program" src="https://vercel.com/oss/program-badge.svg" />
</a>
<br />
<br />
<a href="https://www.digitalocean.com/?refcode=d7f6eedfb9a9&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge"><img src="https://web-platforms.sfo2.cdn.digitaloceanspaces.com/WWW/Badge%201.svg" width="300" alt="DigitalOcean Referral Badge" /></a>
<br>
<br>
<a href="https://crowdin.com">
<img src="https://support.crowdin.com/assets/logos/plate/png/crowdin-logo-with-plate.png" width="300"/>
</a>
<br>
<a href="https://sentry.io">
<img src="https://github.com/maxrave-dev/SimpMusic/blob/dev/asset/sentry.svg?raw=true" width="300"/>
</a>
<br>
<br>

Get a free $200 credit over 60 days on DigitalOcean: GET NOW

Crowdin and Sentry both have a free enterprise plan for Open-source projects. Follow the URLs:
- Open Source License Request Form | Crowdin
- Sentry for Open Source | Sentry

Check out the Vercel open-source program:
- https://vercel.com/open-source-program

This project is tested with BrowserStack
- Checkout BrowserStack now: https://www.browserstack.com/

This project is a part of SimpMusic.org Open-source project by me maxrave-dev

<!-- GitAds-Verify: 9788276LHF131ESPL12SWLJ8LACOJE89 -->