ipfs/kubo · error
no release found with a binary for %s/%s
Error message
no release found with a binary for %s/%s
What it means
githubLatestRelease scans fetched releases for an asset whose filename matches the pattern for the running GOOS/GOARCH (want, e.g. kubo_v0.30.0_linux-amd64.tar.gz). If none of the inspected releases ships such a binary it returns `no release found with a binary for <os>/<arch>`. The lookup succeeded at the API level; there is simply no matching distributable for this platform in the releases examined.
Source
Thrown at core/commands/update_github.go:132
// githubLatestRelease returns the newest release that has a platform asset
// for the current GOOS/GOARCH. This avoids false positives when a release
// tag exists but artifacts haven't been uploaded yet.
func githubLatestRelease(ctx context.Context, includePre bool) (*ghRelease, error) {
releases, err := githubListReleases(ctx, 10, includePre)
if err != nil {
return nil, err
}
for i := range releases {
want := assetNameForPlatformTag(releases[i].TagName)
for _, a := range releases[i].Assets {
if a.Name == want {
return &releases[i], nil
}
}
}
return nil, fmt.Errorf("no release found with a binary for %s/%s", runtime.GOOS, runtime.GOARCH)
}
// githubListReleases fetches up to count releases, optionally including prereleases.
func githubListReleases(ctx context.Context, count int, includePre bool) ([]ghRelease, error) {
// Fetch more than needed so we can filter prereleases and still return count results.
perPage := count
if !includePre {
perPage = count * 3
}
if perPage > 100 {
perPage = 100
}
url := fmt.Sprintf("%s?per_page=%d", githubReleaseBaseURL(), perPage)
resp, err := githubGet(ctx, url)
if err != nil {
return nil, err
}View on GitHub (pinned to 329838acdf)
Solutions
- Check available assets on https://github.com/ipfs/kubo/releases for your OS/arch; if absent, kubo publishes no binary for it.
- Install/update via a distro package or build from source: `git clone https://github.com/ipfs/kubo && make build`.
- Use an emulation/alternate arch binary only if officially provided; otherwise track the issue requesting releases for your platform.
- If a matching prerelease exists, run `ipfs update check --allow-downgrade --prerelease`-style flags (or fetch manually) to include it.
Example fix
// before
rel, err := githubLatestRelease(ctx, true) // on linux/riscv64 -> no asset
// after
if !platformHasReleaseAssets(runtime.GOOS, runtime.GOARCH) {
return fmt.Errorf("self-update unsupported for %s/%s; build from source", runtime.GOOS, runtime.GOARCH)
}
rel, err := githubLatestRelease(ctx, true) Defensive patterns
Strategy: fallback
Validate before calling
// check the asset matrix before attempting self-update
assets := []string{"linux-amd64","linux-arm64","darwin-amd64","darwin-arm64","windows-amd64"}
key := runtime.GOOS + "-" + runtime.GOARCH
if !slices.Contains(assets, key) {
return fmt.Errorf("self-update not supported for %s; build from source", key)
} Type guard
func platformSupported(goos, goarch string) bool {
_, err := os.Stat(filepath.Join(releaseAssetsDir, goos+"-"+goarch))
return err == nil
} Try / catch
rel, err := githubLatestRelease(ctx, includePre)
if err != nil {
if strings.Contains(err.Error(), "no release found with a binary for") {
return tryInstallFromSource() // fallback path
}
return err
} Prevention
- Confirm official release assets include your GOOS/GOARCH before self-updating
- On exotic platforms (riscv64, armv6), plan to build from source instead
- Use `--prerelease`-style options when the binary only exists in a prerelease
- Pin installation via package managers (apt, brew, docker) on platforms without release binaries
When it happens
Trigger: Running `ipfs update check`/`apply` on an uncommon platform — e.g. linux-riscv64, freebsd-arm, windows-arm64, or 32-bit builds — where kubo's release assets don't include that os/arch combination, or when includePrerelease filtering skips the only release containing the asset.
Common situations: Trying to self-update on an architecture without official releases (ARMv6, riscv64), running on an OS kubo does not publish binaries for, a very new CPU arch released after the current release series, or Docker/alpine images on unusual platforms.
Related errors
- GitHub API rate limit exceeded%s
- GitHub API returned HTTP %d for %s
- supernode routing was never fully implemented and has been r
- unrecognized routing option: %s
- invalid configuration profile: %s
AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03).
Data as JSON: /api/errors/43c6b9886fd28ae8.
Report an issue: GitHub.