MoonBit 生态中出现了一个有趣的东西:skills.mooncakes.io——这不是博客,也不是 App 商店,而是 MoonBit 的技能市场。你写好一个 MoonBit 包,往 mooncakes.io 上一扔,别人一行命令就能跑起来,不用管依赖、操作系统、编译。
今天就用几个真实例子,聊聊它到底怎么写、怎么用、跟传统包管理比起来新在哪。

它是个啥?举个例子
假如你写了个小工具(比如把 JSON 字段按字母排序),以前分享给别人需要:发源码、教装依赖、教编译、帮解决环境报错。而 skills.mooncakes.io 的做法是:你上传一个支持 Wasm 后端的 MoonBit 模块,平台自动构建成 wasm-opt 优化的 Wasm 二进制。别人只需要一行命令:
moon runwasm 你的用户名/json-sort@0.1.0
不需要装 Node、Python 或其他环境,只要有 MoonBit 工具链就行。说白了,就是把代码直接变成可执行能力。
真实例子
skills.mooncakes.io 上已有不少可以直接运行的技能:
- Yoorkin/cowsay:终端生成 cowsay 图案
- moonbit-community/embed:静态文件嵌入成 MoonBit 源文件
- moonbit-community/moongrep:结构化 MoonBit 代码搜索工具
- moonbitlang/yacc:LR(1) 解析器生成器
- moonbitlang/parser/cmd/moonfmt:MoonBit 代码格式化工具
统一的命令就能运行:
moon runwasm Yoorkin/cowsay@0.1.2 -- hello
moon runwasm moonbit-community/embed@0.1.1 ./fixtures -o fixtures_bundle.mbt
moon runwasm moonbit-community/moongrep@0.1.11 -- scan --rules path/to/rules path/to/src
moon runwasm moonbitlang/yacc@0.7.17 -- --help
一个技能项目长什么样
最小项目结构:
json-sort/
├── moon.mod
├── moon.pkg
├── main.mbt
└── SKILL.md
moon.mod:模块配置文件,声明 preferred_target = "wasm" 和 supported_targets = "wasm"。只有有效范围包含 wasm,mooncakes.io 才会构建 Wasm 二进制。
moon.pkg:声明可执行包 "is-main": true,支持 Wasm 后端。
SKILL.md:关键文件,用结构化 frontmatter(name、description)加 Markdown 正文,说明技能是什么、怎么调用、适合什么场景。平台会根据这个文件识别和展示技能。
写好之后执行 moon publish,平台自动检测 SKILL.md 并展示到 skills.mooncakes.io 上。
发布与运行
发布步骤:
- 写一个 MoonBit 模块
- 在项目中加上 SKILL.md
- 确保可执行包声明
"is-main": true,支持 wasm 后端 - 执行
moon publish,平台自动构建 Wasm 并优化
运行:moon runwasm 用户名/包名[@版本号] [参数]。版本号可省略,平台会自动解析最新版本。
与传统包管理的区别
| 特性 | 传统语言包管理 | MoonBit Skills |
|---|---|---|
| 分发对象 | 源码包 + 依赖声明 | 预构建的 Wasm 二进制 |
| 依赖隔离 | 有依赖树,常有版本冲突 | 技能互相独立,没有依赖树 |
| 沙箱隔离 | 脚本可执行任意代码 | Wasm 沙箱隔离 |
| 自我说明 | README 格式不统一 | 标准 SKILL.md,Agent 可直接理解 |
传统包管理像给人发一堆零件,MoonBit Skills 是直接给你一个装好的成品。
为什么选 Wasm
- 跨平台一致:同一份 Wasm 二进制,在 Windows、macOS、Linux 上行为一致
- 沙箱隔离:默认不能随意访问文件系统或网络,比直接跑脚本更安全
- 无依赖、独立执行:一个技能就是一个二进制,没有 node_modules 那种依赖树
- 启动快、体积小:经过 wasm-opt 优化后,冷启动快,适合 CI/CD 和 Agent 工具调用
SKILL.md:能力描述标准
SKILL.md 用结构化的 frontmatter(name、description)加 Markdown 正文,统一了技能的描述方式。未来 AI Agent 要调用工具,不用猜 API 怎么用,读 SKILL.md 就知道命令格式和场景。
苏米注:MoonBit Skills 最值得关注的设计是"把包变成技能"——传统包管理管的是依赖,找到包后还得写代码去用;MoonBit Skills 管的是能力,找到一个技能直接就能执行。这种"写完就能跑、跑完就能丢"的能力单元,在 AI Agent 时代价值只会越来越大。
对开发者和用户意味着什么
开发者:工具不再只是自己的脚本,而是可以被全世界直接运行的能力。不用写复杂的安装文档,一行命令就能让别人用起来。Wasm 解决跨平台打包问题。
普通用户:看到工具不用研究源码、配环境,一行命令就能试。不污染系统,不安装全局依赖,用完即走。
GitHub:moonbitlang/moonbit
Skill 市场:skills.mooncakes.io