V8-based ECMAScript runtime, WinterTC-compliant, I/O-injectable, capability-secured.
import { serve } from "runtime:http";
const server = serve({ port: 8080 }, (req) => {
return new Response("👋 Hello from ESRun!");
});
const { hostname, port } = await server.addr;
console.log(`listening on http://${hostname}:${port}`);
fetch, URL, URLPattern, streams, WebCrypto, encoding, timers, and events — the WinterTC Minimum Common Web Platform API. What you learn here is what runs in the browser.
HTTP and WebSocket servers, filesystem, sockets, subprocesses, WASM/WASI, and XML, YAML, TOML, JSONL, MessagePack, and Protobuf parsers — all behind runtime: imports, nothing to install.
Static imports, dynamic import(), top-level await, import.meta, and JSON modules. One module system, no CommonJS interop rules to learn.
The runtime around the engine is safe Rust: no data races, no use-after-free, no buffer overruns to reach for under hostile input.
The engine behind Chrome and Node.js, embedded from Rust. A baked startup snapshot opens a full realm in about 7 ms.
The library form is deny-by-default — the host grants exactly the powers code needs — and its event loop has no owned thread: tick it from your own.
How your JavaScript code interacts with the system.
Executes your JS/ESM code at lightning speed.
Drives the event loop and low-cost boundary calls.
Standard Web APIs like fetch, crypto, and streams.
Kernel networking, file system, and raw system I/O.
A runtime, not a toolchain — and not a Node.js drop-in. Package management, building, and testing are left to other tools.
Read the scope & non-goals →A standard-based, full-capability, fast and optimal runtime for general workloads.
Embedded for ultimate control & untrusted code execution. Inject standard APIs or create your own custom capabilities from Rust.