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
- On Linux, use your distribution's package manager or the official AppImage/tarball; the in-app updater cannot self-update on Linux.
- Verify runtime.GOARCH is amd64 or arm64; rebuild with GOARCH=amd64 if you compiled for an exotic arch.
- 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
- On Linux, document that updates come from the distro/AppImage, not the in-app updater.
- Gate the download UI on currentInstallPackageSuffix() != "".
- Confirm runtime.GOARCH is amd64 or arm64 at build time for Windows/macOS targets.
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
- update package is unavailable
- update package is unavailable: [%s]
- update package is unavailable: [%s] checksum is unavailable
- package checksum is unavailable
- writing file paths to clipboard is not supported on this pla
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/86867d4de4618fc9.
Report an issue: GitHub.