发布插件
写完插件并验证本地运行正常后,就可以把它提交到麦麦官方插件中心,让所有用户都能通过 WebUI 插件市场搜索、安装你的作品。
插件中心是什么
插件中心(plugins.maibot.chat)由官方仓库 Mai-with-u/plugin-repo 驱动。插件本身以独立的公开 GitHub 仓库形式存在,插件中心只维护索引文件——plugins.json 描述插件元信息,plugin_versions.json 记录每个插件的发布版本与兼容区间——通过自动化工作流验证每一个提交。
提交插件完全开源免费,不需要任何费用或邀请。审核通过后,你的插件会出现在插件市场的搜索结果中。
提交前:插件仓库要求
你的插件必须是一个公开的 GitHub 仓库,且根目录包含以下文件:
_manifest.json — 插件清单,使用 manifest v2 结构,字段规范见 Manifest 系统
plugin.py — 插件入口文件,包含 create_plugin() 工厂函数
LICENSE — 许可证文件,类型应与 _manifest.json 中的 license 字段一致
README.md — 建议包含功能介绍、安装方式、配置说明和使用示例
什么是插件仓库
插件仓库是独立于 MaiBot 主仓库的你的个人/项目仓库(例如 https://github.com/you/my-plugin),不是 MaiBot 的 plugins/ 目录。插件中心通过 _manifest.json 的 urls.repository 字段定位它。
发布 Release 版本:Tag 必须与 manifest 一致
插件市场的安装对话框按发布版本工作:官方索引同步工具会扫描你仓库的 Git Release,为每个 Tag 生成一条版本记录。任何一条对不上,该版本会被打回 rejected_releases,用户在插件详情页只能看到「有 N 个发布版本未通过校验」,装不了它。
发布新版本时逐条对齐:
- Git Tag 与
_manifest.json的version完全一致 — Tag 写1.4.2或v1.4.2,manifest 的version就必须是1.4.2 version用严格三段式 —x.y.z,不带-rc1、+build之类后缀;预发布请用 GitHub 的 Prerelease 标记,而不是改版本号格式- 插件
id不能变 — 一个发布版本如果把id从com.you.plugin改成别的,会被判定为"发布版本改变了插件 ID"而驳回 manifest_version保持受支持的协议版本 — 当前固定为2- 该 Tag 的 commit 里必须能读到
_manifest.json— 改写历史、删过 manifest 的 Tag 会被驳回
建议固定流程
改代码 → 更新 _manifest.json 的 version → 提交推送 → 用同一个版本号打 Tag 并推送 → 在 GitHub 上基于该 Tag 创建 Release(需要时勾选 Prerelease)。Tag、manifest、Release 三者版本号一致,索引一次同步就能收录。
提交方式:Issue 提交(推荐)
通过 Issue 模板提交,无需 Fork、无需本地 Git 操作,也能避免多人同时修改 plugins.json 带来的合并冲突。
- 打开 plugin-repo 仓库 的 New Issue 页面,选择 「Add Plugin / 添加插件」 模板。
- 填写信息:
- 插件 ID:建议与
_manifest.json中的id保持一致。 - 仓库地址:填写完整的公开 GitHub HTTPS URL,例如
https://github.com/username/my-plugin。
- 插件 ID:建议与
- 提交 Issue 后,CI 会自动读取你插件仓库根目录的
_manifest.json并校验,结果会评论在 Issue 中。 - 验证通过后,维护者会审核并使用
/approve批准,你的插件就会被加入插件中心。
状态标签
pending-validation — 等待自动验证
validated — 验证通过,等待维护者批准
validation-failed — 验证失败,请根据提示修复
approved — 已批准并添加到插件中心
rejected — 被维护者拒绝
验证失败怎么办
- 根据 Issue 中的错误提示修改你的插件仓库。
- 修改完成后,在 Issue 中评论
/recheck。 - CI 会重新验证,结果会再次评论在 Issue 中。
提交流程全览
提交清单
提交前对照检查一遍:
- [ ] 插件仓库是公开的 GitHub 仓库
- [ ] 根目录包含
_manifest.json(manifest_version: 2)、plugin.py、LICENSE - [ ]
id稳定唯一,无空格、无路径字符 - [ ] 所有版本号都是三段式(
x.y.z) - [ ] 每个 Git Release 的 Tag 与 manifest
version一致,且id未改动(否则该版本进不了市场) - [ ]
host_application/sdk的上界不要锁死在小版本(例如写到999.999.999),只认真约束min_version - [ ]
author是{ name, url }对象 - [ ]
urls.repository是公开 HTTPS 地址,无.git后缀 - [ ]
capabilities只声明实际需要的能力 - [ ] 本地已用真实 MaiBot 验证过插件能正常加载运行
- [ ] 若插件包含
webui.json,已在本地 MaiBot 里重载插件并打开页面验证过
更多信息
- 插件市场 — 浏览所有已收录插件
- plugin-repo 仓库 — 插件索引与贡献指南
- Manifest 系统 —
_manifest.json完整字段定义 - 开发指南 — 从零开始编写插件
验证与排错
验收动作 — 提 Issue 后看标签流转:CI 评论校验结果,标签从 pending-validation 变成 validated,维护者 /approve 后变成 approved,插件详情页能安装该版本。提交前先在插件仓库根目录跑一遍下面两条命令,确认 Tag 与 manifest 对得上。
# 最新 Tag 与 manifest 的 version 必须一致(Tag 带 v 前缀时只比较后面的三段式)
git describe --tags --abbrev=0
python -c "import json; print(json.load(open('_manifest.json'))['version'])"- 标签停在
validation-failed— 按 Issue 提示改完仓库后必须评论/recheck,CI 才会重新验证;只改代码不留言,Issue 不会自己恢复。 - 版本进了
rejected_releases,市场里显示「有 N 个发布版本未通过校验」 — Tag(1.4.2或v1.4.2)对应的 manifestversion必须是纯三段式1.4.2,id不能改名,manifest_version保持2,且该 Tag 的 commit 里必须能读到_manifest.json;修好后重新打 Tag 并创建 Release。 - CI 提示读不到
_manifest.json— 插件仓库必须是公开的 GitHub 仓库,urls.repository要填公开 HTTPS 地址且不带.git后缀,manifest 必须放在仓库根目录。 LICENSE相关校验失败 — 根目录要有LICENSE,许可证类型与_manifest.json的license字段一致,并确认plugin.py里有create_plugin()工厂函数。- 审核通过、市场能搜到,但装上后加载失败 — 多半是没在真实 MaiBot 里验证过,或
host_application/sdk上界被锁死在小版本而挡住;上界改成999.999.999、只认真约束min_version,再在本地重载插件复验一次(含webui.json页面)。