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
- Retry after a short delay (minutes); asset uploads and mirror propagation complete shortly after publish.
- Switch update channel to GitHub (beta/alpha) which reads assets directly from the GitHub release, bypassing the cloud JSON lag.
- 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
- Retry after a few minutes — asset uploads and mirror propagation lag behind the release announcement.
- Offer a channel switch (stable <-> GitHub) so users can pick the source that has the asset.
- Surface 'new version available, download not ready yet' rather than a hard error.
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
- update package is unavailable
- update package is unavailable for the current platform
- update package is unavailable: [%s] checksum is unavailable
- marketplace package update is not allowed
- marketplace package update not found
AI-assisted analysis of siyuan-note/siyuan@251596fc0d (2026-08-12).
Data as JSON: /api/errors/bc19bb3d849fa420.
Report an issue: GitHub.