A Go library enabling applications to self-update via binary diffs and full downloads from a custom server.
go-selfupdate is a Go library that enables self-updating capabilities for Go applications. It allows developers to deliver updates over HTTP, supporting incremental binary patches to minimize bandwidth usage and ensure reliable updates across multiple platforms.
Go developers building command-line tools, desktop applications, or services that need to distribute updates to end-users without requiring manual installation.
Developers choose go-selfupdate for its minimal, protocol-agnostic design that gives full control over update hosting, combined with automatic binary patching and verification. It excels at efficient updates via bsdiff patches with fallback to full downloads, without enforcing any versioning scheme.
Enable your Go applications to self update
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Explicitly tested on Mac, Linux, Arm, and Windows systems, ensuring reliable updates across diverse environments without platform-specific code changes.
Uses bsdiff to create incremental patches, minimizing bandwidth usage by delivering only changed parts of the binary, as highlighted in the README's feature list.
Automatically falls back to full binary downloads if a patch fails SHA verification, ensuring updates complete successfully even when diffs are corrupted.
Does not enforce semantic versioning, allowing any naming scheme such as numbers, hashes, or dates for versions, giving developers full control over release identifiers.
Requires developers to set up and maintain their own HTTP servers or cloud storage for update files, adding operational complexity beyond the library itself.
Lacks built-in mechanisms to revert to a previous version if an update causes issues, leaving error recovery to manual intervention or external tools.
Designed exclusively for Go applications, making it unsuitable for projects using other languages or needing multi-platform support beyond Go binaries.