- 桌面端日常听歌:Linux/Windows/macOS 上想要一个不依赖浏览器标签页的独立播放器,播放控制在本机完成,不用把听歌记录交给第三方服务
- 自建或社区插件接自定义音源:官方客户端不支持的平台或私有音乐库,通过插件接入,换别的播放器基本没有插件层
- 离线下载带完整标签的曲目:需要把曲目落到本地并保留元数据,而不是只缓存一个无标签音频文件
- 对遥测敏感的环境:无遥测、无诊断上报,播放不上传服务器,适合不想让播放行为出本机的人
spotube
team-spotubeAGPL-3.0活跃维护 有专家点评开源跨平台音乐播放器,桌面和手机都能用,通过 Spotify 和 YouTube 等公开来源获取歌曲,无需付费订阅即可播放。
🎧 Open source music streaming app! Available for both desktop & mobile!
专家点评
上手难度:硬核更新于 2026-11-11用插件把 Spotify 元数据和 YouTube 音源拼起来的跨平台播放器,顶替官方客户端
适用场景
踩坑
- 构建门槛集中在依赖链:需要 JDK 21 + Rust 工具链,Android 还要 Android SDK,且 ComposeNativeWebview 未发布到 Maven Central,得按 workflow 里固定 commit 克隆后 publishToMavenLocal,直接 clone 完跑 gradle 会卡在这一步
- Linux 上不装 VLC 和 WebKitGTK 等运行时库,连 :composeApp:run 都起不来,这是 README 明说的前置条件,不是可选优化
- issue 里认证类错误(400)和 artist page 报错被反复提出,说明插件/上游服务侧的对接是长期不稳定面;代理支持也有高热度诉求,网络受限环境下会撞上
同类对比
如果只是想在桌面听本地曲库,直接用 foobar2000、Strawberry 或 mpv 这类本地播放器更省事;要的是纯流媒体且能接受官方客户端,就没必要绕这一层插件架构
./gradlew :composeApp:runREADME 未说明显存或 GPU 要求;桌面端为 JVM/GraalVM 原生应用,Linux 运行需安装 VLC 及 WebKitGTK 等运行时库。
项目说明
由 README 自动翻译提炼跨平台开源音乐流媒体应用,用插件自带元数据与音源,迈向去中心化音乐流媒体
开源跨平台音乐播放器,桌面和手机都能用,通过 Spotify 和 YouTube 等公开来源获取歌曲,无需付费订阅即可播放。
核心能力
- 用社区或自建插件接入任意平台与自定义音乐服务
- 下载带完整标签元数据的曲目
- 提供与插件无关的时间同步歌词
- 播放控制在本机完成,不上传服务器
- 无遥测、无诊断、不收集用户数据
容易踩的坑
构建需 JDK 21 与 Rust 工具链,Android 构建还需 Android SDK;ComposeNativeWebview 未发布到 Maven Central,需按 workflow 中固定的 commit 克隆并 publishToMavenLocal;Linux 上运行(含 :composeApp:run)必须先装 VLC 等运行时库,否则无法启动。
- v6.0.0最新正式版2026-11-10 · 2026-11-10 03:40 UTC
Spotube V6 is here 🎉🚀
🔥Highlights
- Migration from Flutter to Compose Multiplatform, learn why we did it
- UI redesign, introducing Millennium UI. 2000s look and feel with 2026's modernity
- Jam sessions, play music with friends and family in sync. Runs on a new dedicated room server, with host-only controls and device bans to keep rooms safe
- Full Android Auto integration. Browse, Library, Search all are there now, not just queue
- iOS now plays audio through VLC, so every streaming format works, and keeps playing in the background
- Migration from hetu_script to Kotlin for plugin development. Powered by Zipline by Cashapp
- More extensibility, plugin support for Lyrics provider and Scrobbling providers
- Redesigned plugin manager. Plugin login pages can only reach cookies and scripts of the domains they declare
- Native Android APK, with reduced apk size, performance improvements and more native android integrations.
- Relicensed from BSD-4-Clause to AGPL-3.0-or-later for a more Open Source friendly licensing. And for preventing distribution of closed source and maliciously modified Spotube.
💫 Features
- Migration to Compose Multiplatform
- Add ChipTab component and refactor SearchScreen to use it
- Add AutocompleteTextField component and integrate it into SearchScreen
- Enhance AutocompleteTextField with focus management and dropdown behavior
- Enhance AppSidebar with improved button interactions and visual feedback
- Implement endless playback recommendations in DeviceAudioPlayerQueue
- Add GhostIconButton component and enhance button interactions in TrackList
- Replace IconButton with GhostIconButton in AppExpandedPlayer and AppLargePlayer for improved visual consistency
- Replace IconButton with GhostIconButton in PlayerQueueContent and PlayableCard for visual consistency
- Enhance UI components with LocalBaseUITheme for consistent styling and improved interactions
- Enhance button styles and interactions in Buttons and Theme components for improved UI consistency
- Simplify highlight implementation in UI components for improved readability and maintainability
- Add genre selection and tabs to HomeScreen for improved content navigation
- Implement artist overview screen with loading, error handling, and pagination for albums, related artists, and featured playlists
- Add genre and featured browsing capabilities to MediaBrowseHelper
- Implement playlist creation and editing functionality with UI components
- Add 'Add to Playlist' functionality with UI components and dialogs
- Add Toggle component and update UI to use it in place of Switch
- Implement settings section cards for updates, desktop, language, caching, and plugins
- Update icons in settings sections to use Iconsax library for improved UI consistency
- Replace FeatherIcons with Iconsax in PluginCard and PluginPermissionsDialog for improved UI consistency
- Refactor PluginPermissionsDialog to use custom UI components for improved consistency and readability
- Enhance UI with shared element transitions and improve state management in album and playlist screens
- Integrate Uniffi for audio metadata reading and writing with Lofty library
- Replace FeatherIcons with Iconsax in window controls and update sidebar with better design
- Implement haze effect and UI enhancements in AppLargePlayer and AppShell
- Enhance haze effect integration in AppShell and AppSidebar for improved UI experience
- Add adaptive dialog bottom sheet component and enhance plugin installation UI
- Enhance AdaptiveDialogBottomSheet with dismiss icon and improve plugin screen layout
- Implement CollectionView component and refactor Album, Playlist, SavedTracks screens for improved UI consistency
- Add current time management in AudioPlayer for improved playback control
- Simplify playba
- v6.0.0-beta.0Spotube v6.0.0-beta.02026-10-30 · 2026-10-30 12:01 UTC
查看更新说明
Spotube V6 Beta is here 🎉🚀
🔥Highlights
- Migration from Flutter to Compose Multiplatform, learn why we did it
- UI redesign, introducing Millennium UI. 2000s look and feel with 2026's modernity
- Jam session integration, play music with friends and family
- Full Android Auto integration. Browse, Library, Search all are there now, not just queue
- Migration from hetu_script to Kotlin for plugin development. Powered by Zipline by Cashapp
- More extensibility, plugin support for Lyrics provider and Scrobbling providers
- Native Android APK, with reduced apk size, performance improvements and more native android integrations.
- Relicensed from BSD-4-Clause to AGPL-3.0-or-later for a more Open Source friendly licensing. And for preventing distribution of closed source and maliciously modified Spotube.
💫 Features
- Migration to Compose Multiplatform
- Add ChipTab component and refactor SearchScreen to use it
- Add AutocompleteTextField component and integrate it into SearchScreen
- Enhance AutocompleteTextField with focus management and dropdown behavior
- Enhance AppSidebar with improved button interactions and visual feedback
- Implement endless playback recommendations in DeviceAudioPlayerQueue
- Add GhostIconButton component and enhance button interactions in TrackList
- Replace IconButton with GhostIconButton in AppExpandedPlayer and AppLargePlayer for improved visual consistency
- Replace IconButton with GhostIconButton in PlayerQueueContent and PlayableCard for visual consistency
- Enhance UI components with LocalBaseUITheme for consistent styling and improved interactions
- Enhance button styles and interactions in Buttons and Theme components for improved UI consistency
- Simplify highlight implementation in UI components for improved readability and maintainability
- Add genre selection and tabs to HomeScreen for improved content navigation
- Implement artist overview screen with loading, error handling, and pagination for albums, related artists, and featured playlists
- Add genre and featured browsing capabilities to MediaBrowseHelper
- Implement playlist creation and editing functionality with UI components
- Add 'Add to Playlist' functionality with UI components and dialogs
- Add Toggle component and update UI to use it in place of Switch
- Implement settings section cards for updates, desktop, language, caching, and plugins
- Update icons in settings sections to use Iconsax library for improved UI consistency
- Replace FeatherIcons with Iconsax in PluginCard and PluginPermissionsDialog for improved UI consistency
- Refactor PluginPermissionsDialog to use custom UI components for improved consistency and readability
- Enhance UI with shared element transitions and improve state management in album and playlist screens
- Integrate Uniffi for audio metadata reading and writing with Lofty library
- Replace FeatherIcons with Iconsax in window controls and update sidebar with better design
- Implement haze effect and UI enhancements in AppLargePlayer and AppShell
- Enhance haze effect integration in AppShell and AppSidebar for improved UI experience
- Add adaptive dialog bottom sheet component and enhance plugin installation UI
- Enhance AdaptiveDialogBottomSheet with dismiss icon and improve plugin screen layout
- Implement CollectionView component and refactor Album, Playlist, SavedTracks screens for improved UI consistency
- Add current time management in AudioPlayer for improved playback control
- Simplify playback control logic in AudioPlayer by removing redundant state checks
- Introduce AudioPlayerInterface and refactor AudioPlayer implementations for better abstraction
- Update skipToNext and skipToPrevious methods in AudioPlayer for improved media item management
- Refactor LyricsViewModel to use AudioPlayerInterface for improved abstraction
- Add Disco
- v5.1.22026-06-05 · 2026-06-05 05:10 UTC
查看更新说明
Bug Fixes
- newpipe: Fallback to muxed streams if no audio stream is available
- Dismiss search dropdown and keyboard on submission
- Custom image helper null exception
Full Changelog: https://github.com/KRTirtho/spotube/compare/v5.1.1...v5.1.2
- v5.1.12026-02-24 · 2026-02-24 13:15 UTC
查看更新说明
v5.1.1
Bug Fixes
- Upgrade NewPipeExtractor to latest version fixing playback issue
- Lyrics not working
What's Changed
- chore: replace windows app icon by a higher resolution by @TobseF in https://github.com/KRTirtho/spotube/pull/2838
New Contributors
- @TobseF made their first contribution in https://github.com/KRTirtho/spotube/pull/2838
Full Changelog: https://github.com/KRTirtho/spotube/compare/v5.1.0...v5.1.1
- v5.1.02025-11-14 · 2025-11-14 11:10 UTC
查看更新说明
Highlights
- New Audio-Source plugins. Ability to add custom audio source created by community aside from official supported sources like YT, Piped etc.
- NewPipe support for Desktop platforms
- Single connection streaming instead of chunked streaming
- Improved download manager with faster download speed, thanks to parallel chunked downloading
- Queue batch operations support
Features
- Show plugin source and set the only plugin as default if no plugin is there
- playback: Add dab music source
- playback: Add uncompressed flac playback support
- Add plugin audio source models and api service
- plugins: Filter plugins by abilities in plugins page and show abilities as badge
- Add setting default audio source support
- Move away from track source query and preferences audio quality and codec
- Add NewPipe support for desktop platforms
- Add default plugin loading capability
- queue: Add multi-select and bulk actions to queue (#2839)
- android: Add 16KB page size support
Bug Fixes
- Change plugin download directory to application support
- playback: Play next not working
- Downloaded tracks are not tagged with metadata
- Download not working in different devices and slow
- playback: Use stream instead of chunked serving of audio bytes
New Contributors
- @Rahul-Sahani04 made their first contribution in https://github.com/KRTirtho/spotube/pull/2839
Full Changelog: https://github.com/KRTirtho/spotube/compare/v5.0.0...v5.1.0
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
A cross-platform extensible open-source music streaming platform. Bring your own music metadata/playlist/audio-source with plugins created by community or by yourself. A small step towards the decentralized music streaming era!

****
🌃 Features
- 🧩 Plugin powered, supports any platform or custom music service through plugins.
- 🗺️ Community driven plugins for popular platforms or create your own.
- ⬇️ Freely downloadable tracks with tagged metadata.
- 🖥️ 📱 Cross-platform support.
- 🪶 Small size & less data usage.
- 🕒 Time synced lyrics regardless of the plugin support.
- ✋ No telemetry, diagnostics or user data collection.
- 🚀 Native performance.
- 📖 Open source/libre software.
- 🔉 Playback control is done locally, not on the server.
⬇️ Download
Download Spotube from the Official Website: https://spotube.cc
🔄 Nightly Builds
Grab the latest nightly builds of Spotube from the Offical Website.
Spotube is a Compose Multiplatform app.
1. Prerequisites
-
JDK 21 to run Gradle (the Gradle daemon JDK and GraalVM are provisioned automatically).
-
Rust (
rustup+cargo), for thecomposeApplibrary built through Gobley. -
Android SDK, only for Android builds.
-
ComposeNativeWebview, which isn't on Maven Central yet. Clone it at the commit pinned as
COMPOSE_WEBVIEW_COMMITinspotube-release-binary.ymland run./gradlew publishToMavenLocalin it. -
Linux only: runtime libraries, including VLC. Needed to run the app, including
:composeApp:run:Distro Command Debian/Ubuntu sudo apt-get install libvlc5 vlc-plugin-base libwebkit2gtk-4.1-0 libgtk-3-0 libasound2 libgl1 libxtst6 libxi6 libxrender1Fedora sudo dnf install vlc-libs webkit2gtk4.1 gtk3 alsa-lib mesa-libGL libXtst libXi libXrender(vlc-libsneeds RPM Fusion)Arch / CachyOS / Manjaro sudo pacman -S vlc webkit2gtk-4.1 gtk3 alsa-lib libglvnd libxtst libxi libxrenderopenSUSE sudo zypper install libvlc5 libwebkit2gtk-4_1-0 libgtk-3-0 libasound2 Mesa-libGL1 libXtst6 libXi6 libXrender1On Ubuntu 24.04+/Debian 13,
libgtk-3-0andlibasound2arelibgtk-3-0t64andlibasound2t64; apt resolves this itself.
2. Run in development
Desktop (JVM), fastest edit/run loop
./gradlew :composeApp:run
Android debug APK
./gradlew :composeApp:assembleStableDebug
Use
./gradlew :composeApp:assembleNightlyDebugfor the nightly channel.
Development builds stay fast: the release-only optimizations below are skipped.
3. Build the desktop app
A native build takes about 10 minutes, uses every CPU core and peaks at ~15 GB of RAM.
It only happens for the tasks below, never for run.
Native toolchain (Nucleus downloads GraalVM CE on the first build; set GRAALVM_HOME to use
your own):
| OS | Requirements |
|---|---|
| Linux | gcc, zlib headers, patchelf; rpm for .rpm, fuse + zstd for .AppImage. Debian/Ubuntu: sudo apt-get install build-essential zlib1g-dev patchelf rpm fuse zstd. Fedora: sudo dnf install gcc zlib-devel patchelf rpm-build fuse zstd |
| macOS | Xcode Command Line Tools (xcode-select --install) |
| Windows | Visual Studio Build Tools with "Desktop development with C++" (use an "x64 Native Tools" prompt if native-image can't find MSVC) |
Build and run the app folder:
./gradlew :composeApp:createGraalvmNativeDistributable
Output folder: composeApp/build/compose/binaries/main/graalvm-app/
Build and launch in one step
./gradlew :composeApp:runGraalvmNativeDistributable
Keep the spotube binary next to the libraries it was built with; it loads them from its own
folder.
Installers (each OS builds only its own):
| OS | Command |
|---|---|
| Linux | ./gradlew :composeApp:packageGraalvmDeb :composeApp:packageGraalvmRpm |
| Linux (AppImage) | ./gradlew :composeApp:packageGraalvmAppImage -PappImage=true |
| Windows | ./gradlew :composeApp:packageGraalvmExe (or packageGraalvmMsi) |
| macOS | ./gradlew :composeApp:packageGraalvmDmg |
Output folder:
composeApp/build/compose/binaries/main/graalvm-<format>
[!Tip] Add
-Pnightly=truefor the nightly channel (separate icons and name).
DownloadLinuxGtkBundleTaskdownloads the Ubuntu 24.04 packages (audio-only VLC via vlcj-bundler, GTK 3, WebKitGTK 4.1, glib-networking), keeps only what GTK/WebKit reach and relocates the libraries withpatchelf. Needsar,tar,zstd,readelf,patchelf.- WebKitGTK has its helper-process path compiled in, so
AppImageEnvironmentpatches it to a relative path and moves to that directory at startup. It also setsGIO_EXTRA_MODULESandWEBKIT_DISABLE_DMABUF_RENDERER=1(the bundled WebKitGTK 2.44 never paints against a newer host Mesa). main()must callGraalVmInitializer.initialize()first: the VLC loader and the environment setup readcompose.application.resources.dir.
4. Native build breaks, JVM works
A native image is a closed world: everything reached through reflection, JNI or JNA (vlcj, Zipline,
NewPipe, ktor, datastore, ...) must be declared at build time. Nucleus generates most of it; the
rest lives in composeApp/graalvm/reachability-metadata.json.
Symptoms: ClassNotFoundException, NoSuchMethodException or MissingReflectionRegistrationError
in the native binary, while :composeApp:run works.
./gradlew :composeApp:runWithNativeAgentstarts the app on the JVM with GraalVM's tracing agent.- Use the broken feature, then close the window normally. Ctrl+C discards the recording.
- Commit the updated JSON in
composeApp/graalvm/and rebuild.
[!Tip]
./gradlew :composeApp:runGraalvmNativeis a faster debug loop: a quick-Obbuild that names the missing registration.
[!Warning] Keep the hand-written
uk.co.caprica.vlcj.binding.lib.LibVlcentry, or playback fails to initialize.
5. Production vs development builds
Production mode turns on automatically for package*, create*, notarize* and
nativeImageCompile tasks. Force it with -Pproduction=true|false.
| Area | Development | Production |
|---|---|---|
| Rust lib | fast debug profile | release with LTO and stripping (31 MB → 1.8 MB) |
| Desktop app | hot-reloadable JVM app | size-optimized (-Os) GraalVM native image |
| Native libs | all | host OS/CPU only; Skia loaded from lib/; on Linux ~10 KB libjvm.so/libjava.so shims instead of the JDK's 28 MB one |
Android picks the Rust profile from its build type.
6. Releases
Run spotube-release-binary.yml manually
(workflow_dispatch) as stable, beta or nightly.
- Beta: the stable build as a draft, tagged
v<version>-beta.N. SetbetaNumberincomposeApp/build.gradle.ktsto N, and back tonullfor stable. - Desktop: each platform (Linux x86_64 and aarch64, Windows, macOS) builds its installers on its own runner.
- Android: a signed APK.
📚 Resources
Core stack
- Kotlin Multiplatform
- Compose Multiplatform
- Compose Hot Reload
- Koin for KMP
- Ktor client
- DataStore for KMP
Desktop and native
- Nucleus: desktop packaging and GraalVM integration
- ComposeNativeWebview
- GraalVM Native Image and its reachability metadata
- Gobley: Rust in Kotlin Multiplatform
- vlcj: VLC bindings for audio playback
Plugins
- Zipline: runs the JS plugins
👥 The Spotube team
- Kingkor Roy Tirtho - The Founder, Maintainer and Lead Developer
- Owen Connor - The Cool Discord Moderator
- Piotr Rogowski - The MacOS Developer
- Rusty Apple - The Mysterious Unknown Guy
💼 License
Spotube is open source and licensed under the AGPL-3.0-or-later License.