创作者指南

游戏、短片、宠物和小工具,打包成 HTML 发布。

概览

格式
离线 HTML 包(ZIP)
入口
根目录 index.html
大小
ZIP ≤ 150 MB
封面
16:10,≤ 1 MB
接口
spareStart · sparePause · spareSnapshot
审核
人工
版权
归作者
示例:Hextris,GPL-3.0 开源移植

包格式

项目要求
入口index.html 和 manifest.json 放在 ZIP 根目录
路径只用相对路径;不用绝对路径、.. 或远程网址
大小ZIP ≤ 150 MB
网络不联网,不加载外部脚本,不含追踪代码
声音默认静音,暂停时立即停止
尺寸320px 宽可用,支持键盘和触控
进度快照可 JSON 序列化,建议 < 16 KiB
语言zh-Hans · en · fr,不支持时回退
不要打包node_modules、.git、密钥、系统文件

manifest.json

{
  "schemaVersion": 1,
  "id": "com.example.tiny-garden",
  "name": "片刻花园",
  "version": "1.0.0",
  "category": "plant",
  "entry": "index.html",
  "permissions": [],
  "storage": "local",
  "lifecycle": {
    "start": "spareStart",
    "pause": "sparePause",
    "snapshot": "spareSnapshot"
  }
}
字段说明
id反向域名或带连字符的唯一标识
name作品名,与提交表单一致
version如 1.0.0,重新提交时递增
categorygame · pet · story · novel · plant · utility · other
entry包内 HTML 相对路径
permissions首版留空 []
storagelocal 或 none
lifecycle三个接口的函数名

生命周期接口

函数调用时机返回
spareStart(saved, language)AI 开始生成;saved 为上次快照或 null—
sparePause()生成结束或窗口隐藏;停下计时器、动画和声音快照
spareSnapshot()需要保存进度时小的 JSON 对象
// Spare 在 AI 生成时调用,传入上次的进度
window.spareStart = (saved, language) => {
  state = saved ?? newGame();
  render(language);
};
// AI 生成结束或窗口隐藏时调用:立即停下动画与声音
window.sparePause = () => {
  stopTimersAndAudio();
  return window.spareSnapshot();
};
// 返回可 JSON 序列化的小对象,用于下次继续
window.spareSnapshot = () => ({ ...state });
文件用途大小
index.html入口,改这里4.0 KB
manifest.json名称、版本、分类307 B
preview.html本地模拟 Spare3.3 KB
README.md完整指南6.8 KB
LICENSEMIT1.1 KB

本地预览

cd spare-plugin-starter
python3 -m http.server 8000
# http://localhost:8000/preview.html

提交与审核

  1. 制作改 index.html,用 preview.html 测试开始、暂停、恢复
  2. 提交上传 ZIP、16:10 封面和简介,写明素材来源和许可证
  3. 审核人工检查:不联网、无追踪、可暂停、320px 可用、素材有授权
  4. 上架显示在作品页,署作者名

审核状态

状态含义下一步
待审核等待人工审核—
已上架已显示在作品页可随时申请下架
已退回未通过,附原因修改后提升版本号重新提交
已下架不再显示联系 support@spare.cool

许可

情况规则
作品归你Spare 获得托管和分发授权,可随时申请下架。
素材要有授权代码、图片、音乐需有使用权,在 README 写明许可证或来源。
开源移植保留原许可证和作者署名,写明改动。例:Hextris 为 GPL-3.0。
模板代码MIT 许可,可自由修改和发布。

常见问题

01

需要会写代码吗?

不需要,可以用 AI 写。

02

作品归谁?

归你。Spare 获得托管和分发授权,你可以随时申请下架。

03

可以联网吗?

不可以,也不能包含追踪或第三方脚本。

让用户下次回来,接得上这一次

网页作品可接入以下存档协议,账号保存最近 12 个作品、每个存档最多 32 KB。离线进度留在本机;两个设备发生冲突时,由用户选择继续哪个存档。请为存档加版本号并验证所有恢复字段。

// Only your work's checkpoint crosses the sandbox boundary.
let state = { version: 1, chapter: 1 };
window.addEventListener('message', event => {
  if (event.source !== parent || event.data?.type !== 'spare:restore') return;
  const saved = event.data.snapshot;
  if (saved?.version === 1 && Number.isInteger(saved.chapter)) {
    state.chapter = Math.max(1, Math.min(100, saved.chapter));
    render();
  }
});
parent.postMessage({ type: 'spare:ready' }, '*');
function checkpoint() {
  parent.postMessage({ type: 'spare:checkpoint', snapshot: state }, '*');
}
// Call checkpoint() after a meaningful action, not on every animation frame.

桌面离线作品继续使用 spareStart(saved)、sparePause()、spareSnapshot()。订阅和好友权限由 Spare 管理,作品无法获得账号令牌。更新作品仍须提交审核,发布后会进入订阅者的动态。