Spotube 中文文档 下载 App

插件驱动的分离架构——Spotube 如何用插件接管一切

v5 的核心变化

Spotube v5.0.0(2025-09-11)是一次架构级重构。之前的版本把 Spotify 的元数据和 YouTube 的音频流硬编码在代码里;v5 起,Spotube 本身只提供一个 宿主(Host)——UI、播放内核、数据存储、插件加载器,所有具体的音乐服务连接都通过插件完成。

四类插件接口

Spotube 预留了四类插件 API,每个插件可以实现其中一类或多类:

接口职责典型实现
MetadataSearchAPI搜索曲目、专辑、歌手、歌单,返回元数据Spotify / MusicBrainz / JioSaavn
AudioAPI根据元数据提供音频流YouTube / Piped / Invidious / Qobuz
LyricsAPI根据曲目信息获取时间同步歌词LRCLib
ScrobbleAPI把播放记录上报到外部服务Last.fm / ListenBrainz

v5.1.0(2025-11-14)新增 Audio-Source 插件——之前音频源只能用官方内置的 YouTube/Piped/Invidious,现在社区可以写自己的音频源插件,比如 Qobuz、Dab Radio、自定义 HTTP 源。

Kotlin/JS + Zipline runtime

Spotube 插件不是传统的 Dart/Flutter 扩展,而是 Kotlin/JS 库,在 Cash App 的 [Zipline] runtime 中执行。Zipline 为每个插件提供独立的沙箱环境,插件通过宿主暴露的 bridge 调用 Spotube 的能力,无法直接访问系统文件或网络。

一个插件的典型生命周期:

  1. 打包成 .smplug(Spotube Plugin),内含 plugin.json manifest 和编译好的 Kotlin/JS 代码
  2. Spotube 在启动或用户手动安装时加载 .smplug
  3. 插件的 main() 函数被调用,向宿主注册自己实现的接口
  4. 用户搜索曲目时,Spotube 调用已注册的 MetadataSearchAPI;播放时调用 AudioAPI;依此类推

元数据与音频源分离意味着什么

在传统客户端里,一个音乐平台同时负责告诉用户"有什么歌"(元数据)和"怎么听这首歌"(音频流)。Spotube 的分离架构打破了这个绑定——你可以用 Spotify 的元数据(歌单、推荐、热门榜),但音频流走 YouTube 或 Piped;或者 Qobuz 的无损音频配上 MusicBrainz 的元数据。这是它能绕过 Spotify Premium 的根本原因。

Spotube 插件页
Spotube 插件管理界面

插件仓库与发现

Spotube 内置从 GitHub 和 Codeberg 拉取的 Available plugins 列表——非精选、非审核,用户自担风险。插件可以:

安全提示:不要安装来源不明的插件。插件拥有你的全部音乐数据访问权限,恶意插件可能窃取登录凭证。优先使用标记 Official 的插件。

想自己写插件?详见 插件开发总览。