Compiles Go to WASM and deploys to the CDN
Switch branches/tags
Nothing to show
Clone or download


The wasmgo command compiles Go to WASM, and serves the binary locally or deploys to the CDN.


go get -u

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 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)


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


Here's a simple hello world:

wasmgo serve

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

Here's an amazing 2048 clone from hajimehoshi:

go get -u
wasmgo deploy -b=example

The deployed page opens in a browser.


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:

<head><meta charset="utf-8"></head>
	<script src="{{ .Script }}"></script>
	<script src="{{ .Loader }}"></script>

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 (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. 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, 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 to serve static files.

Package splitting

The wasmgo deploy can't yet split the binary output by Go package, can you help?