Skip to content

yglukhov/wasmrt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

wasmrt Build Status nimble

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

Prerequisites

  • clang 8.0 or later
  • Special Nim config, like this one
  • [Optional] wasm-opt - a tool to compact your wasm file

Run your wasm

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

Why no Emscripten?

The goal of this project is to produce self-contained standalone wasm files from nim code, without any JS glue, or "desktop platform emulation".