Compile nim to wasm
import wasmrt
proc consoleLog(a: cstring) {.importwasmraw: "console.log(_nimsj($0))".}
consoleLog("Hello, world!")
nim c --out:test.wasm test.nim # Special nim config is required, see below
node tests/runwasm.js test.wasm
- clang 8.0 or later
- Special Nim config, like this one
- [Optional] wasm-opt - a tool to compact your wasm file
The wasm file generated this way is pretty standalone, and requires only the following JavaScript code to bootstrap:
function runNimWasm(w){for(i of WebAssembly.Module.exports(w)){n=i.name;if(n[0]==';'){new Function('m',n)(w);break}}}
runNimWasm
takes the output of WebAssembly.compile
function. E.g. to run a wasm file in nodejs, use smth like runwasm.js
The goal of this project is to produce self-contained standalone wasm files from nim code, without any JS glue, or "desktop platform emulation".