siyuan-note/siyuan · error · errUpdatePackageUnavailable

update package is unavailable for the current platform

Error message

update package is unavailable for the current platform

What it means

Returned by getUpdatePkg() when currentInstallPackageName(release.Version) returns an empty string. currentInstallPackageSuffix() returns "" for any OS that is not Windows or macOS, and for GOARCH values other than amd64/arm64 on those two OSes. This is a wrapped form of errUpdatePackageUnavailable, so errors.Is(err, errUpdatePackageUnavailable) matches it.

Source

Thrown at kernel/model/updater.go:119

	} else {
		util.PushUpdateMsg("update-pkg-downloading", Conf.Language(104), 7000)
	}
}

func getUpdatePkg() (downloadPkgURLs []string, checksum string, err error) {
	release, err := getUpdateRelease(false)
	if err != nil {
		return
	}

	if isVersionUpToDate(release.Version) {
		err = fmt.Errorf("version is up to date")
		return
	}

	pkgName := currentInstallPackageName(release.Version)
	if "" == pkgName {
		err = fmt.Errorf("%w for the current platform", errUpdatePackageUnavailable)
		return
	}
	pkg := release.Packages[pkgName]
	if nil == pkg || 0 == len(pkg.URLs) {
		err = fmt.Errorf("%w: [%s]", errUpdatePackageUnavailable, pkgName)
		return
	}
	if "" == pkg.Checksum {
		err = fmt.Errorf("%w: [%s] checksum is unavailable", errUpdatePackageUnavailable, pkgName)
		return
	}
	downloadPkgURLs = append(downloadPkgURLs, pkg.URLs...)
	checksum = pkg.Checksum
	return
}

func downloadInstallPkg(pkgURL, checksum string) (err error) {
	if "" == pkgURL || "" == checksum {

View on GitHub (pinned to 251596fc0d)

Solutions

  1. On Linux, use your distribution's package manager or the official AppImage/tarball; the in-app updater cannot self-update on Linux.
  2. Verify runtime.GOARCH is amd64 or arm64; rebuild with GOARCH=amd64 if you compiled for an exotic arch.
  3. Suppress the in-app download UI on unsupported platforms (Conf.System.DownloadInstallPkg / skipNewVerInstallPkg).
Defensive patterns

Strategy: validation

Validate before calling

// Check platform support before invoking the updater pipeline.
if currentInstallPackageSuffix() == "" {
    // No installable package for this OS/arch (e.g. Linux, 32-bit).
    return // skip download UI entirely
}

Prevention

When it happens

Trigger: Running on Linux (the updater produces no Linux binary — Linux users install via distro packages). Running on Windows/macOS with an unsupported GOARCH (e.g. 386, mips). Running a custom build compiled with an unusual runtime.GOARCH.

Common situations: Self-compiled Linux desktop build expecting the in-app auto-updater to work. Running under WSL where gulu.OS.IsWindows() may be false. Containerized deployment (though skipNewVerInstallPkg usually short-circuits first for containers).

Related errors


AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12). Data as JSON: /api/errors/86867d4de4618fc9. Report an issue: GitHub.