插件 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数据卡自适应
sneSNE 指数卡自适应
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

📄 主要页面(页面级扩展点的宿主)

dashboard
首页工作台
overview
MicroNationary
community-hub
社区
messages
消息
activity
动态
fluidcanvas
FluidCanvas 编辑器
article
文章阅读
premium
订阅页

🔤 字体(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)加自定义开启动画、入场特效
cardTypeFluidCanvas 编辑器资产面板注册新卡型
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.registerregister(obj)注册插件主体对应能力
plugin.storage.setset(key, value)存键值(按插件 id 隔离)storage
plugin.storage.getget(key)取键值storage
plugin.storage.removeremove(key)删键storage
plugin.onon(event, handler)订阅事件hook
plugin.notifynotify({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(['待整理']);
    }
  }
});

⑩ 开发与测试

1
用任意代码编辑器(VS Code 等)新建 manifest.json 和 plugin.js
2
写 manifest——声明 id / 能力 / 门槛
3
写 plugin.js——按声明的能力接扩展点
4
浏览器控制台(F12 → Console)看报错与 console.log
5
提交前跑「自检清单」(第 ⑫ 节)

⑪ 版本管理(语义化版本)

改动类型加哪一位示例
修 bug补丁版本 +11.0.0 → 1.0.1
加功能(向后兼容)次版本 +11.0.0 → 1.1.0
大改(不兼容)主版本 +11.0.0 → 2.0.0

每次更新写 changelog(更新说明)。用户能在插件详情页「版本」标签看到全部历代版本。

⑫ 提交与审核

1
插件商店点「提交插件」
2
上传 manifest + 代码
3
AI 自动检查(恶意代码 / 越权 / 隐私外传)
4
官方人工审核确认
5
通过后上架,默认「高级订阅」可用

提交前自检清单:✅ 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 天。