Kotlin Spotify Web API Wrapper (KMP)
Spotify Web API wrapper for Kotlin Multiplatform.
This repository provides a type-safe, coroutine-friendly Spotify API client for Kotlin, Android, iOS, JVM, and JS.
Why This Library
- Kotlin-first Spotify Web API wrapper for KMP projects
- Type-safe request/response models with kotlinx.serialization
- Coroutine-based API calls with Ktor client
- Shared business logic across Android, iOS, JVM, and JS
Status
Installation (Maven Central)
Dependency coordinates:
- Group:
io.github.nubasu
- Artifact:
kotlin-spotify-web-api-wrapper
Recommendation : libs.versions.toml (Version Catalog)
gradle/libs.versions.toml:
[versions]
kotlinSpotifyWebApiWrapper = "1.0.0"
[libraries]
kotlin-spotify-web-api-wrapper = { module = "io.github.nubasu:kotlin-spotify-web-api-wrapper", version.ref = "kotlinSpotifyWebApiWrapper" }
build.gradle.kts:
repositories {
mavenCentral()
}
commonMain.dependencies {
implementation(libs.kotlin.spotify.web.api.wrapper)
}
build.gradle.kts (Kotlin DSL)
repositories {
mavenCentral()
}
commonMain.dependencies {
implementation("io.github.nubasu:kotlin-spotify-web-api-wrapper:1.0.0")
}
build.gradle (Groovy DSL)
repositories {
mavenCentral()
}
dependencies {
implementation 'io.github.nubasu:kotlin-spotify-web-api-wrapper:1.0.0'
}
Features
- Spotify Web API coverage for albums, artists, playlists, player, tracks, users, and more
- Authorization flows: Authorization Code with PKCE, Authorization Code, Client Credentials, Refresh Token
- Pagination helpers, rate-limit handling, and retry support
- Unit-tested non-private functions
- Sample app and docs for end-to-end auth-to-API usage
Documentation
Sample App (composeApp)
- A sample app is included in
composeApp/.
- It supports:
PKCE auth -> load current user's playlists -> start/pause playback.
- Android callback deep link:
spotifyauth://callback (configure this in Spotify Dashboard redirect URIs).
Quick Start
import com.nubasu.spotify.webapi.wrapper.api.authorization.SpotifyAuthManager
import com.nubasu.spotify.webapi.wrapper.api.albums.AlbumsApis
val auth = SpotifyAuthManager(
clientId = "YOUR_CLIENT_ID",
redirectUri = "your.app://callback"
)
val pkce = auth.startPkceAuthorizationAndLaunch(scope = listOf("user-read-email"))
val albumsApi = AlbumsApis()
val album = albumsApi.getAlbum("album-id")
References
Contributing
PRs/issues are welcome.
- If you find a bug: open an issue with steps to reproduce.
- If you want to add an endpoint: follow existing conventions and include tests.
- If you add any features: open an issue or open PR!