zed-industries/zed · error

Neither curl nor wget is available

Error message

Neither curl nor wget is available

What it means

To provision the remote server on an SSH host, Zed downloads the release via curl executed over the ssh socket; if that fails and `which wget` (also via the socket) fails, it bails — the remote host has neither curl nor wget, so there is no way to fetch the server binary.

Source

Thrown at crates/remote/src/transport/ssh.rs:1054

                            url,
                            "-O",
                            &tmp_path.display(self.path_style()),
                        ],
                        true,
                    )
                    .await
                {
                    Ok(_) => {}
                    Err(e) => {
                        if self
                            .socket
                            .run_command(self.ssh_shell_kind, "which", &["wget"], true)
                            .await
                            .is_ok()
                        {
                            return Err(e);
                        } else {
                            anyhow::bail!("Neither curl nor wget is available");
                        }
                    }
                }
            }
        }

        Ok(())
    }

    async fn upload_local_server_binary(
        &self,
        src_path: &Path,
        tmp_path: &RelPath,
        delegate: &Arc<dyn RemoteClientDelegate>,
        cx: &mut AsyncApp,
    ) -> Result<()> {
        if let Some(parent) = tmp_path.parent() {
            let res = self

View on GitHub (pinned to f4178619ac)

Solutions

  1. Install a downloader on the remote: apt-get install -y curl (or wget, apk/yum/dnf equivalents)
  2. With a dev-channel Zed, set ZED_BUILD_REMOTE_SERVER so the server is SFTP/SCP-uploaded from the local machine and nothing is downloaded remotely
  3. Pre-install the zed-remote-server binary on the host at the expected path
  4. Check PATH in the remote login shell (`which curl` manually) — tools present but not on PATH behave the same

Example fix

# on the remote host
# before
which curl wget   # nothing

# after (Debian/Ubuntu)
sudo apt-get update && sudo apt-get install -y curl
# retry the Zed SSH connection
Defensive patterns

Strategy: fallback

Validate before calling

async fn remote_has_download_tool(socket: &SshSocket, shell: ShellKind) -> bool {
    socket.run_command(shell, "which", &["curl"], true).await.is_ok()
        || socket.run_command(shell, "which", &["wget"], true).await.is_ok()
}

Try / catch

if let Err(e) = download_on_remote().await {
    if e.to_string().contains("Neither curl nor wget") {
        // fallback: upload the local server build via ZED_BUILD_REMOTE_SERVER instead of downloading
    }
    return Err(e);
}

Prevention

When it happens

Trigger: The curl download over the ssh shell errors, the fallback wget attempt errors, and both `which` probes over run_command confirm neither binary exists on the remote host.

Common situations: Minimal containers, embedded/NAS systems, or hardened servers without curl/wget; remotes where the login shell's PATH omits /usr/bin; stripped VM images used as dev boxes.

Related errors


AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20). Data as JSON: /api/errors/1ff38b277a66d333. Report an issue: GitHub.