Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dave/wasmgo

Compiles Go to WASM and deploys to the jsgo.io CDN
https://github.com/dave/wasmgo

Last synced: 2 months ago
JSON representation

Compiles Go to WASM and deploys to the jsgo.io CDN

Awesome Lists containing this project

README

        

# wasmgo

The `wasmgo` command compiles Go to WASM, and serves the binary locally or deploys to the [jsgo.io](https://github.com/dave/jsgo) CDN.

### Install

```
go get -u github.com/dave/wasmgo
```

### Serve command

```
wasmgo serve [flags] [package]
```

Serves the WASM with a local web server (default to port 8080). Refresh the browser to recompile.

### Deploy command

```
wasmgo deploy [flags] [package]
```

Deploys the WASM to the [jsgo.io](https://github.com/dave/jsgo) CDN.

### Global flags

```
-b, --build string Build tags to pass to the go build command.
-c, --command string Name of the go command. (default "go")
-f, --flags string Flags to pass to the go build command.
-h, --help help for wasmgo
-i, --index string Specify the index page template. Variables: Script, Loader, Binary. (default "index.wasmgo.html")
-o, --open Open the page in a browser. (default true)
-v, --verbose Show detailed status messages.
```

### Deploy flags

```
-j, --json Return all template variables as a json blob from the deploy command.
-t, --template string Template defining the output returned by the deploy command. Variables: Page, Script, Loader, Binary. (default "{{ .Page }}")
```

### Serve flags

```
-p, --port int Server port. (default 8080)
```

### Package

Omit the package argument to use the code in the current directory.

### Examples

Here's a simple hello world:

```
wasmgo serve github.com/dave/wasmgo/helloworld
```

The page (http://localhost:8080/) opens in a browser.

Here's an amazing 2048 clone from [hajimehoshi](https://github.com/hajimehoshi):

```
go get -u github.com/hajimehoshi/ebiten/examples/2048/...
wasmgo deploy -b=example github.com/hajimehoshi/ebiten/examples/2048
```

[The deployed page](https://jsgo.io/2893575ab26da60ef14801541b46201c9d54db13) opens in a browser.

### Index

You may specify a custom index page by including `index.wasmgo.html` in your project or by using the `index`
command line flag.

Your index page should look something like this:

```html


```

### Template variables

The index page template and the `-t` flag are both Go templates with several variables available:

* *Page*
The URL of the page on jsgo.io (deploy command output only).

* *Script*
To load and execute a WASM binary, a some JS bootstap code is required. The wasmgo command uses a minified
version of the [example in the official Go repo](https://github.com/golang/go/blob/master/misc/wasm/wasm_exec.js).
The URL of this script is the `Script` template variable.

* *Loader*
The loader JS is a simple script that loads and executes the WASM binary. It's based on the [example
in the official Go repo](https://github.com/golang/go/blob/master/misc/wasm/wasm_exec.html#L17-L36),
but simplified to execute the program immediately instead. The URL of this script is the `Loader` template variable.

* *Binary*
The URL of the WASM binary file.

### Static files

Unfortunately wasmgo does not host your static files. I recommend using [rawgit.com](https://rawgit.com/)
to serve static files.

### Package splitting

The `wasmgo deploy` can't yet split the binary output by Go package, [can you help?](https://github.com/dave/wasmgo/issues/2)