[v2.11.6] - 2026-08-21
✨ New Features
31a4d18- jsplugin: fetch 响应头支持多值无损与标准 Headers 读取方法 (commit by @hanxi)85d4330- GET /api/v1/songs/{id}/tracks 音轨枚举端点 (commit by @hanxi)825f70f- scan: 外部封面图片查找 + 歌单封面优先外部图片 (commit by @hanxi)a954521- jsplugin: 新增 songs.refreshMetadata 桥接,支持带 Headers 的远程元数据提取 (commit by @hanxi)caecb48- playlist: 新增歌单置顶接口 (commit by @hanxi)
🐛 Bug Fixes
5deae33- services: MoveFile 跨盘检测兼容 Windows ERROR_NOT_SAME_DEVICE (commit by @hanxi)25786f9- app: 加 CORP 头,修 Web 端跨源封面/音频被 COEP 静默阻断 (commit by @hanxi)6c905f7- database: :memory: 限制为单连接,修并发用例随机报 no such table (commit by @hanxi)27ded61- fileutil: 修复 Windows 编译错误,syscall.ERROR_NOT_SAME_DEVICE 未定义 (commit by @hanxi)f474555- ci: 修复发版时 tag run 被 dev run 阻塞导致正式版延迟发布 (commit by @hanxi)
⚡ Performance Improvements
📝 Documentation Changes
0620d3e- update CHANGELOG for v2.11.5 (commit by @github-actions[bot])e01f2df- 更新宿主桥接文档,补充 favorite namespace 说明 (commit by @hanxi)
🔧 Chores
cb8f5ef- 更新 songloft-player 子模块指针 (commit by @hanxi)15a62a1- docker: entrypoint 启动时输出完整版本信息 (commit by @hanxi)14fe330- 更新 songloft-player 子模块(播放速度按钮样式优化) (commit by @hanxi)c9d31d4- bump plugin-toolchain 子模块(songs.refreshMetadata 类型) (commit by @hanxi)8146f43- player: 更新 songloft-player 子模块指针 (commit by @hanxi)8316d53- jsplugin: 更新 songloft-plugin-miot 子模块指针 (commit by @hanxi)52f098d- miot: 更新 songloft-plugin-miot 子模块指针 (commit by @hanxi)c5df438- release version 2.11.6 (commit by @hanxi)
[v2.11.5] - 2026-08-16
✨ New Features
888fb48- add PUT /playlists/{id}/songs/move endpoint for single-song reposition (commit by @hanxi)c5bf861- songs: 新增 GET /songs/random 随机歌曲接口 (commit by @hanxi)
🐛 Bug Fixes
ff42922- 修复项目中所有 UTF-8 乱码字符 (commit by @hanxi)a4b906b- app: 修复 Close() 资源泄漏 + .js MIME 补 charset + 注释乱码修正 (PR #393 by @xiaoniao427)198bc51- docs: 清理 Swagger @Router 注释中冗余的 /api/v1 前缀,并写入规范文档 (commit by @hanxi)
♻️ Refactors
👷 Build System
📝 Documentation Changes
3f0c21e- update CHANGELOG for v2.11.4 (commit by @github-actions[bot])a7f471c- 第三方客户端新增流云音盒 (xgplayer.com) (commit by @hanxi)3fa51d2- TV 客户端章节补充车机支持说明 (commit by @hanxi)73ff669- 第三方客户端新增流云音乐(Cloudflow Music) (commit by @hanxi)c69ae1b- landing: 优化第三方客户端响应式布局 (commit by @hanxi)
🔧 Chores
ce116e1- 更新 miot 插件 (设置页双栏独立滚动 + 默认选中歌单) (commit by @hanxi)b024a84- bump songloft-plugin-miot (修复输入框/下拉框焦点边框 & 自动填充) (commit by @hanxi)5e8ec9f- release version 2.11.5 (commit by @hanxi)
[v2.11.4] - 2026-08-12
✨ New Features
e35df74- docker: 支持 PUID/PGID 非 root 运行 (commit by @hanxi)658b3df- jsplugin: playlists.getSongs bridge 支持 sort/order 排序参数 (commit by @hanxi)ef4bbd7- play: 后端支持倍速播放转码 (0.5x–2x) (commit by @hanxi)8506c11- 登录页新增同意协议勾选功能 (commit by @hanxi)6633cec- normalize: 开放音量均衡目标响度自定义 (commit by @hanxi)a7efc92- proxy: 新增 /proxy/transcode 实时转码代理;radio 转码接入 http_proxy (commit by @hanxi)
🐛 Bug Fixes
d27d727- player: 修复 Web 播放错位并优化日志导出 (commit by @hanxi)a60878c- player: 更新 Windows 首帧尺寸修复 (commit by @hanxi)56c7562- scan: 修复自动创建歌单重复的问题 (commit by @hanxi)d8efd8f- build: armv7 交叉编译跳过 UPX 压缩,避免运行时 futex 崩溃 (commit by @hanxi)674d0f3- jsplugin: 更新 MIoT 插件子模块指针,修复歌曲定位跳回第一屏 (commit by @hanxi)6cabc75- player: 更新 songloft-player 子模块指针 (songloft-org/songloft#361) (commit by @hanxi)58e174a- playlist: song-ids 接口支持自定义 sort/order (commit by @hanxi)45c4985- play: 修复音量均衡切歌截断音频被误判为完整缓存并永久保留 (commit by @hanxi)038ccdf- docs: 安装落地页 Scoop 章节与 README 同步 (PR #384 by @altman08)1a65f5b- cover: 限制缩略图并发解码防止弱设备 OOM (commit by @hanxi)4ede17d- app: 修复 Tracely 初始化多余逗号导致编译失败 (commit by @hanxi)866478f- metadata: ProbeForValidation 使用 tag.FileType 替代临时文件扩展名识别格式 (commit by @hanxi)604bb82- miot: 修复 miot 插件 webf 重写后的前端 bug 与宿主返回键通路 (commit by @hanxi)
📝 Documentation Changes
9360a43- update CHANGELOG for v2.11.3 (commit by @github-actions[bot])33e8e25- 新增第三方客户端板块(音乐方舟、箭头音乐) (commit by @hanxi)6dd7673- 第三方客户端Logo改用官网图标 (commit by @hanxi)8d74c11- 修正隐私宣传措辞,对齐 PRIVACY.md 实际口径 (commit by @hanxi)6ebc26d- player: 记录播放按钮形状设计规范 (commit by @hanxi)c42cdbb- 第三方客户端新增音流(Stream Music) (commit by @hanxi)
🔧 Chores
322a631- player: 更新子模块修复冷启动首次点歌错歌 (commit by @hanxi)a397bd3- player: 同步插件商店刷新修复 (commit by @hanxi)486498d- player: 更新播放器子模块指针 (commit by @hanxi)b36328e- 更新 songloft-player 子模块指针 (commit by @hanxi)9073f29- 更新子模块 - 清理GitHub加速代理预设,添加AI Prompt复制功能 (commit by @hanxi)5c198a7- player: 更新 songloft-player 子模块指针 (commit by @hanxi)e47d96d- player: 更新 songloft-player 子模块指针 (commit by @hanxi)7739690- bump songloft-plugin-miot (commit by @hanxi)a42a361- release version 2.11.4 (commit by @hanxi)
[v2.11.3] - 2026-08-09
🐛 Bug Fixes
42b0906- plugin-builder: 更新前端源码监听修复 (commit by @hanxi)faf0a38- player: 同步 Web 更新检测修复 (commit by @hanxi)eb30e90- 修复客户端更新问题 (commit by @hanxi)
🔧 Chores
[v2.11.1] - 2026-08-03
💥 BREAKING CHANGES
due to
a9a5938- 本地 .lrc 歌词文件优先适配 (commit by @hanxi):扫描/重新导入时若读不到歌词,不再清空库中已有歌词。
要清空歌词请使用 PUT /api/v1/songs/{id}/lyrics 接口。
Fixes songloft-org/songloft-plugin-miot#62
✨ New Features
85ccbbe- backend-patch: Bundle 版 Android 后端热更发布流水线 + 导出面守卫 (commit by @hanxi)5ddbeca- proxy: 私网代理白名单,允许 /proxy 代理指定内网地址*(PR #313 by @hanxi)*53bcf8c- 支持音量均衡 songloft-org/songloft#315 (commit by @hanxi)e87eb77- expand audio/video format support and Web HLS video playback (commit by @hanxi)169aa77- playlist: 删除歌单支持连带清理孤儿歌曲 (PR #325 by @hanxi)b9109fc- release: bundled 热更前后端 manifest 写入原生契约哈希 (commit by @hanxi)3570c44- player: bump songloft-player 子模块,首页歌单网格行列可自定义 (PR #332 by @hanxi)e1cdfca- play: /songs/{id}/play 支持 seek 参数,服务端 input seek 流式续播 (commit by @hanxi)970619d- fingerprint: 指纹计算支持仅重试失败项,不清空已算指纹 (commit by @hanxi)faa5eb4- play-history: 新增按播放上下文的播放历史(歌单/歌手/专辑等) (commit by @hanxi)4af1a8e- jsplugin: 私有仓库 Release 资源下载支持走 github_proxy 加速 (commit by @hanxi)ef025ee- songs: 新增曲库歌名/歌手名清单接口 GET /songs/names (commit by @hanxi)cd87296- theme pack backend with online catalog support (PR #337 by @hanxi)a0109f8- api: add library stats summary endpoint (PR #349 by @hanxi)
🐛 Bug Fixes
6fe2426- 播放伪 mp3(WebM 存为 .mp3)时按内容校验强制转码 (songloft-org/songloft#300) (commit by @hanxi)961a6b2- cover: 本地封面支持 ?w= 服务端缩略,配合 Web 端修封面空白 (PR #309 by @hanxi)
e046edc- release: 修 Bundle Android 补丁 pack 缺失的 --target-version-code (commit by @hanxi)a635989- release: soname 校验放宽为「空或 libgojni.so」(gomobile 产物无 DT_SONAME) (commit by @hanxi)9313dc1- video-hls: fix containsEndList boundary bug, early-fail detection, path traversal hardening (commit by @hanxi)4ec2af8- player: 更新 songloft-player 子模块,修复原生构建的 dart:js_interop 编译失败 (commit by @hanxi)c6676b3- ci: bundled 热更 manifest 写入分 ABI APK 的真实 versionCode (commit by @hanxi)28c5e9a- playlist: 歌单封面 URL 补版本号,修复替换封面后不刷新 (PR #327 by @Jsongcloud)f61a9e7- fingerprint: 扫描后指纹计算默认关闭并限制开销,修 CPU 长期占满 #323 (commit by @hanxi)a7bc950- fingerprint: 指纹去重聚簇改进 + Cancel 竞态修复 + 文件不可达容错 (songloft-org/songloft#323) (commit by @hanxi)8e83998- entrypoint: 非语义化版本按底包覆盖,避免误判为旧而跳过热更 (PR #331 by @Jsongcloud)eff80fa- docker: bump ffmpeg-builder 子模块,Docker 内 ffmpeg 支持视频解码转 HLS,修 mpg 无法播放 (commit by @hanxi)fddcd4d- player: bump songloft-player 子模块 + 补踩坑文档(修 iOS Safari 登录页不弹软键盘 songloft-org/songloft-player#26) (commit by @hanxi)0a2adaf- player: bump songloft-player 子模块(原生端老旧视频容器改走 video-hls,修手机播 mpg 卡顿) (commit by @hanxi)5694025- video-hls: 边转边播 playlist 改为 EVENT 类型,修首次播放 mpg 必卡 (commit by @hanxi)df58cc8- docs: 适配 GitHub 代理重构——附件前缀改为根路径且带主机名 (commit by @hanxi)536f9fb- play: 音量均衡不再阻塞首个播放请求,预热也带上 normalize songloft-org/songloft-plugin-miot#61 (commit by @hanxi)8ce8a1f- jsplugin: LoadPlugin 幂等化,消除启动期与懒加载竞态导致的 env already exists (commit by @hanxi)187acdc- jsplugin: 去掉 LoadPlugin 的 singleflight,修正与 EnsureLoaded 的契约冲突 (commit by @hanxi)dc494e7- jsplugin: 修复 JSService.timerStop 的 data race (commit by @hanxi)a9a5938- lyric: 本地 .lrc 歌词文件优先适配 (commit by @hanxi)6481996- GitHub 代理仅对 GitHub 域名生效,非 GitHub 订阅源直连 (commit by @hanxi)e3ccc49- upgrade: GitHub 代理失败自动降级直连,修复死代理导致更新检查 500 (commit by @hanxi)acb8a44- metadata: 批量刷新元数据改为纯本地提取,只处理本地有文件的歌曲 (commit by @hanxi)b58bc72- jsplugin: 插件商店按 entry_path + 作者身份去重,撞名不再静默覆盖 (commit by @hanxi)7f8b0a0- ci: 热更补丁资产改带 commit 的不可变文件名,同步前端子模块 (commit by @hanxi)
⚡ Performance Improvements
♻️ Refactors
✅ Tests
👷 Build System
10e2f6c- Bundle 版 Android 统一为单个 universal APK (commit by @hanxi)fcbf4dc- release: Bundle Android 热更补丁改为随 release 自动发布(无基线) (commit by @hanxi)76888e5- release: bundled 热更补丁与 gomobile 产物扩展到 x86_64 (commit by @hanxi)
📝 Documentation Changes
07fd163- update CHANGELOG for v2.11.0 (commit by @github-actions[bot])5685e11- site: 同步 flutter_patcher 热更新文档到文档站 (commit by @hanxi)5e247e8- issue-template: Bug 报告引导用户附上「设置→关于与更新→导出日志」的日志 zip (commit by @hanxi)3b21f19- agents: 补充前端 UI 验证走 Docker 无头浏览器的方法与踩坑 (commit by @hanxi)84c22ff- remove Flutter TV references, recommend songloft-tv client (commit by @hanxi)917af15- 落地页安装选择器添加 TV 客户端下载链接 (commit by @hanxi)bb2c503- agents: 补充「子模块同步页」类别到文档站结构章节 (commit by @hanxi)8482492- add theme pack guide and update color system docs (commit by @hanxi)
🎨 Code Style Changes
d27fd3a- format all go/dart code and add formatting rules to AGENTS docs (commit by @hanxi)281dc09- 同步前端子模块(dart format 补齐未格式化文件) (commit by @hanxi)
🔧 Chores
c7fdf56- addon: sync HA add-on version to 2.11.0 (commit by @github-actions[bot])28a5ccc- bump songloft-player 修复分类列表播放全部无歌曲 (commit by @hanxi)fbb04ea- 更新 songloft-player 子模块,含 #309 封面回滚修复与 CanvasKit auto 变体 (commit by @hanxi)0041f20- player: bump songloft-player 子模块(播放队列自动定位当前项 songloft-org/songloft#311) (commit by @hanxi)0138426- player: 更新 songloft-player 子模块指针 (commit by @hanxi)b1738f7- player: 更新 songloft-player 子模块指针(修复 iOS 构建) (commit by @hanxi)eefe4c7- player: bump songloft-player 子模块(首屏加载韧性兜底,修偶发无限骨架屏卡死 #314) (commit by @hanxi)1da7e78- player: 更新 songloft-player 子模块指针(已是最新时也可下载完整安装包) (commit by @hanxi)7d40530- miot: bump 插件子模块(修全屏播放器收藏按钮状态无法区分) (commit by @hanxi)611c733- player: bump songloft-player 子模块(迷你播放条按钮 #25 + 取消指纹时序修复 #323) (commit by @hanxi)94221e0- player: bump songloft-player 子模块(修 Windows 桌面歌词打开即秒退 #318) (commit by @hanxi)c16ff65- plugin: bump songloft-plugin-miot 子模块(硬停/语音打断按位置续播 songloft-org/songloft-plugin-miot#60) (commit by @hanxi)d7f2ac8- submodule: 更新 songloft-player——HLS 视频卡死修复与指纹失败项重试入口 (commit by @hanxi)4a3bca8- submodule: 更新 songloft-player——GitHub 加速代理统一到设置网络页 (commit by @hanxi)fd81082- submodule: 更新 songloft-plugin-miot——对话去重基线改用服务端时间戳 (commit by @hanxi)b5e6b4f- submodule: 更新 songloft-player——启动热更检查三道闸与设置页手动入口 (commit by @hanxi)fa37468- submodule: 更新 songloft-plugin-miot——语音搜歌不再误判本地歌曲 songloft-org/songloft-plugin-miot#62 (commit by @hanxi)ea9596f- submodule: 更新 songloft-plugin-miot——响应优先模式补上播放失败回落 (commit by @hanxi)4d2d655- update pkg/tag submodule (gofmt) (commit by @hanxi)c3c35a2- release version 2.11.1 (commit by @hanxi)
[Unreleased]
✨ New Features
- jsplugin: 客户端内置 webf-ui 原生组件库(
webf_cupertino_ui,Apache-2.0)。声明renderEngine: "webf"的插件页现在可以直接使用 31 个<flutter-cupertino-*>原生元素 (按钮 / 输入框 / 开关 / 复选框 / 列表 / 表单 / 弹层 / 导航 / 1300+ 图标),以及webf包内建的<webf-list-view>(映射到 Flutter ListView,自带 view 回收)—— 插件侧无需安装任何运行时。 这些元素直接映射到 Flutter widget,绕开 CSS 布局层,因此不再受 WebF 那批布局缺陷影响 (gridauto行高按 min-content 测、position: sticky全局失效、<table>家族未注册等)。 ⚠️ 客户端与插件各自独立发版、minHostVersion只约束服务端,所以插件必须做特性探测 (探document.createElement('flutter-cupertino-switch').checked !== undefined)并保留 HTML 回落分支,否则在尚未内置该组件库的旧客户端上控件会静默全部消失。 可用元素清单、属性契约的三个静默失效坑(HTML 属性 kebab-case vs JS 属性 camelCase、 输入框的值属性叫val且是受控的、布尔属性两个入口语义不同)见 「JS 插件开发指南 · WebF 渲染引擎与原生元素 · webf-ui 原生组件」 (songloft-org/songloft#341) - submodule: 更新 songloft-plugin-downloader——前端用 webf-ui 重写并重新启用 WebF 渲染。 页面改为 Vue 3 + Vite(源码
frontend/,产物static/),表单控件走<flutter-cupertino-*>、 歌曲列表走<webf-list-view>,引擎分叉收敛在一层薄包装组件里、业务代码只有一套, 因此浏览器 / 系统 WebView / Web iframe / Linux arm64 等拿不到 WebF 渲染面的路径功能不变。 上一版(v2026.8.3)的 CSS Grid 伪表格随之退休,它为绕开 WebF 缺陷付出的两处降级 (整行 hover 变单元格 hover、表格无障碍语义丢失)也一并恢复 (songloft-org/songloft#341) - jsplugin: 插件页渲染引擎改为逐插件声明。
plugin.json新增可选字段renderEngine(webview/webf,缺失或空串等同webview),插件列表 API 以render_engine返回; 非法取值在清单校验阶段报错、插件装不上。原生客户端据此为声明webf的插件启用 WebF 渲染面(纯 Flutter 渲染,替代系统 WebView), 其余插件保持系统 WebView 不变。客户端设置页里原先的全局渲染引擎开关随之移除 —— 能力缺口是逐页面的,只有插件作者能验证自己的页面。 目前只有官方插件 downloader(歌曲下载)声明了webf;miot(智能音箱)与 lyrics(歌词搜索) 的页面尚未按 WebF 的能力边界重写,仍保持webview。 Web 端不受影响(WebF 不支持 Flutter Web,浏览器里永远走 iframe); Linux 端 WebF 仅支持 x86-64 + glibc ≥ 2.38,arm64 / NAS / 树莓派等环境拿不到 WebF 渲染面。 字段语义与作者须知见「JS 插件开发指南 · renderEngine 渲染引擎声明」 (songloft-org/songloft#341) - jsplugin: WebF 渲染面下的滑块补齐。WebF 没有实现
input[type=range](实测那一整行一个像素 都不画:既没有滑块也没有文本框,同一行的兄弟文字与行背景会一起消失),现在客户端提供原生元素<songloft-slider>,common.js垫片会自动把每个input[type="range"]隐藏并在其后插入滑块、 双向同步.value/.disabled/input与change事件 /matches(':active')——原<input>仍留在 DOM 里,插件既有 JS 无需改动。竖向滑块需在原 input 上声明data-sl-orientation="vertical"(不自动推断朝向),并按新标签补几行几何 CSS(垫片只拷 inline style、不拷 class);data-sl-no-slider可退出该垫片。仅 WebF 渲染面生效,浏览器与系统 WebView 下行为不变。 官方插件 miot 的音量条已适配。属性契约与适配示例见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341) - jsplugin: WebF 渲染面下补齐安全区(刘海屏 / 圆角屏 / 手势条)。WebF 压根不实现 CSS
env(safe-area-inset-*)(连解析入口都不存在),写env()的插件页在这些设备上会顶到状态栏 或被下巴切掉。现在客户端把真实安全区(MediaQuery.viewPadding)注入成四个 CSS 变量--sl-safe-top/--sl-safe-right/--sl-safe-bottom/--sl-safe-left,转屏、进退全屏、 页面重挂都会重推;common.css给这四个变量备了默认值,普通浏览器与系统 WebView 下它们就等于env()本身,所以插件只写一种形式var(--sl-safe-bottom)即可三端通吃、行为不变。 不做自动改写——CSSOM 没有可用的写入面(cssText只读、规则不暴露selectorText与.style、@media内的规则完全不可达),且真实写法都套在calc()/max()里,而 WebF 同样没有实现max()/min()(clamp()可用,可作等价替换)。官方插件 miot 的 3 处已适配。 变量语义与max()的替换写法见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341) - jsplugin: WebF 渲染面下新增原生环形进度条元素
<songloft-progress-ring>。WebF 的<svg>是把 整棵子树重新序列化后交给flutter_svg渲染,任何子节点变更都会让整棵 SVG 重新拼串 + 重新解析 + 重新光栅化,所以「每秒改strokeDashoffset的 SVG 进度环」在 WebF 下是最差的一类写法;新元素的 进度变化只走一次重绘。颜色默认跟随 CSScolor(currentColor),因此零配置即跟随主题。 不做自动替换——插件需自己改用该标签(内联 SVG 是任意图形,机械判定「这个 svg 是进度环」必然 误伤)。仅 WebF 渲染面生效 (songloft-org/songloft#341) - jsplugin: WebF 渲染面下补齐
input[type=file]—— 现在会弹出宿主的原生文件选择器。 WebF 的<input>没有 file 分支(type=file落到 default,渲染成一个点了毫无反应的文本框, 既不报错也无日志),common.js垫片改为拦下点击(同时覆写实例click()方法, 因此「隐藏 input + 外部按钮代点」这种常见写法照样生效)、经桥调宿主选择器、并强制display:none隐藏原 input(实测 WebF 不认 HTMLhidden属性,带与不带 hidden 的 file input 盒子都是 170×24,插件刻意隐藏的 input 会实打实占掉一行)。 插件的 HTML 零改动即可用,但读结果的方式变了:主通道是SongloftPlugin.lastPickedFiles(普通 JS 数组,每项{name, size, text?/bytesBase64?, encoding?, textLossy?, error?}),change事件上的event.data只是锦上添花(WebF 的Event是 binding object, 挂自定义属性没有契约)。input.files/FileReader/FileList在 WebF 下都不可用 (后两者实测压根不存在),故宿主刻意不去伪造它们——假File配不上真FileReader, 而真FileReader根本没有。载荷形态由data-sl-file-as声明(text默认 /bytesbase64 /none只要元信息;默认 text 是因为真实用例只要文本,而 base64 会让 20 MB 文件变成约 27 MB 字符串跨两次桥),data-sl-no-file-picker可退出该垫片。单文件上限 32 MB,超限返回明确错误 而非静默截断;用户取消时不派发change。仅 WebF 渲染面生效,浏览器与系统 WebView 下不变。 读结果的两端兼容写法见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341) - jsplugin: 新增
SongloftPlugin.blobToDataURL(blob, mimeType?),替代 WebF 下不存在的URL.createObjectURL(实测typeof为 undefined;Blob本身有,但没有任何入口能产出blob:,而 WebF 的资源加载器只认 http/https/assets/file/data:,纯 JS 也垫不出来)。 返回形如data:image/jpeg;base64,...的字符串,<img src>与 CSSbackground-image: url(data:…)两个消费点均已实测可用(后者走的是另一条代码路径, 且 data URL 含逗号分号、CSSurl()词法本可能切错),所以同一张图当封面和当模糊背景可以 沿用同一个 URL。⚠️ 它返回 Promise,而createObjectURL是同步的 —— 插件必须改调用点:Blob → base64只能经异步的arrayBuffer()(FileReader在 WebF 下不存在), 无法提供同步替身,且函数变 async 会往上传染到它的调用者(漏改不报错,只是图不出来)。 data URL 不需要也没有revokeObjectURL,但会常驻内存(约为原始字节的 4/3)。 浏览器与系统 WebView 下同样可用,插件不必按引擎分叉 (songloft-org/songloft#341) - jsplugin: WebF 渲染面下
window.open与外链点击改为用系统浏览器打开 (以前是彻底静默:WebF 的window.open不抛错、也什么都不发生,归因是没装导航代理时 默认导航策略把外链无条件 cancel 掉了,所以「点『去网页登录』毫无反应」既没有报错也没有日志)。 现在客户端装了导航代理,三档决策:#开头的页内锚点照常跳转;外部 http(s)/mailto/tel 交给系统浏览器或系统默认应用;同源整页跳转被拦下并留一条 warn(WebF 里那条路会把整个 插件页load()成新地址,宿主注入的上下文、loading 状态与返回键行为全部错位—— WebF 下不要做多页跳转)。插件侧无需改动,单参与带target的双参两种调用形态都已实测 转发到宿主;但它打开的是外部浏览器而非页内新窗口,所以「弹窗回填数据到父页」 (window.opener/ 跨窗口postMessage)这类流程走不通,需改成回调或轮询。 官方插件 miot 的账号二次验证据此可用。见「JS 插件开发指南 · WebF 渲染引擎与原生元素」 (songloft-org/songloft#341) - jsplugin: WebF 渲染面下检测到
<table>时打一条console.warn并给元素标上data-sl-table-unsupported。WebF 的元素注册表里table/thead/tbody/tr/th/td一个都没注册,全部退化成display:block—— 后果不是样式差一点,而是信息结构丢失 (6 列表格竖排成 6 行),且完全静默:不报错、不打日志,插件作者只看到「一堆没有表头的文本」。 只警告不改写:WebF 自带的<webf-table>家族是 FlutterTablewidget 的薄封装,colspan/rowspan零支持、CSSwidth无效、行必须是直接子节点(<thead>/<tbody>不拆就渲染出 一张空表且不报错),且那些标签在普通浏览器与系统 WebView 下根本不存在,用它就要长期维护两套模板。 推荐改用 CSS Grid(标准 CSS,三条渲染路径共用一套代码),完整改法与六条硬约束 (不能用display:table;单元格必须nowrap+ 省略号,否则 WebF 的 gridauto行高会按 min-content 宽度测量、行高暴涨约 7 倍;表头别用position: sticky(WebF 下压根不生效)而应 留在纵向滚动容器外面;纵向滚动条宽度要实测补偿;轨道别用auto;窄屏别用display:none隐藏列) 见「JS 插件开发指南 · WebF 渲染引擎与原生元素」。官方插件 downloader 的歌曲列表已按此改造 (songloft-org/songloft#341) - client: 客户端新增「设置 → 关于与更新 → 开源许可」页。引入 WebF(GPL-3.0-only, 无链接例外)后客户端二进制整体按 GPL-3.0 分发,而 GPLv3 §4/§5 要求分发时随附许可全文与 「完整对应源码」的获取方式 —— 此前全文只作为 release 附件存在,App 里看不到任何许可信息、 安装包内部也没有一份。新页面写明分发许可为何是 GPL-3.0、三个源码仓库直链,并可查看 GPL-3.0 全文、NOTICE 第三方组件声明与 Flutter 汇总的逐个依赖包许可。 许可全文内嵌为安装包内的 asset 而非外链 —— Songloft 的典型场景是局域网自托管、 设备可能长期离线,纯外链拿不到全文;这条路径在签名之前,因此一次覆盖全部平台且不动打包/签名流程。 Linux 便携包(tar.gz/deb/rpm/AppImage)、Windows(zip/msix)与 macOS zip 另外在解包后的根目录 直接放一份
LICENSE-GPL-3.0.txt(songloft-org/songloft#341)
⚡ Performance Improvements
- jsplugin: 插件商店拉取结果服务端缓存 5 分钟,翻页与搜索不再重复拉取整棵注册表树 (以前每翻一页都会重新递归拉取,最多 500 个
plugin.json、8 并发、单请求 15s 超时)。 点「刷新」或拉取失败后重试会绕过缓存;改动订阅源配置会立即失效缓存。 插件安装状态不受缓存影响,仍每次请求实时计算
🐛 Bug Fixes
- downloader 插件: 修复 WebF 渲染面下歌曲列表一屏只装得下一行、以及表头随内容滚走。 两个独立根因:① WebF 的 grid
auto行高是在 min-content 宽度下测量子项高度的,而 CJK 每个字都是断行点 —— 一行实测占 281px(同内容自然高 41px)、表头 72px,用户看到的是一张 几乎空的表;单元格改white-space: nowrap+ 省略号后行距 41 / 表头 39(这同时也更像表格该有的 观感,长内容用title属性悬停看全)。②position: sticky在 WebF 下压根不生效, 且不限于 grid 路径(页面级最标准的配置也整量滚走),改为把表头放到纵向滚动容器外面、 结构上不再需要 sticky;数据区滚动条占掉的宽度由 JS 实测补偿,保证表头与数据区 6 列逐像素对齐。 三条渲染路径(浏览器 / 系统 WebView / WebF)仍共用同一套 HTML/CSS/JS,无引擎分叉 (songloft-org/songloft#341) - jsplugin: 修复插件商店中
entry_path相同的多个插件只显示一个、且安装状态互相串台 (装了 A 却显示 B 已安装)。去重与安装态匹配改用「entry_path+ 作者身份」 (作者规范化后比较,缺 author 时用updateUrl的 GitHub 仓库兜底),同名不同作者的插件 各自成行、各自计算安装状态;同一插件被多个源收录时仍只显示一条。 商店条目新增来源标注,has_update改用版本号比较而非字符串不等 (fixes songloft-org/songloft#339) - jsplugin: 从商店安装时若
entry_path已被另一个作者的插件占用,不再静默覆盖 (旧行为会删除原插件的 ZIP 与 static 目录、原地改写数据库记录,使新插件继承原插件在plugin_storage里的数据、原插件导入的歌曲也被记账到新插件名下)。现在返回 409 且不做任何写入,前端弹框说明会替换哪个插件,用户确认后才带overwrite=true覆盖。 手动上传 ZIP 的行为不变 (fixes songloft-org/songloft#339) - addon: Home Assistant 加载项拆为独立仓库 songloft-org/home-assistant-addon, 修复「加载项商店 → 仓库」添加地址始终失败(
is not a valid app repository)—— HA Supervisor 只在 git 仓库根目录查找repository.yaml,而清单一直在addon/子目录。 顺带解决 Supervisor 递归 clone 会连带拉取主仓库全部子模块(约 60 MiB,实测 2 分钟)的问题, 新仓库无子模块、clone 为百 KiB 级。用户请改用新地址https://github.com/songloft-org/home-assistant-addon(fixes songloft-org/songloft#340) - lyric: 本地 .lrc 歌词文件优先适配 — 支持大小写扩展名(
.LRC/.Lrc)及<文件名>.lrc变体; 已入库歌曲旁后放 .lrc 下次扫描即生效;运行时 GET /lyric 旁挂优先于插件歌词; 0 字节 .lrc 不再导致前端无法请求歌词 (fixes songloft-org/songloft#334)
⚠️ Breaking Changes
- lyric: 扫描/重新导入时若读不到歌词,不再清空库中已有歌词(含插件
scraped、url来源的lyric_remote_url)。要清空歌词请使用PUT /api/v1/songs/{id}/lyrics接口。
[v2.11.0] - 2026-07-22
✨ New Features
7dc4d92- jsplugin: 为 JS 插件 SDK 增加 TCP Socket API (PR #276 by @hanxi)8687a3e- jsplugin: 插件自动更新开关 + 源列表「全部」聚合 (PR #270 by @hanxi)09c292a- songs: 按流派/语种/风格等标签分类浏览曲库 (PR #277 by @hanxi)548bee6- scan: 支持 mp4 格式音频扫描与播放 (PR #281 by @hanxi)338d574- scan: 支持视频容器扫描、播放与 DLNA 视频投屏 (PR #76 by @hanxi)1aa9936- songs: 网络歌曲/电台创建与更新端点支持 is_video (PR #76 by @hanxi)89b788e- playlist: ListPlaylists 支持 keyword 搜索,并同步前端子模块 (commit by @hanxi)a6d7441- songs: facets 支持分页/搜索/封面 + 新增 /settings/library-browse 配置端点 (commit by @hanxi)a650185- songs: 下载支持可选转码(format/quality),复用 GetOrTranscode hanxi/songloft-plugin-bili#1 (commit by @hanxi)692ded7- songs: library-browse 放行歌单三视图 key,默认顺序按组连续 (commit by @hanxi)edf6d99- jsplugin: 客户端 SDK 宿主桥接(common.js) + 文档 (PR #285 by @hanxi)441f1a6- 支持 MKA 导入/播放与双音轨切换 (commit by @hanxi)c3b62e3- lyric: /songs/{id}/lyric 支持 refresh 强制重抓歌词 (PR #303 by @hanxi)d219948- CUE 按需提取替代预分割,解决磁盘空间占用问题 (PR #306 by @hanxi)b964bbf- cache: 缓存网络歌曲支持统一转码落盘格式 #300 (commit by @hanxi)9da8d62- logs: 新增日志落盘与脱敏导出端点 (commit by @hanxi)a221545- radio: 电台流支持服务端实时转码,兼容仅支持 MP3 的播放设备 #275 (commit by @hanxi)88e9abb- 插件sdk新增封面提供者接口 (commit by @hanxi)
🐛 Bug Fixes
878d9c0- radio: 电台代理改为 ICY 元数据透传,修复 web 端播放 1 秒即停 (PR #275 by @hanxi)387058e- download: 缓解导入探测与批量下载争用导致的下载失败 (PR #265 by @hanxi)a6509fa- download: 用停滞检测替代整请求硬超时,避免慢速网络下载被误掐 (PR #265 by @hanxi)2c14108- jsplugin: 自动更新用 GetJSON 读 github_proxy 配置,修正代理前缀拼接 (commit by @hanxi)91a1e44- web: app shell 静态资源改用 no-cache,修复升级后浏览器仍跑旧 main.dart.js (commit by @hanxi)c63531f- player: 更新子模块修复 Web 插件 Tab iframe 反复重载抖动 (PR #278 by @hanxi)e40b702- player: 更新子模块修复移动端插件 Tab 再次打开黑屏/底栏消失 (PR #273 by @hanxi)5df23a2- radio: 去交织浏览器路径 ICY 元数据,修复 web 端非 m3u8 电台 2-3 秒断流 (PR #275 by @hanxi)8ecddd4- source: 下载链路加同源重试与 Content-Length 截断校验 (PR #265 by @hanxi)26fb2e1- jsruntime: 修复 youtube 歌单串号/标题被改/缓存不全 songloft-org/songloft#286 (commit by @hanxi)aa5fc0e- radio: 电台代理支持 hls=direct 绕过反代 + 归一化 audio/aacp (commit by @hanxi)14e662c- jsplugin: 慢端点支持 X-Plugin-Timeout-Ms 放宽调用超时,修复 extract 504 (PR #265 by @hanxi)3980309- play: 慢音源播放解析被切歌/客户端超时误杀致 502 (songloft-org/songloft#271) (commit by @hanxi)3b1c97b- radio: 直连电台流改用非浏览器 UA,修复防盗链源约 3 秒断流 (PR #275 by @hanxi)dba7966- docker cache (commit by @hanxi)2b6f113- flutter web 后台回来黑屏问题修复 (commit by @hanxi)e32844b- lyric: 修复歌词插件自动抓取失效(测试成功但播放抓不到)#303 (commit by @hanxi)0e97a99- jsplugin: 修复插件市场分页顺序随机跳变 #302 (commit by @hanxi)bf21354- jsplugin: 插件页预留滚动条槽根除内容抖动 #278 (commit by @hanxi)15fb3f8- source: 分块 Range 下载绕过 YouTube 单连接限速 (songloft-org/songloft#305) (commit by @hanxi)d5d4102- source: 流式代理去掉整请求硬超时,避免音箱播到中途重拉/切歌 (songloft-org/songloft-plugin-miot#55) (commit by @hanxi)6f7e528- jsplugin: 插件页 html 常驻纵向滚动条根除抖动 #278 (commit by @hanxi)1cea176- playactivity: Activate 不再取消下一首的 prefetch 转码 #300 (commit by @hanxi)07cea28- jsplugin: 公共资源 URL 加内容哈希版本号,修复 immutable 缓存致 common.css 更新不下发 #278 (commit by @hanxi)3d660d0- download: 歌名含斜杠不再拆目录、目标冲突追加序号防覆盖 #265 (commit by @hanxi)6f373b2- 下载歌曲后保留 plugin_entry_path,修复重复导入时唯一约束冲突 (commit by @hanxi)b83464b- 客户端超时断开时触发后台缓存,避免未缓存歌曲反复失败 (commit by @hanxi)4446b0c- 修复开发版本更新问题 (commit by @hanxi)ecce7c5- 修复无法添加超过3万首歌到歌单的问题 (PR #308 by @hanxi)cbb00c4- 已是 MP3 格式的缓存歌曲在设备上播放失败 (songloft-org/songloft#300) (commit by @hanxi)
⚡ Performance Improvements
b5f44e1- docker: 交叉编译替代 QEMU 编译 + 分层重排提速镜像打包与更新 (commit by @hanxi)9b0c733- docker: pin alpine base 与 ffmpeg 镜像 digest 稳定前置层缓存 (commit by @hanxi)
♻️ Refactors
34b0f7f- jsplugin: 清理既有 lint (commit by @hanxi)791812f- 修正 prefetch 兜底注释并清理两处 lint #300 (commit by @hanxi)
👷 Build System
80d136a- web 构建走 beta 3.47(修复切后台白屏),原生升 stable 3.44.6 (commit by @hanxi)f9ab2bd- web 也统一 stable 3.44.6(撤回 web 专用 beta 3.47) (commit by @hanxi)
📝 Documentation Changes
21ef81d- update CHANGELOG for v2.10.0 (commit by @github-actions[bot])7b4e6ba- faq: 新增电台 HLS 流无法播放时开启 HLS 代理的说明 (commit by @hanxi)e0c4e70- faq: 补充应用内视频画面渲染的平台支持说明 (songloft-org/songloft#76) (commit by @hanxi)de95b87- frontend: 更新音频后端与视频画面架构描述 (PR #76 by @hanxi)d3cef86- agents: 约定直接提交 main 分支,不建功能分支 (commit by @hanxi)1526608- js-plugin: 更新客户端 SDK host bridge 适用范围 (commit by @hanxi)87dbec4- repowiki: 同步 Web 插件页改为 iframe 内嵌 (commit by @hanxi)4a7fbec- 全面同步文档与代码并将 repowiki 改为手动维护 (commit by @hanxi)18135f7- repowiki: 接入文档站并补全英文版 (commit by @hanxi)102936c- repowiki: 将 file:// 源码链接改为 GitHub blob 链接 (commit by @hanxi)bbe3ab0- 同步文档为原生平台统一 media_kit 后端 + 更新子模块指针 (songloft-org/songloft#76) (commit by @hanxi)86a70a4- 声明项目纯为爱发电、无收费/赞助渠道,提醒防诈骗 (commit by @hanxi)
🔧 Chores
c724aa7- addon: sync HA add-on version to 2.10.0 (commit by @github-actions[bot])6e3e285- 同步 songloft-player 子模块 (web 端 hls.js 电台修复 songloft-org/songloft#275) (commit by @hanxi)c19b54b- 同步 songloft-player 子模块 (Windows 退出/播放/日志修复 songloft-org/songloft#271) (commit by @hanxi)7dd8a1c- 更新 songloft-player 子模块指针(分类页播放全部+多选) (commit by @hanxi)76442a6- 更新 miot 子模块指针(补搜索源注册开发者文档) (commit by @hanxi)869a06d- 更新 songloft-player 子模块指针(桌面播放快捷键 #279) (commit by @hanxi)edf3e72- 更新 songloft-player 子模块指针(全屏播放页快捷键修复 #279) (commit by @hanxi)fcf741b- 更新 songloft-player 子模块指针(打开后自动进入全屏歌词 songloft-org/songloft-player#19) (commit by @hanxi)4b453ce- 更新 songloft-player 子模块指针(插件 Tab 关闭 Android Hybrid Composition 修复菜单栏黑屏 #273) (commit by @hanxi)2c5bded- 更新 songloft-player 子模块指针(libmpv 日志接入 FileLogger 排查桌面端 HLS 电台失败 #249) (commit by @hanxi)0026796- 更新 songloft-player 子模块指针(桌面端应用内视频画面渲染 songloft-org/songloft#76) (commit by @hanxi)64a51ab- 更新 songloft-player 子模块指针(侧边/TV 播放器接入视频画面 songloft-org/songloft#76) (commit by @hanxi)3945bf1- 更新 songloft-player 子模块指针(macOS/移动/Web 视频画面 songloft-org/songloft#76) (commit by @hanxi)ab42a92- 更新 songloft-player 子模块指针(macOS/移动默认启用 media_kit) + FAQ 视频画面全平台默认支持 (songloft-org/songloft#76) (commit by @hanxi)eada187- 更新 songloft-player 子模块指针(视频画面架构文档 + Web 后端决策记录 songloft-org/songloft#76) (commit by @hanxi)9c0c1b2- 更新 songloft-player 子模块指针(移除测试未使用 import) (commit by @hanxi)051663b- 更新 songloft-player 子模块指针(添加歌曲/电台是否视频开关 songloft-org/songloft#76) (commit by @hanxi)2b4d17f- 更新 songloft-player 子模块指针(修复 macOS 视频黑屏与首次播放失败 songloft-org/songloft#76) (commit by @hanxi)8bc9950- 更新 songloft-player 子模块指针(单曲循环修复 songloft-org/songloft#284) (commit by @hanxi)087ca92- 更新 songloft-player 子模块指针(TerminateProcess 根治退出报警框 songloft-org/songloft#271) (commit by @hanxi)fa1217b- 更新 songloft-player 子模块指针(自定义视图入口收进更多菜单) (commit by @hanxi)cfd8f01- 更新 plugin-toolchain 子模块指针(SDK v2.12.1 + 修复发布 workflow) (commit by @hanxi)df63057- 更新 songloft-player 子模块指针(歌曲行统一为共享 SongTile) (commit by @hanxi)173bd83- 更新 songloft-player 子模块指针(facet 卡片加播放按钮) (commit by @hanxi)7808602- 更新 plugin-toolchain 子模块指针(v2.12.2:修复 Vue 模板 dev 死循环与重复安装) (commit by @hanxi)f2ca805- 更新 songloft-player 子模块指针(歌单视图工具栏上移顶部 AppBar) (commit by @hanxi)143cc44- 更新 songloft-player 子模块指针(歌单搜索提示词修正) (commit by @hanxi)bdf69b3- 更新 songloft-player 子模块指针(修复切换歌单子视图 GlobalKey 报错) (commit by @hanxi)7bb2946- 更新 songloft-player 子模块指针(WebView2 环境/托盘残留/电台直连) (commit by @hanxi)9854627- 更新 songloft-player 子模块指针(切后台黑屏无 reload 修复) (commit by @hanxi)23eba04- 更新 songloft-player 子模块指针(切后台白屏 Dart 侧重绘修复) (commit by @hanxi)dc6a229- 更新 songloft-player 子模块指针(切后台白屏补发 webglcontextlost 修复) (commit by @hanxi)f3ba3fe- 更新 songloft-player 子模块指针(悬浮 console 调试面板) (commit by @hanxi)cf25c55- 更新 songloft-player 子模块指针(悬浮 console 增强错误抓取) (commit by @hanxi)e603860- 更新 songloft-player 子模块指针(TV D-pad 焦点专属布局 + isTv 门控修复) (commit by @hanxi)3a48de9- 更新 songloft-player 子模块指针(收尾清理 MultiSurface/恢复 band-aid) (commit by @hanxi)42d899c- 更新 songloft-player 子模块指针(onReorder→onReorderItem 迁移,Flutter 3.44.6) (commit by @hanxi)79e2fd9- 更新 songloft-player 子模块指针(修复最小化残留 HWND 拦截桌面右键 #293) (commit by @hanxi)9e99919- 更新 songloft-player 子模块至逐字歌词版本 (PR #294 by @hanxi)a2b98b9- update miot plugin submodule (commit by @hanxi)a833d63- update miot plugin submodule (commit by @hanxi)a5e5d08- 更新 songloft-player 子模块 (修复 Web 语义节点遮挡插件 iframe #295) (commit by @hanxi)7fc4cbe- 更新 songloft-player 子模块 (修复移动端 media_kit 后端 Android 全曲无法播放 songloft-org/songloft#76) (commit by @hanxi)2ae3be6- 更新 songloft-player 子模块 (media_kit 后端实现 setAndroidAudioAttributes,修复 Android 全曲无法播放 songloft-org/songloft#76) (commit by @hanxi)f2f9afa- 更新 songloft-player 子模块 (原生平台统一 media_kit 后端,移除原生后端回退 songloft-org/songloft#76) (commit by @hanxi)b46fe0f- 更新 songloft-player 子模块(修复 NextConsole UMD 全局实例化,Web 调试面板悬浮按钮恢复显示) (commit by @hanxi)b411685- 更新 songloft-player 子模块(修复 Web 切后台回来封面偶发纯黑,resume 驱逐图片缓存+重解码) (commit by @hanxi)d08205b- 更新 songloft-player 子模块(修复 Web 应用内切页面回来列表封面纯黑,导航时驱逐图片缓存重解码) (commit by @hanxi)3137005- 更新 songloft-player 子模块(修复 Web 封面切插件 WebView 页返回后变黑,按封面精准驱逐缓存重解码) (commit by @hanxi)eb4c9ba- 更新 songloft-player 子模块(Web 强制 CanvasKit CPU 渲染根治封面偶发纯黑,回退应用层缓解) (commit by @hanxi)adecd8b- 更新 songloft-player 子模块(封面切tab/筛选丢失根治:调大imageCache+缩略解码,回退CPU渲染) (commit by @hanxi)80bd72f- 更新 songloft-player 子模块(CoverImage 加临时诊断日志排查封面三态) (commit by @hanxi)3f74c1e- 更新 songloft-player 子模块(Web 封面走 HttpGet 解码缩小 GPU 纹理 + 删冗余 imageBuilder + 加 WebGL context 丢失诊断日志) (commit by @hanxi)df4e1d4- 更新 songloft-player 子模块(所有封面卡片统一走 HttpGet 缩略解码,修专辑/歌手/歌单列表封面黑) (commit by @hanxi)1df7170- 更新 songloft-player 子模块(清理封面诊断日志 + 文档记录 CanvasKit 大纹理封面变黑坑) (commit by @hanxi)05601ea- 更新 songloft-player 子模块(修复歌单单曲播放队列被截断到已加载页 #299) (commit by @hanxi)0094f1a- 更新 songloft-player 子模块(修复分类页点击单曲播放队列被截断 #299) (commit by @hanxi)f6c87d6- 更新 songloft-player 子模块(文档记录分页列表点单曲播放队列构建铁律 #299) (commit by @hanxi)55ca279- 更新 downloader 子模块(按歌单/艺术家/专辑筛选下载 #304) (commit by @hanxi)d124f88- 更新 songloft-player 子模块(桌面折叠播放栏补齐拖动滑块 #301) (commit by @hanxi)1ba55a4- 更新 songloft-player 子模块(插件 iframe 抖动诊断埋点 #278) (commit by @hanxi)1233bf5- 更新 songloft-player 子模块(设置页显示后端构建时间) (commit by @hanxi)cb64286- 更新 songloft-player 子模块(加整页抖动尺寸振荡探针 #278) (commit by @hanxi)d60d15a- release version 2.11.0 (commit by @hanxi)
[v2.10.0] - 2026-07-11
✨ New Features
510f309- songs: 支持按歌单 label 排除歌曲,默认排除隐藏歌单 songloft-org/songloft-player#18 (commit by @hanxi)cf84ae0- addon: 新增 Home Assistant 加载项 (commit by @hanxi)7e938d0- organize: 目录整理新增 preview 与插件 bridge,修复 file_path 双前缀 (PR #261 by @hanxi)b6b42c4- metadata: 网络歌曲导入即探测时长,修复音箱无法自动切歌 (PR #264 by @hanxi)90c964e- scan: 目录级定向扫描,过期清理按作用域收敛 (PR #262 by @hanxi)617ff39- songs: 支持编辑本地歌曲改名,修复插件音源歌曲编辑 (commit by @hanxi)e377144- tags: WriteSongTags 支持 track 音轨号字段 (PR #269 by @hanxi)0a00903- scan: 支持 mov 格式音频 (commit by @hanxi)
🐛 Bug Fixes
26aa89f- miot: update plugin for touchscreen lyrics playback (commit by @hanxi)1f4f57e- radio: prevent stuck radio streams (commit by @hanxi)e1efc32- upgrade: enforce matching update channels (commit by @hanxi)99152f0- jsplugin: deliver host events during awaits (commit by @hanxi)87be549- release: repair bundled macos signing (commit by @hanxi)11fb982- docs: 修复英文 README 同步后 docs/en/ 链接多套一层导致死链 (commit by @hanxi)adeb8b0- jsplugin: sync plugin toolchain permissions (commit by @hanxi)2e0b21f- cover: prevent slow cover requests from hanging (commit by @hanxi)c60bebb- cover: 修复自动歌单封面重新扫描后随机变化 (commit by @hanxi)0774040- server: 支持 port=0 由系统自动分配监听端口 (commit by @hanxi)09c569e- ci: mac bundle 兜底重签给 songloft-server 补 inherit entitlements (commit by @hanxi)2c1ae52- server: 新增 -music flag 供 Bundle 桌面模式传入音乐目录 (commit by @hanxi)a4b209d- playlist: 隐藏歌单后支持可见子集重排,修复排序报错 (PR #266 by @hanxi)66b2e62- upgrade: 检查更新加短超时并持久化 GitHub 代理 (commit by @hanxi)ffabd30- release: package valid bundled iOS app (commit by @hanxi)
⚡ Performance Improvements
📝 Documentation Changes
756d048- update CHANGELOG for v2.9.6 (commit by @github-actions[bot])f8858fb- 重构文档网站首页 (commit by @hanxi)9a7d875- 添加截图08bc3d2- 新增界面截图一览并在 README 补充截图与语言切换 (commit by @hanxi)e63fcf8- faq: 说明 Firefox 下 Web 端点击偏移的兼容性限制 (commit by @hanxi)555fb12- agents: 补充 addon 目录说明与文档站结构章节 (commit by @hanxi)d25d8a6- Windows 客户端支持 Scoop 安装 (commit by @hanxi)
🔧 Chores
f866fb4- miot: update plugin submodule (commit by @hanxi)1b66d48- plugins: update miot submodule for search priority (songloft-org/songloft-plugin-miot#30) (commit by @hanxi)d69ef52- player: update auth wallet fix (commit by @hanxi)30c1d02- submodules: update player and radio plugin refs (commit by @hanxi)a8c730f- player: update submodule for Windows HLS fix #249 (commit by @hanxi)839606a- player: update submodule for hidden-playlist song filtering songloft-org/songloft-player#18 (commit by @hanxi)6dba52d- deps: 更新 songloft-player 修复 mac 本地模式 (commit by @hanxi)b173f91- deps: 更新 songloft-player 修复 iOS 本地模式 (commit by @hanxi)eb934af- deps: 更新 songloft-player 修复退出登录与桌面本地扫描 (commit by @hanxi)f3886cf- deps: 更新 songloft-player 支持编辑本地歌曲与修复编辑入口 (commit by @hanxi)11e9ff4- player: 更新子模块,记住 GitHub 代理并抽取选择 mixin (commit by @hanxi)0890f59- player: 更新子模块,统一 GitHub 代理选择为顶部下拉 (commit by @hanxi)607e381- deps: 更新 songloft-player 修复 iOS 本地模式扫描沙盒报错 (commit by @hanxi)b607701- release version 2.10.0 (commit by @hanxi)
[v2.9.6] - 2026-07-04
✨ New Features
🐛 Bug Fixes
846a19a- miot: update auto-next playback fix (commit by @hanxi)d2305ff- player: 更新 Windows 客户端退出修复 #246 (commit by @hanxi)
📝 Documentation Changes
e2bcdcb- update CHANGELOG for v2.9.5 (commit by @github-actions[bot])349dfdb- jsruntime: document AES decrypt follow-ups (commit by @hanxi)
🔧 Chores
0bd87dd- submodules: update miot plugin and toolchain (commit by @hanxi)07e089b- submodules: update miot plugin (commit by @hanxi)2810ceb- submodules: update plugin-toolchain (commit by @hanxi)c3a3be6- release version 2.9.6 (commit by @hanxi)
[v2.9.5] - 2026-07-03
✨ New Features
836ddc7- CUE Sheet 整轨音乐支持 (PR #33 by @hanxi)850c996- 歌曲支持按文件修改时间排序 #242 (commit by @hanxi)b29d052- jsplugin: support inbound websocket handlers (commit by @hanxi)e24c2e2- jsruntime: 新增原生 __go_crypto_sha256_bytes 与 __go_crypto_rc4 (commit by @hanxi)da9158f- jsruntime: 新增原生 __go_crypto_sha1 (commit by @hanxi)e2e6206- source: 插件音源可返回自定义请求头并在代理/下载时应用 (commit by @hanxi)
🐛 Bug Fixes
46c57dc- 修复内存泄漏和性能问题 (commit by @hanxi)3ce474d- auto-create 歌单按名复用 ID 避免每次扫描重建 (commit by @hanxi)0e2bfef- jsruntime: support binary fetch payloads (commit by @hanxi)
⚡ Performance Improvements
📝 Documentation Changes
e9d03e5- update CHANGELOG for v2.9.4 (commit by @github-actions[bot])
🔧 Chores
95575d9- update pkg/tag submodule (FLAC CUESHEET 支持) (commit by @hanxi)28bdb36- update songloft-plugin-miot submodule (关闭口令修复) (commit by @hanxi)56d08d6- update songloft-plugin-miot submodule (搜索接口选项修复) (commit by @hanxi)6dd6cc6- update songloft-plugin-miot submodule (歌单 ID 失效重试) (commit by @hanxi)7994aed- update songloft-plugin-subsonic submodule (修复外部歌曲歌词 404) (commit by @hanxi)28614d1- update songloft-plugin-subsonic submodule (bump v2.2.1) (commit by @hanxi)b5201ce- update songloft-plugin-miot submodule (新增触屏歌词开关 #239) (commit by @hanxi)7b1e58a- release version 2.9.5 (commit by @hanxi)
[v2.9.4] - 2026-06-30
✨ New Features
7da4a96- 删除歌曲支持删除本地文件、歌单隐藏功能 #235 (commit by @hanxi)f28d4ee- jsplugin: 新增 UDP socket Bridge API (songloft.net) #222 (commit by @hanxi)3919550- jsplugin: 插件常驻运行白名单 #237 (commit by @hanxi)
✅ Tests
📝 Documentation Changes
0c3d882- update CHANGELOG for v2.9.3 (commit by @github-actions[bot])d8b3fd6- 补充 Bundle 本地模式文档 (commit by @hanxi)
🔧 Chores
[v2.9.3] - 2026-06-30
🐛 Bug Fixes
📝 Documentation Changes
c661b00- update CHANGELOG for v2.9.2 (commit by @github-actions[bot])91e03e7- clarify issue references in commits (commit by @hanxi)
🔧 Chores
[v2.9.2] - 2026-06-29
📝 Documentation Changes
be5455d- update CHANGELOG for v2.9.1 (commit by @github-actions[bot])
🔧 Chores
03ea947- player: update songloft-player submodule (commit by @hanxi)0047882- release version 2.9.2 (commit by @hanxi)
[v2.9.1] - 2026-06-29
🐛 Bug Fixes
📝 Documentation Changes
9534a8e- update CHANGELOG for v2.9.0 (commit by @github-actions[bot])
🔧 Chores
[v2.9.0] - 2026-06-29
✨ New Features
993a3e7- scan: 歌单创建方式支持三种模式(按文件夹/按顶层文件夹/包含子目录) (commit by @hanxi)e858260- plugin: 新增自动下载 bridge API,支持插件注册缓存完成后自动下载 (PR #224 by @hanxi)2989703- equalizer: 添加 EQ 均衡器 settings 端点 (PR #217 by @hanxi)8f82ef7- 将 Go 后端嵌入客户端,支持本地模式播放 (PR #225 by @hanxi)7cf670d- plugin: 插件持久化存储 API + 卸载保留数据 + 孤儿清理 (PR #220 by @hanxi)0f732ed- player: 更新子模块实现按服务器隔离凭证 (commit by @hanxi)
🐛 Bug Fixes
0456bbf- scan: 修复元数据提取失败时标题含扩展名、空数据覆盖已有记录的问题 (commit by @hanxi)02a866b- cache: 修复插件来源歌曲缓存/下载时扩展名始终为 .mp3 的问题 (commit by @hanxi)0eeb224- cache: ffprobe format_name 未标准化导致 M4A 文件可能获得 .mov 扩展名 (commit by @hanxi)f3aa113- subsonic: 修复 Subsonic 服务端模式无法播放远程歌曲和电台 (PR #219 by @hanxi)c5f2cb2- scan: 扫描完成后返回本地歌曲总数,解决与歌曲库计数不一致的困惑 (commit by @hanxi)49fff2e- plugin: EnablePlugin 前先卸载残留环境,避免 env already exists 错误 (commit by @hanxi)e14cae5- cover: 封面 URL 追加时间戳参数穿透客户端缓存 (PR #218 by @hanxi)5e36bf0- ci: 添加 gomobile tool 依赖修复 iOS/Android 构建 (commit by @hanxi)73e28ec- plugin: playlists.getSongs 桥接增加诊断日志和重试 (PR #21 by @hanxi)a3811da- ci: 更新 songloft-player 子模块修复 macOS 构建 (commit by @hanxi)412b28c- plugin: 私有 GitHub 仓库插件通过 API 端点下载 (commit by @hanxi)90f5a79- player: 更新 songloft-player 子模块修复本地模式 (commit by @hanxi)f812e1d- player: 更新子模块修复 Xcode 26.5 编译 (commit by @hanxi)a48b776- player: 更新子模块修复 macOS linker 错误 (commit by @hanxi)1c27231- player: 更新子模块修复 iOS 构建 (commit by @hanxi)a0b8c1b- player: 更新子模块修复 iOS EqualizerPlugin 和 SongloftBackendPlugin 编译 (commit by @hanxi)da65db1- 修复 Android bundled 模式下 covers 目录路径解析错误 (commit by @hanxi)8739e1a- local: 修复 Android 本地模式扫描 + 更新子模块 (commit by @hanxi)039bdf5- player: 更新子模块修复本地模式设置页入口 (commit by @hanxi)56e042c- scan: 扫描文件发现阶段增加进度报告 (PR #227 by @hanxi)281a8d5- settings: 更新子模块修复歌单创建方式下拉竖排显示 (PR #228 by @hanxi)e5ac251- web: 更新子模块修复移动端浏览器切后台黑屏 (PR #229 by @hanxi)7c13a31- player: 更新子模块修复桌面端播完不自动切歌 (commit by @hanxi)bd84888- 标签解析与扫描稳定性修复 (songloft-org/songloft-player#14) (commit by @hanxi)e433aa3- jsplugin: serveFile 支持非本地歌曲 + removeSongs 容错 (songloft-org/songloft-plugin-subsonic#6) (commit by @hanxi)e58358d- Subsonic 远程歌曲格式显示与电台列表修复 + Windows 缓存兼容 (PR #231 by @hanxi)
📝 Documentation Changes
dd2f902- update CHANGELOG for v2.8.10 (commit by @github-actions[bot])1fd17f5- 在 README 中增加 Kodi 插件客户端描述 (PR #232 by @altman08)
🔧 Chores
[v2.8.10] - 2026-06-24
📝 Documentation Changes
e015dba- update CHANGELOG for v2.8.9 (commit by @github-actions[bot])
🔧 Chores
[v2.8.9] - 2026-06-24
✨ New Features
34a6e4c- remote 歌曲播放时自动提取元数据 (commit by @hanxi)0b19732- jsplugin: implement remaining Bridge API operations (commit by @hanxi)0984246- jsplugin: add yt-dlp music import plugin (commit by @hanxi)15dbb79- support AIF/AIFF format scanning and metadata extraction (commit by @hanxi)15b47b8- add AIFF write support and update docs (commit by @hanxi)c9cf78e- subsonic: 补全 Subsonic 协议支持,修复音流等客户端兼容性问题 (commit by @hanxi)bd98b73- jsplugin: 新增 plugin.getNetworkAddresses bridge API 并更新 miot 插件 (commit by @hanxi)
🐛 Bug Fixes
96a1718- 解决 http proxy 问题 (commit by @hanxi)9048266- jsplugin: 修复禁用插件后状态被自愈机制覆盖回 active 的竞态问题 (commit by @hanxi)962950c- jsplugin: 电台插件 M3U 导入大小限制从 5MB 提升到 20MB (commit by @hanxi)
📝 Documentation Changes
0aaf384- update CHANGELOG for v2.8.8 (commit by @github-actions[bot])f162a8f- update supported formats to include AIF/AIFF (commit by @hanxi)
🔧 Chores
e371ff7- update radio plugin submodule (v2026.6.23) (commit by @hanxi)8391804- update songloft-player submodule (commit by @hanxi)15a7f33- update subsonic plugin submodule (歌单浏览功能) (commit by @hanxi)5b87148- update miot plugin submodule (升级 SDK 2.6.3) (commit by @hanxi)ec153c9- update subsonic/dav plugin submodules (icon + v2.1.1/v1.1.1) (commit by @hanxi)aa3a4e8- update miot plugin submodule (设置页 UI 补全) (commit by @hanxi)b5b7021- update miot plugin submodule (外部搜索下拉列表) (commit by @hanxi)b1ae529- update miot plugin submodule (外部搜索超时可配置) (commit by @hanxi)f5aef4e- release version 2.8.9 (commit by @hanxi)
[v2.8.8] - 2026-06-22
✨ New Features
6e36dcb- jsplugin: 插件源支持 Bearer Token 认证,用于私有源分发 (commit by @hanxi)90a3f19- 封面支持插件相对 URL 解析 + AddRemoteSongs 新增 lyric_remote_url 直传字段 (PR #203 by @hanxi)9f7eaf7- 添加 songloft-plugin-radio 子模块 + 更新 registry (commit by @hanxi)
🐛 Bug Fixes
5f0cec3- models: LyricURLPath 对 remote 歌曲始终返回歌词端点 URL (PR #201 by @hanxi)8a73b0a- services: 避免 exec.LookPath 使用 faccessat2 导致 Termux 上 SIGSYS 崩溃 (PR #202 by @hanxi)ce441f2- miot: 更新子模块引用,修复密码/Token登录 token 续期问题 (PR #200 by @hanxi)b3e077f- jsplugin: 私有源 token 仅对同 host 的 includes 透传,防止跨域泄露 (commit by @hanxi)046cf14- 修正开发版下载链接,release tag 应为 dev 而非 main (commit by @hanxi)
📝 Documentation Changes
947881b- update CHANGELOG for v2.8.7 (commit by @github-actions[bot])738adfd- 补充插件源私有认证文档 (commit by @hanxi)ab06610- 免责声明新增侵权举报渠道(GitHub Issues + 邮箱) (commit by @hanxi)
🔧 Chores
7ab59e3- legal: 补全字体许可证,清理插件子模块,更新文档引用 (commit by @hanxi)ffec8e9- 更新 songloft-player 子模块引用 (commit by @hanxi)9ee94e0- release version 2.8.8 (commit by @hanxi)
[v2.8.7] - 2026-06-20
✨ New Features
5e79cdc- settings: 用户偏好跨设备同步 (PR #196 by @hanxi)66748b0- metadata: 扩展远程歌曲元数据刷新 (PR #195 by @hanxi)
🐛 Bug Fixes
dcaf549- miot: 播放控制栏底部安全区域适配 (PR #192 by @hanxi)a135f18- miot: 修复 Web 端停止播放后进度条持续走动 (PR #191 by @hanxi)7d00a65- miot: 修复语音口令含歌手名时误匹配其他歌曲 (PR #199 by @hanxi)37860bd- miot: 语音口令歌单匹配优化 (PR #198 by @hanxi)
📝 Documentation Changes
f65c86b- update CHANGELOG for v2.8.6 (commit by @github-actions[bot])
🔧 Chores
[v2.8.6] - 2026-06-19
✨ New Features
🐛 Bug Fixes
6db9455- player: 随机播放模式下全部播放不再固定从第一首开始 (PR #184 by @hanxi)6c9590a- cache: 流式播放缓存后自动回填歌曲时长 (PR #185 by @hanxi)
📝 Documentation Changes
d036d02- update CHANGELOG for v2.8.5 (commit by @github-actions[bot])
🔧 Chores
50e9ce9- update songloft-player submodule (commit by @hanxi)925a2a7- update songloft-plugin-miot submodule (commit by @hanxi)15ebc80- release version 2.8.6 (commit by @hanxi)
[v2.8.5] - 2026-06-16
✨ New Features
5744cc3- nav: 放宽 tab 数量限制至 10,移动端支持「更多」溢出菜单 (commit by @hanxi)389be4a- playlist: 更新 songloft-player 子模块,歌单列表高亮当前播放歌单 (close #182) (commit by @hanxi)3c37727- plugin: 新增歌词提供者回调机制和 lrclib 歌词插件 (close #183) (commit by @hanxi)
🐛 Bug Fixes
bec658c- web: 更新 songloft-player 子模块,修复 embedded 模式字体缺失 (close #177) (commit by @hanxi)e1b7d40- playlist: 修复从歌曲选择封面后预览空白及缓存不刷新 (close #176) (commit by @hanxi)4c01988- plugin: 更新 songloft-player 子模块,修复 Windows 最小化后插件 WebView 拦截桌面右键 (close #181) (commit by @hanxi)1eb05ac- plugin: 修复 DAV 插件 buildStreamUrl 路径双重前缀导致播放 404 (close #180) (commit by @hanxi)d5ec3cc- plugin: URLSearchParams polyfill 支持对象参数,修复歌词插件精确搜索参数丢失 (commit by @hanxi)
📝 Documentation Changes
690c6cc- update CHANGELOG for v2.8.4 (commit by @github-actions[bot])
🔧 Chores
12b565d- plugin: 更新歌词插件子模块,补全元数据和发布流程 (commit by @hanxi)841fffc- plugin: 更新插件源子模块,添加歌词搜索插件 (commit by @hanxi)27be42d- release version 2.8.5 (commit by @hanxi)
[v2.8.4] - 2026-06-15
🐛 Bug Fixes
422c968- miot: 更新 miot 插件 - 修复语音搜歌匹配错误 (close #83) (commit by @hanxi)e127621- playlist: 修复编辑歌单从歌曲选择封面无效的问题 (close #176) (commit by @hanxi)
📝 Documentation Changes
ca6eae8- update CHANGELOG for v2.8.3 (commit by @github-actions[bot])
🔧 Chores
[v2.8.3] - 2026-06-15
✨ New Features
00763f2- 下载歌曲时拉取 URL 歌词写入文件,实现 MP4/OGG 元数据写入 (commit by @hanxi)7f98bae- APE 封面读写支持,更新 tag 写入文档 (commit by @hanxi)
🐛 Bug Fixes
80d6a8f- player: 低码率音质下播放按钮需按两次才能播放 (close #170) (commit by @hanxi)fc03e78- player: 所有播放来源广播 onPlayEvent 事件 (close #173) (commit by @hanxi)69554eb- player: 歌词加载后立即推送到灵动岛 (close #98) (commit by @hanxi)
📝 Documentation Changes
8cf69a9- update CHANGELOG for v2.8.2 (commit by @github-actions[bot])e7d1341- 添加 Issue 模板和模板选择器配置 (commit by @hanxi)f2e6777- 移除网络歌曲转本地功能宣传,downloader 插件定位为示例 (commit by @hanxi)
🔧 Chores
[v2.8.2] - 2026-06-13
✨ New Features
feb75bb- jsplugin: add onPlayEvent callback for play event subscription (close #164) (commit by @hanxi)23311d3- transcode: 支持多音质转码与按码率缓存 (close #169) (commit by @hanxi)7ea30d2- playlist: 歌单歌曲支持排序与搜索 (close #168) (commit by @hanxi)
🐛 Bug Fixes
0737849- miot: 修复语音调音量"百分之X"被误解析为100% (close #166) (commit by @hanxi)e31f67d- jsruntime: HealthProbe 污染 eval 超时导致定时器驱动操作被误中断 (close songloft-org/songloft-plugin-miot#10) (commit by @hanxi)
📝 Documentation Changes
136fbf3- update CHANGELOG for v2.8.1 (commit by @github-actions[bot])
🔧 Chores
0bac21d- submodule: update jsplugins and player submodules (commit by @hanxi)cecabad- submodule: update player and plugin-toolchain for play event support (PR #164 by @hanxi)65d806d- release version 2.8.2 (commit by @hanxi)
[v2.8.1] - 2026-06-12
✨ New Features
9705163- cache: remove convert-to-local feature and add custom cache directory (commit by @hanxi)6c35b39- cache: streaming proxy with cache_path + song download plugin (commit by @hanxi)2a1ef4e- model: 添加 source_cover_url 字段并统一编辑表单短域显示 (commit by @hanxi)86d1805- jsplugin: 新安装插件默认启用 (commit by @hanxi)de30985- 新增自动创建歌单排除目录 (commit by @hanxi)
🐛 Bug Fixes
821aa41- jsplugin: refresh publicPaths at runtime without restart (PR #158 by @hanxi)f3a28bc- fingerprint: remove invalid length threshold in ExtractFingerprintbd2aec9- cache: 修复 Windows 编译失败 — syscall.Statfs 不跨平台 (commit by @hanxi)
📝 Documentation Changes
b023c27- update CHANGELOG for v2.8.0 (commit by @github-actions[bot])dc661e8- repowiki: regenerate wiki from latest codebase (commit by @hanxi)
🔧 Chores
8bb65ea- miot: update submodule ref for #157 fix (commit by @hanxi)95dd299- miot: update submodule ref for #155 indicator light fix (commit by @hanxi)2396230- submodule: update songloft-plugin-downloader (commit by @hanxi)83555f4- submodule: update songloft-plugin-downloader (commit by @hanxi)49eb151- submodule: update jsplugins package-lock.json (commit by @hanxi)6213546- release version 2.8.1 (commit by @hanxi)
[v2.8.0] - 2026-06-11
✨ New Features
da56b08- scan: add toggle to enable/disable auto-create playlists on scan (commit by @hanxi)f2a6c1e- jsplugin: externalPaths 改为 manifest 声明,删除管理员 API (PR #151 by @hanxi)f313243- api: 暴露 lyric_remote_url 字段,支持编辑网络歌曲歌词 URL (PR #141 by @hanxi)afc45a6- tracely: 支持安装/升级统计上报,配置改为三变量注入 (commit by @hanxi)
🐛 Bug Fixes
99a4d4f- #145 #147 - WriteTags damaged cover cleanup + playlist cover fallback to songs (PR #150 by @laihya)1e76796- jsplugin: resolveFSPath 支持 music:// 和绝对路径 (PR #151 by @hanxi)d0c7140- scan: chromaprint 指纹被歌词/元数据污染 (PR #146 by @hanxi)
📝 Documentation Changes
e43a1c9- update CHANGELOG for v2.7.0 (commit by @github-actions[bot])
🔧 Chores
a2c4860- bump plugin submodules (tag v1.0.6, dav v1.0.4, subsonic v2.0.1) (commit by @hanxi)dceab9e- release version 2.8.0 (commit by @hanxi)
[v2.7.0] - 2026-06-09
✨ New Features
9b3fb55- jsplugin: support pathPrefix param in songs.list bridge (commit by @hanxi)59f8d0c- song: add ISRC field to Song model and extract from audio tags (commit by @hanxi)4ccbc0c- scan: add auto-scan with file stability detection (commit by @hanxi)24f934d- 核心镜像缺ALSA用户态运行文件 (PR #135 by @huaimi123)5b8d062- jsplugin: add serveFile directive, file serve route, and publicPaths (commit by @hanxi)139b667- jsplugin: add external-paths settings API (commit by @hanxi)e7c365c- subsonic: add Subsonic server mode (commit by @hanxi)b5ebe57- subsonic: add server mode settings UI (commit by @hanxi)afd326e- subsonic: add getGenres endpoint (commit by @hanxi)51eab49- subsonic: add getSong, getStarred, getIndexes endpoints (commit by @hanxi)383b6c1- subsonic: getStarred reads from built-in favorites playlist (commit by @hanxi)f3f9b85- subsonic: add copy button for server URL (commit by @hanxi)fdddf45- jsplugin: add plugin icon support (PR #139 by @hanxi)
🐛 Bug Fixes
fc52d35- miot: embed模式下搜索框被遮挡 (commit by @hanxi)4e06ba5- plugin-toolchain: add fs:music, fs:external to builder permission whitelist (commit by @hanxi)59e2f65- jsplugin: publicPaths bypass via AuthMiddleware checker (commit by @hanxi)1997a90- subsonic: server URL display should not include /rest suffix (commit by @hanxi)48d4939- subsonic: fix field mapping and add getAlbum/getArtist endpoints (commit by @hanxi)a927818- subsonic: add required song fields for client compatibility (commit by @hanxi)66a0114- subsonic: fix cover art and add lyrics support (commit by @hanxi)e26f71e- subsonic: playlist cover art display (commit by @hanxi)
♻️ Refactors
📝 Documentation Changes
d5810c5- update CHANGELOG for v2.6.4 (commit by @github-actions[bot])
🔧 Chores
eda34ed- subsonic: rename plugin title (commit by @hanxi)59b7541- release version 2.7.0 (commit by @hanxi)
[v2.6.4] - 2026-06-07
✨ New Features
27aeb03- jsplugin: 支持插件强制更新(跳过版本检查) (commit by @hanxi)0cce183- fingerprint: 支持重新计算全部音频指纹 (commit by @hanxi)
🐛 Bug Fixes
📝 Documentation Changes
f63c93a- update CHANGELOG for v2.6.3 (commit by @github-actions[bot])
🔧 Chores
[v2.6.3] - 2026-06-07
✨ New Features
5dbbff9- 用 ffmpeg chromaprint 替代 fpcalc,扫描后自动计算指纹 (commit by @hanxi)fe7810c- 更新 miot 插件,支持定时开关对话监听 (commit by @hanxi)4fbfdcb- 重构插件主题 (commit by @hanxi)ca52f4e- dedup: 指纹去重删除时同步删除音频文件 (commit by @hanxi)
🐛 Bug Fixes
cec5a8a- 设置 PKG_CONFIG_PATH 让 ffmpeg configure 找到 libchromaprint (commit by @hanxi)d4a8cc4- 设置 PKG_CONFIG_PATH 让 ffmpeg configure 找到 libchromaprint (commit by @hanxi)872abaf- tag: 移除与 common.css 重复的导航样式,修复非 embed 模式 tab 异常 (commit by @hanxi)8336676- tag: 移除与 common.css 重复的 card 样式定义 (commit by @hanxi)9c8db18- settings: 缓存管理操作区域默认折叠,防止误触 (commit by @hanxi)
⚡ Performance Improvements
♻️ Refactors
a4459ad- tag: 导航改为底部 tab-bar,统一插件 UI 风格 (commit by @hanxi)87c217f- tag-plugin: 移除 fpcalc 依赖,改用主程序指纹 (commit by @hanxi)
📝 Documentation Changes
9882bb0- update CHANGELOG for v2.6.2 (commit by @github-actions[bot])bd688b2- faq: 添加多音乐目录配置方法 (commit by @hanxi)
🔧 Chores
316bbd6- 更新 dav/subsonic 子模块,清理死代码 (commit by @hanxi)28da741- 更新 miot 子模块,搜索前打断音箱播报 (commit by @hanxi)3306c2c- release version 2.6.3 (commit by @hanxi)
[v2.6.2] - 2026-06-06
✨ New Features
🐛 Bug Fixes
🔧 Chores
[v2.6.0] - 2026-06-05
✨ New Features
7bfe806- 扫描歌曲支持用文件名作为标题 songloft-org/songloft#100 (commit by @hanxi)b140863- 实现自定义tab songloft-org/songloft#103 (commit by @hanxi)e9419a8- 插件新增 websocket 接口 (commit by @hanxi)d433bd2- 插件适配嵌入到主程序 (commit by @hanxi)
🐛 Bug Fixes
4cf8a77- 修复插件无法运行的问题 (commit by @hanxi)2db9ac8- 统一插件打包脚本 (commit by @hanxi)236ec5b- convert: 接入全局 HTTP 代理,修复代理环境下歌曲/封面下载失败 (commit by @hanxi)
📝 Documentation Changes
d387aaa- update CHANGELOG for v2.5.1 (commit by @github-actions[bot])
🔧 Chores
93d8f56- 更新插件子模块及构建脚本 (commit by @hanxi)ae2b657- 更新插件子模块引用 (commit by @hanxi)5e52336- release version 2.6.0 (commit by @hanxi)
[v2.5.1] - 2026-06-04
✨ New Features
cba096f- 支持全局HTTP代理 (commit by @hanxi)a0fd898- 新增标签内容写入接口和歌曲文件整理接口 (commit by @hanxi)eabba1d- 插件新增 fs 接口 (commit by @hanxi)
🐛 Bug Fixes
1c48c37- 部分歌曲标签信息识别不出来 #95 (commit by @hanxi)adc0019- 修复编码问题 songloft-org/songloft#104 (commit by @hanxi)
📝 Documentation Changes
58a4ffd- update CHANGELOG for v2.5.0 (commit by @github-actions[bot])
🔧 Chores
[Unreleased]
✨ New Features
- 插件商店支持自定义代理输入(与插件更新/系统升级对话框一致的 RadioGroup + 自定义输入框)
- 新增通用 HTTP 代理设置(
/settings/http-proxy),所有后端外发请求可通过用户配置的代理转发
[v2.5.0] - 2026-06-04
✨ New Features
8cd86bb- 支持一键更新所有插件 songloft-org/songloft#61 (commit by @hanxi)bda6f9c- 新增插件下载和执行命令 #90 (commit by @hanxi)22a7270- 新增插件源 songloft-org/songloft#89 (commit by @hanxi)635787a- 新增官方插件源地址 (commit by @hanxi)4f01f2c- 优化版本升级逻辑 (commit by @hanxi)7bd92c5- 继续优化首次加载页面速度 (commit by @hanxi)
🐛 Bug Fixes
1596210- 优化首次加载 songloft-org/songloft#91 (commit by @hanxi)2d85024- http: 修复 URL userinfo 丢失及 JS URL polyfill 相对路径解析缺陷 (commit by @hanxi)f268fe3- proxy: add basic auth handling and update User-Agent for remote resources (PR #93 by @Dev-Wiki)38174a4- 修复打包镜像报错 (commit by @hanxi)5e971b3- scan: 检测并跳过垃圾 tag,回退使用文件名作为标题 (PR #94 by @hanxi)
📝 Documentation Changes
c3cde9f- update CHANGELOG for v2.4.0 (commit by @github-actions[bot])
🔧 Chores
[v2.4.0] - 2026-06-02
✨ New Features
4f80073- 规范设置接口 (commit by @hanxi)7ff3c77- 支持设置日志等级 (commit by @hanxi)d3b48ac- 新增歌词调整 songloft-org/songloft#49 (commit by @hanxi)b1acd65- 继续优化快速切歌卡顿问题 #49 (commit by @hanxi)1df746a- 网络歌单转本地优化 (commit by @hanxi)
🐛 Bug Fixes
c0751a2- 解决m3u8格式的电台无法播放问题 (commit by @hanxi)aca70a4- access log 改用 slog 输出,解决日志等级控制问题 (commit by @hanxi)
👷 Build System
📝 Documentation Changes
0a5af24- update CHANGELOG for v2.3.0 (commit by @github-actions[bot])
🔧 Chores
[v2.3.0] - 2026-06-01
✨ New Features
dad2d9c- 电台支持走后端代理 (commit by @hanxi)2d10351- 快速切多次歌曲时抖动优化 songloft-org/songloft#79 (commit by @hanxi)8bedce2- 添加歌曲支持目录筛选和类型筛选 songloft-org/songloft#57 (commit by @hanxi)
🐛 Bug Fixes
📝 Documentation Changes
f0df02e- update CHANGELOG for v2.2.5 (commit by @github-actions[bot])
🔧 Chores
[v2.2.5] - 2026-06-01
📝 Documentation Changes
bb299cf- update CHANGELOG for v2.2.4 (commit by @github-actions[bot])
🔧 Chores
[v2.2.4] - 2026-05-31
🐛 Bug Fixes
📝 Documentation Changes
5e4c594- update CHANGELOG for v2.2.3 (commit by @github-actions[bot])
🔧 Chores
[v2.2.3] - 2026-05-31
🐛 Bug Fixes
cebaeb5- 修复电台无法播放问题 (commit by @hanxi)b9564f7- 修复ffmpeg转码问题 (commit by @hanxi)ed70e1e- 上传封面问题 #78 (commit by @hanxi)
📝 Documentation Changes
18b47a8- update CHANGELOG for v2.2.2 (commit by @github-actions[bot])
🔧 Chores
[v2.2.2] - 2026-05-31
✨ New Features
📝 Documentation Changes
1187bc9- update CHANGELOG for v2.2.1 (commit by @github-actions[bot])
🔧 Chores
[v2.2.1] - 2026-05-31
🐛 Bug Fixes
📝 Documentation Changes
9cecfe9- update CHANGELOG for v2.2.0 (commit by @github-actions[bot])
🔧 Chores
[v2.2.0] - 2026-05-31
🐛 Bug Fixes
📝 Documentation Changes
4e664c8- update CHANGELOG for v2.1.2 (commit by @github-actions[bot])
🔧 Chores
[v2.1.2] - 2026-05-31
🐛 Bug Fixes
📝 Documentation Changes
c688fa7- update CHANGELOG for v2.1.1 (commit by @github-actions[bot])
🔧 Chores
[v2.1.1] - 2026-05-30
📝 Documentation Changes
22f154b- update CHANGELOG for v2.1.0 (commit by @github-actions[bot])
🔧 Chores
[v2.1.0] - 2026-05-30
✨ New Features
🐛 Bug Fixes
📝 Documentation Changes
587abc9- update CHANGELOG for v2.0.2 (commit by @github-actions[bot])
🔧 Chores
[v2.0.2] - 2026-05-30
✨ New Features
🐛 Bug Fixes
📝 Documentation Changes
b8e513e- update CHANGELOG for v2.0.1 (commit by @github-actions[bot])
🔧 Chores
[v2.0.1] - 2026-05-29
✨ New Features
🔧 Chores
[v2.0.0-alpha.1] - 2026-05-29
✨ New Features
🐛 Bug Fixes
♻️ Refactors
65c53cb- rename Go module mimusic -> songloft (v2.0) (commit by @hanxi)fc2d601- rename JS plugin global ABI mimusic.* -> songloft.* (v2.0) (commit by @hanxi)c9f05cd- rename runtime literals MiMusic -> Songloft (v2.0) (commit by @hanxi)c32ab18- retire jsplugins aggregator, plugins self-host releases (commit by @hanxi)
👷 Build System
📝 Documentation Changes
1b766d2- add NOTICE and PRIVACY.md for license and privacy compliance (commit by @hanxi)2f5bbf8- tighten README disclaimers and remove demo site link (commit by @hanxi)85244b1- announce planned v2.0 rebrand to Songloft (commit by @hanxi)5da054a- add MIGRATION.md for v2.0 Songloft rebrand (commit by @hanxi)79c6df9- swagger: regenerate Swagger after v2.0 rebrand (commit by @hanxi)b3b17d7- add V2 release playbook + update-remotes helper (commit by @hanxi)7bc6fdd- playbook: fix gh CLI command + add transfer helper script (commit by @hanxi)432632d- complete link migration to songloft-org / songloft.hanxi.cc (commit by @hanxi)392fdc4- remove 'formerly MiMusic' from AGENTS.md (commit by @hanxi)
🔧 Chores
07fada7- remove lxmusic plugins and rename xiaomi plugin (legal cleanup) (commit by @hanxi)a12a765- bump jsplugins submodule to drop xiaomi.json (commit by @hanxi)8027762- bump plugin-toolchain, jsplugin-musicsdk, pkg/tag submodules (commit by @hanxi)6c80981- wire up songloft-player submodule rename (v2.0) (commit by @hanxi)abb6ade- wire up songloft-plugin-miot submodule rename (v2.0) (commit by @hanxi)68a497f- gitignore songloft-player-build (Phase 3h follow-up) (commit by @hanxi)95e3c0e- bump submodule pointers to alpha-published commits (commit by @hanxi)
[1.4.1] - 2026-05-28
✨ Features
c9f81fe默认开启网络歌单自动转本地歌单ea29cdf重构歌词接口问题
🐛 Bug Fixes
0011325修复缓存歌曲冲突问题44e5de6修复rename文件报错问题
🔧 Chores
964233crelease version 1.4.1cdf8359优化扫描设置开关文案
[1.4.0] - 2026-05-27
✨ Features
4483c45自动创建歌单功能简化6cfd245歌曲下载功能优化f8dcd21简化歌曲歌词封面的url逻辑9148dc9重构urle8c91b1优化url路径7ff56ff移除wasm插件模块81c618f网络歌曲转本地歌曲支持写入tag
🐛 Bug Fixes
8de0455修复 js fetch 接口问题55e6818歌曲去重f612c13修复歌单名重复问题e450a56修复歌单名重复问题c4951d3sqlite问题97bc3de修复url问题43b2431修复插件接口问题
♻️ Code Refactoring
a37070btest: 删除手写 mock,全切 :memory: 真实 DBc7e2032database: 引入 UnitOfWork,下线 database.Tx/SQLiteTxd58e1d4database: playlist_songs 表切到 PlaylistSongRepository8c23575database: playlists 表切到 PlaylistRepository10337aadatabase: songs 表切到 SongRepository9d995ccdatabase: js_plugins 仓储改用 sqlc.Queries7094d5fdatabase: configs 表切到 ConfigRepositoryea352cddatabase: tokens 表切到 TokenRepositoryb004464database: 引入 sqlc + goose + squirrel 基础设施1910fd0抽取 InternalURLResolver,让歌词代理 URL 也能带 token 访问
📚 Documentation
50a67b1database: 新增 DATABASE_MIGRATIONS 操作指南 + 集成 sqlc 命令到 Makefile703d2bcagents: 同步数据库重构后的开发约定
🔧 Chores
3c07269release version 1.4.096aa6c4bump musicsdk v1.1.0 + lxmusic 用上 LyricFetcher.lyricParams
[1.3.50] - 2026-05-25
✨ Features
37ac3b4支持网络歌曲转本地歌曲
🔧 Chores
923b254release version 1.3.50
[1.3.49] - 2026-05-24
🐛 Bug Fixes
4a60ca1修复js插件休眠问题
🔧 Chores
6bcb020release version 1.3.49
[1.3.48] - 2026-05-22
🐛 Bug Fixes
7d8999d修复js插件导致宕机问题
🔧 Chores
16754d4release version 1.3.48
[1.3.47] - 2026-05-22
✨ Features
89eea57js插件支持手动上传更新
🐛 Bug Fixes
bac969a修复编译警告53e19c0修复js异步问题
🔧 Chores
452aacbrelease version 1.3.47
[1.3.46] - 2026-05-21
✨ Features
f7b47bcjs插件改成真异步环境65f1164优化插件不可用时的提示
🔧 Chores
3bd3a57release version 1.3.46
[1.3.45] - 2026-05-20
✨ Features
989769c自动创建的歌单默认按照数字前缀排序5c47ffc新增js虚拟机39dab1b新增js apiac27696新增 lxmusic 插件
🐛 Bug Fixes
627f885修复关闭进程卡死问题
🔧 Chores
f9ddbecrelease version 1.3.45
[1.3.43] - 2026-05-16
🔧 Chores
a9d666arelease version 1.3.43
[1.3.42] - 2026-05-16
✨ Features
1349f40js插件性能优化170a793js插件支持jsc6058a32新增JS插件管理bca3678js插件开发9a2dc3a新增js插件机制1352e6e插件休眠更激进
🐛 Bug Fixes
1528474修复js插件相关问题71565f6修复js插件问题ea95c15JS插件问题修复
♻️ Code Refactoring
c706dbbjsplugin: split playlists permission into read/write
🔧 Chores
1dafd4arelease version 1.3.42
📝 Other Changes
e66cf67log
[1.3.41] - 2026-05-11
✨ Features
a04fb2f内存优化:空闲插件自动休眠fc60dfd内存优化4f77b55内存优化
🔧 Chores
7ca4fadrelease version 1.3.41
[1.3.40] - 2026-05-07
🐛 Bug Fixes
b055dc0修复打包脚本问题
🔧 Chores
a49aa4crelease version 1.3.40
[1.3.39] - 2026-05-06
✨ Features
dd30f31歌单排序功能优化,首页歌单数量显示优化,自动生成的歌单名字优化
🔧 Chores
24c37f9release version 1.3.39
[1.3.38] - 2026-05-06
✨ Features
f886d0c新增歌单排序功能a0f0b89添加wma格式支持
🐛 Bug Fixes
d078fa7清理失效的本地歌曲3dc4eed修复windows网络歌曲无法缓存的问题
🔧 Chores
85de484release version 1.3.38
[1.3.37] - 2026-04-30
🐛 Bug Fixes
d0b3c2c修复vbr播放时长读取错误问题
🔧 Chores
46592dfrelease version 1.3.37
[1.3.35] - 2026-04-29
✨ Features
a30430c优化插件静态资源访问
🔧 Chores
d72e680release version 1.3.35
[1.3.34] - 2026-04-27
🐛 Bug Fixes
2d0877d修复arm/v7系统无法加载插件问题
🔧 Chores
761c5a1release version 1.3.34
[1.3.33] - 2026-04-26
🔧 Chores
b616fd7release version 1.3.33
[1.3.32] - 2026-04-26
🐛 Bug Fixes
3f5f78d修复升级后404问题
🔧 Chores
04a3278release version 1.3.32
[1.3.31] - 2026-04-25
🔧 Chores
430e88drelease version 1.3.31
[1.3.30] - 2026-04-25
🐛 Bug Fixes
b074f73兼容 J3455 CPU
🔧 Chores
973edd1release version 1.3.30
📝 Other Changes
8541df4插件加载失败添加错误日志
[1.3.29] - 2026-04-20
✨ Features
304270f插件支持更新fa7e192插件支持更新
🐛 Bug Fixes
60202c9修复部分洛雪音源无法使用问题
🔧 Chores
1a41ee7release version 1.3.29
[1.3.28] - 2026-04-20
✨ Features
27d8ca0新增排除目录设置
🔧 Chores
04bae3brelease version 1.3.28
[1.3.24] - 2026-04-19
🔧 Chores
acb5fc2release version 1.3.24
📝 Other Changes
6419bcd插件超时优化
[1.3.22] - 2026-04-17
✨ Features
1110184优化启动速度9dc1eda删除 entry_path 字段1e880a1新增插件重置功能
🔧 Chores
2fce1berelease version 1.3.22
[1.3.21] - 2026-04-17
✨ Features
e7a6779优化升级
🐛 Bug Fixes
cfded04修复 FLAC 中的 ID3v2 信息无法解析的问题c488c01修复导入相同插件问题
🔧 Chores
99b5e73release version 1.3.21
[1.3.20] - 2026-04-16
🔧 Chores
0851d64release version 1.3.20
📝 Other Changes
1fca16e配置国内镜像
[1.3.18] - 2026-04-15
✨ Features
dd8887d新增批量删除歌单接口5abf830缓存功能优化4b74298服务端资源缓存优化
🐛 Bug Fixes
a166e7e修复从lite切换到full的问题
🔧 Chores
cb3b3f7release version 1.3.18
[1.3.16] - 2026-04-10
✨ Features
128aab0支持版本回退到底包4c80b7c更新后端支持使用代理
🐛 Bug Fixes
db0e395修复升级问题00ff400修复升级问题b904424修复更新问题3d9ac57修复更新问题eb69df6修复更新问题7b6b45a修复更新问题67e8840修复更新问题a09c6a9修复端内更新问题
🔧 Chores
3b6a91drelease version 1.3.16a478a02release version 1.3.14
📝 Other Changes
85983bb更新问题
[1.3.13] - 2026-04-09
✨ Features
4e3ec57新增发布内容c912ace支持断点续传03a67b4新增异步下载接口a381643写入 server_platform 到数据库720a06e新增执行命令协议d124fd9优化无参数启动方式
🐛 Bug Fixes
d060619解决文件权限问题326b618网络歌曲导入问题修复1fcce62修复导入歌曲问题
🔧 Chores
303407drelease version 1.3.13
📝 Other Changes
4cfb584update doc0ea9351update doc3baf9e9歌单排序优化a2f5968调试
[1.3.12] - 2026-04-08
✨ Features
e605965歌词支持URL类型
🔧 Chores
a199b72release version 1.3.12
📝 Other Changes
f98a23b歌词优化
[1.3.10] - 2026-04-06
🐛 Bug Fixes
3aee951修复报错d80dda2sql errorc908f4e修复问题
♻️ Code Refactoring
12e3c76优化扫码登录825ceaa优化超时77578cc优化网络歌曲播放时长
🔧 Chores
1579a86release version 1.3.10
📝 Other Changes
54ff2b8update http96559c5update httpdaa2ca3插件时间问题
[1.3.9] - 2026-04-03
✨ Features
ae3865fadd song_count
🔧 Chores
7f805c2release version 1.3.9
📝 Other Changes
a6a551b启动优化4c2e0f1build
[1.3.8] - 2026-04-03
✨ Features
cb8a958新增并行执行js
🔧 Chores
bd6a323release version 1.3.8
📝 Other Changes
9f727f1歌曲缓存目录优化
[1.3.7] - 2026-04-02
🔧 Chores
667be2brelease version 1.3.7
📝 Other Changes
569fc83歌词
[1.3.6] - 2026-04-02
♻️ Code Refactoring
4e25b28优化播放体验
🔧 Chores
8dc2774release version 1.3.6
[1.3.5] - 2026-04-02
🔧 Chores
91dd27erelease version 1.3.5
[1.3.4] - 2026-04-01
✨ Features
5dbf196支持上传封面54dcc44支持上传封面
🐛 Bug Fixes
5d253e9扫描歌曲宕机问题
🔧 Chores
6bc0414release version 1.3.4
[1.3.3] - 2026-03-31
✨ Features
8ce8662尝试修复lx运行问题
🔧 Chores
cffd9b5release version 1.3.3
📝 Other Changes
ed877c3delete webe38af01delete web
[1.3.2] - 2026-03-30
✨ Features
663576d添加网络歌曲电台接口改为批量
🔧 Chores
0b7f3a2release version 1.3.2
📝 Other Changes
738896fUpdate todo list with song-related tasks
[1.3.1] - 2026-03-30
🔧 Chores
5c358c7release version 1.3.1
[1.3.0] - 2026-03-30
🔧 Chores
48368d9release version 1.3.0
[1.2.8] - 2026-03-30
✨ Features
e195111网络歌曲支持导入图片de1c838重构jsruntimeb78130fuse ccgo quickjs
♻️ Code Refactoring
9ceaecc优化
🔧 Chores
9aec414release version 1.2.8
📝 Other Changes
fb424e2提交wiki3972cad接入cqjscffb54e插件健康检测
[1.2.7] - 2026-03-26
✨ Features
abff90a添加歌曲批量删除 API (POST /songs/batch-delete)
🔧 Chores
902d4ferelease version 1.2.7
📝 Other Changes
33d9f2dupdate doc9664b49update doc
[1.2.6] - 2026-03-25
🔧 Chores
73a0403release version 1.2.6
[1.2.5] - 2026-03-25
✨ Features
0c438fbadd frontend490db3cadd mobile
♻️ Code Refactoring
d61dfae优化导入速度b1ff8a9优化界面
🔧 Chores
96b42c5release version 1.2.57b00668convert frontend from directory to submodule
📝 Other Changes
c9d741d版本发布脚本c1ce566版本发布脚本6025f4b新版本54ad790新版本51d43a4新版本ca53020新版本90ed646新版本00ff846新版本568c5c0新版本fdf177eupdate frontend029c4d6新版本aa66e98新版本0833807frontend 支持独立部署f61d74e更新文档72e5c97修改名字1b73996remove mobiled97a16aupdate mobile
[1.2.4] - 2026-03-19
🔧 Chores
9c70433release version 1.2.4
[1.2.3] - 2026-03-19
✨ Features
dee25c4新增清理歌曲功能
🐛 Bug Fixes
7ee9c74build failedd8afe4a修复pawbe6c2c4修复通知栏丢失的问题aa01b1d修复pwa更新问题154ad14修复通知栏消失的问题4bbf98e修复乱码问题
♻️ Code Refactoring
43ff722优化界面586049a优化移动端播放器1d4b350优化移动端播放器43b20a8优化移动端播放器7abfe93优化移动端播放器2cf5923优化移动端播放器e6d7afe优化移动端播放器6ee93ee优化播放器界面7836361重构错误捕获dda851a优化播放列表0f3adee优化主页3bd566e优化日志e1da51d优化插件管理1aa8bfa优化插件管理892fb58优化插件管理
🔧 Chores
eec45bfrelease version 1.2.384cefearelease version 1.2.2
📝 Other Changes
8fbf17f尝试修复后台通知栏丢失问题30ab1c0尝试修复后台通知栏丢失问题53cd756强制更新pwaa572312测试 tracely sdkeb48e8b测试 tracely sdk5309e1c测试 tracely sdkaf8bfbe测试 tracely sdk9991da4接入tracely472c300接入tracely4c8719f细节优化5485f4e标题超长则循环滚动c31da28修改菜单按钮颜色3f974c7尝试修复通知栏消失问题
[1.2.1] - 2026-02-26
🐛 Bug Fixes
f9543db解决windows网页打不开问题
🔧 Chores
b042cd3release version 1.2.1
[1.2.0] - 2026-02-26
🔧 Chores
188b602release version 1.2.0
[1.1.0] - 2026-02-25
✨ Features
391d4dd新增接口获取token21aeff9Add mimusic-plugin-musictag as submodule
🐛 Bug Fixes
893e880解决标题问题2092853修复乱码问题af4454f解决编码乱码问题4894785解决编码乱码问题148d36a解决编码乱码问题430bb64解决编码乱码问题f8cf809解决编码乱码问题
♻️ Code Refactoring
767c806优化歌单体验57020cf优化图片87a88b7优化图片
🔧 Chores
f5690fcrelease version 1.1.0d3cc78brelease version 1.0.121b9a285release version 1.0.11e49b9f3release version 1.0.10
📝 Other Changes
4d35862处理歌曲封面10739d8网络歌曲播放时长bf35fa5close cgo2234e30update no cgo sqlite
[1.0.9] - 2026-02-21
🔧 Chores
e88df7arelease version 1.0.9
[1.0.8] - 2026-02-21
🔧 Chores
415b5efrelease version 1.0.8c507f93release version 1.0.7
[1.0.6] - 2026-02-21
🔧 Chores
823f5dbrelease version 1.0.634ca5d4release version 1.0.5caa1448release version 1.0.41321d73release version 1.0.3ad8d269release version 1.0.21892189release version 1.0.1
📝 Other Changes
338cd69upate
[main] - 2026-02-12
✨ Features
665486dAdd frontend build job and streamline Docker buildd959defAdd frontend build job to GitHub Actions workflowbe837cfadd web547c3a8add webf58408dadd web68a50dcadd webebd21e1add web069896fadd web518d905Add mimusic-plugins as a git submoduledb470af支持CORS34dd18aadd MIT licence
🐛 Bug Fixes
145c668fix 颜色22cd7d4fix 颜色adb8610fix 颜色043d0d1fix 颜色244e365歌曲读取6720225修复数据显示
📝 Other Changes
488d33eRefactor GitHub Actions to use bun setup action47d1700Refactor Docker workflow to use bun setup action3d13902Remove unnecessary dependency in build-prod target657e3d3Simplify Dockerfile by removing go mod commandsc39f723clean code09e2957简化登录f8fc2c5改名为mimusic [v2.0.0-alpha.1]: https://github.com/songloft-org/songloft/compare/e0a9fd8a53e21bc17982323664e10f8d9549531a...v2.0.0-alpha.1 [v2.0.1]: https://github.com/songloft-org/songloft/compare/v2.0.0...v2.0.1 [v2.0.2]: https://github.com/songloft-org/songloft/compare/v2.0.1...v2.0.2 [v2.1.0]: https://github.com/songloft-org/songloft/compare/v2.0.2...v2.1.0 [v2.1.1]: https://github.com/songloft-org/songloft/compare/v2.1.0...v2.1.1 [v2.1.2]: https://github.com/songloft-org/songloft/compare/v2.1.1...v2.1.2 [v2.2.0]: https://github.com/songloft-org/songloft/compare/v2.1.2...v2.2.0 [v2.2.1]: https://github.com/songloft-org/songloft/compare/v2.2.0...v2.2.1 [v2.2.2]: https://github.com/songloft-org/songloft/compare/v2.2.1...v2.2.2 [v2.2.3]: https://github.com/songloft-org/songloft/compare/v2.2.2...v2.2.3 [v2.2.4]: https://github.com/songloft-org/songloft/compare/v2.2.3...v2.2.4 [v2.2.5]: https://github.com/songloft-org/songloft/compare/v2.2.4...v2.2.5 [v2.3.0]: https://github.com/songloft-org/songloft/compare/v2.2.5...v2.3.0 [v2.4.0]: https://github.com/songloft-org/songloft/compare/v2.3.0...v2.4.0 [v2.5.0]: https://github.com/songloft-org/songloft/compare/v2.4.0...v2.5.0 [v2.5.1]: https://github.com/songloft-org/songloft/compare/v2.5.0...v2.5.1 [v2.6.0]: https://github.com/songloft-org/songloft/compare/v2.5.1...v2.6.0 [v2.6.2]: https://github.com/songloft-org/songloft/compare/v2.6.1...v2.6.2 [v2.6.3]: https://github.com/songloft-org/songloft/compare/v2.6.2...v2.6.3 [v2.6.4]: https://github.com/songloft-org/songloft/compare/v2.6.3...v2.6.4 [v2.7.0]: https://github.com/songloft-org/songloft/compare/v2.6.4...v2.7.0 [v2.8.0]: https://github.com/songloft-org/songloft/compare/v2.7.0...v2.8.0 [v2.8.1]: https://github.com/songloft-org/songloft/compare/v2.8.0...v2.8.1 [v2.8.2]: https://github.com/songloft-org/songloft/compare/v2.8.1...v2.8.2 [v2.8.3]: https://github.com/songloft-org/songloft/compare/v2.8.2...v2.8.3 [v2.8.4]: https://github.com/songloft-org/songloft/compare/v2.8.3...v2.8.4 [v2.8.5]: https://github.com/songloft-org/songloft/compare/v2.8.4...v2.8.5 [v2.8.6]: https://github.com/songloft-org/songloft/compare/v2.8.5...v2.8.6 [v2.8.7]: https://github.com/songloft-org/songloft/compare/v2.8.6...v2.8.7 [v2.8.8]: https://github.com/songloft-org/songloft/compare/v2.8.7...v2.8.8 [v2.8.9]: https://github.com/songloft-org/songloft/compare/v2.8.8...v2.8.9 [v2.8.10]: https://github.com/songloft-org/songloft/compare/v2.8.9...v2.8.10 [v2.9.0]: https://github.com/songloft-org/songloft/compare/v2.8.10...v2.9.0 [v2.9.1]: https://github.com/songloft-org/songloft/compare/v2.9.0...v2.9.1 [v2.9.2]: https://github.com/songloft-org/songloft/compare/v2.9.1...v2.9.2 [v2.9.3]: https://github.com/songloft-org/songloft/compare/v2.9.2...v2.9.3 [v2.9.4]: https://github.com/songloft-org/songloft/compare/v2.9.3...v2.9.4 [v2.9.5]: https://github.com/songloft-org/songloft/compare/v2.9.4...v2.9.5 [v2.9.6]: https://github.com/songloft-org/songloft/compare/v2.9.5...v2.9.6 [v2.10.0]: https://github.com/songloft-org/songloft/compare/v2.9.6...v2.10.0 [v2.11.0]: https://github.com/songloft-org/songloft/compare/v2.10.0...v2.11.0 [v2.11.1]: https://github.com/songloft-org/songloft/compare/v2.11.0...v2.11.1 [v2.11.3]: https://github.com/songloft-org/songloft/compare/v2.11.2...v2.11.3 [v2.11.4]: https://github.com/songloft-org/songloft/compare/v2.11.3...v2.11.4 [v2.11.5]: https://github.com/songloft-org/songloft/compare/v2.11.4...v2.11.5 [v2.11.6]: https://github.com/songloft-org/songloft/compare/v2.11.5...v2.11.6
