Skip to content

WML Update

Update infrastructure, not a framework.

A lightweight Go update library with a release CLI and an optional sidecar for any language. Embed it, call Check, then Apply. Your application keeps its UI, lifecycle and restart behavior.

Get started with the Go SDK View on GitHub Go API reference

u, err := wmlupdate.New(wmlupdate.Options{
    ConfigPath:     "updater.json",
    CurrentVersion: appVersion,
})
defer u.Close()

update, err := u.Check(ctx)
if update.Available {
    result, err := u.Apply(ctx, update, wmlupdate.ApplyOptions{})
}

Why WML Update

  • Small public API

    New, Check, Apply, Close. No daemon, service locator, global state or required application architecture.

  • Verified artifacts

    Every download requires SHA-256. Optional Ed25519 manifests and checksums, HTTPS enforcement and host allowlists.

  • Transactional installs

    Staged directory/file swaps, crash recovery, backups and rollback data.

  • Windows-aware

    Deferred detached helper waits for the application to exit, then replaces and relaunches it.

  • Two sources

    GitHub Releases and self-hosted, signed static manifests.

  • Any language

    Non-Go applications use the same engine through NDJSON or a local HTTP API.

Quick start

go get github.com/yxxbc/wmlUpdate@v1.1.0
import wmlupdate "github.com/yxxbc/wmlUpdate"

u, err := wmlupdate.New(wmlupdate.Options{
    ConfigPath:     "updater.json",
    CurrentVersion: "1.4.2",
})
if err != nil { return err }
defer u.Close()

update, err := u.Check(ctx)
if err != nil || !update.Available { return err }

_, err = u.Apply(ctx, update, wmlupdate.ApplyOptions{})

Continue with the Go SDK guide, configuration, or take the sidecar path for Python, Node.js, C#, Java or shell.

Release tooling

wml-update keygen --out-dir keys
wml-update publish --spec publish.json --out public/stable --key keys/signing-key.pem

Produces manifest.json, its Ed25519 signature, checksums.txt and a detached checksum signature. See self-hosting and GitHub Releases.