这份文档面向插件作者:从打包到被 Lithe 用户看到的完整流程。
还没有可安装的插件包时,先跟着 lithe-plugin-docs 的 LSP 插件完整生命周期教程 完成清单、语言服务器构建和运行验收;需要接入命令、测试或构建后端时,阅读 构建、运行与测试接入指南。
你的插件仓库 Lithe-store Lithe 用户
─────────── ─────────── ─────────
1. 改 plugin.json 版本
2. 打包 zip,发布 GitHub Release ──▶ 3. 首次:你提 PR 收录插件
之后:track-releases 自动开 PR
4. CI 下载并校验,维护者审查合并 ──▶ 5. 刷新插件市场,
看到新版本并确认安装/更新
插件包遵守 Lithe 插件契约 v1
(shared/contracts/plugins/v1/README.md)。
社区插件额外要求:
plugin.json的id使用你自己的反向域名,例如io.github.<你的用户名>.zig-support; 不能使用dev.lithe或dev.lithe.*。vendor.signatureRequirement必须是"none"(社区包不带 Lithe 签名)。version是MAJOR.MINOR.PATCH,每次发布都必须递增,已发布的版本号不能复用。pluginAPIVersion: 3必须有非空requires,逐项声明包实际使用的能力及其契约版本。 例如只使用声明式构建系统的包为"requires": { "buildSystems": 1 };不要无故增加buildProviders等能力。API 1/2 继续使用原有格式,不能带requires。 API 4(调试适配器)同样在requires里逐项声明,例如"debugAdapters": 1。requires的键是小写字母开头、后接英文字母或数字、最长 64 个字符的能力 ID, 值是正整数。索引允许未知能力 ID,由宿主能力表决定可安装性;这不表示当前宿主支持它。- 包内路径只用
/,不能有..、绝对路径或符号链接。 - 可以附带可执行文件(例如打包好的语言服务器),但它们必须在
plugin.json中声明; 用户安装前会看到完整的程序列表并确认。版本更新新增了程序时,用户需要重新确认。
每个平台一个 .zip,整个包放在一个目录下(推荐以插件 ID 命名),zip 中只能有一个
id 等于你插件 ID 的 plugin.json:
zig-support-2.0.0-darwin-arm64.zip
└── io.github.alice.zig-support/
├── plugin.json
└── …
同一插件版本的所有平台包必须使用相同的 version、pluginAPIVersion 和 requires。
能力表按键和值比较,键的书写顺序可以不同。API 3 索引版本项必须逐项复制包清单的
requires;不同平台需要不同能力时,应使用不同的插件版本,不能共用一个版本项。
Release 资产名必须以平台结尾,自动追踪才能识别:
| 资产名结尾 | 对应平台 |
|---|---|
-darwin-arm64.zip / -darwin-x64.zip |
Apple Silicon / Intel Mac |
-windows-x64.zip / -windows-arm64.zip |
Windows |
-linux-x64.zip / -linux-arm64.zip |
Linux |
-darwin.zip(或 -windows.zip、-linux.zip) |
一个包同时服务该系统的 arm64 与 x64 |
在你自己的仓库发布一个正式 Release(不是 draft,也不是 pre-release),把这些 zip 作为资产上传。
索引只接受 https://github.com/<你的仓库>/releases/download/<tag>/<资产>.zip,
不能指向其他仓库、源码压缩包或其他网站。
Release 发布后不要替换或删除资产。索引固定了 SHA-256,替换后用户会安装失败, 每周的校验也会把它标记为损坏。需要修复就发一个新的补丁版本。
计算 SHA-256:
shasum -a 256 zig-support-2.0.0-darwin-arm64.zip-
Fork 本仓库,在
lithe-plugin-index.json的plugins中按id字母序插入你的条目:{ "id": "io.github.alice.zig-support", "name": "Zig Support", "author": "Alice", "repository": "https://github.com/alice/lithe-zig", "homepage": "https://github.com/alice/lithe-zig#readme", "description": "Zig language server and test runner integration.", "localizedDescriptions": { "zh-Hans": "Zig 语言服务器与测试运行集成。" }, "tags": ["language", "zig"], "license": "MIT", "icon": "https://raw.githubusercontent.com/alice/lithe-zig/main/icon.png", "versions": [ { "version": "2.0.0", "pluginAPIVersion": 1, "releaseDate": "2026-10-12", "downloads": [ { "platforms": ["darwin-arm64"], "downloadURL": "https://github.com/alice/lithe-zig/releases/download/v2.0.0/zig-support-2.0.0-darwin-arm64.zip", "sha256": "<64 位小写十六进制>" } ] } ] }字段说明见 plugin-index.schema.json。
homepage、localizedDescriptions、tags、icon可选;icon只能是同一仓库的 raw 文件。 API 3 的版本项还必须在pluginAPIVersion旁加入与包内相同的能力表,例如:"pluginAPIVersion": 3, "requires": { "buildSystems": 1 }
提高 API 等级或能力版本时发布新的插件版本,并保留最后一个旧要求的版本项, 让旧宿主仍能选择可安装版本。Core 对 API 3 以上的索引项允许省略
requires, 提供时仍校验能力表;API 4 的版本项应像 API 3 一样逐项复制包内的requires(自动追踪就是这样写的),宿主才能据此判断自己是否具备这些能力。 -
统一格式并本地校验(CI 要求索引使用统一格式:两格缩进,纯值列表写在一行):
node scripts/validate-index.mjs --write-format node scripts/validate-index.mjs --verify-archives
-
提交 PR,按模板填写。CI 会下载每个新增或校验预期发生变化的包,核对 SHA-256、 包内
plugin.json的id、version、pluginAPIVersion、requires和signatureRequirement。即使 URL 和 SHA-256 不变,修改 ID、版本、API 等级或能力表 也会重新校验;完整校验不使用基线跳过。维护者审查后合并。
索引与归档检查只覆盖上述发布字段、社区信任声明和现有路径检查,不替代完整的 Core 清单校验或插件运行验收。安装端仍由 Core 验证能力是否与清单实际内容相符,并由宿主 检查能力支持情况。没有运行这些验证时,PR 应明确标记为待验证。
也可以先开一个 插件收录申请 issue,由维护者帮你提 PR。
收录后,新版本不需要你再提 PR:
- 在你的仓库递增
plugin.json的version,打包,发布新的正式 Release(资产命名同上)。 Track plugin releases工作流每 6 小时扫描一次已收录插件最近 20 个 Release, 把新版本写进索引(版本号、pluginAPIVersion、requires取自包内plugin.json, 能力表按键排序写入;发布日期取 Release 发布时间,SHA-256 由 CI 计算), 然后开一个chore(index): 追踪插件新版本PR。- 维护者审查合并后,Lithe 用户刷新插件市场就能看到更新。
想更快上线,可以在 issue 里请维护者手动触发工作流,或者自己提 PR 在 versions 里加一项
(保持新版本在前)。
自动追踪只收录正式 Release,继续跳过 draft 和 pre-release;预发布版本需要手工提交
索引条目并接受相同的校验,不能靠调整追踪策略自动收录。Maven、Gradle 的 0.1.0
预发布收录属于这种手工流程,条目是否存在不代表发布或运行验证已经完成。
需要新插件 API 的版本(例如调试适配器插件需要 API 4)要等到稳定版 Lithe 支持该 API 才能让
稳定版用户安装;稳定版是否支持,以 Lithe 的发行说明为准。支持之前,把 GitHub Release 标为
预发布,并手工提交索引条目(LLDB Debugger 0.1.0 就是这样收录的)。稳定版 Lithe 遇到自己
不支持的 API 等级只会显示“需要更新 Lithe”,不会安装,所以不会装出坏插件。稳定版支持之后,
把 Release 转为正式发布(或发布新版本),自动追踪就会接手后续版本。调试适配器插件的写法见
编写调试适配器插件。
自动追踪会在日志中说明归档无法收录的原因:没有符合命名的 zip、包内 plugin.json
不匹配或缺失/畸形的能力表、多个资产声明了不同的版本号、API 等级或能力表、
版本号已被别的资产占用。单个发布存在分歧时拒绝整个版本,不只保留其中一个平台包。
- 修改名称、描述、标签、主页、图标:直接提 PR 修改条目。
- 仓库改名或转移:提 PR 同时更新
repository和所有downloadURL;Lithe 会把它当作同一插件。 - 下架整个插件或撤回某个有问题的版本:开 issue 或提 PR 删除,见 维护者文档的下架规则。