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
| Module | Disk path | Responsibility |
|---|---|---|
:androidApp | androidApp/ | Android entry point / APK: Application, Activity, foreground media service, Glance widgets, crash UI |
:composeApp | composeApp/ | Shared UI + presentation: Compose screens, ViewModels, navigation, DI, expect/actual glue (Android + JVM targets) |
:desktopApp | desktopApp/ | Desktop entry point + packaging: JVM Main.kt, Conveyor packaging, VLC bundling, desktop windows |
Core
| Module | Disk path | Responsibility |
|---|---|---|
:common | core/common/ | Constants, Config, enums, supported locales, logging |
:domain | core/domain/ | Domain layer: models, Room entities, manager interfaces (depends only on :common) |
:data | core/data/ | Data layer: Room database, DataStore, repositories, parsers, Koin modules |
Services — core/service/
| Module | Responsibility |
|---|---|
:ktorExt | Shared Ktor HTTP client foundation (per-platform engines) |
:kotlinYtmusicScraper | YouTube / YT Music InnerTube scraper + stream extraction |
:spotify | Spotify API client (Canvas, metadata) |
:aiService | AI / LLM integration (Gemini / OpenAI) |
:lyricsService | Lyrics provider client |
:kizzy | Discord Rich Presence (Kizzy) |
Media — core/media/
| Module | Responsibility |
|---|---|
:media3 | Android playback engine (Media3 / ExoPlayer) |
:media3-ui | Android Media3 Compose UI |
:media-jvm | Desktop playback engine (VLC / VLCJ) |
:media-jvm-ui | Desktop 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.
| Module | Responsibility |
|---|---|
:crashlytics | Sentry-backed crash reporting (Full builds) |
:crashlytics-empty | No-op crash reporting (FOSS builds, F-Droid) |
:cast | Google Cast / Chromecast support (Full builds, Android) |
:cast-empty | No-op Cast stub (FOSS builds) |
Architecture overview
Layers, MVVM, KMP and the FOSS/Full split.
