隐私说明
最后更新:2026-05-29
Songloft 是一款自托管软件,所有数据保存在你自己的服务器上。本文档说明软件本身的数据处理行为,便于你判断合规边界。
1. 遥测与崩溃上报
Songloft 服务端集成了 Tracely 崩溃上报 SDK。该功能为编译时可选——仅当构建时通过 -ldflags 注入了 AppSecret 和 Host 两个参数才启用。
- GitHub Releases 提供的预编译二进制与 Docker 镜像:已注入 Tracely 参数,崩溃上报默认启用。当服务端发生 panic 时,会向项目维护者自建的 Tracely 服务上报错误堆栈信息(不含用户数据、音乐文件或账号信息)。
- 自行编译(
make build不传TRACELY_APP_SECRET/TRACELY_HOST):崩溃上报不启用,服务端不会发出任何上报请求。
启动日志会明确显示 Tracely 的启用状态:
Tracely 监控未启用(编译时未注入 AppSecret/Host) # 未启用
Tracely 已初始化 # 已启用你可以通过抓包(tcpdump / Wireshark)或防火墙规则验证这一点。
除此之外,Songloft 不内置任何匿名统计、用户行为分析或广告 SDK。
2. 主动出站请求清单
Songloft 在以下场景会发起主动出站请求:
| 触发场景 | 请求目标 | 数据内容 |
|---|---|---|
| 服务端发生 panic(仅编译时启用 Tracely 时) | 维护者自建的 Tracely 服务 | 错误堆栈、服务端版本号、平台信息。不含用户数据、音乐文件或账号信息 |
| 用户在「设置」中点击「检查更新」 | github.com/songloft-org/songloft | 仅 HTTP GET version.json,不带任何用户标识 |
| 用户安装 / 启用 JS 插件并触发其网络权限 | 由该插件的代码决定(运行时受 permissions: ["network"] 沙箱权限约束) | 由插件实现决定 |
| 用户在 Web UI 中加载本仓库 README 中的徽章(如 visitorbadge.io) | api.visitorbadge.io | 仅 GitHub README 渲染时由 GitHub 服务端代理,不在 Songloft 软件内 |
3. 数据存储位置
| 数据 | 位置 | 说明 |
|---|---|---|
| 用户账号 / 密码哈希 | data/songloft.db(SQLite) | bcrypt 哈希,不存明文 |
| JWT Token | 客户端本地(浏览器 LocalStorage / Flutter 端 secure_storage) | 服务端只保存 refresh token 的哈希 |
| 音乐元数据 / 封面 / 歌词 | data/songloft.db + data/cache/ | 仅本地,不上传 |
| 播放记录 / 收藏 | data/songloft.db | 仅本地 |
| 插件配置 / 状态 | data/songloft.db 的 plugin_storage 表 | 插件通过沙箱 storage API 写入 |
所有数据保存在你自己的部署环境内。 项目方无法访问你的数据,因为根本没有任何"上报"链路。
4. JS 插件的数据收集
JS 插件可能通过其声明的 permissions 调用网络、读取歌曲库、写入存储等能力。第三方插件的数据收集行为完全由插件本身决定,与 Songloft 主项目无关。
- 插件的网络访问权限由 manifest
permissions: ["network"]显式声明,运行时由宿主在 QuickJS 沙箱中校验。 - 安装第三方插件前,请阅读其源码或权限清单,确认其网络请求范围是否符合你的预期。
- 如需禁止某个插件的网络访问,可在 Songloft Web UI 中禁用该插件,或部署时在防火墙层屏蔽对应域名。
5. 若你将 Songloft 部署给他人使用
如果你将 Songloft 部署在公网或多用户环境,你本人即成为《个人信息保护法》《GDPR》等法规下的"个人信息处理者",需自行:
- 向你的用户披露数据处理范围(账号、播放记录、IP 等);
- 提供数据导出 / 删除途径;
- 保障传输与存储安全(HTTPS、磁盘加密等)。
项目方对此不承担任何责任,详见 README 版权与免责声明。
6. 联系方式
如发现本文档与实际行为不符,请通过 GitHub Issues 反馈。
