Toolchains & packages
$ cat > hello.c <<'EOF'#include <stdio.h>int main(void) { printf("hello from clang on the edge\n"); return 0; }EOF$ clang hello.c -o hello.wasm && ./hello.wasmhello from clang on the edgenode and bun run on workerd’s nodejs_compat V8 with Nimbus shims for
fs, child_process, HTTP, and streams. They are not upstream Node or Bun
binaries, but they are not stubs. python is Pyodide CPython 3.13.
ruby is ruby.wasm 3.3. clang is LLVM 8 with a modern wasi-libc sysroot.
It compiles C in the session to wasm32-wasi-nimbus, including multi-file
builds, user headers, and fopen against session files. -pthread is
refused at link time because partial wasi-threads support could corrupt
data — the design note
explains why.
Package installers check the ABI:
npm install zod # ~6 s cold; warm installs 9–16× fasternpx cowsay hello # shebang dispatch + auto-install fallbackpip install flask # pure wheels from PyPI (alpha)gem install rack # pure gems from RubyGems (alpha)npm works against the live registry. Tarballs cache in R2 across sessions,
large dependency trees shard across peer DOs, and a 611-package app installs
in ~165 s cold. pip and gem are alpha. Pure packages work end to end;
probes run Flask and Rack apps in preview tabs. Curated source artifacts and
declared Pyodide extension modules also work. Runtimes are packages too. Run
python before installing it and the shell prints the install hint.
The terminal below asks for a runtime that isn’t installed, installs it
with nimbus install, and opens the CPython REPL it just fetched. The
install pulls ~19 MiB of Pyodide from the content-addressed cache, usually
seconds, up to a minute cold.
Live sandbox — connecting…
Native artifacts don’t work. Manylinux wheels, native gems, .node
addons, and ELF files fail before import with an exact ABI diagnostic.