Hello thank you for this tutorials. I took your examples as a base for writing my demo I would like to suggest a point that could be actually more explicit (IMHO): the WebAssembly functions once instantiated are available as any JS function. This may sound obvious when you know it but it wasn't for me until I read another article (I can't find it back) where the author had the same observation. For those in the same situation, here is what I did: loadWasm.then dispatches a custom event and Hello is called in the custom event handler. For instance: loadWasm(wasmFile).then(wasm => { const wasmLoaded = new Event('wasmLoaded', { bubbles: false, cancelable: true, composed: false }) document.dispatchEvent(wasmLoaded) console.log("wasmLoaded") }).catch(error => { console.log(error) }) I extracted the <script></script> part from your index.html file and put it in a separate file loadWsm.Js which can be generically used to load and instantiate any wasm file (at least those written and compiled from GO). Then WASM functions can be used: document.addEventListener("wasmLoaded",()=>{ let jsonData = Hello("Bob", "Morane") console.log(jsonData) document.querySelector("h1").innerHTML = JSON.stringify(jsonData) }) I'd like also to add a remark: tinygo doesn't support all libraries/functions. For instance, as you did in your example, objects have to be converted by "hand" to JSON strings. It took me some time to realize that the issues I had with crypto/rand (resolved with tinygo 0.21) and json.Marshal were due to tinygo Amari