moejs 是一个纯 Go 写的 JavaScript 运行时,2026 年 11 月 9 日发布 0.1.0,作者是 new-api 的维护者 Calcium-Ion。
它要解决的问题很小也很具体:让 Go 程序里跑很多个 JavaScript 插件,每个请求一个独立的沙箱。
宿主是 new-api,一个 AI 网关,插件用 JavaScript 写,一次请求要过好几个钩子。
仓库 9 月 24 日才建,现在 532 star。
它的卖点就三样:纯 Go、比 C 版 QuickJS 快三成半、专门跑插件沙箱。

Go 里能跑 JS 的引擎一直分几类。
goja 和 Sobek 是纯 Go,编译省事,交叉编译也省事,但速度一般。
modernc.org/quickjs 是 QuickJS 翻译成 Go 的产物,同样是纯 Go,内存吃得多。
quickjs-go 和 v8go 走 cgo,性能好,代价是要 C 工具链,静态构建和交叉编译都变麻烦。
moejs 想同时拿到前者的省事和后者的速度。
官方给的数字在 V8 benchmark suite v7 上,八个经典小程序加起来 1429 分,C 版 QuickJS 同机 1058 分,是它的 1.35 倍。
八个程序里,每一个都是 moejs 最高。
跟自己的上一版比,同一批测试从 41.55 秒降到 14.29 秒。

插件场景更能说明问题,成本主要花在每个请求都要起一个运行时。
按 new-api 的十个任务插件测,一个 10 万 token 的 Agent 请求,8 并发下每秒处理的请求量是 C 版 QuickJS 的 2.9 倍。
带 8 MiB 图片的请求是 8.6 倍。
小请求上 C 版 QuickJS 还赢着,快 7%。
单次插件调用 6.9 微秒,Sobek 是 14.3 微秒,quickjs-go 是 104.5 微秒。
新建一个运行时 1.4 微秒,Sobek 要 2.2 微秒,quickjs-go 要 382 微秒。
装上最大的那个插件之后,一个运行时占 81 KiB,Sobek 是 264 KiB,quickjs-go 是 348 KiB。

嵌进 Go 程序大概长这样。
go
mod, err := moejs.Compile("task", source)
rt := moejs.NewRuntime(moejs.Options{})
rt.SetGlobal("utils", map[string]any{"env": moejs.NativeFunc(env)})
rt.Load(mod)
arg, err := rt.ParseJSONString(body)
res, err := rt.Call("buildRequest", arg)
var out Request
err = rt.Unmarshal(res, &out)
编译一次,运行时从池子里取,用完放回去。
ParseJSONString 不复制输入,参数里的字符串直接指向 body 那一块内存,这也是它在大请求上快的原因之一。
插件能看到的东西是被算好的。
只有 JS 标准库,加上宿主自己装进去的全局。
每个 import 和 import() 都要过宿主给的 Go 函数,宿主没装就没有。
eval 和 new Function 可以限长,也可以直接关掉。
内置对象是冻结的,所有运行时共用同一份 Array.prototype,一个插件改不到别人的数组。
要跑 node:fs 也行,宿主给一个目录,所有路径都在 os.Root 里解析,.. 和软链接都出不去。

一致性这边,test262 跑了 80971 个用例,零失败。
另外 14268 个用例被跳过,因为 moejs 没实现那些特性,比如 Temporal、装饰器、iterator helpers 和部分 Intl。
TypeScript 也能直接跑,CompileTS 只剥类型,不改语义,报错和堆栈指回 TS 源码。
现在它还是 alpha,API 会在版本之间变。
裸运行时没有 setTimeout,要装 eventloop 包才有。
fetch 要宿主给 http.Client,不给就没有网络。
依赖只有一个 moego,用来做 base64 的 SIMD 加速,引擎本身仍是纯 Go,CGO_ENABLED=0 也能编。
如果你在 Go 里写过插件系统,被 cgo 或者引擎性能折腾过,这个项目值得看一眼。
仓库:https://github.com/MoeForge/moejs。
你更在意交叉编译的省事,还是每个请求的内存开销,欢迎在评论区说说。
关于我:
- 农村程序员(
2020年回农村,至今未出村) - 独立开发者(
致力于开发 1000 个小产品) - 技术观察者(
分享编程技术,行业资讯等) - 前端之虎陈随易(
自封的) - 我的官网是:
https://yicode.tech