userland.run70Try the demo
Catalog app · RISC-V VM

Run node in the browser

Node.js 25 compiled for RISC-V and run on NanoVM's emulator — the full runtime, not a shim.

Try it live

Nothing is downloaded until you press Run.

Node.js

Run Node.js on the RISC-V emulator

Installs the RISC-V node from the signed catalog and runs this program on the emulator (1.8 GB guest) — expect a long first run.

javascript
console.log(process.version, process.arch, process.platform);
loading…
Expected output
v25.4.0 riscv64 linux

What it is

The catalog's node is the upstream Node.js 25.4.0 built as a static RV64GC musl ELF. NanoVM runs it on its RISC-V emulator with a 1.8 GB guest, so programs see a real process, fs, crypto, streams and the module loader. It is the base of the JavaScript tools in the catalog (ESLint, TypeScript, Prettier). For speed the SDK can instead run node on the host JavaScript engine (engines.node).

Package facts

version
25.4.0
runs on
RISC-V VM (elf-app, riscv64gc-linux-musl)
download
26 MB compressed · 1 file
command
node
requires
nothing else — a static binary
license
MIT (upstream)
upstream
github.com/nodejs/node
collections
Node dev toolchain
catalog
generation 12, Ed25519-signed

Install and run it from your page

With the SDK, installApp resolves node in the signed index, fetches its content-addressed chunks from the CDN, verifies each one and writes the files into the VM. Details in Installing catalog apps.

javascript
import { createNano } from "@userland-run/nano-sdk";

// Node on the RISC-V VM needs the default ~1.8 GB guest (ramMB auto-sizes).
const nano = await createNano({ image: { wasm: "/nano/console.wasm" } });
await nano.installApp("node"); // signature-verified, cached in OPFS

const r = await nano.shExec("node --version"); // the RISC-V node ELF
console.log(r.stdout);

Typical usage of the upstream command-line tool:

bash
node server.js

← All 32 catalog apps