Skip to content

feat: deno on quickjs-ng engine - #35849

Closed
littledivy wants to merge 2 commits into
denoland:mainfrom
littledivy:v8x-quickjs-notape
Closed

feat: deno on quickjs-ng engine#35849
littledivy wants to merge 2 commits into
denoland:mainfrom
littledivy:v8x-quickjs-notape

Conversation

@littledivy

@littledivy littledivy commented Jul 7, 2026

Copy link
Copy Markdown
Member

Runs deno on the QuickJS engine via the v8x v8-ABI backend, instead of V8.

QuickJS has no heap-snapshot serializer, so there is no V8 startup snapshot. deno boots via InitMode::New (extensions initialized live, runtime TS transpile), and the QuickJS module bytecode cache covers startup cost;
it can be baked into the binary via V82JSC_BC_BLOB (see v8x) so the binary is self-contained.

Verified: deno eval/run, web APIs (TextDecoder/URL/fetch/JSON/async), node:* (fs/path/os/crypto/streams), npm: specifiers, and Next.js 14 dev (SSR + native SWC).

Setup

  1. Clone v8x next to this checkout as ../v82jsc.
  2. cargo build --bin deno with deno_snapshots/disable + deno_runtime/transpile default features select the no-snapshot quickjs path.

Numbers

  1. Size
engine denort (compile/desktop base, stripped) vs V8
V8 14.9 65.6 MB
QuickJS-ng 26.3 MB −42 MB (−62%)
  1. HTTP raw throughput
engine req/s mean latency p99 vs V8
V8 14.9 ~283,000 0.35 ms 1 ms
JSC ~223,000 0.45 ms 1 ms ~0.79×
QuickJS-ng ~135,000 0.64 ms 1 ms ~0.48×
  1. Pure JS compute
benchmark V8 JSC (JIT) JSC (jitless) QuickJS
fib(32) ×5 58 ms 41 ms 524 ms 483 ms
50M-iter sum loop 32 ms 30 ms 191 ms 688 ms

Applied tools/deno/deno-jsc-integration.patch from v8x @ 3ef6f8a with the
v8 features switched to the quickjs backend. No IS_V8X /
v8x_snapshot_init_boundary / prepare_stack_trace guard hunks — deno_core
runs stock; snapshots come from the backend's C-API replay tape.
@littledivy littledivy changed the title feat: deno compile on quickjs engine feat: deno compile on quickjs-ng engine Jul 7, 2026
@littledivy littledivy changed the title feat: deno compile on quickjs-ng engine feat: deno on quickjs-ng engine Jul 7, 2026
- [patch.crates-io] v8 -> ../v82jsc (side-by-side v8x checkout, quickjs backend).
- cli default += deno_snapshots/disable + deno_runtime/transpile: quickjs has no
  startup-snapshot support, so boot via InitMode::New with runtime TS transpile
  of ext modules. Module bytecode cache handles startup speed (embeddable via
  V82JSC_BC_BLOB in v8x).
@bartlomieju

Copy link
Copy Markdown
Member

Closing in favor of #36194

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants