Repository navigation
Plugin Manifest
manifest.json 是插件的元数据文件,声明插件的基本信息、依赖关系和权限。它必须存在于 ZIP 根目录。
{
"id": "my-plugin",
"name": "我的插件",
"version": "1.0.0",
"description": "一个示例插件",
"author": "StackPanel",
"entry": "dist/index.js",
"export": "default",
"schemaVersion": 1,
"apiVersion": ">=0.4.0",
"requires": ["store"],
"provides": ["my-plugin.widget"],
"consumes": [{ "pluginId": "store", "extensionPoint": "payment.provider", "optional": true }],
"permissions": ["my-plugin.read", "my-plugin.write"],
"roleTemplates": [{ "role": "USER", "permissions": ["my-plugin.read"] }],
"locales": ["zh-CN"]
}| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
id |
✅ | string | 插件唯一标识,/^[a-z0-9_-]{1,64}$/,不可使用保留 ID |
name |
✅ | string | 显示名称 |
version |
✅ | string | semver 版本号 |
description |
— | string | 插件描述 |
author |
— | string | 作者 |
entry |
— | string | 后端入口文件,默认 dist/index.js
|
export |
— | string | 导出名,默认 default
|
schemaVersion |
— | number | 清单结构版本,缺省按 1;高于内核支持版本则拒绝安装 |
apiVersion |
— | string | semver 范围,内核版本必须满足此范围(如 >=0.4.0) |
requires |
— | array | 依赖插件列表 |
provides |
— | string[] | 提供的扩展点 ID |
consumes |
— | array | 消费的扩展点 |
permissions |
— | string[] | 声明的权限字符串 |
roleTemplates |
— | array | 角色权限模板 |
locales |
— | string[] | 随包携带消息的界面语言(BCP 47,如 zh-CN) |
builtin |
— | boolean | 仅内核 seed 时写入;上传包声明 builtin 会被拒绝 |
插件唯一标识。格式:小写字母、数字、下划线、短横线,1–64 字符。
保留 ID(第三方不可使用)= 全部内置插件 ID + kernel、default。内置清单由内核扫描各包 package.json 的 stackpanel.builtin: true 派生,当前为:
catalog、epay、hello、llm-gateway、login、store、store-product-card、store-product-server、store-wallet、ticket、wowid、zjmf-compat、zjmf-upstream。
entry 指定后端入口 JS 文件路径(相对于 ZIP 根)。默认 dist/index.js,最大 512KB。
export 指定从入口模块导出的定义名。默认 default(即 export default definePlugin(...))。如果使用命名导出,设为对应名称。
内核会动态 import() 入口文件,并取 mod[exportName] 作为插件定义。
依赖插件列表。支持两种格式:
"requires": ["store", { "id": "epay", "range": ">=1.0.0", "optional": true }]| 属性 | 说明 |
|---|---|
id |
依赖的插件 ID |
range |
可选,semver 版本范围 |
optional |
可选,是否可选依赖(默认 false) |
详见 插件依赖。
provides 声明本插件向其他插件提供的扩展点 ID。consumes 声明本插件需要消费的扩展点:
"consumes": [
{ "pluginId": "store", "extensionPoint": "payment.provider", "optional": false }
]详见 插件依赖。
permissions 声明插件使用的权限字符串(用于路由 permission 字段)。
roleTemplates 定义插件激活后自动授予内置角色的权限:
"roleTemplates": [
{ "role": "USER", "permissions": ["my-plugin.read"] },
{ "role": "ADMIN", "permissions": ["my-plugin.read", "my-plugin.write"] }
]ADMIN 始终拥有全部权限,无需在 roleTemplates 中声明。详见 权限与 RBAC。
使用 pnpm plugin:pack <name> 打包时,manifest 会从 package.json 生成 id/name/version/description,注入 schemaVersion 与 apiVersion(>= 当前内核契约版本,来源 @stackpanel/spec)。requires/provides/consumes/permissions/roleTemplates 则从插件编译产物导出的 manifest 中读取,写入生成的 manifest.json。因此这些字段应声明在插件代码的 manifest 里。
pack-plugin.ts直接 importdist/index.js并读取definition.manifest;内置插件 seed 走的是lib/plugins.ts的readBuiltinPluginMetadata。
开始
- 核心开发
构建内核扩展
- 插件
- 主题与前端包
AI 与自动化
- 内核 Agent
- MCP
对接平台
- Open Platform API
- Partner API