跳到内容

SlideStage Lite · stage-manifest-reference

`.stage` Manifest 参考

镜像文档保留源仓库使用的语言。站内 chrome 仍按你选的语言显示。

.stage 是 SlideStage 的演示包格式。它是一个 zip 文件,根目录必须包含 manifest.json,并包含 slide HTML、资源、缩略图和可选的离线镜像信息。

权威 schema 由 @slidestage/spec 定义。Lite、Pro 和 Pack 都应以它为单一事实来源。

最小合法 Manifest

{
  "schema": "slidestage@1.0",
  "id": "my-deck",
  "version": "1.0.0",
  "title": "My Deck",
  "subtitle": null,
  "author": null,
  "description": null,
  "createdAt": "2026-01-01T00:00:00.000Z",
  "updatedAt": "2026-01-01T00:00:00.000Z",
  "architecture": "multi-file",
  "dimensions": {
    "width": 1920,
    "height": 1080
  },
  "totalSlides": 1,
  "slides": [
    {
      "index": 1,
      "id": "cover",
      "label": "Cover",
      "file": "slides/01-cover.html",
      "thumbnail": null,
      "notes": null
    }
  ]
}

必填字段

字段类型说明
schemastring必须是 slidestage@1.0
idstringdeck 标识,1 到 128 个字符;不能包含 /\..、NUL 或控制字符。
versionstringdeck 版本,建议使用 semver,但不是强制。
titlestringdeck 标题。
subtitlestring 或 null副标题,可为空。
authorstring 或 null作者,可为空。
descriptionstring 或 null描述,可为空。
createdAtstring创建时间,建议 ISO 8601;可作为稳定 zip mtime。
updatedAtstring更新时间,建议 ISO 8601。
architectureenum见下方 architecture 值。
dimensions.widthnumber逻辑舞台宽度,必须为正数。
dimensions.heightnumber逻辑舞台高度,必须为正数。
totalSlidesintegerslide 数量,最大 500;与 slides.length 不一致时会被归一化。
slides[]array非空 slide 列表,最大 500。

slides[] 字段

字段类型说明
indexinteger从 1 开始。若不是顺序值,解析器会按数组顺序重编号。
idstringslide 标识。
labelstringslide 在 UI 中显示的标题。
filestring指向包内 HTML 文件的相对路径。必须通过路径安全检查。
thumbnailstring 或 null可选缩略图路径。
notesstring 或 null可选 speaker notes,长度上限为 MAX_NOTES_CHARS
durationnumber可选,建议表示秒数。
transitionstring可选,producer 自定义转场提示。

Architecture 值

含义
multi-file每张 slide 一个 HTML 文件,通常位于 slides/
multi-file-flat每张 slide 一个 HTML 文件,但不要求位于 slides/
single-file-deckstageproducer 从单个 <deck-stage> 形态生成多张 slide。
single-file-html一个 HTML 文件渲染整个 deck,常见于 wrap 模式。

原始来源框架不应写进 architecture。它属于 provenance.sourceKind,例如 revealimpressinline-deckrouter-htmlplain-html

常用可选字段

字段说明
compat.requiresdeck 需要的运行能力,例如 same-origin-storagebroadcast-channelwindow-open
compat.notes给用户看的信任提示说明。
provenance记录来源框架、转换模式、转换器名称和版本。
offlinemirror pass 结果,用于说明外部资源是否已折入包内。
assetsproducer 自定义资源清单。
runtimeproducer 提供给播放器的提示。
platform兼容性 gate,例如最低 schema 版本。
tokensproducer 自定义设计 token。

Manifest schema 是 passthrough 的:未知字段会被保留,但运行时可以忽略它们。不要依赖未知字段在所有工具链中 round-trip。

Trust 能力

能力sandbox 变化用途
same-origin-storage加入 allow-same-origin允许 cookie、localStorage、IndexedDB 等同源存储能力。
broadcast-channel加入 allow-same-origin允许 deck 内使用 BroadcastChannel。
window-open加入 allow-popupsallow-popups-to-escape-sandbox允许从 slide 打开新窗口或标签页。

基础 sandbox 永远包含 allow-scripts。能力授权按 deck 指纹保存。

路径安全

所有包内路径都必须:

  • 使用 / 作为分隔符。
  • 相对包根目录。
  • 不以 / 开头。
  • 不包含 .. 段。
  • 不包含 NUL 或控制字符。
  • 指向普通文件。

路径违规应以 E_PATH_TRAVERSAL 拒绝。

指纹规则

SlideStage 使用 .stage zip bytes 的 SHA-256 作为 deck 身份,而不是 manifest.idmanifest.version

因此,打包器如果希望相同输入得到稳定指纹,需要:

  • 固定每个 zip entry 的 mtime。
  • 固定 zip 全局 mtime。
  • 按路径排序 entries。
  • 避免在 manifest.json 之外写入时间戳类字段。

运行时的批注、备注、信任授权、上次播放位置等都以这个指纹为 key。

权威来源

本页是常用参考。完整字段、错误码、大小限制、fixtures 和版本规则以 packages/spec/README.md 以及 @slidestage/spec 导出的 schema 为准。