Check out my personal blogsVisit maxrave.dev
SimpMusicSimpMusic Docs
For Developers

Project Structure

The Gradle modules that make up SimpMusic and what each one is responsible for.

SimpMusic is split into 20 Gradle modules.

core/ is a git submodule

The core/ directory is a git submodule (github.com/maxrave-dev/core). Because of this, a core module's Gradle path (e.g. :common) differs from its disk path (e.g. core/common). Clone with --recursive — see Building from source.

Apps

ModuleDisk pathResponsibility
:androidAppandroidApp/Android entry point / APK: Application, Activity, foreground media service, Glance widgets, crash UI
:composeAppcomposeApp/Shared UI + presentation: Compose screens, ViewModels, navigation, DI, expect/actual glue (Android + JVM targets)
:desktopAppdesktopApp/Desktop entry point + packaging: JVM Main.kt, Conveyor packaging, VLC bundling, desktop windows

Core

ModuleDisk pathResponsibility
:commoncore/common/Constants, Config, enums, supported locales, logging
:domaincore/domain/Domain layer: models, Room entities, manager interfaces (depends only on :common)
:datacore/data/Data layer: Room database, DataStore, repositories, parsers, Koin modules

Services — core/service/

ModuleResponsibility
:ktorExtShared Ktor HTTP client foundation (per-platform engines)
:kotlinYtmusicScraperYouTube / YT Music InnerTube scraper + stream extraction
:spotifySpotify API client (Canvas, metadata)
:aiServiceAI / LLM integration (Gemini / OpenAI)
:lyricsServiceLyrics provider client
:kizzyDiscord Rich Presence (Kizzy)

Standing on giants

The approach for getting YouTube Music data was inspired by InnerTune, and the stream-URL extraction technique draws on SmartTube.

Media — core/media/

ModuleResponsibility
:media3Android playback engine (Media3 / ExoPlayer)
:media3-uiAndroid Media3 Compose UI
:media-jvmDesktop playback engine (VLC / VLCJ)
:media-jvm-uiDesktop player Compose UI

Build-gated pairs

Two capabilities ship as a real implementation plus a no-op twin with the same API. The Gradle property isFullBuild picks which one is linked, so the FOSS build never pulls in a proprietary dependency.

ModuleResponsibility
:crashlyticsSentry-backed crash reporting (Full builds)
:crashlytics-emptyNo-op crash reporting (FOSS builds, F-Droid)
:castGoogle Cast / Chromecast support (Full builds, Android)
:cast-emptyNo-op Cast stub (FOSS builds)

Architecture overview

Layers, MVVM, KMP and the FOSS/Full split.

Community

Get involved in our community. Everyone is welcome!

SimpMusic is sponsored by:

Get 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:

Check out the Vercel open-source program

SimpMusic app is FOSS and under GPL-3.0 license.

© 2023-2026 SimpMusic - @maxrave-dev

We are not affiliated with or endorsed by Google, YouTube, Spotify, or any other third-party brands or applications.