{"record":{"id":"1ff38b277a66d333","repo":"zed-industries/zed","slug":"neither-curl-nor-wget-is-available-1ff38b","errorCode":null,"errorMessage":"Neither curl nor wget is available","messagePattern":"Neither curl nor wget is available","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/remote/src/transport/ssh.rs","lineNumber":1054,"sourceCode":"                            url,\n                            \"-O\",\n                            &tmp_path.display(self.path_style()),\n                        ],\n                        true,\n                    )\n                    .await\n                {\n                    Ok(_) => {}\n                    Err(e) => {\n                        if self\n                            .socket\n                            .run_command(self.ssh_shell_kind, \"which\", &[\"wget\"], true)\n                            .await\n                            .is_ok()\n                        {\n                            return Err(e);\n                        } else {\n                            anyhow::bail!(\"Neither curl nor wget is available\");\n                        }\n                    }\n                }\n            }\n        }\n\n        Ok(())\n    }\n\n    async fn upload_local_server_binary(\n        &self,\n        src_path: &Path,\n        tmp_path: &RelPath,\n        delegate: &Arc<dyn RemoteClientDelegate>,\n        cx: &mut AsyncApp,\n    ) -> Result<()> {\n        if let Some(parent) = tmp_path.parent() {\n            let res = self","sourceCodeStart":1036,"sourceCodeEnd":1072,"githubUrl":"https://github.com/zed-industries/zed/blob/f4178619acd0d47ea1f76a2025c42962c6d6638c/crates/remote/src/transport/ssh.rs#L1036-L1072","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Install a downloader on the remote: apt-get install -y curl (or wget, apk/yum/dnf equivalents)","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","Pre-install the zed-remote-server binary on the host at the expected path","Check PATH in the remote login shell (`which curl` manually) — tools present but not on PATH behave the same"],"exampleFix":"# on the remote host\n# before\nwhich curl wget   # nothing\n\n# after (Debian/Ubuntu)\nsudo apt-get update && sudo apt-get install -y curl\n# retry the Zed SSH connection","handlingStrategy":"fallback","validationCode":"async fn remote_has_download_tool(socket: &SshSocket, shell: ShellKind) -> bool {\n    socket.run_command(shell, \"which\", &[\"curl\"], true).await.is_ok()\n        || socket.run_command(shell, \"which\", &[\"wget\"], true).await.is_ok()\n}","typeGuard":null,"tryCatchPattern":"if let Err(e) = download_on_remote().await {\n    if e.to_string().contains(\"Neither curl nor wget\") {\n        // fallback: upload the local server build via ZED_BUILD_REMOTE_SERVER instead of downloading\n    }\n    return Err(e);\n}","preventionTips":["Install curl or wget on remotes used as dev boxes","Verify `which curl` succeeds in the exact login shell Zed uses","Keep a local remote-server build ready to upload when remotes cannot download"],"tags":["ssh","remote-server","curl","wget","missing-tool"],"backgroundTag":"missing-download-tool","analyzedSha":"f4178619acd0d47ea1f76a2025c42962c6d6638c","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}