Safe Rust
Every crate in the workspace sets forbid(unsafe_code): the engine, the CLI and the WebAssembly bindings.
An embeddable JavaScript engine for Rust applications, written in safe Rust. Zero lines of unsafe, from the parser to the garbage collector.
Computed by quickjs-oxide WASM. The browser host draws.
Every crate in the workspace sets forbid(unsafe_code): the engine, the CLI and the WebAssembly bindings.
Register bytecode, inline caches and NaN-boxed values keep run time level with QuickJS on the V8 v7, Octane and Are-We-Fast-Yet suites.
Embed it in a Rust application, use the native qjs command line, or ship the WebAssembly build to the browser, like the demo above.
Measured against QuickJS 2026-06-04, the engine quickjs-oxide follows. Method and raw results are in the docs.
81,441 of 83,562 variants in the scope QuickJS runs.
Geometric mean of run time relative to QuickJS. Lower is faster.
The compiler rejects unsafe in every crate of the workspace.
No third-party crates, except num-bigint for BigInt. The native host adds tz-rs for time zones.
Release builds on one Linux machine. See the method and every result →
Add the two crates, create a runtime, evaluate a script and read the result.
[dependencies]
quickjs-oxide = { git = "https://github.com/pocket-nexus/quickjs-oxide" }
quickjs-oxide-host = { git = "https://github.com/pocket-nexus/quickjs-oxide" }
use quickjs_oxide::engine::api::core::{Runtime, Value};
use quickjs_oxide_host::SystemHost;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let runtime = Runtime::new_with_host_services(SystemHost::default());
let mut context = runtime.new_context()?;
let value = context.eval("[1, 2, 3].map((x) => x * 2).join()")?;
if let Value::String(text) = value {
println!("{}", text.to_utf8_lossy()); // 2,4,6
}
Ok(())
}