oraios/serena · error · FileNotFoundError
Taplo executable not found at {taplo_executable}. Installati
Error message
Taplo executable not found at {taplo_executable}. Installation may have failed. Try installing manually: cargo install taplo-cli --locked What it means
After the Taplo language server auto-installer downloads and extracts the Taplo archive, it verifies that the expected executable path actually exists. If the file is still missing post-install, it raises FileNotFoundError because the language server cannot be started without the binary. It is a defensive post-condition check against failed or silently-corrupted downloads/extraction.
Source
Thrown at src/solidlsp/language_servers/taplo_server.py:166
# Setup local installation directory; legacy unversioned dir reserved for INITIAL only
taplo_version = self._custom_settings.get("taplo_version", DEFAULT_TAPLO_VERSION)
ls_dirname = "taplo" if taplo_version == INITIAL_TAPLO_VERSION else f"taplo-{taplo_version}"
taplo_dir = os.path.join(self._ls_resources_dir, ls_dirname)
os.makedirs(taplo_dir, exist_ok=True)
_, executable_name = _get_taplo_download_url(taplo_version)
taplo_executable = os.path.join(taplo_dir, executable_name)
if os.path.exists(taplo_executable) and os.access(taplo_executable, os.X_OK):
log.info(f"Using cached Taplo at: {taplo_executable}")
return taplo_executable
# Download and install Taplo
log.info(f"Taplo not found. Downloading version {taplo_version}...")
self._download_taplo(taplo_dir, taplo_executable, taplo_version)
if not os.path.exists(taplo_executable):
raise FileNotFoundError(
f"Taplo executable not found at {taplo_executable}. "
"Installation may have failed. Try installing manually: cargo install taplo-cli --locked"
)
return taplo_executable
def _create_launch_command(self, core_path: str) -> list[str]:
return [core_path, "lsp", "stdio"]
@classmethod
def _download_taplo(cls, install_dir: str, executable_path: str, version: str = DEFAULT_TAPLO_VERSION) -> None:
"""Download and extract Taplo binary using the shared verified download helper."""
download_url, _ = _get_taplo_download_url(version)
archive_filename = os.path.basename(download_url)
# only verify the SHA when the resolved version is one of our pinned ones (INITIAL or current DEFAULT)
expected_hash = _taplo_sha(version, archive_filename)
if expected_hash is None and version in (INITIAL_TAPLO_VERSION, DEFAULT_TAPLO_VERSION):
raise RuntimeError(f"No SHA256 checksum configured for Taplo archive: {archive_filename}")View on GitHub (pinned to 7fcbca7e62)
Solutions
- Install Taplo manually: `cargo install taplo-cli --locked`, or download the binary from Taplo GitHub releases and put it on PATH, so auto-install never runs.
- Delete the partial Taplo install directory (under the SolidLSP runtime deps dir) and retry to force a clean re-download.
- Check the install directory for a nested binary layout; symlink or move the `taplo` binary to the expected executable path.
- Verify network/proxy access to the Taplo release download URL and adequate disk space/permissions in the install dir.
Example fix
// before: relying on auto-install on a machine with restricted egress
ls = SolidLanguageServer.create("taplo") // FileNotFoundError after failed download
// after: install taplo yourself so auto-install is skipped
cargo install taplo-cli --locked # or download release binary into ~/.local/bin
ls = SolidLanguageServer.create("taplo") Defensive patterns
Strategy: fallback
Validate before calling
import shutil
if shutil.which("taplo") is None:
# pre-install so auto-install path is never exercised
subprocess.run(["cargo", "install", "taplo-cli", "--locked"], check=True)
assert shutil.which("taplo") is not None Type guard
def taplo_available() -> bool:
return shutil.which("taplo") is not None and os.path.isfile(shutil.which("taplo")) Try / catch
try:
server = SolidLanguageServer.create("taplo")
except FileNotFoundError:
subprocess.run(["cargo", "install", "taplo-cli", "--locked"], check=True)
server = SolidLanguageServer.create("taplo") Prevention
- Pre-install taplo (cargo install taplo-cli --locked) in your image/environment before starting the server.
- Ensure outbound network access to Taplo release URLs when relying on auto-install.
- Confirm the install directory is writable and has free disk space.
When it happens
Trigger: Creating or starting the Taplo language server (via _get_or_install_core_dependency) when the binary `taplo` is not already on PATH, the download step runs, and os.path.exists(taplo_executable) is still False after _download_taplo returns (e.g. archive extracted to an unexpected subdirectory or extraction silently skipped).
Common situations: Offline or proxied networks where the download half-succeeds; non-glibc Linux (musl/Alpine) where the pinned archive layout differs; filesystem permission problems in the install dir; Taplo changing archive contents between versions so the binary lands at a nested path like taplo-<ver>/taplo.
Related errors
- Failed to download Taplo from {download_url}. Try installing
- Terraform executable not found, please ensure Terraform is i
- Memory maintenance template not found at {template_path}
- dotnet executable not found at {dotnet_exe} after installati
- Failed to install .NET {version} runtime using install scrip
AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29).
Data as JSON: /api/errors/ecd3c7dac44d5f6a.
Report an issue: GitHub.