siyuan-note/siyuan · error · errUpdatePackageUnavailable

update package is unavailable: [%s]

Error message

update package is unavailable: [%s]

What it means

Returned by getUpdatePkg() when release.Packages[pkgName] is nil or has an empty URLs slice. The release was found and the platform's package name resolved, but that package is absent from the release manifest — typically because the release was published moments ago and assets are still uploading, or the asset naming convention changed. Wrapped form of errUpdatePackageUnavailable.

Source

Thrown at kernel/model/updater.go:124

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 {
		err = errors.New("update package URL or checksum is empty")
		return
	}

	pkg := path.Base(pkgURL)

View on GitHub (pinned to 251596fc0d)

Solutions

  1. Retry after a short delay (minutes); asset uploads and mirror propagation complete shortly after publish.
  2. Switch update channel to GitHub (beta/alpha) which reads assets directly from the GitHub release, bypassing the cloud JSON lag.
  3. If the issue persists across hours, report the missing package name in the release; it may be a publish-pipeline failure.
Defensive patterns

Strategy: retry

Try / catch

// Retry with backoff for transient asset-propagation gaps.
var urls []string
var checksum string
for attempt := 0; attempt < 3; attempt++ {
    urls, checksum, err = getUpdatePkg()
    if err == nil || !errors.Is(err, errUpdatePackageUnavailable) {
        break
    }
    time.Sleep(time.Duration(attempt+1) * time.Minute)
}

Prevention

When it happens

Trigger: A GitHub release exists and matches the channel, the pkgName (e.g. siyuan-3.x.x-win.exe) is computed correctly, but the release's Packages map has no entry for it. On the stable path this means the cloud 'rhy' JSON omitted the checksum for that pkgName (getStablePackageChecksum returned ""), so no package entry was created. On the GitHub path the asset is missing, not yet 'uploaded', or has no download URL.

Common situations: Checking for an update within minutes of a release announcement before all upload mirrors finish. A release that intentionally omitted a platform (e.g. arm64 macOS delayed). Transient mirror/CDN propagation lag on b3log/liuyun for the stable channel.

Related errors


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