v8x makes rusty_v8 engine agnostic. It is a drop-in replacement for the v8 crate that keeps the same Rust API and runs it on a different JavaScript engine:
-v8 = "149.4.0"
+v8 = { package = "v8x", version = "149.4.0", features = ["jsc"] }Anything built on rusty_v8, including deno_core and Deno itself, compiles unchanged and runs on the engine you picked.
| engine | feature | platforms |
| JavaScriptCore (WebKit JSCOnly, built from source) | jsc | macOS |
| JavaScriptCore (Apple’s system framework) | system_jsc | macOS |
| QuickJS-ng (vendored, static) | quickjs | any |
One engine is active at a time. The usual reason to swap is binary size:
| engine | deno binary | engine size |
| V8 14.9 | 78.7 MB | ~40 MB static |
| JSC (vendored) | 80.7 MB | ~48 MB static |
| system JSC | 54.2 MB | 0, ships with the OS |
| quickjs-ng | 56.1 MB | ~1 MB static |
Two suites run unmodified against every backend: the rusty_v8 integration tests, and deno_core’s own test suite under nextest. When a test fails, the backend gets fixed, not the test.