Enable your Golang applications to self update
Go Shell HTML
Switch branches/tags
Nothing to show
Clone or download
sanbornm Merge pull request #22 from deinspanjer/feature/example
Example demonstrating how go-selfupdate works
Latest commit bf29527 Dec 16, 2016



GoDoc Build Status

Enable your Golang applications to self update. Inspired by Chrome based on Heroku's hk.


  • Tested on Mac, Linux, Arm, and Windows
  • Creates binary diffs with bsdiff allowing small incremental updates
  • Falls back to full binary update if diff fails to match SHA


Enable your App to Self Update

var updater = &selfupdate.Updater{
	CurrentVersion: version,
	ApiURL:         "http://updates.yourdomain.com/",
	BinURL:         "http://updates.yourdomain.com/",
	DiffURL:        "http://updates.yourdomain.com/",
	Dir:            "update/",
	CmdName:        "myapp", // app name

if updater != nil {
	go updater.BackgroundRun()

Push Out and Update

go-selfupdate myapp 1.2

This will create a folder in your project called, public you can then rsync or transfer this to your webserver or S3.

If you are cross compiling you can specify a directory:

go-selfupdate /tmp/mybinares/ 1.2

The directory should contain files with the name, $GOOS-$ARCH. Example:


If you are using goxc you can output the files with this naming format by specifying this config:

"OutPath": "{{.Dest}}{{.PS}}{{.Version}}{{.PS}}{{.Os}}-{{.Arch}}",