spacedriveapp/spacedrive · error · anyhow::Error

Could not find sd-daemon binary for platform: {}

Error message

Could not find sd-daemon binary for platform: {}

What it means

Companion check to the sd asset lookup: the updater needs a release asset whose name contains both the platform string and 'sd-daemon'. The CLI binary was found but the daemon binary was not, so a partial update would brick the install and the updater refuses.

Source

Thrown at apps/cli/src/domains/update/mod.rs:78

	// Determine platform
	let platform = get_platform_string();
	println!();
	println!("Platform: {}", platform);

	// Find matching assets
	let sd_asset = latest_release
		.assets
		.iter()
		.find(|a| a.name.contains(&platform) && a.name.contains("sd"))
		.ok_or_else(|| anyhow::anyhow!("Could not find sd binary for platform: {}", platform))?;

	let daemon_asset = latest_release
		.assets
		.iter()
		.find(|a| a.name.contains(&platform) && a.name.contains("sd-daemon"))
		.ok_or_else(|| {
			anyhow::anyhow!("Could not find sd-daemon binary for platform: {}", platform)
		})?;

	println!("Downloading updates...");

	// Download binaries
	let sd_data = download_file(&sd_asset.browser_download_url, sd_asset.size).await?;
	let daemon_data = download_file(&daemon_asset.browser_download_url, daemon_asset.size).await?;

	// Get current binary paths
	let current_exe = std::env::current_exe()?;
	let bin_dir = current_exe
		.parent()
		.ok_or_else(|| anyhow::anyhow!("Could not determine binary directory"))?;

	let sd_path = bin_dir.join("sd");
	let daemon_path = bin_dir.join("sd-daemon");

	println!();

View on GitHub (pinned to 6dfeccf211)

Solutions

  1. Check the release page for an sd-daemon asset matching your platform string
  2. Download the daemon artifact manually and place it beside the sd binary
  3. Fall back to building both binaries from source at the matching tag
Defensive patterns

Strategy: fallback

Validate before calling

#!/usr/bin/env bash
platform=$(uname -m)-$(uname -s | tr '[:upper:]' '[:lower:]')
curl -s "https://api.github.com/repos/spacedrive/spacedrive/releases/latest" \
  | jq -e --arg p "$platform" '.assets[]?.name | contains($p) and contains("sd-daemon")' >/dev/null \
  || { echo "No sd-daemon asset for $platform"; exit 2; }

Try / catch

let Some(daemon_asset) = latest_release.assets.iter().find(|a| a.name.contains(&platform) && a.name.contains("sd-daemon")) else {
    eprintln!("No sd-daemon for {}. Available: {:?}", platform, asset_names);
    return Ok(()); // skip update rather than half-update the CLI only
};

Prevention

When it happens

Trigger: A release that shipped the CLI artifact but omitted or renamed the sd-daemon artifact for your platform; platform string matching the sd asset but not the daemon's naming.

Common situations: Incomplete CI release matrices; asset naming changes that only affected daemon artifacts.

Related errors


AI-assisted analysis of spacedriveapp/spacedrive@6dfeccf211 (2026-08-16). Data as JSON: /api/errors/bcc68e82ecb85b13. Report an issue: GitHub.