插件 SDK 手册
插件开发者的独立 SDK 手册——本平台「什么对应什么」、插件能操作的一切、API 签名、事件参数,全都能在这里查到。
💡 状态:插件商店已上线;「插件代码实际执行」开发中,标注「规划」的 API 会随执行引擎逐步开放。
✅ 能自定义 / 增加(展示层):一切你在网页上「看得到」的默认展示方式——所有动画、所有卡片的外观、所有菜单、主题配色、字体、背景、按钮、弹窗、布局、图标……
❌ 不能改(核心层):登录注册、数据存储、发布 / 审核逻辑、业务规则、账号安全等平台的「核心功能与结构」。
① 什么是插件?
插件是一块「不改动平台核心、却能为平台加功能」的代码。装了插件,你的微国家就能拥有新的卡片、主题、背景或工具——就像给手机装 App。
插件在平台预留的「插座」(扩展点)上接东西,安全又灵活。写插件 = 写一个清单(manifest,说明你是谁、要什么权限)+ 一段代码(plugin.js,干活的逻辑)。
② 平台全貌(插件能碰到哪些模块)
插件不是孤立的小工具,它能接入平台的这些模块——每一条都对应一个或多个扩展点:
| 平台模块 | 是什么 | 插件能做什么 |
|---|---|---|
| 🌐 站点外壳 | 左侧菜单、顶栏、主题(配色/字体/圆角) | 加菜单项、换肤、改背景 |
| ✏️ FluidCanvas 编辑器 | 卡片画布编辑器(卡型/边缘/字体/图层/合并) | 注册新卡型、新边缘、新工具、新字体 |
| 📄 页面 | 首页/社区/消息/动态/文章/订阅等 | 加面板、加入口 |
| 👥 社交 | 帖子/评论/点赞/转发/关注/收藏 | 订阅这些事件自动触发 |
| 📚 文章 | 百科文章的撰写、发布、阅读 | 发布时挂钩子 |
| 🖼 图库 | 图片上传、标签、搜索 | 读取图片数据(只读) |
| 👑 订阅 | free/basic/premium/ultra 四档 | 设 minTier 门槛 |
| 🏆 等级/成就 | 用户 XP、徽章、装饰品 | 读取等级数据(只读) |
| 🔔 通知 | 站内通知、公告 | 发通知 |
简言之:一切「看得到」的默认展示方式(动画、卡片外观、菜单、按钮、弹窗、布局、图标……)都能自定义或增加;「看不到」的核心功能与结构(登录、数据、业务规则……)不能改。
③ 平台实体速查(本平台「什么对应什么」)
这是关键的一节——插件里用到的每个 ID / 值,都对应平台里真实存在的实体:
🃏 卡型(cardType)——现有卡,插件能注册新卡型加入资产面板
| 卡型 ID | 名称 | 默认尺寸 |
|---|---|---|
flag | 国旗卡 | 8 宽 × 5 长 |
shield | 国徽卡 | 5 × 5 |
content | 内容卡 | 8 × 4 文本块 |
text | 文本卡 | 自适应 |
stats | 数据卡 | 自适应 |
sne | SNE 指数卡 | 自适应 |
sheet | 表格卡 | 10 宽 × 7 长 |
timeline | 时间线卡 | 自适应 |
map | 领土地图卡 | 自适应 |
✂️ 边缘主题(edgeTheme)——现有边缘,插件能注册新边缘
| 边缘 ID | 名称 |
|---|---|
paper | 纸张 |
treasure | 藏宝图 |
tech | 科技(斜切) |
paint | 油漆 |
custom:* | 自定义边缘(AI 生成,如 custom:ce-mask1) |
注:内置边缘共 14 个主题,上表列出最常用的;插件注册新边缘用 edgeTheme 扩展点。
👑 订阅等级(tier)——插件门槛用的值
| 等级 ID | 名称 | 排序 |
|---|---|---|
free | 免费 | 0 |
basic | 基础订阅 | 1 |
premium | 高级订阅 | 2 |
ultra | 顶级订阅 | 3 |
📄 主要页面(页面级扩展点的宿主)
dashboardoverviewcommunity-hubmessagesactivityfluidcanvasarticlepremium🔤 字体(font)——插件能挂接字体
平台内置 451 款字体,分 10 个语言组(拉丁 / 中文 / 日文 / 韩文 / 阿拉伯文 / 西里尔文等)。插件通过 ui.theme 能力覆盖字体变量,或注册新字体包。
✨ 动画(animation)——插件能加开启动画
平台自带页面打开 / 切换动画(transitions.js)。插件通过 ui.animation 能力,为网页添加或替换自定义的开启动画、入场特效。
④ 一个插件 = 两份东西
1. manifest(清单):插件的「身份证」,告诉平台它叫什么、能干什么、需要什么权限。
2. 代码(plugin.js):真正干活的逻辑,按 manifest 里声明的能力去接扩展点。
⑤ manifest 完整参考
manifest 是一个 JSON 对象。完整示例:
{
"id": "my-weather-card",
"name": "天气卡",
"version": "1.0.0",
"author": "USR-000101",
"description": "在画布里添加实时天气卡片,支持多城市切换",
"icon": "⛅",
"preview": "linear-gradient(135deg,#4648d4,#7b7ff0)",
"category": "card",
"capabilities": ["cardType", "ui.menu", "storage"],
"minTier": "premium",
"tags": ["天气", "卡片"],
"license": "MIT"
}
| 字段 | 必填 | 说明 |
|---|---|---|
id | ✅ | 全局唯一标识,小写英文 + 连字符,建议「作者-名字」 |
name | ✅ | 插件显示名 |
version | ✅ | 版本号,语义化 |
author | ✅ | 作者用户 ID(USR-xxxx) |
description | ✅ | 一句话简介 |
icon | 选填 | 图标(emoji) |
preview | 选填 | 预览图(CSS 渐变或图片地址) |
category | 选填 | 分类:card / theme / tool / general |
capabilities | ✅ | 需要的权限列表 |
minTier | 选填 | 初始订阅门槛,默认 premium |
tags | 选填 | 标签数组,方便商店搜索 |
license | 选填 | 许可证 |
⑥ capabilities 详解(能力 → 平台具体位置)
每个能力都对应平台里的一个或多个具体位置:
| 能力 | 对应平台哪里 | 能做什么 |
|---|---|---|
ui.menu | 左侧侧栏导航(12 个菜单项) | 加 / 改 / 删菜单项 |
ui.theme | 全站 CSS 设计令牌(--color-* 变量) | 覆盖配色、字体、圆角、间距 |
ui.background | 页面背景、画布背景 | 换背景图、渐变 |
ui.animation | 网页打开 / 页面切换动画(transitions.js) | 加自定义开启动画、入场特效 |
cardType | FluidCanvas 编辑器资产面板 | 注册新卡型 |
edgeTheme | 编辑器边缘选择器 | 注册新边缘主题 |
tool | 编辑器工具栏、右键菜单、快捷键 | 加按钮、菜单项、快捷键 |
hook | 平台事件系统 | 订阅事件自动执行 |
storage | 插件专属键值存储 | 读写设置 |
notification | 站内通知系统 | 发通知 |
⚠️ 能力沙箱:插件只能调用自己声明过的能力,声明之外的调用会被平台直接拦下。
⑦ API 完整参考
插件代码里通过全局 plugin 对象调用平台 API。以下是完整 API(规划,随执行引擎逐步开放):
// 注册插件主体(一个插件只调一次)
plugin.register({
id: 'my-weather-card', // 与 manifest.id 一致
cardType: { /* 见下方 */ },
menuItem: { /* 见下方 */ },
edgeTheme: { /* 见下方 */ },
tool: { /* 见下方 */ },
on: { /* 事件处理,见第 ⑧ 节 */ }
});
// 读写插件专属存储(需 storage 能力)
plugin.storage.set('defaultCity', 'Singapore'); // 存(键值均可为字符串/JSON)
var city = plugin.storage.get('defaultCity'); // 取
plugin.storage.remove('defaultCity'); // 删
// 订阅事件(需 hook 能力)
plugin.on('card.create', function (card) { /* ... */ });
// 发站内通知(需 notification 能力)
plugin.notify({ title: '天气已更新', body: '新加坡已更新为 32°' });
| API | 签名 | 说明 | 需能力 |
|---|---|---|---|
plugin.register | register(obj) | 注册插件主体 | 对应能力 |
plugin.storage.set | set(key, value) | 存键值(按插件 id 隔离) | storage |
plugin.storage.get | get(key) | 取键值 | storage |
plugin.storage.remove | remove(key) | 删键 | storage |
plugin.on | on(event, handler) | 订阅事件 | hook |
plugin.notify | notify({title, body}) | 发站内通知 | notification |
⑧ 事件钩子完整参考
订阅这些事件,在对应动作发生时自动执行你的代码:
| 事件 | 触发时机 | 回调参数 |
|---|---|---|
card.create | 画布里新建卡片 | card(卡对象) |
card.merge | 两张卡合并成组 | group(组对象) |
card.delete | 删除卡片 | card |
draft.save | 保存草稿 | draft |
article.publish | 发布文章 | article |
comment.create | 发表评论 | comment |
like.create | 点赞 | like |
follow.create | 关注用户 | follow |
示例:建卡时自动打标签——
plugin.on('card.create', function (card) {
card.tags = (card.tags || []).concat(['待整理']);
});
⑨ 完整示例
示例 A:天气卡(注册新卡型 + 菜单)
{
"id": "my-weather-card",
"name": "天气卡",
"version": "1.0.0",
"author": "USR-000101",
"description": "在画布里添加实时天气卡片",
"icon": "⛅",
"capabilities": ["cardType", "ui.menu"],
"minTier": "premium"
}
plugin.register({
id: 'my-weather-card',
cardType: {
id: 'weather',
label: '天气卡',
render(data) {
return '' + data.city + ' ' + data.temp + '°';
}
},
menuItem: { title: '天气', icon: '⛅', after: '地图' }
});
示例 B:极简主题(换肤 + 背景)
{
"id": "my-minimal-theme",
"name": "极简主题",
"version": "1.0.0",
"author": "USR-000101",
"description": "一套更清爽的 UI 配色与画布背景",
"icon": "🎨",
"capabilities": ["ui.theme", "ui.background"],
"minTier": "free"
}
plugin.register({
id: 'my-minimal-theme',
theme: {
'--color-primary': '#7b7ff0',
'--color-background': '#0f2027'
},
background: { canvas: 'linear-gradient(135deg,#0f2027,#2c5364)' }
});
示例 C:事件钩子(建卡自动归档)
plugin.register({
id: 'my-auto-archive',
on: {
'card.create': function (card) {
card.tags = (card.tags || []).concat(['待整理']);
}
}
});
⑩ 开发与测试
manifest.json 和 plugin.jsconsole.log⑪ 版本管理(语义化版本)
| 改动类型 | 加哪一位 | 示例 |
|---|---|---|
| 修 bug | 补丁版本 +1 | 1.0.0 → 1.0.1 |
| 加功能(向后兼容) | 次版本 +1 | 1.0.0 → 1.1.0 |
| 大改(不兼容) | 主版本 +1 | 1.0.0 → 2.0.0 |
每次更新写 changelog(更新说明)。用户能在插件详情页「版本」标签看到全部历代版本。
⑫ 提交与审核
提交前自检清单:✅ id 唯一 · ✅ 最小权限 · ✅ 代码能跑 · ✅ 不碰隐私 · ✅ 写了 changelog
什么会被拒:恶意代码、越权调用、偷传用户数据、抄袭、与平台功能重复。
⑬ 订阅等级与「下放」
premium → 新插件默认门槛,只有高级订阅用户能装。
basic → 使用量上来了,官方「下放」到基础订阅。
free(平台内置) → 特别优秀的插件被官方「收编」成平台自带,无需手动安装;官方通知作者并打赏资金感谢贡献。
⑭ 沙箱与安全边界
🚫 读其他用户隐私数据(密码、邮箱、私信)
🚫 访问平台未开放的接口
🚫 向外部服务器偷传数据
🚫 访问本地文件系统(网页沙箱天然隔离)
🚫 执行未声明的能力
沙箱 + AI 检查 + 官方审核,三重保障。
⑮ 命名与图标规范
✅ id:小写英文 + 连字符,建议「作者-名字」(alex-weather-card)
✅ name:简短好记,别和平台自带功能重名
✅ icon:emoji 一个就够(⛅ 🎨 🧩 🔧 📈)
✅ preview:CSS 渐变或清晰图片
⑯ 最佳实践
✅ id 用「作者-名字」格式,全局唯一
✅ 最小权限——只声明真正用到的 capabilities
✅ 代码写干净、加注释——审核更快
✅ 写清 changelog
✅ API 不可用时优雅降级,别崩
⑰ 常见问题
Q:写插件要会编程吗?
A:要会一点 JavaScript。不会可先从「主题插件」这种只填 manifest 的简单类型开始。
Q:id 撞了怎么办?
A:id 必须全局唯一,撞了提交失败。用「作者-名字」基本不撞。
Q:能改平台现有功能吗?
A:不能。插件只能「加」或「在扩展点上接」,不能改平台核心。
Q:怎么让插件免费?
A:设 minTier 为 free 即可(默认 premium)。也可先 premium,等使用量上来让官方「下放」。
Q:审核多久?
A:AI 检查即时,官方人工审核通常 1-3 天。