You're on the right track with deno_core, but it does require additional setup to expose Web APIs and Deno/Node.js functionality. Here are some approaches to achieve your goals:
Extending deno_core for Web APIs & Deno APIs deno_core provides an isolated V8 runtime, but you need to expose Web APIs manually. You can:
Use deno_web for Web APIs like setTimeout, performance, etc. Manually expose a subset of Deno APIs (e.g., Deno.inspect) via op bindings. Using deno_runtime Instead deno_runtime is a more complete runtime that builds on deno_core and includes Web APIs, permissions, and a subset of Deno APIs. If you need these features out of the box, this might be a better fit.
Rust ↔ JS Communication
deno_core allows defining custom ops (Rust functions callable from JS). You can create ops for Rust ↔ JS communication using op_sync (blocking) or op_async (async) bindings.