统一 API
一次编写,到处运行。同一份 Rust 代码即可驱动 QuickJS、JavaScriptCore 和 ArkJS —— 引擎在构建时选定,代码中没有任何引擎相关的分支。
Rong(融)是一个面向 Rust 的 JavaScript 运行时,以统一的 API 覆盖 QuickJS、JavaScriptCore 和 ArkJS —— 专为嵌入式场景、Rust 驱动的 JS API 以及长生命周期的 worker 运行时而设计。
cargo add rong --features quickjs,tls-aws-lc 「融」意为交融与和谐。Rong 将 JavaScript 引擎与 Rust 原生代码融为一体,以单一而优雅的 API 统一各式运行时。
一次编写,到处运行。同一份 Rust 代码即可驱动 QuickJS、JavaScriptCore 和 ArkJS —— 引擎在构建时选定,代码中没有任何引擎相关的分支。
使用 #[js_export]、#[js_class] 和 #[js_method] 将 Rust 结构体暴露给 JavaScript —— 构造函数、getter、setter 与静态方法,全部经过 Rust 类型检查。
一流的 Promise 与异步迭代器集成,让 JavaScript 与 Rust 的 Future 跨越引擎边界自然交织。
显式选择执行模型:shared() worker 处理无状态任务,pinned() worker 让按键关联的状态始终驻留在同一个长生命周期运行时上。
在 Windows、Linux 和 macOS 上持续测试 —— QuickJS 覆盖全平台,macOS 上使用系统 JavaScriptCore,三大平台均有源码构建的 JSC 消费者。
类型定义以 @rongjs/rong 发布到 npm;@rongjs/rong-skill 则打包了带生成式 API 参考的可安装智能体技能。
引擎彼此互斥,在构建时选定 —— 若同时启用多个引擎,构建会立即失败。库本身不预设默认引擎;由下游 crate 显式选择引擎与 TLS 后端。
轻量且快速。Rong CLI 在桌面主机上的默认引擎,搭配 aws-lc TLS 后端。
在 macOS 和 iOS 上链接系统 JavaScriptCore.framework,或在 macOS、Linux、Windows 上使用固定版本、源码构建的 WebKit/JSCOnly 产物。
HarmonyOS 的 JavaScript 引擎,面向 aarch64 OpenHarmony 目标,搭配 ring TLS 后端。
Rong 内核提供统一 API、类型系统、内存管理与异步层,引擎和内置模块在其下方接入。
添加依赖、选择引擎,即可在 Rust 中运行 JavaScript —— 或将 Rust 类暴露给 JavaScript。
use rong::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a JavaScript runtime and context
let rt = RongJS::runtime();
let ctx = rt.context();
// Execute JavaScript directly
let result: i32 = ctx.eval(Source::from_bytes(b"2 + 3"))?;
println!("Result: {}", result); // Result: 5
Ok(())
}use rong::{Rong, RongJS, Source};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// shared() for stateless work on any available worker;
// pinned::<K, S>() keeps keyed work on the same runtime.
let rong = Rong::<RongJS>::builder().shared().workers(2).build()?;
let value: i32 = rong.call(|runtime, _receiver| async move {
let ctx = runtime.context();
ctx.eval(Source::from_bytes(b"21 * 2"))
}).await?;
println!("JS result: {value}"); // JS result: 42
Ok(())
}use rong::*;
use rong::{js_class, js_export, js_method};
#[js_export]
struct Point { x: i32, y: i32 }
#[js_class(rename = "Point2D")]
impl Point {
#[js_method(constructor)]
fn new(x: i32, y: i32) -> Self { Self { x, y } }
#[js_method(getter, enumerable)]
fn x(&self) -> i32 { self.x }
#[js_method(rename = "moveBy")]
fn move_by(&mut self, dx: i32, dy: i32) {
self.x += dx;
self.y += dy;
}
// Static method: Point2D.origin()
#[js_method]
fn origin() -> Self { Self { x: 0, y: 0 } }
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let rt = RongJS::runtime();
let ctx = rt.context();
// Register once, then use from JavaScript:
// const p = new Point2D(1, 2); p.moveBy(3, 4);
ctx.register_class::<Point>()?;
Ok(())
}[dependencies]
# Engines are mutually exclusive — pick one, plus a TLS backend.
# Desktop: tls-aws-lc · HarmonyOS/OpenHarmony: tls-ring
rong = { version = "0.4", features = ["quickjs", "tls-aws-lc"] }# Run the Rong CLI / REPL — QuickJS + aws-lc by default on desktop
cargo run -p rong_cli
# Switch to JavaScriptCore explicitly
cargo run -p rong_cli --no-default-features --features jscore,tls-aws-lc
# Build for ArkJS on OpenHarmony targets
cargo build --no-default-features --features arkjs,tls-ring \
--target aarch64-unknown-linux-ohos常见的运行时任务尽在其中 —— 定时器、HTTP、文件系统、存储、worker、Redis、SQLite、S3 等。点击模块即可阅读其 API 参考。
rong_timer setTimeout、setInterval 与异步定时器 rong_http HTTP 客户端/服务端,fetch API rong_fs 文件系统操作 rong_console 控制台日志与调试 rong_url URL 解析与处理 rong_buffer 二进制数据处理 rong_event 事件派发与处理 rong_abort AbortController 与信号 rong_encoding 文本编码 / 解码 rong_assert 断言工具 rong_exception 异常处理 rong_storage 存储 API rong_stream 流 API rong_compression 压缩与解压 rong_command 子进程与 shell 执行 rong_worker JavaScript worker 线程 rong_cron Cron 解析与定时任务 rong_redis Redis 客户端 API rong_sqlite SQLite API rong_s3 S3 兼容对象存储 Rong 同时发布到 crates.io 和 npm,并为 TypeScript 用户与 AI 智能体提供配套工具。
@rongjs/rong-skill 打包了两个可安装的智能体技能 —— 自洽的 SKILL.md 文档与生成式 API 参考,适用于任何支持文件式技能的智能体运行时。
rong-runtime-developer编写 Rong JavaScript 脚本、选择正确的公共 API、改编示例、运行 rong_cli 并编译字节码。
rong-module-author编写或修改 Rust 模块,暴露 Rong API、类、函数、类型转换及 JavaScript 错误。
npx @rongjs/rong-skill install 使用 --project 进行项目级安装,或用 --skill <name> 只安装其中一个。这些技能与本站的模块 API 文档同源 —— 单一事实来源。