MoonBit WASM contract snapshots and directional compatibility checks
# 无需安装,直接运行
moonx Nanaloveyuki/wasm-tools contract snapshot app.wasm -o app.abi.json
moonx Nanaloveyuki/wasm-tools contract check --baseline app.abi.json app-next.wasm --direction both
# 想要短命令,可以自己包一层
alias wsm='moonx Nanaloveyuki/wasm-tools'
wsm contract snapshot app.wasm -o app.abi.json
wsm contract check --baseline app.abi.json app-next.wasm --direction both./tests/contract-demo.shprovided: compatible
required: compatible
provided: breaking
breaking export add (function): export type changedwsm contract snapshot app.wasm -o app.abi.json
wsm contract check --baseline app.abi.json app-next.wasm --direction both
wsm contract wit snapshot --world cli app.wit -o app.wit.json
wsm contract wit check --world cli --baseline app.wit.json app-next.wit| 命令 | 作用 |
|---|---|
| contract snapshot [FILE] | 从 Core WASM 模块生成确定性 ABI 快照 |
| contract check --baseline SNAPSHOT FILE | 按提供接口、依赖接口或两个方向比较兼容性 |
| contract wit snapshot --world NAME [FILE] | 从 WIT 源文件生成选定 world 的快照 |
| contract wit check --world NAME --baseline SNAPSHOT FILE | 比较 WIT world 的 SemVer 兼容性 |
| 命令 | 作用 |
|---|---|
| validate [FILE] | 自动识别 core module / component,解析并验证 |
| print [FILE] | 二进制转 WAT;component 按文档分段输出 |
| parse [FILE] | WAT / component WAT 转二进制 |
| dump [FILE] | section 表;--instructions 追加逐指令 offset,--json 输出结构化结果 |
| strip [FILE] | 删除 custom section;--keep NAME 保留指定段 |
| metadata [FILE] | 展示 name 与 producers custom section |
| size [FILE] | section、函数体大小与调用图;--top N、--diff FILE、--budget SIZE、--json |
| opt [FILE] | 调用 moon-wasm-opt 优化;-O2/-Oz、--passes、--wasm-opt PATH |
| symbolize [FILE] ADDR | 把 wasm-function[N]:0xOFF 映射到函数名与函数内偏移 |
| component wit [FILE] | 从 component 提取内嵌 WIT 包 |
wsm parse app.wat -o app.wasm
wsm validate app.wasm
wsm print app.wasm -o app.wat
wsm dump --instructions app.wasm | head
wsm strip app.wasm --keep producers -o app.stripped.wasm
wsm metadata --json app.wasm
wsm size app.wasm --top 20
wsm size app.wasm --diff old.wasm
wsm size app.wasm --budget 200KB
wsm opt app.wasm -Oz -o app.opt.wasm
wsm symbolize app.wasm 'wasm-function[34]:0xd8d'
wsm symbolize --json app.wasm 0xd8d
cat app.wasm | wsm validate -let old_snapshot = @contract.parse_snapshot(baseline_json)
let new_snapshot = @wasm.contract_snapshot(candidate_bytes)
let report = @contract.compare_snapshots(
old_snapshot,
new_snapshot,
@contract.Both,
)| 项目 | 值 |
|---|---|
| Mooncakes | Nanaloveyuki/wasm-tools@0.5.0 |
| CI | GitHub Actions,Ubuntu / macOS / Windows 三平台 |
| 测试 | 单元测试 + Linux CLI / MoonBit 产物演示 + Windows CLI(moonrun interop) |
| 许可证 | Apache-2.0 |
| 版本 | 内容 |
|---|---|
| 0.1.0 | validate / print / parse / dump / strip / metadata / component wit |
| 0.2.0 | component 感知的 dump/metadata;size v1(section、函数、调用图) |
| 0.3.0 | opt(包装 moon-wasm-opt);size --diff/--budget |
| 0.4.2(当前) | symbolize(name section 符号化);compose 因上游依赖阻塞 |
| 0.5.0 | Core ABI 与显式 WIT world 快照、方向性兼容检查及 WIT SemVer 检查 |
moon build --target wasm # 生成 _build/wasm/debug/build/wasm-tools.wasm
moon check --target all # 检查所有支持的编译后端
moon test # 单元测试
./tests/contract-demo.sh # 真实 wasm / wasm-gc 契约兼容演示
./tests/smoke.sh # CLI 行为检查(Linux)
tests/win-smoke.sh # Windows 侧检查(WSL interop,需 WIN_MOONRUN/WIN_WASM_OPT)main.mbt argv 转发与退出码
cli/ 参数、IO、帮助、错误(不依赖 wasm 包)
cmd/ 每个子命令一个文件
contract/ 契约领域模型、稳定快照、方向性比较器
wasm/ raw 扫描与上游解析器适配,包括契约提取
tests/ fixtures、cli.md 场景、smoke.sh
examples/ 导出 add ABI 的 MoonBit foreign library 样例与 breaking 变体
docs/adr/ 范围、依赖与发布决策Install
Download zipMoonBit WASM contract snapshots and directional compatibility checks