spotube

team-spotubeAGPL-3.0活跃维护 有专家点评

开源跨平台音乐播放器,桌面和手机都能用,通过 Spotify 和 YouTube 等公开来源获取歌曲,无需付费订阅即可播放。

🎧 Open source music streaming app! Available for both desktop & mobile!

v6.0.0发布于 2026-11-10 03:40 UTC50,712star +76 / 7 天2,395fork同步于 2026-11-10 23:20 UTC

专家点评

上手难度:硬核更新于 2026-11-11

用插件把 Spotify 元数据和 YouTube 音源拼起来的跨平台播放器,顶替官方客户端

适用场景

  • 桌面端日常听歌:Linux/Windows/macOS 上想要一个不依赖浏览器标签页的独立播放器,播放控制在本机完成,不用把听歌记录交给第三方服务
  • 自建或社区插件接自定义音源:官方客户端不支持的平台或私有音乐库,通过插件接入,换别的播放器基本没有插件层
  • 离线下载带完整标签的曲目:需要把曲目落到本地并保留元数据,而不是只缓存一个无标签音频文件
  • 对遥测敏感的环境:无遥测、无诊断上报,播放不上传服务器,适合不想让播放行为出本机的人

踩坑

  • 构建门槛集中在依赖链:需要 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 这类本地播放器更省事;要的是纯流媒体且能接受官方客户端,就没必要绕这一层插件架构

怎么上手

由 README 提炼,执行前请确认
./gradlew :composeApp:run
硬件要求按 README 说明

README 未说明显存或 GPU 要求;桌面端为 JVM/GraalVM 原生应用,Linux 运行需安装 VLC 及 WebKitGTK 等运行时库。

纯 CPU 可运行
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

跨平台开源音乐流媒体应用,用插件自带元数据与音源,迈向去中心化音乐流媒体

开源跨平台音乐播放器,桌面和手机都能用,通过 Spotify 和 YouTube 等公开来源获取歌曲,无需付费订阅即可播放。

核心能力

  • 用社区或自建插件接入任意平台与自定义音乐服务
  • 下载带完整标签元数据的曲目
  • 提供与插件无关的时间同步歌词
  • 播放控制在本机完成,不上传服务器
  • 无遥测、无诊断、不收集用户数据

容易踩的坑

构建需 JDK 21 与 Rust 工具链,Android 构建还需 Android SDK;ComposeNativeWebview 未发布到 Maven Central,需按 workflow 中固定的 commit 克隆并 publishToMavenLocal;Linux 上运行(含 :composeApp:run)必须先装 VLC 等运行时库,否则无法启动。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v6.0.0
  1. 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
  2. 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
  3. 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

  4. 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

    New Contributors

    Full Changelog: https://github.com/KRTirtho/spotube/compare/v5.1.0...v5.1.1

  5. 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

    Full Changelog: https://github.com/KRTirtho/spotube/compare/v5.0.0...v5.1.0

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    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!

    HackerNews


    Spotube Desktop Spotube Mobile

    ****

    🌃 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 the composeApp library 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_COMMIT in spotube-release-binary.yml and run ./gradlew publishToMavenLocal in it.

    • Linux only: runtime libraries, including VLC. Needed to run the app, including :composeApp:run:

      DistroCommand
      Debian/Ubuntusudo apt-get install libvlc5 vlc-plugin-base libwebkit2gtk-4.1-0 libgtk-3-0 libasound2 libgl1 libxtst6 libxi6 libxrender1
      Fedorasudo dnf install vlc-libs webkit2gtk4.1 gtk3 alsa-lib mesa-libGL libXtst libXi libXrender (vlc-libs needs RPM Fusion)
      Arch / CachyOS / Manjarosudo pacman -S vlc webkit2gtk-4.1 gtk3 alsa-lib libglvnd libxtst libxi libxrender
      openSUSEsudo zypper install libvlc5 libwebkit2gtk-4_1-0 libgtk-3-0 libasound2 Mesa-libGL1 libXtst6 libXi6 libXrender1

      On Ubuntu 24.04+/Debian 13, libgtk-3-0 and libasound2 are libgtk-3-0t64 and libasound2t64; 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:assembleNightlyDebug for 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):

    OSRequirements
    Linuxgcc, 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
    macOSXcode Command Line Tools (xcode-select --install)
    WindowsVisual 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):

    OSCommand
    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=true for the nightly channel (separate icons and name).

    • DownloadLinuxGtkBundleTask downloads 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 with patchelf. Needs ar, tar, zstd, readelf, patchelf.
    • WebKitGTK has its helper-process path compiled in, so AppImageEnvironment patches it to a relative path and moves to that directory at startup. It also sets GIO_EXTRA_MODULES and WEBKIT_DISABLE_DMABUF_RENDERER=1 (the bundled WebKitGTK 2.44 never paints against a newer host Mesa).
    • main() must call GraalVmInitializer.initialize() first: the VLC loader and the environment setup read compose.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.

    1. ./gradlew :composeApp:runWithNativeAgent starts the app on the JVM with GraalVM's tracing agent.
    2. Use the broken feature, then close the window normally. Ctrl+C discards the recording.
    3. Commit the updated JSON in composeApp/graalvm/ and rebuild.

    [!Tip] ./gradlew :composeApp:runGraalvmNative is a faster debug loop: a quick -Ob build that names the missing registration.

    [!Warning] Keep the hand-written uk.co.caprica.vlcj.binding.lib.LibVlc entry, 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.

    AreaDevelopmentProduction
    Rust libfast debug profilerelease with LTO and stripping (31 MB → 1.8 MB)
    Desktop apphot-reloadable JVM appsize-optimized (-Os) GraalVM native image
    Native libsallhost 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. Set betaNumber in composeApp/build.gradle.kts to N, and back to null for 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

    Desktop and native

    Plugins

    👥 The Spotube team

    💼 License

    Spotube is open source and licensed under the AGPL-3.0-or-later License.