发布上架
本文面向第三方插件作者:如何把插件打包、签名并提交到插件目录。 官方插件的发布流程见 官方插件开发与发布。
构建出 tar.gz,目录根 = 插件目录(包含 plugin.json 与 main.js,
即「从磁盘安装」选中的那个目录):
tar -czf my-plugin-0.1.0.tar.gz -C . my-plugin安装时宿主校验包内恰好一个插件目录(不允许杂散的顶层文件),
plugin.json 的 id 必须与目录名一致。
macOS 用户注意:带扩展属性的文件会被系统 tar 写成
._*AppleDouble 伴随文件(含顶层._<id>),在 Windows 解压会触发「杂散顶层文件」 校验失败。打包时禁用:COPYFILE_DISABLE=1 tar -czf …。
2. 签名(强烈建议)
Section titled “2. 签名(强烈建议)”无签名可以安装,但会走信任确认弹窗(见 信任模型与安全边界)。
- 签名复用 Tauri updater 的 minisign 信任根:公钥即宿主
tauri.conf.json的plugins.updater.pubkey,私钥~/.tauri/termii.key(带密码,永不进仓库)。 - 签名对象是 tar.gz 包字节本身;签名文件是 base64 编码的 minisign
文本(
tauri signer sign输出与 updatersignature字段同格式):
cargo tauri signer sign -f ~/.tauri/termii.key my-plugin-0.1.0.tar.gz# → 生成 my-plugin-0.1.0.tar.gz.sig(托管地址即目录条目里的 sigUrl)签名流程与官方发布脚本 scripts/publish-plugins.sh 的做法一致
(该脚本会自动完成构建 → 打包 → 签名 → 生成目录条目)。
3. 提交目录
Section titled “3. 提交目录”向 Termii-App/plugins 提交 PR:
在仓库根 catalog.json 的 plugins 数组加一条(schema v1,详见该仓库
README 与 scripts/build-catalog.mjs 头部注释)。合并后自动部署到
https://plugins.termii.meowdream.cn/catalog.json(Cloudflare Pages,
与官网同 CDN,下载流量不走 GitHub)。
条目字段:
| 字段 | 说明 |
|---|---|
id |
与 plugin.json 一致(kebab-case,校验较严:^[a-z0-9]+(?:-[a-z0-9]+)*$) |
name / version |
与 plugin.json 一致(version 为 semver) |
description / author |
展示用 |
apiVersion |
与 plugin.json 的 apiVersion 同语义 |
minAppVersion |
要求宿主最低版本 |
capabilities |
与 plugin.json 的能力声明一致 |
downloadUrl |
tar.gz 的托管地址(http(s) 绝对地址) |
sigUrl |
签名文件地址(可选;有则安装时必验签,缺失会导致安装失败,不能静默降级) |
official |
仅官方插件为 true(第三方不要写,写了也会被安装时剥离) |
4. 用户侧安装与更新
Section titled “4. 用户侧安装与更新”- 从 URL 安装:设置 → 插件 → 从 URL 安装(粘贴
downloadUrl,或 粘贴目录条目地址)。前端下载字节后经宿主落盘,带签名则验签(签名 失效 → 拒绝安装),无签名可装(走信任弹窗)。 - 更新检查:已装插件的更新检查是手动的(目录条目 vs 已装版本, 复用宿主 update 模块的版本比较);不做自动更新 / 付费 / 评论 / 搜索分类。
- 应用内市场:设置 → 插件 → 插件市场展示目录条目(官方条目带 「官方」徽标)。
- 升级
plugin.json的version(及minAppVersion如需要), 同步 bundle 内 manifest(模板的src/manifest.js); - 重新构建
main.js、重新打包tar.gz、重新签名; - 更新
catalog.json条目;宿主比对版本后提示用户更新。