v0.1首个版本化设计基线查看版本范围
Developer

Host API 文档

application.ist 的 Host API 是密封 guest 跨越 WASM 沙箱边界、访问宿主资源和平台服务的唯一能力层。本目录只记录版本化 API;架构讨论、整改过程和安全审查不作为应用可依赖的契约。

当前版本

v0.1 当前是设计基线。运行时尚未完成独立 apiVersion 的声明、发布校验和启动协商闭环;在该闭环落地前,站点不会把“实现里碰巧存在某个方法”等同于“宿主符合 v0.1”。

API 分层

先判断一项设计应处在哪一层,再讨论 host 模块。能成为库的,不因“放在宿主更方便”而进入能力层。

层级 内容
L0 lognowrandomhost_call、统一事件传输等运行时原语
L1 跨越 WASM 边界的宿主能力:真实资源、系统服务、外部权限、受控平台服务
L2 guest SDK / 库:场景树、数据库、会话管理、重连、编解码、工作流
L3 应用领域模型

判断一项接口能否进入 L1,先问:

删除这个 host API 后,guest 是否会失去一种真实资源、权限、系统集成或受控服务,而不只是实现起来更麻烦?

若 guest 只靠自身内存、计算与已有 L1 能力即可等价实现,默认放入 L2。仅有“宿主可以保存这份状态”“宿主实现可能更方便或更快”都不足以证明它属于 L1。

四种版本不要混用

版本 含义
Host API 版本 guest 可调用的 L1 能力集合及其语义;首个基线为 0.1
应用契约版本 单个应用的 host capability 与 guest export 契约版本,构建产物中记为 contractVersion
线协议版本 KBS1、canvas 命令缓冲等具体二进制格式版本
运行时构建版本 实际部署的内容哈希 bundle,用于定位实现,不构成兼容性承诺

应用版本也与上述四者独立。应用从 1.2.0 升到 1.3.0,不意味着 Host API 随之升级。

v0.1 准入规则

能力进入 v0.1 必须同时满足:

  1. 有具体应用,或属于平台不可缺少的基本职责;
  2. 宿主独占的资源、权限、系统效果或受控服务明确;
  3. 不能只靠 guest 库与已有 v0.1 能力等价实现;
  4. 模块边界、方法语义、句柄和生命周期明确;
  5. 失败、取消、事件、预算与安全标注明确;
  6. JS guest 与原生 WASM guest 的可达性和传输绑定明确;
  7. 有边界校验 schema、兼容性测试和至少一个端到端用例。

缺任一项即不进入 v0.1。0.x 表示尚未承诺 1.0 级长期稳定,但不允许无版本地改变兼容性:不兼容变化必须形成新的明确版本,例如 0.2

文档规则

  • v*.zh.md 是中文版本规范;未来其他语言使用同版本号的语言后缀。
  • 正式版本只列入该版本真实承诺的接口,不占未来名字。
  • 非正式提议不冻结名字,不进入 manifest、运行时能力表、策略表或分档计算。
  • 现有实现与正式规范冲突时,文档必须明确标出;不得用实现现状悄悄改写版本契约。
Host API 版本与分层概览Host API v0.1版本非正式提议提议canvas API呈现canvas.getInfo()方法canvas.draw()方法canvas.present()方法canvas.measureText()方法canvas.frame event事件canvas.resize event事件asset API呈现asset.read()方法asset.loadFont()方法playback API呈现playback.open()方法playback.write()方法playback.stop()方法playback.ready event事件playback.ended event事件input API输入input.focus()方法input.pointer event事件input.key event事件input.wheel event事件ime API输入ime.openSession()方法ime.updateState()方法ime.updateGeometry()方法ime.closeSession()方法ime.textUpdate event事件ime.composition event事件ime.formatUpdate event事件ime.characterBoundsRequest event事件capture API输入capture.requestCamera()方法capture.requestMic()方法capture.frame()方法capture.readAudio()方法capture.stop()方法capture.ended event事件store API数据store.get()方法store.put()方法store.delete()方法store.list()方法store.deletePrefix()方法clipboard API数据clipboard.readText()方法clipboard.writeText()方法clipboard.readImage()方法clipboard.writeImage()方法net API网络net.fetch()方法identity API身份identity.status()方法identity.login()方法identity.logout()方法env API平台集成env.snapshot()方法env.change event事件print API平台集成print.open()方法开始调用 Host API指南构建交互式绘图应用指南构建自绘文本编辑器指南管理媒体采集与播放指南组织本地数据与同步指南