Skip to content

create-webclaw fails on Windows: asset name mismatch + uses missing unzip command #71

Description

@yuge88-hub

Summary

npx create-webclaw fails 100% of the time on Windows. The error message ('cargo' is not recognized) misleads users into installing Rust, but Rust doesn't fix it — there are 3 bugs that prevent the Windows prebuilt binary from ever being used.

Bug 1: Asset name mismatch

In getAssetName() (around L223-239 in index.mjs, npm package create-webclaw@0.1.4):

if (os === "win32" && a === "x64")
  return `webclaw-mcp-x86_64-pc-windows-msvc.zip`;

But the actual asset on GitHub Releases is webclaw-v0.6.13-x86_64-pc-windows-msvc.zip (versioned, no mcp- infix). Same issue for all 5 other platform branches — they all hardcode the asset name pattern without the v{version}- prefix.

Result: the assets.find(a => a.name === assetName) lookup always returns undefined, so downloaded stays false and the script falls through to cargo install.

Bug 2: unzip doesn't exist on Windows

L478:

} else if (assetName.endsWith(".zip")) {
  execSync(`unzip -o "${tarPath}" -d "${INSTALL_DIR}"`, {
    stdio: "ignore",
  });
}

Windows ships with tar but not unzip in PowerShell/cmd by default. Even if Bug 1 were fixed, this step would fail.

Bug 3: Silent GitHub API rate limit handling

L460-496 — when https://api.github.com/repos/0xMassi/webclaw/releases/latest returns 403 (rate limit), the catch {} block swallows it silently with the comment "Release not available yet — expected before first release". The user sees "No pre-built binary found" with no hint that the real failure was rate-limited.

Repro (Windows 11, Node 20+, GitHub CLI not required)

npx create-webclaw
# Output:
#   Downloading webclaw-mcp...
#   No pre-built binary found. Trying cargo install...
#   'cargo' is not recognized as an internal or external command

Suggested fix

// 1. Use the actual release tag_name instead of hardcoded strings
const release = JSON.parse((await download(`https://api.github.com/repos/${REPO}/releases/latest`)).toString());
const version = release.tag_name; // e.g. "v0.6.13"

// 2. Build asset names from version
function getAssetName(version) {
  const os = platform();
  const a = arch();
  const targets = {
    "darwin-arm64": "aarch64-apple-darwin",
    "darwin-x64": "x86_64-apple-darwin",
    "linux-x64": "x86_64-unknown-linux-gnu",
    "linux-arm64": "aarch64-unknown-linux-gnu",
    "win32-x64": "x86_64-pc-windows-msvc",
  };
  const key = `${os}-${a}`;
  const target = targets[key];
  if (!target) return null;
  const ext = os === "win32" ? "zip" : "tar.gz";
  return `webclaw-${version}-${target}.${ext}`;
}

// 3. Use platform-appropriate extraction
if (assetName.endsWith(".tar.gz")) {
  execSync(`tar xzf "${tarPath}" -C "${INSTALL_DIR}"`, { stdio: "ignore" });
} else if (assetName.endsWith(".zip")) {
  if (platform() === "win32") {
    execSync(`powershell -Command "Expand-Archive -Path '${tarPath}' -DestinationPath '${INSTALL_DIR}' -Force"`, { stdio: "inherit" });
  } else {
    execSync(`unzip -o "${tarPath}" -d "${INSTALL_DIR}"`, { stdio: "ignore" });
  }
}

// 4. Better rate-limit error
if (release.message?.includes("rate limit")) {
  console.log(c("red", "  GitHub API rate limit hit. Retry in a few minutes or use GITHUB_TOKEN env var."));
}

Manual workaround

Until fixed, Windows users can install manually:

gh release download v0.6.13 --repo 0xMassi/webclaw --pattern "*-x86_64-pc-windows-msvc.zip"
Expand-Archive webclaw-v0.6.13-x86_64-pc-windows-msvc.zip -DestinationPath webclaw-extracted -Force
New-Item -ItemType Directory -Force -Path ":USERPROFILE\.webclaw"
Copy-Item webclaw-extracted\webclaw-v0.6.13-x86_64-pc-windows-msvc\webclaw-mcp.exe ":USERPROFILE\.webclaw\webclaw-mcp.exe"
claude mcp add --scope user --transport stdio webclaw "C:/Users/Lenovo/.webclaw/webclaw-mcp.exe"

Environment

  • Windows 11 Home China 10.0.26200
  • Node.js (latest via npx)
  • webclaw v0.6.13 (latest at time of issue)
  • create-webclaw@0.1.4 (npm)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions