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

  1. Check available assets on https://github.com/ipfs/kubo/releases for your OS/arch; if absent, kubo publishes no binary for it.
  2. Install/update via a distro package or build from source: `git clone https://github.com/ipfs/kubo && make build`.
  3. Use an emulation/alternate arch binary only if officially provided; otherwise track the issue requesting releases for your platform.
  4. 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

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


AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03). Data as JSON: /api/errors/43c6b9886fd28ae8. Report an issue: GitHub.